DevOps Enhanced MCP
The DevOps Enhanced MCP server provides dynamic, context-aware integration with Azure DevOps, enabling seamless management across multiple organizations and projects based on your current working directory.
Key Capabilities:
Dynamic Context Switching: Automatically switches Azure DevOps authentication and project context based on current directory using local
.azure-devops.jsonconfiguration filesWork Item Management: Create, update, and query work items with full hierarchy support (Epic → Feature → User Story → Task), including WIQL queries, field selection, commenting, and sprint management via iteration paths
Repository & Pull Request Operations: List repositories and manage pull requests with filtering by status, creator, and repository
Build & Pipeline Automation: Retrieve build definitions, trigger pipelines with parameters, monitor build status, and access detailed timeline information
Multi-Project Support: Work with unlimited Azure DevOps projects simultaneously with separate authentication and secure PAT token storage
Robust Error Handling: Comprehensive error handling for configuration, authentication, API, and network issues with graceful fallback mechanisms
Click on "Install 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., "@DevOps Enhanced MCPshow me the open pull requests for the current project"
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
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.jsonconfigurationDynamic 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.jsonExample Projects
RiverSync Project
Directory:
/Users/wangkanai/Sources/riversyncConfiguration:
.azure-devops.jsonwith RiverSync organization settings
Mula Project
Directory:
/Users/wangkanai/Sources/mulaConfiguration:
.azure-devops.jsonwith Mula organization settings
Installation
Claude Code Installation (Recommended)
# Install and add to Claude Code MCP
claude mcp add devops -- npx -y @wangkanai/devops-mcpNote: The
-yflag 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.jsonWindows:
%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:
Exact Match: Direct match of configured directory paths
Nested Directory Support: Detects parent project directories
Longest Match Priority: Most specific directory match takes precedence
Parent Directory Search: Searches up the directory tree for matches
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.jsonExample Projects
RiverSync Project
Directory:
/Users/wangkanai/Sources/riversyncConfiguration:
.azure-devops.jsonwith RiverSync organization settings
Mula Project
Directory:
/Users/wangkanai/Sources/mulaConfiguration:
.azure-devops.jsonwith 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
Enhanced Validation System (Recommended)
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.json2. 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 --help3. Manual Testing
# Build and test the server manually
npm run build
node test-server.jsConfiguration 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.jsonfile 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
Tool Call Received: MCP client sends tool call request
Context Detection: Directory detector identifies current project context
Configuration Switch: Server switches to appropriate Azure DevOps configuration
API Request: Tool handler makes authenticated API request to Azure DevOps
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:
Automatic Context Switching: When working in RiverSync or Mula project directories
Transparent Authentication: No manual configuration required
Rich Tool Set: Comprehensive Azure DevOps functionality
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-mcp2. Configuration Issues
Configuration Not Found: Ensure
.azure-devops.jsonexists in your project directoryAuthentication Errors: Verify PAT token permissions and expiration in your local configuration
Directory Detection: Check that your project has a valid
.azure-devops.jsonfileAPI 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 startNPM Package Technical Details
Package Name:
@wangkanai/devops-mcpBinary Name:
devops-mcp(auto-generated by NPM)Latest Version: Check with
npm view @wangkanai/devops-mcp versionInstallation Verification:
npm list -g @wangkanai/devops-mcp
License
MIT License - see LICENSE file for details.
Available Tools
10 toolsadd-work-item-commentC
Add a comment to an existing work item in Azure DevOps
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID to add comment to | |
| comment | Yes | Comment text to add |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Work item type (e.g., Task, Bug, User Story) | |
| title | Yes | Work item title | |
| description | No | Work item description | |
| assignedTo | No | Email of the person to assign the work item to | |
| tags | No | Semicolon-separated tags | |
| parent | No | Parent work item ID for establishing hierarchy during creation | |
| iterationPath | No | Iteration path for sprint assignment (e.g., ProjectName\Sprint 1) | |
| state | No | Initial work item state (e.g., New, Active) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| definitionIds | No | Specific build definition IDs | |
| top | No | Number of builds to return |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Directory path to check (defaults to current working directory) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Specific build ID to check status | |
| definitionId | No | Get latest builds for this definition ID | |
| includeTimeline | No | Include detailed timeline information |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| repositoryId | No | Repository ID or name (optional, defaults to all repos) | |
| status | No | Pull request status filter (default: active) | |
| createdBy | No | Filter by creator (user ID or email) | |
| top | No | Number of pull requests to return (default: 25) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| includeLinks | No | Include repository links in response |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| wiql | No | Work Item Query Language (WIQL) query | |
| ids | No | Specific work item IDs to retrieve | |
| fields | No | Fields to include in the response |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| definitionId | No | Build definition ID to trigger | |
| definitionName | No | Build definition name (alternative to ID) | |
| sourceBranch | No | Source branch to build (default: default branch) | |
| parameters | No | Pipeline parameters as key-value pairs |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID to update | |
| title | No | Updated work item title | |
| description | No | Updated work item description | |
| state | No | Updated work item state (e.g., Active, Resolved, Closed) | |
| assignedTo | No | Email of the person to assign the work item to | |
| parent | No | Parent work item ID for establishing hierarchy | |
| iterationPath | No | Iteration path for sprint assignment (e.g., ProjectName\Sprint 1) | |
| tags | No | Semicolon-separated tags | |
| fields | No | Generic field updates as key-value pairs |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
- First observed
add-work-item-comment - First observed
create-work-item - First observed
get-builds - First observed
get-current-context - First observed
get-pipeline-status - First observed
get-pull-requests - First observed
get-repositories - First observed
get-work-items - First observed
trigger-pipeline - First observed
update-work-item
TDQS
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.
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.
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.
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
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
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
A MCP server built for developers enabling Git based project management with project and personal…
Devopness MCP server for DevOps happiness! Empower AI Agents to deploy apps and infra, to any cloud.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Azure DevOps services including work items, repositories, pipelines, wikis, and test plans through a local MCP server that provides direct access to Azure DevOps REST APIs from your code editor.82,447MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that enables AI assistants to manage Azure DevOps resources including Work Items, Git repositories, pipelines, and user identities.34MIT
- AlicenseNot gradedqualityBmaintenanceMulti-user wrapper around Microsoft's Azure DevOps MCP server, enabling AI agents to authenticate per-user and interact with Azure DevOps tools via isolated PATs.1,028MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that provides tools to interact with Azure DevOps, including querying work items, repositories, pull requests, builds, commits, and creating work items via a standardized interface.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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