Skip to main content
Glama

Azure DevOps MCP

npm version

A dynamic Azure DevOps MCP (Model Context Protocol) server that automatically switches authentication context based on the current working directory. This enables seamless integration with multiple Azure DevOps organizations and projects from a single MCP server.

Features

  • Local Configuration Files: Each repository contains .azure-devops.json configuration

  • Dynamic Environment Switching: Automatically detects project context based on directory location

  • Multiple Project Support: Supports unlimited projects with separate authentication

  • Comprehensive Azure DevOps Integration: Work items, repositories, builds, and more

  • Zero Configuration Switching: Seamless switching between projects with local config files

  • Secure Token Storage: PAT tokens stored locally per repository (excluded from git)

  • Error Handling & Fallback: Robust error handling with graceful degradation to environment variables

Related MCP server: Azure DevOps MCP Server

Local Configuration

Each repository should contain a .azure-devops.json configuration file:

Configuration File Structure

{
  "organizationUrl": "https://dev.azure.com/your-org",
  "project": "YourProject",
  "pat": "your-pat-token-here",
  "description": "Azure DevOps configuration for this repository",
  "settings": {
    "timeout": 30000,
    "retries": 3,
    "apiVersion": "7.1"
  },
  "tools": {
    "workItems": true,
    "repositories": true,
    "builds": true,
    "pullRequests": true,
    "pipelines": true
  },
  "meta": {
    "configVersion": "1.0",
    "lastUpdated": "2025-07-21",
    "createdBy": "devops-mcp"
  }
}

Security Configuration

Important: Add .azure-devops.json to your .gitignore file:

# Azure DevOps MCP local configuration (contains PAT tokens)
.azure-devops.json

Example Projects

RiverSync Project

  • Directory: /Users/wangkanai/Sources/riversync

  • Configuration: .azure-devops.json with RiverSync organization settings

Mula Project

  • Directory: /Users/wangkanai/Sources/mula

  • Configuration: .azure-devops.json with Mula organization settings

Installation

# Install and add to Claude Code MCP
claude mcp add devops -- npx -y @wangkanai/devops-mcp

Note: The -y flag automatically accepts the package installation prompt, ensuring smooth non-interactive execution for MCP servers.

Claude Desktop Installation

For Claude Desktop users, add this configuration to your MCP settings:

{
  "mcpServers": {
    "devops-mcp": {
      "command": "npx",
      "args": ["-y", "@wangkanai/devops-mcp"]
    }
  }
}

Claude Desktop MCP Settings Location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Available Tools

📋 For comprehensive command documentation with detailed examples, see MCP-COMMANDS.md

Work Items

  • get-work-items: Retrieve work items using WIQL queries or specific IDs with field selection

  • create-work-item: Create new work items with full hierarchy support (Epic → Feature → User Story → Task)

  • update-work-item: Update existing work items including state, assignments, parent relationships, and iteration paths

  • add-work-item-comment: Add comments to existing work items for progress tracking

Repositories & Pull Requests

  • get-repositories: List all repositories in the current project context

  • get-pull-requests: Get pull requests with filtering options (status, creator, repository)

Builds & Pipelines

  • get-builds: Get build definitions and recent build history with filtering

  • trigger-pipeline: Trigger build pipelines with parameters and branch selection

  • get-pipeline-status: Get detailed build status and timeline information

Context Management

  • get-current-context: Get current Azure DevOps context based on directory

🎯 Key Features

  • Hierarchical Work Items: Full Epic → Feature → User Story → Task hierarchy support

  • Parent Relationships: Establish parent-child relationships during work item creation

  • WIQL Queries: Powerful Work Item Query Language support for complex searches

  • Sprint Management: Iteration path assignment and management

  • Pipeline Integration: Trigger builds and monitor deployment status

  • Multi-Project Support: Seamless switching between Azure DevOps organizations

Usage Examples

Get Current Context

{
  "name": "get-current-context",
  "arguments": {
    "directory": "/Users/wangkanai/Sources/riversync"
  }
}

Query Work Items

{
  "name": "get-work-items",
  "arguments": {
    "wiql": "SELECT [System.Id], [System.Title] FROM WorkItems WHERE [System.State] = 'Active'"
  }
}

Create Work Item

{
  "name": "create-work-item",
  "arguments": {
    "type": "Task",
    "title": "Implement new feature",
    "description": "Add authentication system",
    "assignedTo": "user@example.com"
  }
}

Get Repositories

{
  "name": "get-repositories",
  "arguments": {
    "includeLinks": true
  }
}

Directory Detection Logic

The server uses intelligent directory detection:

  1. Exact Match: Direct match of configured directory paths

  2. Nested Directory Support: Detects parent project directories

  3. Longest Match Priority: Most specific directory match takes precedence

  4. Parent Directory Search: Searches up the directory tree for matches

  5. Fallback Configuration: Uses default configuration when no match found

Local Configuration

Each repository should contain a .azure-devops.json configuration file:

Configuration File Structure

{
  "organizationUrl": "https://dev.azure.com/your-org",
  "project": "YourProject",
  "pat": "your-pat-token-here",
  "description": "Azure DevOps configuration for this repository",
  "settings": {
    "timeout": 30000,
    "retries": 3,
    "apiVersion": "7.1"
  },
  "tools": {
    "workItems": true,
    "repositories": true,
    "builds": true,
    "pullRequests": true,
    "pipelines": true
  },
  "meta": {
    "configVersion": "1.0",
    "lastUpdated": "2025-07-21",
    "createdBy": "devops-mcp"
  }
}

Security Configuration

Important: Add .azure-devops.json to your .gitignore file:

# Azure DevOps MCP local configuration (contains PAT tokens)
.azure-devops.json

Example Projects

RiverSync Project

  • Directory: /Users/wangkanai/Sources/riversync

  • Configuration: .azure-devops.json with RiverSync organization settings

Mula Project

  • Directory: /Users/wangkanai/Sources/mula

  • Configuration: .azure-devops.json with Mula organization settings

Authentication

The server uses Personal Access Tokens (PAT) for Azure DevOps authentication. PAT tokens are configured per project in local .azure-devops.json configuration files within each repository.

PAT Token Requirements

PAT tokens should have the following scopes:

  • Work Items: Read & Write

  • Code: Read

  • Build: Read

  • Project and Team: Read

Error Handling

The server includes comprehensive error handling:

  • Configuration Errors: Graceful fallback when configuration is missing

  • Authentication Errors: Clear error messages for authentication failures

  • API Errors: Detailed error reporting for Azure DevOps API issues

  • Network Errors: Retry logic and timeout handling

Testing & Validation

The enhanced validation system includes MCP server startup, connection verification, and readiness checks:

1. MCP Server Warmup

# Prepare MCP servers for validation
./warmup-mcp.sh

# Use custom configuration file
./warmup-mcp.sh custom-config.json

2. Enhanced Comprehensive Validation

# Full validation with MCP server initialization
./validate-enhanced.sh

# Skip interactive Claude tests (faster)
./validate-enhanced.sh --skip-interactive

# Extended warmup for slow systems
./validate-enhanced.sh --warmup 20

# Test only specific repositories
./validate-enhanced.sh --repos "RiverSync,Mula"

# Use custom configuration file
./validate-enhanced.sh --config custom-config.json

# Show all options
./validate-enhanced.sh --help

3. Manual Testing

# Build and test the server manually
npm run build
node test-server.js

Configuration File

The generic validation system uses validation-config.json:

{
  "proxyPath": "/Users/wangkanai/Sources/devops-mcp",
  "repositories": [
    {
      "name": "RiverSync",
      "path": "/Users/wangkanai/Sources/riversync",
      "expectedOrganization": "riversync",
      "organizationUrl": "https://dev.azure.com/riversync",
      "project": "RiverSync",
      "enabled": true
    }
  ],
  "testSettings": {
    "timeoutSeconds": 30,
    "skipInteractive": false,
    "mcpServerName": "devops-mcp",
    "configFileName": ".azure-devops.json"
  },
  "expectedTools": ["workItems", "repositories", "builds", "pullRequests", "pipelines"]
}

Enhanced Validation Features

The enhanced validation system includes:

🚀 MCP Server Management

  • Startup Verification: Ensures MCP servers are properly configured

  • Connection Testing: Verifies server connectivity with retry logic

  • Readiness Checks: Confirms servers respond to basic commands

  • Warmup Period: Configurable delay for server initialization (default: 10s)

🔍 Comprehensive Testing Coverage

  • Prerequisites: PowerShell, Claude Code, directory structure, proxy build

  • MCP Initialization: Server startup, connectivity, and readiness verification

  • Local Configuration: .azure-devops.json file validation with expected values

  • Server Configuration: Local scope verification without environment variables

  • Claude Integration: MCP command execution and context detection

  • Dynamic Switching: Environment switching between multiple repositories

  • Error Handling: Comprehensive error detection and reporting with retry logic

Expected Results

Full Validation Results:

  • Pass Rate: >90% for successful implementation

  • All MCP commands functional in both repositories

  • Automatic context switching based on directory location

Legacy Environment Configuration (Deprecated)

The server previously supported a global config/environments.json file for environment mapping. This approach has been deprecated in favor of local .azure-devops.json configuration files for better security and project isolation.

If you need to migrate from the old environment-based configuration, convert your settings to local configuration files in each repository.

Architecture

Core Components

  • AzureDevOpsMCPProxy: Main server class with MCP protocol handling

  • DirectoryDetector: Smart directory detection and configuration mapping

  • ToolHandlers: Azure DevOps API integration and tool implementations

  • ConfigLoader: Configuration file loading and validation

Request Flow

  1. Tool Call Received: MCP client sends tool call request

  2. Context Detection: Directory detector identifies current project context

  3. Configuration Switch: Server switches to appropriate Azure DevOps configuration

  4. API Request: Tool handler makes authenticated API request to Azure DevOps

  5. Response Processing: Response is formatted and returned to MCP client

Integration with Claude Code

This MCP server is designed to work seamlessly with Claude Code for Azure DevOps operations:

  1. Automatic Context Switching: When working in RiverSync or Mula project directories

  2. Transparent Authentication: No manual configuration required

  3. Rich Tool Set: Comprehensive Azure DevOps functionality

  4. Error Recovery: Graceful handling of authentication and network issues

Security Considerations

  • PAT tokens are stored in configuration files (ensure proper file permissions)

  • HTTPS is used for all Azure DevOps API communications

  • Authentication is handled per-request with proper token encoding

  • No token caching or persistence beyond configuration file

Troubleshooting

Common Issues

1. Installation Command Issues (Issue #14 Resolution)

Problem: Incorrect installation commands that fail to start the server

Root Cause: Outdated documentation showing incorrect command syntax

Solution: Use the correct installation command:

# ✅ Correct (RECOMMENDED)
claude mcp add devops-mcp -- -y @wangkanai/devops-mcp

# ❌ Incorrect (will fail)

Alternative working commands:

# Global installation method
npm install -g @wangkanai/devops-mcp
claude mcp add devops-mcp -- devops-mcp

2. Configuration Issues

  1. Configuration Not Found: Ensure .azure-devops.json exists in your project directory

  2. Authentication Errors: Verify PAT token permissions and expiration in your local configuration

  3. Directory Detection: Check that your project has a valid .azure-devops.json file

  4. API Errors: Verify Azure DevOps organization and project names in your local configuration

3. Installation Verification

Test your installation with these commands:

# Test server startup (build and run directly)
npm run build && node dist/index.js

# Verify MCP integration
mcp__devops-mcp__get-current-context

# Test work item creation
mcp__devops-mcp__create-work-item --type "Task" --title "Test Item"

Debug Mode

Enable debug logging by setting environment variable:

export DEBUG=devops-mcp
npm start

NPM Package Technical Details

  • Package Name: @wangkanai/devops-mcp

  • Binary Name: devops-mcp (auto-generated by NPM)

  • Latest Version: Check with npm view @wangkanai/devops-mcp version

  • Installation Verification: npm list -g @wangkanai/devops-mcp

License

MIT License - see LICENSE file for details.

Available Tools

10 tools
add-work-item-commentC

Add a comment to an existing work item in Azure DevOps

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWork item ID to add comment to
commentYesComment text to add

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool adds a comment but lacks critical details: whether this requires specific permissions, if it's a write operation (implied but not explicit), what happens on success/failure, or any rate limits. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly, with every part earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain behavioral aspects like authentication needs, error handling, or return values, leaving significant gaps for an AI agent to understand how to invoke it correctly in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with both parameters ('id' and 'comment') clearly documented in the schema. The description doesn't add any meaningful semantic context beyond what the schema provides (e.g., format of ID, comment length limits), so it meets the baseline for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a comment') and target resource ('to an existing work item in Azure DevOps'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling tools like 'update-work-item' that might also handle comments, missing explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing work item ID), exclusions, or comparisons to sibling tools like 'update-work-item' that might overlap in functionality, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-work-itemC

Create a new work item in Azure DevOps

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWork item type (e.g., Task, Bug, User Story)
titleYesWork item title
descriptionNoWork item description
assignedToNoEmail of the person to assign the work item to
tagsNoSemicolon-separated tags
parentNoParent work item ID for establishing hierarchy during creation
iterationPathNoIteration path for sprint assignment (e.g., ProjectName\Sprint 1)
stateNoInitial work item state (e.g., New, Active)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Create' implies a write operation, the description doesn't address permissions needed, whether creation is idempotent, what happens on failure, or what the response contains. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation and gets straight to the point with zero wasted verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 8 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation, what permissions are required, or how to handle errors. The agent would need to guess about the tool's behavior and output format based solely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter information beyond what's already in the schema, which has 100% coverage with detailed descriptions for all 8 parameters. The baseline score of 3 reflects that the schema adequately documents parameters, though the description could have provided additional context about parameter interactions or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('new work item in Azure DevOps'), making the purpose immediately understandable. It distinguishes this as a creation tool among siblings like 'update-work-item' and 'get-work-items', though it doesn't explicitly contrast with them in the description text itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'update-work-item' or 'get-work-items'. It doesn't mention prerequisites, dependencies, or contextual factors that would help an agent decide if this is the appropriate tool for a given situation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-buildsC

Get build definitions and recent builds

ParametersJSON Schema
NameRequiredDescriptionDefault
definitionIdsNoSpecific build definition IDs
topNoNumber of builds to return

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't cover key traits like whether it's read-only, requires authentication, has rate limits, returns paginated results, or what 'recent builds' means in terms of time range or sorting. This leaves significant gaps for an agent to understand operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words, front-loading the core purpose. It's appropriately sized for a simple retrieval tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool with 2 parameters and no behavioral context. It doesn't explain return values, error handling, or prerequisites, leaving the agent with insufficient information to use the tool effectively in complex scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters ('definitionIds' and 'top'). The description adds no additional meaning beyond the schema, such as explaining default behaviors or interactions between parameters. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, but the description doesn't enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resources ('build definitions and recent builds'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get-pipeline-status' or 'get-work-items', which also retrieve information but for different resources, so it lacks explicit sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get-pipeline-status' or 'get-work-items' that might overlap in context (e.g., CI/CD workflows), there's no indication of when this tool is preferred or what scenarios it's designed for, leaving usage ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-current-contextC

Get current Azure DevOps context based on directory

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNoDirectory path to check (defaults to current working directory)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool 'gets' context, implying a read-only operation, but doesn't disclose behavioral traits such as authentication requirements, rate limits, error conditions (e.g., invalid directory), or what 'context' includes (e.g., returns project ID, user info). For a tool with no annotations, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without unnecessary words. It's front-loaded with the main action and resource, making it easy to parse. Every part of the sentence earns its place by specifying Azure DevOps and the directory basis.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (context retrieval tool with no annotations and no output schema), the description is incomplete. It doesn't explain what 'context' means (e.g., project, repo, user details), the return format, or how this integrates with sibling tools. For a tool that likely provides foundational data for other operations, more context on its role and output is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter with 100% description coverage, documenting the directory path and default behavior. The description adds no additional parameter semantics beyond what's in the schema (e.g., doesn't explain how the directory influences context retrieval or format requirements). With high schema coverage, the baseline is 3, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('current Azure DevOps context'), specifying it's based on directory. It distinguishes from siblings like get-work-items or get-repositories by focusing on context rather than specific entities. However, it doesn't explicitly differentiate from all siblings (e.g., doesn't contrast with get-builds or get-pipeline-status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., Azure DevOps setup), when this context is needed (e.g., for other operations), or what 'context' entails (e.g., project, organization). With siblings like get-work-items or trigger-pipeline, there's no indication of how this tool fits into workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-pipeline-statusC

Get status of a specific build or pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
buildIdNoSpecific build ID to check status
definitionIdNoGet latest builds for this definition ID
includeTimelineNoInclude detailed timeline information

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but only states the basic action. It doesn't cover whether this is a read-only operation, what permissions are needed, how errors are handled, rate limits, or the format of the returned status. This leaves significant gaps for a tool that likely interacts with a CI/CD system.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words, making it easy to parse and front-loaded with the core purpose. It efficiently communicates the essential function without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of pipeline/status tools, no annotations, and no output schema, the description is insufficient. It lacks details on what the status includes (e.g., success/failure, stages), how to interpret results, or error conditions. This makes it incomplete for effective agent use in a real-world CI/CD context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the input schema fully documents the three parameters (buildId, definitionId, includeTimeline). The description adds no additional parameter semantics beyond what's in the schema, such as explaining relationships between parameters or usage examples, which aligns with the baseline score for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('status of a specific build or pipeline'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'get-builds' or 'trigger-pipeline' regarding when to use each, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get-builds' (which might list multiple builds) or 'trigger-pipeline' (which initiates builds). There's no mention of prerequisites, context, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-pull-requestsC

Get pull requests from Azure DevOps repository

ParametersJSON Schema
NameRequiredDescriptionDefault
repositoryIdNoRepository ID or name (optional, defaults to all repos)
statusNoPull request status filter (default: active)
createdByNoFilter by creator (user ID or email)
topNoNumber of pull requests to return (default: 25)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic operation without behavioral details. It doesn't disclose whether this is a read-only operation, potential rate limits, authentication requirements, pagination behavior, or error handling, which are critical for a data retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of retrieving pull requests (which often involves filtering, pagination, and authentication) and the absence of both annotations and an output schema, the description is insufficient. It lacks details on return format, error cases, or operational constraints, leaving significant gaps for effective tool use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so parameters like 'repositoryId', 'status', 'createdBy', and 'top' are well-documented there. The description adds no additional parameter semantics beyond implying filtering capabilities, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('pull requests from Azure DevOps repository'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential siblings like 'get-work-items' or 'get-builds' that might also retrieve Azure DevOps data, missing explicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., authentication), context for filtering, or comparisons to sibling tools like 'get-work-items' for different data types, leaving usage decisions ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-repositoriesC

Get repositories from Azure DevOps project

ParametersJSON Schema
NameRequiredDescriptionDefault
includeLinksNoInclude repository links in response

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether this is a read-only operation, if it requires authentication, rate limits, pagination, or what the response format looks like (e.g., list of repositories with details). This leaves significant gaps for a tool with potential complexity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It earns its place by clearly stating what the tool does, making it appropriately sized and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a simple parameter set, the description is incomplete. It lacks details on behavioral aspects (e.g., safety, response format) and doesn't compensate for the absence of structured data, making it inadequate for full agent understanding in a context with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with one parameter (includeLinks) fully documented in the schema. The description adds no additional parameter information beyond the schema, so it meets the baseline of 3 for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('repositories'), specifying the source ('from Azure DevOps project'). It distinguishes from siblings like get-builds or get-pull-requests by focusing on repositories. However, it doesn't specify scope (e.g., all repositories vs. filtered), which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get-work-items or get-pull-requests. The description implies usage for retrieving repositories but lacks context on prerequisites, filtering needs, or explicit exclusions, leaving the agent to infer based on tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-work-itemsC

Get work items from Azure DevOps

ParametersJSON Schema
NameRequiredDescriptionDefault
wiqlNoWork Item Query Language (WIQL) query
idsNoSpecific work item IDs to retrieve
fieldsNoFields to include in the response

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the action without disclosing behavioral traits such as whether it's read-only, requires authentication, has rate limits, returns paginated results, or handles errors. For a tool with 3 parameters and no annotations, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's appropriately sized for a simple tool, though it could be more front-loaded with key details. It earns its place but lacks depth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no annotations, no output schema), the description is incomplete. It doesn't cover return values, error handling, or behavioral context, leaving gaps for an AI agent to understand how to invoke it correctly. It should do more to compensate for the lack of structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters (wiql, ids, fields). The description adds no meaning beyond this, as it doesn't explain how parameters interact (e.g., wiql vs ids) or provide usage examples. Baseline is 3 since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the basic action ('Get work items') and source ('from Azure DevOps'), which provides a general purpose. However, it lacks specificity about what 'get' entails (e.g., list, retrieve, query) and doesn't distinguish it from siblings like 'create-work-item' or 'update-work-item' beyond the verb difference. It's vague but not tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention scenarios like querying with WIQL versus retrieving by IDs, or how it differs from other get-* tools (e.g., 'get-builds', 'get-pull-requests'). The description offers no context for selection, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger-pipelineC

Trigger a build pipeline in Azure DevOps

ParametersJSON Schema
NameRequiredDescriptionDefault
definitionIdNoBuild definition ID to trigger
definitionNameNoBuild definition name (alternative to ID)
sourceBranchNoSource branch to build (default: default branch)
parametersNoPipeline parameters as key-value pairs

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('trigger') but doesn't cover critical traits like whether this is a mutation (likely yes), authentication requirements, rate limits, side effects (e.g., starting a build consumes resources), or response format, leaving significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (triggering a build pipeline is a mutation with potential side effects), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects, usage context, or what to expect after invocation, which are crucial for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents all 4 parameters. The description adds no parameter-specific information beyond implying a pipeline is triggered, which is already covered by the tool name and purpose. Baseline 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('trigger') and resource ('build pipeline in Azure DevOps'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from potential siblings like 'get-builds' or 'get-pipeline-status' that might also interact with pipelines, missing explicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid definition), exclusions, or compare it to sibling tools like 'get-builds' for monitoring, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-work-itemC

Update an existing work item in Azure DevOps

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWork item ID to update
titleNoUpdated work item title
descriptionNoUpdated work item description
stateNoUpdated work item state (e.g., Active, Resolved, Closed)
assignedToNoEmail of the person to assign the work item to
parentNoParent work item ID for establishing hierarchy
iterationPathNoIteration path for sprint assignment (e.g., ProjectName\Sprint 1)
tagsNoSemicolon-separated tags
fieldsNoGeneric field updates as key-value pairs

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'update' implies a mutation operation, the description doesn't mention permission requirements, whether the update is partial or complete, what happens to unspecified fields, error handling, or response format. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states exactly what the tool does without unnecessary words. It's appropriately sized and front-loaded with the essential information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 9 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't address important contextual aspects like required permissions, partial vs complete updates, error scenarios, or what the tool returns. The agent lacks critical information needed to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, so all parameters are documented in the structured schema. The description adds no additional parameter information beyond what's already in the schema. According to the scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('existing work item in Azure DevOps'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'create-work-item' beyond the obvious 'update' vs 'create' distinction, nor does it mention other potential update-related tools that might exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing work item ID), when to use 'create-work-item' instead, or how this differs from other update-related operations that might be available. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updates
    • First observedadd-work-item-comment
    • First observedcreate-work-item
    • First observedget-builds
    • First observedget-current-context
    • First observedget-pipeline-status
    • First observedget-pull-requests
    • First observedget-repositories
    • First observedget-work-items
    • First observedtrigger-pipeline
    • First observedupdate-work-item

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific Azure DevOps resources and actions. For example, create-work-item, get-work-items, update-work-item, and add-work-item-comment form a coherent work item lifecycle without overlap, while get-builds, get-pipeline-status, and trigger-pipeline cover distinct pipeline operations. No tools appear to do the same thing.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with hyphens, using clear action verbs like 'get', 'create', 'update', 'add', and 'trigger' paired with specific nouns. There are no deviations in naming conventions, making the set predictable and readable throughout.

Tool Count5/5

With 10 tools, this server is well-scoped for Azure DevOps operations, covering work items, pipelines, repositories, and pull requests. Each tool earns its place by addressing a core DevOps workflow, avoiding both thin coverage and bloat.

Completeness4/5

The tool surface provides strong coverage for key Azure DevOps domains, including CRUD operations for work items and pipeline management. Minor gaps exist, such as no tools for creating or merging pull requests or managing repository branches, but agents can work around these with the available tools.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wangkanai/devops-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server