Skip to main content
Glama
Azure DevOps MCP Server
by Elad-Health

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

npx azure-devops-mcp@latest

Option 2: Clone and Build

git clone https://github.com/elad-nofy/azure-devops-mcp.git
cd azure-devops-mcp
npm install
npm run build

Configuration

Create a Personal Access Token (PAT)

  1. Go to Azure DevOps Server

  2. Click on your profile icon > Security > Personal access tokens

  3. 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

AZURE_DEVOPS_URL

Yes

Server base URL (e.g., http://tfs:8080/tfs)

AZURE_DEVOPS_PAT

Yes

Personal Access Token

AZURE_DEVOPS_COLLECTION

No

Collection name (default: DefaultCollection)

AZURE_DEVOPS_PROJECT

No

Default project for commands

Available Tools

Projects

Tool

Description

test_connection

Test connection to Azure DevOps and verify authentication

list_projects

List all projects in the organization

get_project

Get detailed project information

Git / Repositories

Tool

Description

list_repos

List repositories in a project

list_branches

List branches in a repository

list_commits

Get commit history with filters

get_commit

Get commit details with changes

get_commit_diff

Get file diff for a commit

list_pull_requests

List pull requests

get_pull_request

Get PR details with comments

compare_branches

Compare two branches (regression analysis)

search_code

Search for text in repository files

get_file_content

Get file content from a repo at a specific branch/commit

get_commits_for_work_item

Find commits referencing a work item

get_prs_for_work_item

Find PRs linked to a work item

Builds

Tool

Description

list_builds

List recent builds

get_build

Get build details

get_build_logs

Get build logs

list_build_definitions

List build definitions

analyze_build_errors

Extract errors from failed builds

Work Items

Tool

Description

query_work_items

Search work items (WIQL or filters)

get_work_item

Get work item details

list_work_item_types

List available work item types

list_iterations

List iterations/sprints in a project

list_areas

List area paths in a project

Releases

Tool

Description

list_releases

List releases

get_release

Get release details

list_release_definitions

List release definitions

get_release_logs

Get deployment logs

Pipelines

Tool

Description

list_pipelines

List YAML pipelines

get_pipeline_runs

Get recent pipeline runs

get_pipeline_yaml

Get pipeline YAML configuration

get_pipeline_variables

Get pipeline variables

Test Results

Tool

Description

list_test_runs

List test runs in a project

get_test_run

Get test run details

get_test_results

Get test results from a run

get_failed_tests

Get failed tests from a run

get_test_runs_for_build

Get test runs for a specific build

analyze_test_failures

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 dev

Troubleshooting

Connection errors

  • Verify AZURE_DEVOPS_URL is correct and accessible

  • Check 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_PROJECT environment variable, or

  • Pass project parameter in tool calls

License

MIT

Available Tools

39 tools
analyze_build_errorsA

Analyze a failed build and extract errors, warnings, and issues from logs

Inputs: buildId (required), project.

analyze_test_failuresB

Analyze test failures in a build - groups failures by error type

Inputs: buildId (required), project.

compare_branchesA

Compare two branches - shows commits in target that are not in base (useful for regression analysis)

Inputs: repository (required), baseBranch (required), targetBranch (required), project, +1 more.

get_buildA

Get detailed information about a specific build

Inputs: buildId (required), project.

get_build_logsB

Get build logs - useful for analyzing build errors and failures

Inputs: buildId (required), project, logId.

get_commitB

Get detailed information about a specific commit including changes

Inputs: repository (required), commitId (required), project, includeChanges.

get_commit_diffA

Get the diff/changes for a file in a commit

Inputs: repository (required), commitId (required), path (required), project.

get_commits_for_work_itemA

Find commits associated with a work item ID (searches commit messages for #ID)

Inputs: repository (required), workItemId (required), project, top.

get_failed_testsA

Get failed tests from a test run - useful for investigating failures

Inputs: runId (required), project.

get_file_contentA

Get the content of a file from a repository at a specific branch or commit

Inputs: repository (required), path (required), project, branch, +1 more.

get_pipeline_runsC

Get recent runs for a pipeline

Inputs: pipelineId (required), project, branch, top.

get_pipeline_variablesB

Get variables defined for a pipeline

Inputs: pipelineId (required), project.

get_pipeline_yamlB

Get the YAML configuration for a pipeline

Inputs: pipelineId (required), project.

get_projectA

Get detailed information about a specific project

Inputs: project (required).

get_prs_for_work_itemB

Find pull requests linked to a work item

Inputs: repository (required), workItemId (required), project.

get_pull_requestA

Get detailed information about a pull request including comments and threads

Inputs: repository (required), pullRequestId (required), project.

get_releaseB

Get detailed information about a specific release

Inputs: releaseId (required), project.

get_release_logsA

Get deployment logs for a release environment

Inputs: releaseId (required), environmentId (required), project.

get_test_resultsB

Get test results from a test run - shows which tests passed/failed

Inputs: runId (required), project, top.

get_test_runB

Get detailed information about a specific test run

Inputs: runId (required), project.

get_test_runs_for_buildB

Get test runs associated with a specific build

Inputs: buildId (required), project.

get_work_itemB

Get detailed information about a specific work item

Inputs: id (required), expand.

list_areasA

List area paths in a project - useful for organizing and filtering work items by team or component

Inputs: project, depth.

list_branchesC

List branches in a repository

Inputs: repository (required), project.

list_build_definitionsC

List build/pipeline definitions

Inputs: project, name, path.

list_buildsB

List recent builds with status and results

Inputs: project, definitions, branchName, statusFilter, +3 more.

list_commitsB

Get commit history for a repository

Inputs: repository (required), project, branch, author, +3 more.

list_iterationsA

List iterations (sprints) in a project - useful for sprint planning and filtering work items

Inputs: project, depth.

list_pipelinesB

List pipeline definitions in a project

Inputs: project, name, path, top.

list_projectsA

List all projects in the Azure DevOps organization/collection

Inputs: no named parameters.

list_pull_requestsC

List pull requests in a repository

Inputs: repository (required), project, status, creatorId, +2 more.

list_release_definitionsC

List release/deployment pipeline definitions

Inputs: project, searchText, path.

list_releasesB

List releases with deployment status

Inputs: project, definitionId, statusFilter, environmentStatusFilter, +1 more.

list_reposA

List all Git repositories in a project

Inputs: project.

list_test_runsB

List test runs for a project - useful for finding test execution history

Inputs: project, buildUri, top.

list_work_item_typesA

List available work item types in a project

Inputs: project.

query_work_itemsC

Query work items using WIQL (Work Item Query Language) or simple filters

Inputs: project, wiql, workItemType, state, +5 more.

search_codeB

Search for code/text content in a repository

Inputs: repository (required), searchText (required), project, path, +3 more.

test_connectionA

Test the connection to Azure DevOps Server and verify authentication

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 39 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness2/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers