---
title: "Azure DevOps MCP Server: Work Items, Repos, Pipelines and Wikis"
url: "https://mcpshelf.co/servers/azure-devops"
description: "Microsoft's Azure DevOps server lets an assistant work with boards, work items, repos, pull requests, pipelines, wikis and test plans. Hosted and local setup."
updated: "2026-10-27"
site: "MCP Shelf"
---

# Azure DevOps MCP

> Microsoft's server for Azure DevOps boards, repos, pipelines, wikis and test plans.

## At a glance

Microsoft maintains this server for Azure DevOps. The model can list projects and teams, read and update work items, look at iterations and team capacity, browse repositories and pull requests, check and start pipeline runs, read and write wiki pages, search code and work items, and work with test plans and Advanced Security alerts.

There are two versions. Microsoft now recommends its hosted server at mcp.dev.azure.com, which needs no install and gets new tools first; this local npx package remains supported for clients that need stdio. Both need a work or school account backed by Microsoft Entra ID, since personal Microsoft accounts are not supported.

|  |  |
| --- | --- |
| Made by | Microsoft |
| GitHub | https://github.com/microsoft/azure-devops-mcp |
| Licence | MIT |
| npm package | [@azure-devops/mcp](https://www.npmjs.com/package/@azure-devops/mcp) 2.11.0 (22 Oct 2026) |
| GitHub stars | 2.1K |
| Last commit | 23 Oct 2026 |
| Tools | 44 |
| Runs on | Your computer or hosted |
| Install check | Started in our test |
| Category | [Cloud and operations](https://mcpshelf.co/categories/cloud-and-ops) |

**Our check:** We ran this exact config on 27 Oct 2026: it started and answered with 44 tools. The shared database gave only the hosted address with a placeholder bearer token. The hosted server signs in with your Microsoft account, and the local package is @azure-devops/mcp on npm.

## Tools

We listed 44 tools on 27 Oct 2026. 25 only read; the rest can change things or run commands.

| Tool | Kind | What it is for |
| --- | --- | --- |
| `core_list_project_teams` | reads | Lists the teams in a project. |
| `core_list_projects` | reads | Lists the projects in your organization. |
| `core_get_identity_ids` | reads | Looks up people's identity IDs from a name or email. |
| `work` | reads | Reads iterations, team settings and team capacity. |
| `work_iteration_write` | changes | Creates iterations or assigns them to a team. |
| `work_capacity_write` | changes | Updates a team member's capacity for an iteration. |
| `pipelines_build` | reads | Lists builds and reads their status and changes. |
| `pipelines_build_log` | reads | Reads build logs, whole or by line range. |
| `pipelines_definition` | reads | Lists and reads pipeline definitions. |
| `pipelines_run` | runs | Lists and reads pipeline runs. |
| `pipelines_artifact` | changes | Lists and downloads build artifacts. |
| `pipelines_write` | changes | Queues runs, creates and renames YAML pipelines, and cancels, retries or runs a stage of a running build. |
| `repo_repository` | reads | Lists repositories or reads one. |
| `repo_pull_request` | reads | Lists pull requests in a repository or reads one, with changed files if asked. |
| `repo_pull_request_org` | reads | Lists your active pull requests, or those waiting on your review, across the organization. |
| `repo_pull_request_thread` | reads | Reads pull request comment threads. |
| `repo_branch` | reads | Lists and reads branches. |
| `repo_file` | reads | Reads files and folders from a repository. |
| `repo_file_write` | changes | Creates or updates a text file on a branch and commits it. |
| `repo_search_commits` | reads | Searches commits by text, author, date or branch. |
| `repo_pull_request_write` | changes | Creates and updates pull requests: reviewers, votes, status and auto-complete. |
| `repo_pull_request_thread_write` | changes | Replies to, opens and resolves pull request comment threads. |
| `repo_create_branch` | changes | Creates a branch. |
| `wit_work_item` | reads | Reads work items: one or many by ID, yours, their comments, history or those in an iteration. |
| `wit_query` | reads | Runs saved work item queries or WIQL. |
| `wit_backlog` | changes | Reads backlogs and reorders the items on them. |
| `wit_work_item_attachment` | reads | Downloads a work item attachment. |
| `wit_work_item_attachment_upload` | changes | Uploads a file to attach to a work item. |
| `wit_work_item_attachment_link` | changes | Links an uploaded attachment to a work item. |
| `wit_work_item_write` | changes | Creates and updates work items, singly or in batches, including child items. |
| `wit_work_item_comment_write` | changes | Adds or edits comments on a work item. |
| `wit_work_item_link_write` | changes | Links work items to each other, to pull requests or to commits. |
| `wiki` | reads | Lists wikis and pages and reads page content. |
| `wiki_upsert_page` | changes | Creates or updates a wiki page. |
| `testplan` | reads | Reads test plans, suites and cases. |
| `testplan_show_test_results_from_build_id` | reads | Reads the test results of a build, filtered by outcome. |
| `testplan_test_plan_write` | changes | Creates test plans. |
| `testplan_test_suite_write` | changes | Creates test suites and adds test cases to them. |
| `testplan_test_case_write` | changes | Creates and updates test cases. |
| `search_code` | reads | Searches code across repositories. |
| `search_wiki` | reads | Searches wiki pages. |
| `search_workitem` | reads | Searches work items by text and filters. |
| `advsec_get_alerts` | reads | Lists Advanced Security alerts for a repository. |
| `advsec_get_alert_details` | reads | Reads one Advanced Security alert in detail. |

### How clearly it describes its tools

44 of 44 tools have a description and 44 of 44 say whether they change things. The tool list takes at least ~3,500 tokens of context. Every tool says whether it only reads or can change things, so a client can ask before the risky ones.

## Set it up

### Claude Desktop

Where: claude_desktop_config.json (Settings → Developer → Edit Config)

```json
{
  "mcpServers": {
    "azure-devops": {
      "command": "npx",
      "args": [
        "-y",
        "@azure-devops/mcp",
        "YOUR_ORGANIZATION"
      ]
    }
  }
}
```

### Claude Code

Where: Your terminal, in the project folder

```bash
claude mcp add-json azure-devops '{"command":"npx","args":["-y","@azure-devops/mcp","YOUR_ORGANIZATION"]}'
```

### Cursor

Where: ~/.cursor/mcp.json, or .cursor/mcp.json in a project

```json
{
  "mcpServers": {
    "azure-devops": {
      "command": "npx",
      "args": [
        "-y",
        "@azure-devops/mcp",
        "YOUR_ORGANIZATION"
      ]
    }
  }
}
```

### VS Code

Where: .vscode/mcp.json in your project

```json
{
  "servers": {
    "azure-devops": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@azure-devops/mcp",
        "YOUR_ORGANIZATION"
      ]
    }
  }
}
```

### Windsurf

Where: ~/.codeium/windsurf/mcp_config.json

```json
{
  "mcpServers": {
    "azure-devops": {
      "command": "npx",
      "args": [
        "-y",
        "@azure-devops/mcp",
        "YOUR_ORGANIZATION"
      ]
    }
  }
}
```

### ChatGPT

Where: Not supported

ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.

Replace YOUR_ORGANIZATION with the name in your dev.azure.com address. Add "-d", "core", "work", "work-items" to load only some tool groups. It signs in through a browser by default; use "--authentication", "azcli" or "pat" on machines without one.

### Remote option

Microsoft's recommended hosted server, in preview. Replace the last part with your organization name and sign in with your Microsoft account.

```
https://mcp.dev.azure.com/YOUR_ORGANIZATION
```

## Settings

| Setting | Kind | Required | What it does |
| --- | --- | --- | --- |
| `{organization}` | config | yes | Your organization name, the part after dev.azure.com/, as the first argument. Example: `contoso` |
| `-d / --domains` | flag | no | Loads only some tool groups: core, work, work-items, search, test-plans, repositories, wiki, pipelines and advanced-security. Always include core. Example: `-d core work work-items` |
| `-a / --authentication` | flag | no | How to sign in: interactive (browser, the default), azcli, env (Azure credential chain), envvar or pat. Example: `--authentication azcli` |
| `-t / --tenant` | flag | no | The Entra tenant ID to sign in to, for people with access to several tenants. |
| `ADO_MCP_AUTH_TOKEN` | env | no | A bearer token, used with --authentication envvar. |
| `PERSONAL_ACCESS_TOKEN` | env | no | The base64 of email:PAT, used with --authentication pat. |
| `ado_mcp_project / ado_mcp_team` | env | no | A default project and team, so tools do not ask each time. Example: `Contoso` |

## What it can touch

**It can read**

- Projects, teams, work items, backlogs and iterations
- Repositories, branches, commits and pull requests
- Pipelines, builds, logs, test plans, wikis and security alerts

**It can change**

- Work items, comments, links and attachments
- Pull requests, review threads, branches and committed files
- Pipeline runs, iterations, capacity, wiki pages and test plans

**Safer setup:** Load only the domains you need with -d, and sign in as an account whose Azure DevOps permissions match what you want the model to do.

## Before you start

- An Azure DevOps organization
- A Microsoft Entra ID work or school account
- Node.js 20 or newer, for the local version

## Good for

- Asking what is in the current sprint and updating work items
- Reviewing pull requests and build failures from your editor
- Keeping project wikis up to date

## If it does not work

**Sign-in hangs in WSL, SSH sessions, containers or CI**
The default browser sign-in needs a browser. Use --authentication azcli after az login, or envvar or pat with a token.

**TF400813: the user is not authorized**
You are probably signed in to the wrong tenant. Pass --tenant with your organization's tenant ID.

**A personal Microsoft account is rejected**
Only Entra ID work or school accounts are supported.

**The client warns about too many tools**
Pass -d with only the domains you need, such as core work work-items.

## Similar servers

| Server | Tools | Runs on | Stars |
| --- | --- | --- | --- |
| [Terraform MCP Server](https://mcpshelf.co/servers/terraform) | 61 | Your computer | 1.6K |
| [AWS Knowledge MCP Server](https://mcpshelf.co/servers/aws-knowledge) | 5 | Hosted | 9.8K |
| [Cloudflare MCP Servers](https://mcpshelf.co/servers/cloudflare) | 2 | Hosted | 4.4K |
| [Grafana MCP](https://mcpshelf.co/servers/grafana) | 62 | Your computer | 3.6K |

## Questions

### Local or remote server?

Microsoft recommends the hosted server at mcp.dev.azure.com/{organization}; it needs no install and will eventually replace the local one. Use this package when you need stdio.

### Are personal access tokens supported?

Yes, with --authentication pat and PERSONAL_ACCESS_TOKEN set to the base64 of email:token.

### Does it work with Azure DevOps Server on-premises?

No. It supports only Azure DevOps Services, and Microsoft says it has no plans for on-premises support.

### What does it cost?

The server is free and MIT licensed. It works within your existing Azure DevOps licences.

Full docs on GitHub: https://github.com/microsoft/azure-devops-mcp

---

From [MCP Shelf](https://mcpshelf.co/): A short shelf of MCP servers that are worth installing. Index for agents: https://mcpshelf.co/llms.txt

