Skip to main content
Glama
isaacOjeda

Azure DevOps MCP

by isaacOjeda
README.md
# Azure DevOps MCP

Local, stdio-based MCP server for Azure DevOps and Claude Desktop.

## Requirements

- Python 3.13+
- [`uv`](https://docs.astral.sh/uv/)
- Azure DevOps PAT with only the scopes required by the enabled operations

## Configuration

The server reads these environment variables:

```text
ADO_ORGANIZATION=your-organization
ADO_PAT=your-pat
ADO_DEFAULT_PROJECT=your-project
ADO_READ_ONLY=true
ADO_API_VERSION=7.1
```

Keep `ADO_READ_ONLY=true` until read operations are verified. Never commit the PAT or put it in an MCP tool argument.

## Run locally

```bash
uv sync
uv run ado-mcp
```

## Claude Desktop

Add the following entry to Claude Desktop's `claude_desktop_config.json`, using absolute paths:

```json
{
  "mcpServers": {
    "azure-devops": {
      "command": "/absolute/path/to/ado-mcp/.venv/bin/ado-mcp",
      "env": {
        "ADO_ORGANIZATION": "your-organization",
        "ADO_PAT": "your-pat",
        "ADO_DEFAULT_PROJECT": "your-project",
        "ADO_READ_ONLY": "true"
      }
    }
  }
}
```

Restart Claude Desktop after changing the configuration. The server writes diagnostics only to stderr so stdout remains available for MCP protocol traffic.

On macOS, Claude Desktop captures this server's stderr in:

```text
~/Library/Logs/Claude/mcp-server-azure-devops.log
```

Look for `ado_request_failed` and `status_code` when Azure DevOps rejects a request.

TDQS

B3.3/5.0

Scored across 15 tools

Disambiguation5/5

Tools split cleanly by resource (work items vs pull requests) and action (list/get/query/create/update/add). Work item query vs get are distinct via WIQL vs ID lookup, and metadata tools are clearly scoped. No two tools appear to do the same job.

Naming Consistency4/5

All tools follow the ado_<resource>_<action> pattern, which is predictable and easy to learn. Minor inconsistencies exist: list/query sometimes use plural resources (pull_requests_list, work_items_query) while other actions use singular forms, and both 'add' and 'create' are used for different resources.

Tool Count5/5

15 tools is at the upper boundary but remains well-scoped for work-item and pull-request workflows. Each tool maps to a distinct operation, and the metadata tools (types/fields) are justified by Azure DevOps's dynamic work-item models.

Completeness3/5

Work item coverage is solid with query/get/create/update/comments, but the PR side lacks update/complete/abandon operations, so a PR can be created and discussed but not merged or completed through the server. There is also no work-item delete or reply to existing PR review threads. These are notable lifecycle gaps rather than trivial workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues