Skip to main content
Glama
hasanozcan

Azure DevOps MCP Server

by hasanozcan
README.md
# Azure DevOps MCP Server

Local Model Context Protocol (MCP) server for **Azure DevOps Services**. It exposes 68 tools for Azure Boards, Azure Repos, pull request review and lifecycle management, Azure Pipelines, team sprints/backlogs, and delivery reporting.

Read tools are enabled by default. Every mutation requires both a server-side feature flag and an explicit per-call confirmation. Pull request completion and auto-complete never bypass branch policies.

## Capabilities

### Azure Boards

- Read work items, every field, relations, comments, and historical snapshots.
- Run read-only WIQL `SELECT` queries and resolve the matching work items.
- Create and update work items, including state, assignee, tags, area, sprint, and custom fields.
- Add, edit, and soft-delete work item comments; add parent/child/related/dependency/duplicate links and attachments up to 10 MiB.
- Use an expected revision to prevent stale work item updates.
- Trace a ticket to linked pull requests, commits, builds, branches, and related work items.
- Read the work item's field and relation update history.

### Repositories and branches

- List projects, repositories, clone links, branches, and commits.
- Create a branch at an exact commit.
- Delete a branch only when its current object ID matches the caller's expectation.
- Compare branches with ahead/behind counts and changed items.
- Find stale branches while excluding protected branch names.

### Pull requests and code review

- List and retrieve pull requests, including direct Azure DevOps PR URLs.
- Read commits, reviewers/votes, iterations, threads, comments, labels, and linked work items.
- Generate bounded unified diffs locally and validate exact inline-comment targets.
- Create and update PRs; switch draft state; abandon or reactivate a PR.
- Add/remove reviewers and labels; create, reply to, edit, soft-delete, and resolve review comments; cast votes.
- Enable policy-respecting auto-complete or merge at an exact reviewed source SHA.
- Evaluate merge readiness from draft/status, merge state, votes, required reviewers, unresolved threads, policy evaluations, and PR status checks.
- Produce batch review summaries and stale PR reports.

### Azure Pipelines

- List pipelines, runs, and builds; inspect run state/result.
- Filter builds by definition, repository, branch, status, and result.
- Queue or preview a run with a branch, variables, template parameters, and skipped stages.
- Re-run a full pipeline using a previous run's resolved resources.
- List build log records and retrieve bounded log text.

Azure DevOps REST does not expose a generic failed-job-only rerun through this implementation; `rerun_pipeline` queues a full run.

### Sprints and backlogs

- List team iterations by current, past, or future timeframe.
- Get the work items and team-member capacity for a sprint.
- Calculate item and story-point velocity with configurable point field and completed states.
- Reorder or reparent backlog items.
- Move a work item to a sprint through `update_work_item` and `System.IterationPath`.

## Tool groups

| Group | Count | Coverage |
| --- | ---: | --- |
| Core and repository reads | 6 | Auth, projects, repositories, clone links, branch listing |
| Azure Boards | 10 | Work items, WIQL, comment lifecycle, create/update, relations, attachments |
| Pull requests and history | 10 | PR metadata, commits, threads, iterations, reviewers, linked work items |
| Review and diff | 6 | Changed files, stats, unified diffs, inline validation, review context |
| PR review and lifecycle writes | 15 | PR create/update/merge, auto-complete, comment lifecycle, votes, reviewers, labels |
| Branch lifecycle | 4 | Create, delete, compare, stale branches |
| Pipelines and builds | 7 | Definitions, runs, queue/rerun, logs, build filters |
| Sprints and backlog | 5 | Iterations, work items, capacity, velocity, reorder |
| Quality and trace reports | 5 | Merge readiness, batch/stale reports, delivery trace, audit history |
| **Total** | **68** | |

The complete input reference is in [docs/tools.md](docs/tools.md).

## Requirements

- Node.js 20+
- npm
- An Azure DevOps Services organization
- An Azure DevOps PAT or an Azure CLI session created with `az login`

Azure DevOps Server/on-premises is not currently supported.

## Quick start

```powershell
git clone https://github.com/hasanozcan/azure-devops-mcp.git
cd azure-devops-mcp
npm install
Copy-Item .env.example .env
```

Edit `.env`:

```dotenv
AZURE_DEVOPS_ORGANIZATION=your-organization
AZURE_DEVOPS_DEFAULT_PROJECT=your-project
AZURE_DEVOPS_AUTH_MODE=pat
AZURE_DEVOPS_PAT=your-token
AZURE_DEVOPS_ENABLE_WRITE_TOOLS=false
```

Then validate and build:

```powershell
npm run doctor
npm run build
npm start
```

The transport is local `stdio`; stdout is reserved for MCP protocol messages.

## Finding organization and project values

For a URL such as:

```text
https://thecellsolutions.visualstudio.com/hpowere/_git/hpower/pullrequests
```

use:

```dotenv
AZURE_DEVOPS_ORGANIZATION=thecellsolutions
AZURE_DEVOPS_DEFAULT_PROJECT=hpowere
```

For `https://dev.azure.com/<organization>/<project>/...`, use the first path segment as the organization and the second as the project.

## Authentication and permissions

Recommended PAT permissions depend on the tools you enable:

| Capability | PAT permission |
| --- | --- |
| Repository, branch, commit, PR, and diff reads | Code: Read |
| PR/branch/reviewer/label/comment mutations | Code: Read & write |
| Work item, WIQL, comment, history, sprint-item reads | Work Items: Read |
| Work item creation/update/comments/relations/attachments/backlog reorder | Work Items: Read & write |
| Pipeline, run, build, and log reads | Build: Read |
| Queue, preview, or rerun pipelines | Build: Read & execute |
| Iteration and capacity discovery | Project and Team: Read |

Use the shortest practical PAT expiration. See [docs/auth.md](docs/auth.md).

Azure CLI mode:

```powershell
az login
```

```dotenv
AZURE_DEVOPS_AUTH_MODE=azcli
AZURE_DEVOPS_PAT=
```

## Configuration

| Variable | Required | Default | Purpose |
| --- | --- | --- | --- |
| `AZURE_DEVOPS_ORGANIZATION` | Yes | None | Organization name or Azure DevOps URL |
| `AZURE_DEVOPS_DEFAULT_PROJECT` | No | None | Project used when a tool omits `project` |
| `AZURE_DEVOPS_AUTH_MODE` | No | `pat` | `pat` or `azcli` |
| `AZURE_DEVOPS_PAT` | PAT mode | None | Personal Access Token |
| `AZURE_DEVOPS_BASE_URL` | No | `https://dev.azure.com` | REST API base URL |
| `AZURE_DEVOPS_API_VERSION` | No | `7.1` | Default REST API version |
| `AZURE_DEVOPS_ENABLE_WRITE_TOOLS` | No | `false` | Enable guarded mutations |
| `AZURE_DEVOPS_REQUEST_TIMEOUT_MS` | No | `30000` | Per-request timeout |
| `AZURE_DEVOPS_RETRY_COUNT` | No | `2` | Retry count for safe reads |
| `AZURE_DEVOPS_MAX_DIFF_FILE_BYTES` | No | `1048576` | Per-side local diff file limit |
| `AZURE_DEVOPS_MAX_DIFF_LINES` | No | `5000` | Maximum returned diff lines |

Placeholder secrets such as `replace-me` are rejected at startup.

## Codex configuration

The repository includes [`.codex/config.toml`](.codex/config.toml). Build the project, create `.env`, trust/open the repository in Codex, and restart the MCP server list.

Manual registration:

```powershell
codex mcp add azure-devops-mcp -- node "<absolute-path-to-project>\dist\server.js"
```

The project configuration uses `default_tools_approval_mode = "writes"`, adding Codex approval on top of the server's own mutation gates. [`.vscode/mcp.json`](.vscode/mcp.json) is also included.

## Safety model

Every mutation requires:

1. `AZURE_DEVOPS_ENABLE_WRITE_TOOLS=true` at startup.
2. `confirm: true` in the individual MCP call.

Additional safeguards:

- work item updates can test `expectedRevision`;
- branch deletion requires `expectedObjectId`;
- inline comments validate the current iteration, file side, line range, and `changeTrackingId`;
- PR completion requires the exact current source commit SHA;
- PR completion and auto-complete always use `bypassPolicy: false`;
- comment edits and deletes require exact work item or PR/thread/comment IDs, and Azure DevOps still enforces author and permission rules;
- mutation requests are never automatically retried;
- PATs, bearer tokens, and authorization headers never appear in tool or doctor output.

## Example prompts

```text
Read work item 544, including comments, relations, and delivery links.
Replace my English PR comment with this Turkish explanation after I confirm.
Delete my duplicate reply from thread 42 after I confirm the comment ID.
Move work item 544 to Project\Sprint 8 after I confirm.
Create a branch feature/544 at this exact commit after I confirm.
Review this Azure DevOps pull request URL and report merge blockers.
Add a required reviewer and enable squash auto-complete after I confirm.
Show failed builds for the hpower repository and retrieve the last run logs.
Run pipeline 12 on feature/544 with deploy=false after I confirm.
Show the current sprint capacity and calculated story-point velocity.
Report branches and active PRs older than 45 days.
```

## Validation

```powershell
npm run typecheck
npm run typecheck:tests
npm test
npm run build
npm run smoke:mcp
npm run doctor
npm pack --dry-run
```

`doctor` performs live read-only checks without printing credentials.

## Scope boundaries

This release does not manage wikis, test plans, service connections, variable groups, deployment environments, saved queries, repository creation, or Azure DevOps Server/on-premises. Pipeline rerun is full-run only.

## API references

The adapters target Microsoft's Azure DevOps REST API 7.1 documentation for [Git](https://learn.microsoft.com/en-us/rest/api/azure/devops/git/?view=azure-devops-rest-7.1), [PR thread comments](https://learn.microsoft.com/en-us/rest/api/azure/devops/git/pull-request-thread-comments?view=azure-devops-rest-7.1), [Work Item Tracking](https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/?view=azure-devops-rest-7.1), [work item comments](https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/comments?view=azure-devops-rest-7.1), [Pipelines](https://learn.microsoft.com/en-us/rest/api/azure/devops/pipelines/?view=azure-devops-rest-7.1), [Build](https://learn.microsoft.com/en-us/rest/api/azure/devops/build/?view=azure-devops-rest-7.1), and [Work/Sprints](https://learn.microsoft.com/en-us/rest/api/azure/devops/work/?view=azure-devops-rest-7.1).

## License

MIT © 2026 Hasan Özcan. See [LICENSE](LICENSE).

TDQS

B3.2/5.0

Scored across 68 tools

Disambiguation4/5

Most tools are clearly separated by resource (work items, PRs, pipelines, repos, iterations) and action. Some potential confusion exists among PR comment tools (create_pull_request_comment, create_pull_request_inline_comment, reply_to_pull_request_thread, update_pull_request_comment) and between get_pull_request_diff and get_pull_request_file_diff, but descriptions are specific enough to disambiguate.

Naming Consistency4/5

The naming convention is predominantly verb_noun (e.g., list_projects, create_work_item, get_pull_request), with consistent snake_case. Minor deviations exist: check_azure_devops_auth, validate_inline_comment_target, and get_batch_pull_request_review_summary are more descriptive phrases, but they still follow the same general style.

Tool Count3/5

68 tools is high for a single server, but Azure DevOps is a broad platform covering Boards, Repos, Pipelines, and PR workflows. The count feels heavy and could overwhelm agents, though each tool addresses a distinct need within the domain.

Completeness5/5

The tool surface is remarkably comprehensive: work item CRUD plus comments, relations, attachments, audit history; PR creation, review, comments, threads, votes, labels, reviewers, merge readiness; repo/branch management; pipeline runs and logs; iteration/backlog planning. There are no obvious dead ends for core Azure DevOps workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues