Azure DevOps MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Azure DevOps MCP Serverlist recent builds for Project Alpha"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure DevOps MCP Server
A READ-ONLY MCP (Model Context Protocol) server that connects AI assistants to Azure DevOps Server (on-premises). Works with Claude Code CLI, VS Code AI extensions (Continue, Cline), Cursor, and any MCP-compatible client.
Features
Projects: List and explore projects
Git/Repos: Browse repositories, commits, branches, pull requests, diffs, and code search
Builds: List builds, view logs, analyze errors
Work Items: Query work items, find linked commits/PRs
Releases: View releases and deployment status
Pipelines: List YAML pipelines, view runs, get pipeline configuration
Test Results: View test runs, results, and analyze failures
Related MCP server: mcp-devops-onpremise
Prerequisites
Node.js 18 or higher
Azure DevOps Server 2020 or 2022 (on-premises)
Personal Access Token (PAT) with read scopes
Installation
Option 1: npm (Recommended)
npx azure-devops-mcp@latestOption 2: Clone and Build
git clone https://github.com/elad-nofy/azure-devops-mcp.git
cd azure-devops-mcp
npm install
npm run buildConfiguration
Create a Personal Access Token (PAT)
Go to Azure DevOps Server
Click on your profile icon > Security > Personal access tokens
Create a new token with the following scopes:
Code: Read
Build: Read
Work Items: Read
Release: Read
Test Management: Read
Configure MCP Client
Claude Code CLI
Add to your global settings (~/.claude.json on macOS/Linux, %USERPROFILE%\.claude.json on Windows):
Windows:
{
"mcpServers": {
"azure-devops": {
"command": "cmd",
"args": ["/c", "npx", "azure-devops-mcp"],
"env": {
"AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
"AZURE_DEVOPS_PAT": "your-personal-access-token",
"AZURE_DEVOPS_COLLECTION": "YourCollection",
"AZURE_DEVOPS_PROJECT": "YourDefaultProject"
}
}
}
}macOS / Linux:
{
"mcpServers": {
"azure-devops": {
"command": "npx",
"args": ["azure-devops-mcp"],
"env": {
"AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
"AZURE_DEVOPS_PAT": "your-personal-access-token",
"AZURE_DEVOPS_COLLECTION": "YourCollection",
"AZURE_DEVOPS_PROJECT": "YourDefaultProject"
}
}
}
}VS Code (Continue/Cline)
Add similar configuration to the extension's MCP settings.
Environment Variables
Variable | Required | Description |
| Yes | Server base URL (e.g., |
| Yes | Personal Access Token |
| No | Collection name (default: |
| No | Default project for commands |
Available Tools
Projects
Tool | Description |
| Test connection to Azure DevOps and verify authentication |
| List all projects in the organization |
| Get detailed project information |
Git / Repositories
Tool | Description |
| List repositories in a project |
| List branches in a repository |
| Get commit history with filters |
| Get commit details with changes |
| Get file diff for a commit |
| List pull requests |
| Get PR details with comments |
| Compare two branches (regression analysis) |
| Search for text in repository files |
| Get file content from a repo at a specific branch/commit |
| Find commits referencing a work item |
| Find PRs linked to a work item |
Builds
Tool | Description |
| List recent builds |
| Get build details |
| Get build logs |
| List build definitions |
| Extract errors from failed builds |
Work Items
Tool | Description |
| Search work items (WIQL or filters) |
| Get work item details |
| List available work item types |
| List iterations/sprints in a project |
| List area paths in a project |
Releases
Tool | Description |
| List releases |
| Get release details |
| List release definitions |
| Get deployment logs |
Pipelines
Tool | Description |
| List YAML pipelines |
| Get recent pipeline runs |
| Get pipeline YAML configuration |
| Get pipeline variables |
Test Results
Tool | Description |
| List test runs in a project |
| Get test run details |
| Get test results from a run |
| Get failed tests from a run |
| Get test runs for a specific build |
| Analyze and group test failures |
Usage Examples
Once configured, you can ask your AI assistant questions like:
"Show me the recent builds for project X"
"What's the status of PR #123?"
"List all bugs assigned to me"
"Show me the commits from last week"
"Why did build #456 fail?"
"What tests failed in build #789?"
"Compare branches Dev/9.1 and Dev/9.2"
"Search for 'IMediator' in the Controllers folder"
Development
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run devTroubleshooting
Connection errors
Verify
AZURE_DEVOPS_URLis correct and accessibleCheck if your PAT has not expired
Ensure your network allows connection to the server
Permission errors
Verify PAT has required scopes
Check if you have access to the project/repository
"Project is required" errors
Set
AZURE_DEVOPS_PROJECTenvironment variable, orPass
projectparameter in tool calls
License
MIT
Available Tools
39 toolsanalyze_build_errorsA
Analyze a failed build and extract errors, warnings, and issues from logs
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID to analyze |
analyze_test_failuresB
Analyze test failures in a build - groups failures by error type
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID to analyze |
compare_branchesA
Compare two branches - shows commits in target that are not in base (useful for regression analysis)
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| baseBranch | Yes | Base branch (e.g., "main" or "refs/heads/main") | |
| targetBranch | Yes | Target branch to compare (e.g., "develop") | |
| top | No | Max commits to return |
get_buildA
Get detailed information about a specific build
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID |
get_build_logsB
Get build logs - useful for analyzing build errors and failures
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID | |
| logId | No | Specific log ID (omit to get log list first) |
get_commitB
Get detailed information about a specific commit including changes
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| commitId | Yes | Full commit SHA | |
| includeChanges | No | Include file changes |
get_commit_diffA
Get the diff/changes for a file in a commit
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| commitId | Yes | Commit SHA | |
| path | Yes | File path to get diff for |
get_commits_for_work_itemA
Find commits associated with a work item ID (searches commit messages for #ID)
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| workItemId | Yes | Work item ID to search for | |
| top | No | Max commits to return |
get_failed_testsA
Get failed tests from a test run - useful for investigating failures
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID |
get_file_contentA
Get the content of a file from a repository at a specific branch or commit
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| path | Yes | File path (e.g., "/src/index.ts") | |
| branch | No | Branch name (e.g., "main") | |
| commitId | No | Specific commit SHA (overrides branch) |
get_pipeline_runsC
Get recent runs for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID | |
| branch | No | Filter by branch | |
| top | No | Max runs to return |
get_pipeline_variablesB
Get variables defined for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID |
get_pipeline_yamlB
Get the YAML configuration for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID |
get_projectA
Get detailed information about a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name or ID |
get_prs_for_work_itemB
Find pull requests linked to a work item
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| workItemId | Yes | Work item ID |
get_pull_requestA
Get detailed information about a pull request including comments and threads
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| pullRequestId | Yes | Pull request ID |
get_releaseB
Get detailed information about a specific release
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| releaseId | Yes | Release ID |
get_release_logsA
Get deployment logs for a release environment
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| releaseId | Yes | Release ID | |
| environmentId | Yes | Environment ID |
get_test_resultsB
Get test results from a test run - shows which tests passed/failed
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID | |
| top | No | Max results to return |
get_test_runB
Get detailed information about a specific test run
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID |
get_test_runs_for_buildB
Get test runs associated with a specific build
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID |
get_work_itemB
Get detailed information about a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID | |
| expand | No | Include all fields and relations |
list_areasA
List area paths in a project - useful for organizing and filtering work items by team or component
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| depth | No | Depth of child areas to return |
list_branchesC
List branches in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID |
list_build_definitionsC
List build/pipeline definitions
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| name | No | Filter by definition name (supports wildcards *) | |
| path | No | Filter by folder path |
list_buildsB
List recent builds with status and results
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| definitions | No | Filter by build definition IDs | |
| branchName | No | Filter by branch (e.g., "refs/heads/main") | |
| statusFilter | No | Filter by status | |
| resultFilter | No | Filter by result | |
| requestedFor | No | Filter by user who requested the build | |
| top | No | Max builds to return |
list_commitsB
Get commit history for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| branch | No | Branch name (e.g., "refs/heads/main") | |
| author | No | Filter by author email | |
| fromDate | No | Start date (ISO format) | |
| toDate | No | End date (ISO format) | |
| top | No | Max commits to return |
list_iterationsA
List iterations (sprints) in a project - useful for sprint planning and filtering work items
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| depth | No | Depth of child iterations to return |
list_pipelinesB
List pipeline definitions in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| name | No | Filter by name (supports * wildcard) | |
| path | No | Filter by folder path | |
| top | No | Max pipelines to return |
list_projectsA
List all projects in the Azure DevOps organization/collection
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_pull_requestsC
List pull requests in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| status | No | PR status filter | active |
| creatorId | No | Filter by creator ID | |
| reviewerId | No | Filter by reviewer ID | |
| top | No | Max PRs to return |
list_release_definitionsC
List release/deployment pipeline definitions
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| searchText | No | Filter by name | |
| path | No | Filter by folder path |
list_releasesB
List releases with deployment status
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| definitionId | No | Filter by release definition ID | |
| statusFilter | No | Filter by status | |
| environmentStatusFilter | No | Filter by environment status | |
| top | No | Max releases to return |
list_reposA
List all Git repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name (uses default if not specified) |
list_test_runsB
List test runs for a project - useful for finding test execution history
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildUri | No | Filter by build URI | |
| top | No | Max runs to return |
list_work_item_typesA
List available work item types in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name |
query_work_itemsC
Query work items using WIQL (Work Item Query Language) or simple filters
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| wiql | No | WIQL query string (if provided, other filters are ignored) | |
| workItemType | No | Filter by type (Bug, Task, User Story, etc.) | |
| state | No | Filter by state (Active, Closed, etc.) | |
| assignedTo | No | Filter by assigned user (use "@Me" for current user) | |
| areaPath | No | Filter by area path | |
| iterationPath | No | Filter by iteration path | |
| tags | No | Filter by tag | |
| top | No | Max items to return |
search_codeB
Search for code/text content in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| searchText | Yes | Text to search for in file contents | |
| path | No | Folder path to search in (e.g., "/src") | |
| branch | No | Branch to search (default: default branch) | |
| fileExtension | No | Filter by file extension (e.g., ".cs", ".ts") | |
| top | No | Max results to return |
test_connectionA
Test the connection to Azure DevOps Server and verify authentication
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
39 tool updates
v1.1.2- First observed
analyze_build_errors - First observed
analyze_test_failures - First observed
compare_branches - First observed
get_build - First observed
get_build_logs - First observed
get_commit - First observed
get_commit_diff - First observed
get_commits_for_work_item - First observed
get_failed_tests - First observed
get_file_content - First observed
get_pipeline_runs - First observed
get_pipeline_variables - First observed
get_pipeline_yaml - First observed
get_project - First observed
get_prs_for_work_item - First observed
get_pull_request - First observed
get_release - First observed
get_release_logs - First observed
get_test_results - First observed
get_test_run - First observed
get_test_runs_for_build - First observed
get_work_item - First observed
list_areas - First observed
list_branches - First observed
list_build_definitions - First observed
list_builds - First observed
list_commits - First observed
list_iterations - First observed
list_pipelines - First observed
list_projects - First observed
list_pull_requests - First observed
list_release_definitions - First observed
list_releases - First observed
list_repos - First observed
list_test_runs - First observed
list_work_item_types - First observed
query_work_items - First observed
search_code - First observed
test_connection
TDQS
Scored across 39 tools
Most tools target distinct resources (builds, repos, work items, tests, releases), but some overlap exists, e.g., list_builds vs get_pipeline_runs, and multiple test analysis tools. Descriptions help differentiate, but an agent might occasionally select the wrong tool.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., list_branches, get_work_item, analyze_build_errors). No mixing of conventions, making the set predictable for agents.
At 39 tools, the count is high but justified by the broad scope of Azure DevOps (builds, repos, work items, tests, releases). However, it exceeds the typical 15-25 range and feels heavy, fitting the 'borderline' description.
The tool surface is heavily read-oriented, lacking mutation operations such as create, update, delete for work items, pull requests, pipelines, and releases. This is a significant gap for a DevOps server, likely causing agent failures when workflows require state changes.
Maintenance
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Read-only MCP server exposing a user ORANO library to their own AI agent.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI assistants to manage Azure DevOps resources including Work Items, Git repositories, pipelines, and user identities.26 npmMIT
- AlicenseBqualityBmaintenanceMCP server for on-premises Azure DevOps that lets AI assistants browse repositories, review pull requests, manage work items, and interact with wikis, with NTLM authentication support.36160 PyPI6Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for Azure DevOps Server 2022 (on-premises) that enables AI assistants to interact with work items, repositories, builds, and sprints through 29 tools.29 npmMIT
- FlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to interact with Azure DevOps projects, work items, repositories, pipelines, wikis, and more via 21 tools.21-