azure-devops MCP Server
The Azure DevOps MCP Server enables AI assistants to interact with Azure DevOps resources through the following operations:
Work Items: Create, list, and get work items with filtering capabilities by type, state, or assigned user.
Pull Requests: Create, list, get details, comment on, and fetch diffs for pull requests.
Wiki Pages: Create and edit wiki pages.
Projects: List all accessible projects and get details of specific projects.
Implemented using TypeScript, offering type-safe development of MCP server components
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., "@azure-devops MCP Serverlist active pull requests in the repository"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure DevOps MCP Server
An MCP (Model Context Protocol) server that provides integration with Azure DevOps, allowing AI assistants to interact with Azure DevOps work items, pull requests, and wikis.
Features
Work Items Management (create, list, get)
Pull Request Operations (create, list, get, comment, diff)
Wiki Page Management (create, edit)
Related MCP server: image-reader MCP Server
Setup
Install dependencies:
npm installConfigure environment variables (create a .env file):
AZURE_DEVOPS_ORG_URL=https://dev.azure.com/your-org
AZURE_DEVOPS_PAT=your-personal-access-token
AZURE_DEVOPS_PROJECT=default-project
AZURE_DEVOPS_REPOSITORY=default-repoBuild the server:
npm run buildInstallation
Add the server configuration to your MCP settings:
For VSCode
On macOS/Linux
Add to ~/.vscode/cline_mcp_settings.json or the Cursor/Roo equivalent:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": ["/path/to/azure-devops-mcp/build/index.js"],
"env": {
"AZURE_DEVOPS_ORG_URL": "your-org-url",
"AZURE_DEVOPS_PAT": "your-pat",
"AZURE_DEVOPS_PROJECT": "your-project",
"AZURE_DEVOPS_REPOSITORY": "your-repo"
},
"disabled": false,
"autoApprove": []
}
}
}On Windows
Add to %USERPROFILE%\.vscode\cline_mcp_settings.json or the Cursor/Roo equivalent:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": ["C:/path/to/azure-devops-mcp/build/index.js"],
"env": {
"AZURE_DEVOPS_ORG_URL": "your-org-url",
"AZURE_DEVOPS_PAT": "your-pat",
"AZURE_DEVOPS_PROJECT": "your-project",
"AZURE_DEVOPS_REPOSITORY": "your-repo"
},
"disabled": false,
"autoApprove": []
}
}
}Available Tools
Work Items
list_work_items
Lists work items in a project.
{
"project": string, // Required
"types"?: string[], // Optional: Filter by work item types
"states"?: string[], // Optional: Filter by states
"assignedTo"?: string // Optional: Filter by assigned user
}get_work_item
Get details of a specific work item.
{
"project": string, // Required
"id": number // Required: Work item ID
}create_work_item
Create a new work item.
{
"project": string, // Required
"type": string, // Required: e.g., "Task", "Bug"
"title": string, // Required
"description"?: string, // Optional
"assignedTo"?: string // Optional
}Pull Requests
list_pull_requests
List pull requests in a repository.
{
"status"?: "active" | "completed" | "abandoned" // Optional
}get_pull_request
Get details of a specific pull request.
{
"pullRequestId": number // Required
}create_pull_request
Create a new pull request.
{
"title": string, // Required
"description": string, // Required
"sourceBranch": string, // Required
"targetBranch": string, // Required
"reviewers"?: string[] // Optional: Array of reviewer email addresses
}create_pull_request_comment
Add a comment to a pull request.
{
"pullRequestId": number, // Required
"content": string, // Required
"threadId"?: number, // Optional: For replies
"filePath"?: string, // Optional: For file comments
"lineNumber"?: number, // Optional: For line comments
"status"?: "active"|"fixed"|"pending"|"wontfix"|"closed" // Optional: Thread status
}get_pull_request_diff
Get the diff for a pull request.
{
"pullRequestId": number, // Required
"filePath"?: string, // Optional: Specific file to get diff for
"iterationId"?: number // Optional: Specific iteration to get diff for
}Wiki
create_wiki_page
Create a new wiki page.
{
"project": string, // Required
"wiki": string, // Required
"path": string, // Required
"content": string // Required
}edit_wiki_page
Edit an existing wiki page.
{
"project": string, // Required
"wiki": string, // Required
"path": string, // Required
"content": string, // Required
"etag": string // Required: For concurrency control
}Development
Run in development mode with environment variables:
npm run devNote
Unless explicitly specified in the tool arguments, the project and repository parameters will use default values from your environment configuration.
Available Tools
12 toolscreate_pull_requestC
Create a new pull request
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | Description of the pull request | |
| reviewers | No | Array of reviewer email addresses | |
| sourceBranch | Yes | Source branch name | |
| targetBranch | Yes | Target branch name | |
| title | Yes | Title of the pull request |
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. 'Create a new pull request' implies a write operation, but it doesn't cover permissions needed, whether it's idempotent, error handling, or what happens on success (e.g., PR creation confirmation). This is a significant gap 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 with zero waste—'Create a new pull request' is front-loaded and appropriately sized for its purpose, earning full marks for conciseness and structure.
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 creating a pull request (a mutation with 5 parameters), no annotations, and no output schema, the description is incomplete. It lacks details on behavioral aspects, return values, or error cases, making it inadequate for guiding an agent effectively in this 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?
Schema description coverage is 100%, with all parameters documented in the schema (e.g., 'title', 'description', 'sourceBranch', 'targetBranch', 'reviewers'). The description adds no additional meaning beyond the schema, such as format examples or constraints, so it meets the baseline for high schema coverage without compensation.
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 'Create a new pull request' clearly states the action (create) and resource (pull request), which is better than a tautology. However, it doesn't differentiate from sibling tools like 'create_pull_request_comment' or 'create_work_item' beyond the resource name, making it somewhat vague about its specific domain within the system.
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., existing branches), exclusions, or comparisons to siblings like 'create_pull_request_comment' for adding comments or 'get_pull_request' for retrieval, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pull_request_commentC
Add a comment to a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Comment content | |
| filePath | No | File path for file-specific comments (optional) | |
| lineNumber | No | Line number for line-specific comments (optional) | |
| pullRequestId | Yes | ID of the pull request | |
| status | No | Thread status (optional) | |
| threadId | No | Thread ID for replies (optional) |
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 ('Add a comment') but doesn't cover critical traits: whether this requires specific permissions, if it's idempotent, what happens on errors, or the expected response format. For a mutation tool with zero annotation coverage, 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 that gets straight to the point with no wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place, achieving ideal conciseness for such a straightforward tool.
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 (a mutation with 6 parameters, no annotations, and no output schema), the description is incomplete. It doesn't address behavioral aspects like side effects, error handling, or return values, which are crucial for an agent to use it correctly. The high schema coverage helps, but the description fails to compensate for the lack of annotations and output 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-specific information beyond what's already in the input schema, which has 100% coverage. It doesn't explain how parameters interact (e.g., that 'filePath' and 'lineNumber' are for inline comments, or that 'threadId' is for replies). Since the schema does the heavy lifting, the baseline score of 3 is appropriate, but the description misses opportunities to clarify semantics.
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 a pull request'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools that might also involve pull request comments, such as 'edit_pull_request_comment' or 'delete_pull_request_comment', which aren't listed but could exist in other contexts.
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 pull request), exclusions (e.g., not for general discussions), or how it relates to sibling tools like 'create_pull_request' or 'get_pull_request'. This leaves 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.
create_wiki_pageC
Create a new wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Content of the wiki page | |
| path | Yes | Path of the wiki page | |
| project | Yes | Name of the Azure DevOps project | |
| wiki | Yes | Name of the wiki |
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 offers minimal information. It states this is a creation operation, implying it's a write/mutation tool, but doesn't cover critical aspects like required permissions, whether it overwrites existing pages, error conditions, or what happens on success. For a mutation tool with zero annotation coverage, 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 extremely concise with just four words ('Create a new wiki page'), making it front-loaded and efficient. Every word contributes directly to the core purpose without any wasted text, meeting the ideal standard for brevity in tool descriptions.
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 a creation tool with 4 required parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns, error handling, dependencies on other tools (like needing an existing project/wiki), or how it interacts with sibling tools. This leaves significant gaps for an AI agent to understand the full context of 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, with clear parameter descriptions (e.g., 'Content of the wiki page', 'Path of the wiki page'). The description adds no additional parameter semantics beyond what the schema already provides. According to the rules, when schema_description_coverage is high (>80%), the baseline score is 3 even with no param info in the description, which applies here.
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 'Create a new wiki page' clearly states the verb ('Create') and resource ('wiki page'), making the purpose immediately understandable. However, it doesn't differentiate from the sibling tool 'edit_wiki_page' beyond the basic action, missing an opportunity to clarify the distinction between creation and editing operations.
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. There's no mention of prerequisites (e.g., needing an existing project/wiki), when not to use it (e.g., for updating existing pages), or explicit alternatives like 'edit_wiki_page' for modifications. This leaves the agent without contextual usage instructions.
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
| Name | Required | Description | Default |
|---|---|---|---|
| assignedTo | No | User to assign the work item to | |
| description | No | Description of the work item | |
| project | Yes | Name of the Azure DevOps project | |
| title | Yes | Title of the work item | |
| type | Yes | Type of work item (e.g., 'Task', 'Bug') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'Create a new work item' implies a write/mutation operation, but it doesn't disclose any behavioral traits like required permissions, whether creation is idempotent, what happens on failure, or what the response contains. For a mutation tool with zero annotation coverage, this is a significant gap.
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 extremely concise at just 4 words, front-loading the core purpose without any wasted text. Every word earns its place: 'Create' (action), 'a new' (state), 'work item' (resource). There's no redundancy or 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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects (permissions, side effects), response format, or error handling. The schema handles parameters well, but for a creation operation, more context about what happens after invocation is needed for the agent to use it 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?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds no parameter information beyond what's in the schema—it doesn't explain relationships between parameters, provide examples, or clarify semantics. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't add value but doesn't need to compensate.
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 ('work item'), making the purpose immediately understandable. It distinguishes from sibling tools like 'get_work_item' or 'list_work_items' by specifying creation rather than retrieval. However, it doesn't specify what kind of work item system this is (Azure DevOps is only implied by the schema), so it's not fully specific.
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 project), when not to use it, or how it differs from similar creation tools like 'create_pull_request' or 'create_wiki_page'. 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.
edit_wiki_pageC
Edit an existing wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | New content of the wiki page | |
| etag | No | ETag for concurrency control | |
| path | Yes | Path of the wiki page | |
| project | Yes | Name of the Azure DevOps project | |
| wiki | Yes | Name of the wiki |
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 edits a wiki page, implying mutation, but doesn't disclose behavioral traits such as required permissions, concurrency handling (hinted by 'etag' parameter), rate limits, or what happens on failure. This leaves significant gaps for safe agent invocation.
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 and appropriately sized for its purpose, though it could benefit from additional context. Every word earns its place without redundancy.
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 (mutation tool with 5 parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral aspects like error handling, return values, and operational constraints. While the schema covers parameters, the overall context for safe and effective use is insufficient.
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 all 5 parameters. The description adds no meaning beyond the schema—it doesn't explain parameter interactions (e.g., how 'etag' prevents conflicts) or provide usage examples. Baseline is 3 since the schema handles parameter documentation adequately.
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 'Edit an existing wiki page' clearly states the action (edit) and resource (wiki page), but it's vague about scope and doesn't differentiate from sibling tools like 'create_wiki_page' or other editing tools. It lacks specificity about what aspects are edited (e.g., content only vs. metadata).
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 prerequisites (e.g., needing an existing page), exclusions (e.g., not for creating new pages), or comparisons to siblings like 'create_wiki_page'. The description implies usage but offers no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectC
Get details of a specific Azure DevOps project
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ID (GUID) of the project | |
| name | No | Name of the project |
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 tool retrieves details but doesn't describe the return format (e.g., JSON structure), error handling (e.g., if project not found), authentication requirements, or rate limits. This leaves significant gaps for an agent to understand how to interact with it effectively.
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, direct sentence that efficiently conveys the core purpose without unnecessary words. It is front-loaded with the key action and resource, making it easy to parse. There is no wasted verbiage or redundancy.
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 that likely returns structured data. It doesn't explain what 'details' include (e.g., project metadata, settings), how results are formatted, or potential side effects. For a read operation with two parameters, more context is needed to ensure reliable agent 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, documenting both parameters ('id' and 'name') with their types and purposes. The description adds no additional parameter information beyond what the schema provides, such as usage examples or constraints (e.g., only one parameter needed). This meets 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 details') and resource ('specific Azure DevOps project'), making the purpose immediately understandable. It distinguishes from siblings like 'list_projects' by focusing on a single project rather than listing multiple. However, it doesn't specify what details are included, 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 explicit guidance is provided on when to use this tool versus alternatives. While it implies usage for retrieving details of a known project, it doesn't mention prerequisites (e.g., needing project ID or name), compare it to 'list_projects' for discovery, or specify when not to use it (e.g., for bulk operations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestB
Get details of a specific pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pullRequestId | Yes | ID of the pull request |
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 it 'gets details' but doesn't specify what details are returned, whether it's read-only, requires authentication, or has rate limits. This is a significant gap for a 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 with no wasted words. It's appropriately sized and front-loaded, clearly stating the tool's purpose 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 low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. However, it lacks details on return values and behavioral traits, which are important for a tool with no annotations or output schema to guide the agent.
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 the parameter 'pullRequestId' fully documented in the schema. The description doesn't add any meaning beyond the schema, such as format examples or constraints, so it meets 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 verb ('Get details') and resource ('a specific pull request'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_pull_request_diff' or 'list_pull_requests', which limits its specificity.
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 siblings like 'list_pull_requests' for listing multiple PRs or 'get_pull_request_diff' for diff details, 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.
get_pull_request_diffC
Get the diff for a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | No | Specific file path to get diff for (optional) | |
| iterationId | No | Specific iteration to get diff for (optional) | |
| pullRequestId | Yes | ID of the pull request |
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 tool gets a diff but does not explain what the diff includes (e.g., patch format, line changes), whether it requires authentication, rate limits, or error handling. This is a significant gap for a tool with no 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 with zero waste. It is front-loaded and directly states the tool's purpose without unnecessary elaboration, making it highly concise 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 the complexity of a diff tool with no annotations and no output schema, the description is incomplete. It lacks details on the diff format, error cases, or behavioral traits, which are crucial for an agent to use the tool effectively. The schema covers parameters well, but overall context is insufficient.
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 all three parameters (pullRequestId, filePath, iterationId) with their types and optionality. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
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 ('diff for a pull request'), making the purpose understandable. However, it does not distinguish this tool from potential siblings like 'get_pull_request' (which might return metadata rather than diff content), leaving room for ambiguity in sibling 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. With siblings like 'get_pull_request' (likely for metadata) and 'list_pull_requests' (for listing), there is no indication of context, prerequisites, or exclusions, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_itemC
Get details of a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the work item | |
| project | Yes | Name of the Azure DevOps project |
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 this is a read operation ('Get details'), implying it's likely non-destructive, but doesn't disclose authentication needs, rate limits, error conditions, or return format. For a 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 with zero wasted words. It's appropriately sized and front-loaded with the core purpose, 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 no annotations, no output schema, and a read operation tool, the description is incomplete. It doesn't explain what details are returned, error handling, or contextual usage, leaving the agent with insufficient information for reliable 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%, with both parameters ('id' and 'project') documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 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 verb ('Get') and resource ('details of a specific work item'), making the purpose understandable. However, it doesn't differentiate this tool from similar siblings like 'get_work_item' vs 'list_work_items' or 'get_project', missing 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. It doesn't mention prerequisites, when-not scenarios, or compare to siblings like 'list_work_items' for multiple items or 'get_project' for project-level details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
List all accessible projects in the Azure DevOps organization
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 it's a list operation but doesn't describe return format, pagination, sorting, filtering, or access control details. 'Accessible projects' hints at permissions but lacks specifics. For a list tool with zero annotation coverage, this is insufficient.
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?
Single sentence, front-loaded with core action, zero waste. Every word earns its place: 'List' (action), 'all accessible projects' (scope/resource), 'Azure DevOps organization' (context). Efficient and 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 zero parameters, no output schema, and no annotations, the description is minimally adequate but lacks details on return format, pagination, or error handling. For a list operation in a complex DevOps context, more completeness would help agents use it 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 tool has 0 parameters with 100% schema description coverage (empty schema). The description doesn't need to compensate for missing param info, and it correctly implies no inputs are required. Baseline is 4 for zero-parameter tools when description aligns.
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 ('List') and resource ('all accessible projects'), specifying the scope ('in the Azure DevOps organization'). It distinguishes from siblings like 'get_project' (singular) and 'list_pull_requests' (different resource). However, it doesn't explicitly differentiate from other list tools like 'list_work_items' beyond resource name.
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 implies usage context ('accessible projects') but doesn't provide explicit guidance on when to use this vs. alternatives like 'get_project' for single project details or other list tools. No exclusions or prerequisites are mentioned, leaving usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pull_requestsC
List pull requests in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by PR status |
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 pagination, rate limits, authentication needs, or output format. For a list operation with no annotations, this is inadequate.
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 is 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 tool's complexity (list operation with filtering), lack of annotations, and no output schema, the description is incomplete. It fails to explain return values, error handling, or other contextual details needed for effective 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?
Schema description coverage is 100%, with one parameter ('status') fully documented in the schema. The description adds no additional meaning about parameters beyond what the schema provides, so it meets the baseline of 3 without compensating or detracting.
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 'List pull requests in a repository' states the verb ('List') and resource ('pull requests'), providing a basic purpose. However, it lacks specificity about scope (e.g., all PRs vs. filtered) and does not distinguish it from sibling tools like 'get_pull_request' (which likely fetches a single PR). This makes it 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?
The description offers no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'get_pull_request' for single PRs or 'list_projects' for broader context, nor does it specify prerequisites (e.g., repository access). This leaves usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_work_itemsC
List work items in a project
| Name | Required | Description | Default |
|---|---|---|---|
| assignedTo | No | Filter by assigned user | |
| project | Yes | Name of the Azure DevOps project | |
| states | No | Filter by states | |
| types | No | Filter by work item types |
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 ('List') but doesn't describe whether this is a read-only operation, if it requires authentication, what the return format looks like (e.g., pagination, fields included), or any rate limits. This is a significant gap for a tool with multiple parameters and no output schema.
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 appropriately sized for its purpose 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 (4 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain behavioral aspects like safety, return values, or usage context. While the schema covers parameters well, the lack of annotations and output schema means the description should provide more context to be fully helpful.
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 already documents all parameters (assignedTo, project, states, types) with descriptions. The description adds no additional meaning beyond implying filtering capabilities, which is already covered in the schema. Baseline 3 is appropriate as 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 clearly states the verb ('List') and resource ('work items in a project'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_work_item' (which retrieves a single item) or 'list_projects' (which lists projects instead of work items), missing 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. It doesn't mention sibling tools like 'get_work_item' for single items or 'list_projects' for projects, nor does it specify prerequisites or context for filtering work items, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose targeting specific resources and actions in Azure DevOps. For example, create_pull_request vs. create_pull_request_comment vs. get_pull_request_diff are all related to pull requests but handle different operations, with no overlapping functionality that would cause confusion.
All tool names follow a consistent verb_noun pattern with snake_case throughout, such as create_pull_request, list_projects, and get_work_item. The naming is predictable and readable, with no deviations in style or convention.
With 12 tools, this server is well-scoped for Azure DevOps operations, covering core areas like projects, pull requests, work items, and wiki pages. Each tool earns its place without feeling excessive or insufficient for the domain.
The tool set provides strong coverage for key workflows in Azure DevOps, including CRUD operations for pull requests, work items, and wiki pages, plus project listing and details. Minor gaps exist, such as missing update or delete operations for pull requests and work items, but agents can likely work around these with 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
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
An MCP server that used to create notes
A simple Typescript MCP server built using the official MCP Typescript SDK and smithery/cli. This…
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Related MCP Servers
- FlicenseBqualityDmaintenanceA simple TypeScript-based MCP server that implements a notes system, allowing users to create, list, and generate summaries of text notes via Claude.13
- AlicenseAqualityDmaintenanceA TypeScript-based MCP server that implements a simple notes system, allowing creation and management of text notes with URIs and metadata.49MIT
- FlicenseBqualityDmaintenanceA TypeScript-based MCP server that implements a simple notes system, allowing users to create, access, and generate summaries of text notes.23
- AlicenseAqualityFmaintenanceA TypeScript-based MCP server that implements a simple notes system, allowing users to create, access, and generate summaries of text notes via URIs and tools.12188MIT
Appeared in Searches
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/mmruesch12/azdo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server