Skip to content

update_pull_request_reviewers should accept email addresses, not just identity GUIDs #1039

Description

Summary

Adding a reviewer to a pull request currently requires a 3-step chain:

  1. repo_get_repo_by_name_or_id -- resolve repository name to GUID (unless already known)
  2. core_get_identity_ids -- resolve email address (e.g. bfs@templafy.com) to identity GUID (e.g. 3e13f7bd-d0b0-6ed9-a45d-b4e22eb7dc22)
  3. repo_update_pull_request_reviewers -- actually add the reviewer using the GUID

Step 2 exists solely because reviewerIds only accepts identity GUIDs. The server already has the core_get_identity_ids tool and thus the capability to resolve identities -- it just doesn't do it inline.

Example of the current workflow

// Step 1: Look up identity GUID
// Tool: core_get_identity_ids
{ "searchFilter": "jdoe@example.com" }
// Result: [{ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "displayName": "Jane Doe" }]

// Step 2: Add reviewer using GUID
// Tool: repo_update_pull_request_reviewers
{
  "repositoryId": "MyRepositoryName",
  "project": "MyProjectName",
  "pullRequestId": 12345,
  "reviewerIds": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
  "action": "add"
}

Suggested fix

Accept email addresses or display names in reviewerIds in addition to GUIDs, and resolve them server-side. The server can detect whether a value is a GUID (matches UUID format) or a search string, and call the identity resolution API internally for non-GUID values.

Alternatively, add a parallel parameter like reviewerEmails that resolves emails to IDs before calling the Azure DevOps API.

Why this matters

This is one of the most common PR workflows - adding a reviewer. The extra lookup step:

  • Adds latency (an extra round-trip tool call)
  • Consumes tokens (the identity resolution response is verbose)
  • Is error-prone (the model must correctly thread the GUID from one response into the next request)

In my Claude Code sessions, this pattern appeared repeatedly across PR creation workflows.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions