MCP server for Azure DevOps Server 2022 (Repos, Pull Requests, Pipelines) using a Personal Access Token.
Strong foundation with 20 well-named tools, comprehensive descriptions, and proper JSON Schema. All tools have clear verb-noun naming (list_, get_, create_, update_). Descriptions are detailed and include use-case guidance. However, output schemas are not explicitly documented in the source code, only input schemas are visible. Parameter descriptions are thorough but some tools lack enum constraints where appropriate (e.g., status filters). Error handling guidance is minimal. Tool composition is sound with proper chaining IDs returned.
Create a new work item (Bug, Task, User Story, etc.) in a project. Use when asked: 'create a bug', 'add a task', 'log an issue', 'open a new user story'. Returns the new item's id, state, and URL.
Read the content of a file from a repository at an optional branch.
Get the status and result of the most recent build in a project. Use this to answer questions like 'what is the last pipeline status?', 'did the last build succeed?', 'what ran last?', 'what was the last build on agent pool X?', 'last pipeline run on agent win19-prod-bi'. Optionally filter by pipeline name (partial match) or agent pool name. Returns: buildNumber, status, result, pipeline name, branch, agent pool, who triggered it, and start/finish time.
Get the comment threads on a pull request. Use this for: 'what feedback was given on PR #42?', 'show review comments', 'are there unresolved comments on this PR?'. Returns threads with author, content, and status (active/resolved).
Get details of a single pull request by id.
Output schemas not documented in source code. Only input schemas are visible; return types and field structures are not explicitly declared in tool definitions.
Enum constraints missing for status/result filters. Tools like list_builds accept 'statusFilter' and 'resultFilter' as free-form strings rather than enums, inviting hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get full details of a single release, including all stage deployment times and statuses. Use after list_releases to drill into a specific release. To see what code was included, call get_release_changes separately.
Get the list of code changes (commits / TFVC changesets) included in a release. Use this to answer: 'چه تغییراتی در این release اعمال شده؟', 'what was committed in Release-322?', 'which changesets are in this deployment?'. Returns each change: changeset/commit ID, message, author, and timestamp.
Get full details of a single work item by its numeric id. Use when you have an id and need the title, state, description, assignee, and priority.
List branches (refs/heads) of a repository.
List builds in a project, optionally filtered by pipeline, status, result, agent pool, or date range. Use minTime/maxTime to count builds in a specific period — e.g. to compare this week vs last week. When date filters are used, top is automatically raised to 500 to avoid missing builds. Use agentPoolName to answer 'show builds that ran on agent pool X'. Use definitionNameFilter to answer 'builds for pipelines with X in the name' (e.g. 'prod') — no need to call list_pipelines first. Use resultFilter='succeeded' for 'which builds succeeded/completed successfully' — statusFilter is about whether the build is done running (completed/inProgress/etc), resultFilter is about the outcome (succeeded/failed/canceled). Results are ordered newest-first, so with a date range, older builds near minTime may be cut off if there are more builds than 'top' in the range — check the response's 'truncated' field and raise 'top' or narrow the range if it is true.
Find builds that failed or partially succeeded in the last N hours. Use this for questions like 'آیا build شکستخوردهای داشتیم؟', 'failed builds in the last 24 hours', 'what broke today?', 'build failures this week'. Returns: pipeline name, result, branch, who triggered it, and when it ran.
List pipelines defined in a project.
List all projects in the Azure DevOps collection. Call this first when the project name is unknown or a lookup by name fails.
Find open pull requests that have no reviewer assigned, optionally within a time window. Use this for: 'which PRs have no reviewer?', 'unreviewed PRs in last 24 hours', 'PRs waiting for review this week'. Use the hours parameter to filter by creation date (e.g. hours=24 for last 24 hours). Omit hours to return all open PRs without a reviewer regardless of age.
List pull requests across ALL repositories in a project, or filter to one repository. Use this for questions like 'show all open PRs', 'list PRs in project X'. Leave repositoryId empty to search the whole project at once.
List classic release pipeline definitions in a project. Use this to discover release pipeline names and IDs before calling list_releases. Returns: id, name, environments/stages, last release date.
List releases from a classic release pipeline, with per-stage deployment status. Use this to answer: 'آخرین پابلیش روی stage X چه تاریخی بود؟', 'last release deployed to Shatel', 'last successful deployment to Production', 'which release is running on staging?'. Filter by stageName to get only releases where that stage was attempted. Each release shows all stages and their status (succeeded/inProgress/rejected/notStarted).
List all Git repositories in a project.
Query work items in a project. Use this for: 'show open bugs', 'list tasks assigned to me', 'what user stories are in sprint', 'how many active issues are there?'. Filter by type (Bug, Task, User Story, Epic, Feature), state (Active, New, Resolved, Closed), or assignee. Returns id, title, state, assignedTo, priority, and URL.
Update fields of an existing work item. Use for: 'close bug #42', 'assign task #10 to John', 'resolve issue #7', 'set priority of #5 to 1', 'add a comment to #20'. Only provide fields you want to change.
Error handling guidance absent. Tool descriptions do not explain what to do if a project is not found, a build fails to retrieve, or an API rate limit is hit.
Pagination limits not enforced in descriptions. Tools like list_builds mention 'top' parameter but do not state hard caps or warn about context window impact of large result sets.
Non-idempotent write tools (create_work_item, update_work_item) lack confirmation or dry-run guidance. Agents retrying on ambiguous failures could create duplicate work items.