MCP Azure DevOps Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Azure DevOps ServerGet pipeline variables for MyProject"
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.
MCP Azure DevOps Server
MCP server for Azure DevOps Git operations integration with AWS Q.
Setup
Install dependencies:
npm installConfigure environment variables:
cp .env.example .env
# Edit .env with your Azure DevOps detailsđŸ“‹ For detailed configuration steps, see CONFIGURATION.md
Build and run:
npm run build
npm startRelated MCP server: Ares DevOps MCP Server
Configuration for AWS Q
Option 1: Use the provided config file
Copy mcp_config.json to your AWS Q MCP configuration directory.
Option 2: Manual configuration
Add to your AWS Q MCP client configuration:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": ["c:/Users/somesh.rajasekar/Apps/mcp-azure-devops/dist/index.js"],
"env": {
"AZURE_DEVOPS_ORG_URL": "your-org-url",
"AZURE_DEVOPS_PAT": "your-pat-token"
}
}
}
}Usage in AWS Q
Once configured, use these commands in AWS Q chat:
Search repositories: "Search for any repository"
Get repository info: "Get repository info for any repo"
Get pipeline variables: "Get pipeline variables for MyProject"
Get variable groups: "Get variable groups for MyProject"
Available Tools
Repository Operations
search_repositories- Search for repositories across all projects with branch info and latest PROD/QA deploymentsget_repository_info- Get repository URL, branches with latest check-in dates, and latest PROD/QA deployment information
Pipeline Variables
get_pipeline_variables- Get variables from build/release pipelines (supports filtering by pipeline name and type)get_variable_groups- Get variable groups from a project (supports filtering by group name)
Available Tools
4 toolsget_pipeline_variablesB
Get pipeline variables from build/release pipelines
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| pipelineName | No | Pipeline name (optional - will list all if not provided) | |
| pipelineType | No | Pipeline type: build or release |
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 the action and resource but does not disclose what happens when pipelineName is omitted, whether the tool returns all variables, or any permission/read-only guarantees. The description adds minimal behavioral context beyond the basic operation.
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 short sentence with no filler. The verb and object are front-loaded, and the source scope is expressed efficiently. Every word contributes meaning, making it appropriately concise.
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 simple read-only getter with fully described parameters, the description is adequate but thin. It does not explicitly mention that omitting pipelineName lists all pipelines, nor does it describe the return value shape. Since there is no output schema, some important contextual details rely on the input schema or inference.
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 baseline is 3. The description does not add meaning beyond the schema—it only paraphrases the pipelineType enum by saying 'build/release pipelines'. No additional insight into project or pipelineName semantics is provided.
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 uses a specific verb ('Get') and resource ('pipeline variables') and scopes it to 'build/release pipelines'. This clearly distinguishes it from siblings like get_variable_groups or repository tools. The purpose is immediately recognizable and unambiguous.
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?
There is no guidance on when to use this tool versus alternatives such as get_variable_groups. The description does not state any decision rules, exclusions, or context for choosing this tool. The 'build/release pipelines' scope is implied rather than explicitly positioned against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_infoA
Get repository URL, branches with latest check-in dates, and latest PROD/QA deployment information
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name (optional - will search if not provided) | |
| repository | Yes | Repository name |
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 does reveal what data the tool returns, which is useful, but it does not explicitly confirm the operation is read-only, mention permission requirements, or describe error/failure behavior. This is partial but not misleading.
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, front-loaded sentence with no filler or redundancy. It lists the main outputs in a compact, scannable way, making it easy for an agent 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?
For a two-parameter read tool with no output schema, the description adequately covers the key return items (URL, branches, deployment info). The schema handles the parameter semantics, including the optional 'project' search behavior. Missing error-handling or edge-case details are not critical for basic invocation.
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%: both 'project' and 'repository' are already described in the input schema. The tool description adds no extra meaning beyond what the schema provides, so the baseline score of 3 applies.
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 verb 'Get' and names specific resources: repository URL, branches with latest check-in dates, and latest PROD/QA deployment information. This makes the tool's function concrete and distinct from sibling tools like search_repositories and get_pipeline_variables / get_variable_groups.
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 explicit guidance is given about when to use this tool versus its siblings, nor are there any exclusions or prerequisites mentioned. The description implies use when repository details are needed, but leaves the decision entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_variable_groupsC
Get variable groups from a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| groupName | No | Variable group name (optional - will list all if not provided) |
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. It only says 'Get variable groups' and does not disclose whether it returns one or many, whether permissions are needed, whether groupName filters results, or what the response shape is.
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 concise sentence with no filler. It front-loads the core action and resource, though it could have added a brief note about the optional groupName behavior without bloating it.
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 simple two-parameter read tool with full schema coverage, the description is minimally adequate. However, with no output schema and no annotations, it lacks return-format details and any context about how this relates to similar 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?
Schema description coverage is 100%, so the parameters are already documented in the schema. The description adds no additional parameter-level meaning, but it does not need to since the schema covers both project and groupName.
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?
Description states a clear verb ('Get') and resource ('variable groups'), scoped to 'a project'. It is distinct enough from siblings like get_pipeline_variables by naming the specific resource, though it does not explicitly call out the difference.
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?
There is no guidance on when to use this tool versus alternatives such as get_pipeline_variables or search_repositories. The description implies use when variable groups are needed, but it does not state exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_repositoriesA
Search for repositories across all projects
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Repository name or partial name to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. 'Search' and 'across all projects' convey a read-only, project-spanning behavior, but the description does not say what is returned, whether results are limited/paginated, or if any access considerations apply.
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?
One short sentence that front-loads the action and scope with zero filler. 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 simple one-parameter search tool, the description plus schema is nearly complete: the agent knows what to search for, that it spans all projects, and how to supply the query. A note on the expected result shape would make it fully complete, but the absence is a minor gap given the tool's simplicity.
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 fully documents the single query parameter with a clear description ('Repository name or partial name to search for'), so the tool description adds no parameter-level meaning beyond the schema. The baseline of 3 applies.
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 uses a specific verb ('Search'), names the resource ('repositories'), and explicitly scopes the action to 'across all projects'. This distinguishes it from the sibling get_repository_info, which suggests fetching details for a known repository rather than searching broadly.
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?
There is no guidance on when to choose this tool over the siblings. No mention of using get_repository_info for a known repository or of project-specific alternatives, so an agent must infer the decision context 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.
4 tool updates
v1.0.0- First observed
get_pipeline_variables - First observed
get_repository_info - First observed
get_variable_groups - First observed
search_repositories
TDQS
Scored across 4 tools
Repository-related tools and variable-related tools are clearly separated, and the descriptions clarify their scope. The only mild ambiguity is between get_pipeline_variables and get_variable_groups, but their descriptions differentiate pipeline-scoped variables from project-level variable groups.
All tool names follow a consistent get_/search_ + noun pattern, making the naming predictable and easy to navigate. There is no mixing of conventions or vague verbs.
Four tools is slightly thin for a server claiming Azure DevOps coverage, but each tool covers a distinct read-only concern. The count is acceptable for a focused utility server, though not richly scoped.
The server only covers limited read operations for repositories, pipeline variables, and variable groups. Major Azure DevOps areas like work items, build/release execution, pull requests, and commits are entirely absent, leaving significant gaps for common agent workflows.
Maintenance
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…
MCP server for Appcircle mobile CI/CD platform.
MCP Server for JFrog, providing tools for development and artifact management.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that provides seamless interaction with Azure DevOps Git repositories, enabling users to manage repositories, branches, pull requests, and pipelines through natural language.811 npm3-
- FlicenseNot gradedqualityNot gradedmaintenanceEnables seamless interaction with Azure DevOps for managing Git repositories, branches, and pull requests through natural language. It also supports automating and monitoring pipelines while providing secure, type-safe operations within MCP-compatible clients.11 npm-
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI assistants to manage Azure DevOps resources including Work Items, Git repositories, pipelines, and user identities.11 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP 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.-