Azure DevOps MCP 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., "@Azure DevOps MCP Serverlist recent builds for Project Alpha"
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
A READ-ONLY MCP (Model Context Protocol) server that connects AI assistants to Azure DevOps Server (on-premises). Works with Claude Code CLI, VS Code AI extensions (Continue, Cline), Cursor, and any MCP-compatible client.
Features
Projects: List and explore projects
Git/Repos: Browse repositories, commits, branches, pull requests, diffs, and code search
Builds: List builds, view logs, analyze errors
Work Items: Query work items, find linked commits/PRs
Releases: View releases and deployment status
Pipelines: List YAML pipelines, view runs, get pipeline configuration
Test Results: View test runs, results, and analyze failures
Related MCP server: mcp-devops-onpremise
Prerequisites
Node.js 18 or higher
Azure DevOps Server 2020 or 2022 (on-premises)
Personal Access Token (PAT) with read scopes
Installation
Option 1: npm (Recommended)
npx azure-devops-mcp@latestOption 2: Clone and Build
git clone https://github.com/elad-nofy/azure-devops-mcp.git
cd azure-devops-mcp
npm install
npm run buildConfiguration
Create a Personal Access Token (PAT)
Go to Azure DevOps Server
Click on your profile icon > Security > Personal access tokens
Create a new token with the following scopes:
Code: Read
Build: Read
Work Items: Read
Release: Read
Test Management: Read
Configure MCP Client
Claude Code CLI
Add to your global settings (~/.claude.json on macOS/Linux, %USERPROFILE%\.claude.json on Windows):
Windows:
{
"mcpServers": {
"azure-devops": {
"command": "cmd",
"args": ["/c", "npx", "azure-devops-mcp"],
"env": {
"AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
"AZURE_DEVOPS_PAT": "your-personal-access-token",
"AZURE_DEVOPS_COLLECTION": "YourCollection",
"AZURE_DEVOPS_PROJECT": "YourDefaultProject"
}
}
}
}macOS / Linux:
{
"mcpServers": {
"azure-devops": {
"command": "npx",
"args": ["azure-devops-mcp"],
"env": {
"AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
"AZURE_DEVOPS_PAT": "your-personal-access-token",
"AZURE_DEVOPS_COLLECTION": "YourCollection",
"AZURE_DEVOPS_PROJECT": "YourDefaultProject"
}
}
}
}VS Code (Continue/Cline)
Add similar configuration to the extension's MCP settings.
Environment Variables
Variable | Required | Description |
| Yes | Server base URL (e.g., |
| Yes | Personal Access Token |
| No | Collection name (default: |
| No | Default project for commands |
Available Tools
Projects
Tool | Description |
| Test connection to Azure DevOps and verify authentication |
| List all projects in the organization |
| Get detailed project information |
Git / Repositories
Tool | Description |
| List repositories in a project |
| List branches in a repository |
| Get commit history with filters |
| Get commit details with changes |
| Get file diff for a commit |
| List pull requests |
| Get PR details with comments |
| Compare two branches (regression analysis) |
| Search for text in repository files |
| Get file content from a repo at a specific branch/commit |
| Find commits referencing a work item |
| Find PRs linked to a work item |
Builds
Tool | Description |
| List recent builds |
| Get build details |
| Get build logs |
| List build definitions |
| Extract errors from failed builds |
Work Items
Tool | Description |
| Search work items (WIQL or filters) |
| Get work item details |
| List available work item types |
| List iterations/sprints in a project |
| List area paths in a project |
Releases
Tool | Description |
| List releases |
| Get release details |
| List release definitions |
| Get deployment logs |
Pipelines
Tool | Description |
| List YAML pipelines |
| Get recent pipeline runs |
| Get pipeline YAML configuration |
| Get pipeline variables |
Test Results
Tool | Description |
| List test runs in a project |
| Get test run details |
| Get test results from a run |
| Get failed tests from a run |
| Get test runs for a specific build |
| Analyze and group test failures |
Usage Examples
Once configured, you can ask your AI assistant questions like:
"Show me the recent builds for project X"
"What's the status of PR #123?"
"List all bugs assigned to me"
"Show me the commits from last week"
"Why did build #456 fail?"
"What tests failed in build #789?"
"Compare branches Dev/9.1 and Dev/9.2"
"Search for 'IMediator' in the Controllers folder"
Development
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run devTroubleshooting
Connection errors
Verify
AZURE_DEVOPS_URLis correct and accessibleCheck if your PAT has not expired
Ensure your network allows connection to the server
Permission errors
Verify PAT has required scopes
Check if you have access to the project/repository
"Project is required" errors
Set
AZURE_DEVOPS_PROJECTenvironment variable, orPass
projectparameter in tool calls
License
MIT
Available Tools
39 toolsanalyze_build_errorsA
Analyze a failed build and extract errors, warnings, and issues from logs
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID to analyze |
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 mentions analyzing and extracting, hinting at a read-only operation, but does not disclose potential side effects, permissions, handling of successful builds, or return format. This is a significant gap for a tool with no annotation support.
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 that directly states the tool's action and focus. Every word contributes value with no redundancy or filler.
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?
The description covers the core function but lacks crucial context due to missing annotations and lack of an output schema. It does not explain what the extracted errors/warnings look like, how edge cases (e.g., successful builds) are handled, or any prerequisites. It is minimally viable but not fully complete for an agent to invoke with confidence.
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% for both parameters (buildId and project), so the schema already documents their purpose. The description adds no extra parameter-level meaning beyond what the schema provides, keeping the baseline at 3.
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 specific verbs 'analyze' and 'extract' with a clear resource ('failed build') and outcome ('errors, warnings, and issues from logs'), distinguishing it from sibling tools like get_build_logs which simply retrieve logs.
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 phrase 'failed build' implies the tool is intended for builds that have failed, but no explicit guidance is given about when to use it over sibling tools like get_build_logs or analyze_test_failures. Context is implied but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_test_failuresB
Analyze test failures in a build - groups failures by error type
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID to analyze |
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 discloses only that failures are grouped by error type, but fails to mention output format, read-only nature, permissions, or any side effects. This leaves significant uncertainty about the tool's 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, directly relevant sentence that front-loads the verb and object. No fluff 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?
With no output schema and no annotations, the description fails to explain what the returned analysis looks like (e.g., counts, error type categories, or sample structure). An agent cannot reliably interpret the result or fully understand the tool's scope.
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% (buildId: 'Build ID to analyze', project: 'Project name'). The description adds little beyond the schema's parameter descriptions, so it meets the baseline of 3.
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?
States clear verb 'analyze' with object 'test failures in a build' and adds distinguishing detail 'groups failures by error type' which differentiates it from sibling tools like get_failed_tests (raw list) and analyze_build_errors (build errors). Concise and 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?
Implies usage for analyzing test failures within a build, but provides no explicit when-to-use guidance, exclusions, or references to alternatives. Given sibling tools exist, this is a missed opportunity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_branchesA
Compare two branches - shows commits in target that are not in base (useful for regression analysis)
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| baseBranch | Yes | Base branch (e.g., "main" or "refs/heads/main") | |
| targetBranch | Yes | Target branch to compare (e.g., "develop") | |
| top | No | Max commits to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It explains the directional filtering (commits in target not in base), but does not explicitly state that the operation is read-only, mention side effects, permissions, or output limitations like pagination defaults.
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 that is direct and informative. The parenthetical use case adds value without unnecessary fluff.
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?
The description covers the primary behavior and use case, and the schema fully documents all parameters. However, with no annotations or output schema, some details like result ordering or the role of the 'top' parameter default are left implicit. Overall, the combination is adequate but not exhaustive.
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 coverage is 100%, and the description adds semantic meaning by clarifying how baseBranch and targetBranch relate to the output ('commits in target that are not in base'). It does not elaborate on optional parameters, but those are already described in the schema.
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 function with a specific verb ('Compare'), the resource ('two branches'), and the exact result ('shows commits in target that are not in base'). This differentiates it from sibling tools like list_commits and get_commit_diff.
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 a clear context for use ('useful for regression analysis') but does not explicitly mention alternatives or when not to use this tool. This fits 'clear context, no exclusions' on the scale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_buildA
Get detailed information about a specific build
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID |
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 merely restates the tool's name ('get' -> 'Get') and adds the vague term 'detailed information'. It does not mention the return format, required permissions, or any other behavioral characteristics, which is a significant gap for a tool with no structured safety hints.
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 waste. Every word contributes to the core purpose, making it highly efficient and easy to parse.
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, single-resource get tool, the description adequately states the main purpose. However, with no output schema and only 2 parameters, it would benefit from listing common fields returned or noting that 'project' is optional. The current level is minimally complete but not rich.
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 describes both parameters (buildId and project) with 100% coverage. The description adds no extra meaning beyond what the schema already provides, so the baseline of 3 applies. No further details about parameter relationships or formats are given.
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 'Get detailed information about a specific build', which is a specific verb+resource pair. It distinguishes from sibling tools like list_builds (list all) and get_build_logs (logs), so an agent can identify its unique purpose.
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?
Usage is implied by 'specific build' — it requires a buildId. However, no explicit guidance is given on when to prefer this over list_builds or get_build_logs, nor are any alternatives or exclusions mentioned. This is a minimum viable level but lacks proactive direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_build_logsB
Get build logs - useful for analyzing build errors and failures
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID | |
| logId | No | Specific log ID (omit to get log list first) |
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 states 'Get build logs' without disclosing return format, pagination, auth requirements, or other behavioral details. 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, front-loaded sentence with no excess words. It efficiently communicates the verb, resource, and a primary use case.
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 output schema, no annotations, and a very brief description, the tool lacks essential context about return values and how it relates to sibling tools like get_build or analyze_build_errors. The minimal description is insufficient for an agent to fully understand the tool's behavior.
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?
All three parameters are fully described in the schema (100% coverage), so the description doesn't need to add parameter details. The description adds no extra meaning beyond the schema, so the baseline 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 uses a specific verb ('Get') and resource ('build logs') and adds the use case of analyzing build errors. It clearly states what the tool does, but doesn't explicitly differentiate from sibling tools like analyze_build_errors, so it falls short of a 5.
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 phrase 'useful for analyzing build errors and failures' provides a clear context for when to use the tool, but it doesn't mention alternatives or exclusions. This is implied usage rather than explicit guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commitB
Get detailed information about a specific commit including changes
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| commitId | Yes | Full commit SHA | |
| includeChanges | No | Include file changes |
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 that changes are included, but does not describe return format, pagination, error conditions, or any read-only guarantees. This is a minimal disclosure for an information 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, concise sentence that front-loads the primary action and key detail. Every word contributes meaning, and there is no redundancy or filler.
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?
The tool has no output schema and no annotations, but is a simple read operation with fully documented parameters. The description is adequate but sparse; it does not explain what 'detailed information' includes or what 'changes' refers to, leaving some ambiguity for a new 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?
Schema description coverage is 100%, so the parameter names and descriptions already fully document each field. The description's mention of 'including changes' does not add new meaning beyond the existing includeChanges parameter description. Thus 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 'Get detailed information about a specific commit including changes' uses a specific verb ('Get') and resource ('a specific commit'), clearly distinguishing it from list-oriented siblings like list_commits. It also hints at a key feature (including changes) that differentiates it from get_commit_diff.
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 explicit guidance on when to use this tool versus alternatives such as get_commit_diff or list_commits. The description simply states what it does, leaving the agent to infer usage context without exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commit_diffA
Get the diff/changes for a file in a commit
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| commitId | Yes | Commit SHA | |
| path | Yes | File path to get diff for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must rely on the verb 'Get' to convey a read-only operation. It does not disclose additional behavioral details such as output format, potential size limits, or authentication requirements, but it also does not mislead. It meets the minimum for a simple read 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, front-loaded sentence that is perfectly sized. It states the essential purpose without any filler, 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 simple read tool with fully documented parameters, the description is minimally adequate. It does not describe the return format (since no output schema exists) or provide explicit usage guidance, but it captures the tool's core function completely enough for a straightforward operation.
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 already has 100% description coverage for all parameters (path, project, commitId, repository). 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 identifies the action ('Get') and the specific resource ('diff/changes for a file in a commit'). This distinguishes it from siblings like get_commit (commit details) and compare_branches (branch-to-branch diffs), making the tool's purpose 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?
The description provides clear context: it is for retrieving a file-level diff within a given commit. While it does not explicitly name alternative tools or list exclusions, the wording implies when to use it, e.g., 'for a file' distinguishes it from whole-commit or branch diff tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commits_for_work_itemA
Find commits associated with a work item ID (searches commit messages for #ID)
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| workItemId | Yes | Work item ID to search for | |
| top | No | Max commits 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. It discloses the non-obvious search mechanism (commit messages, #ID format), but does not describe return format, pagination behavior, or limitations (e.g., commits that don't include the #ID won't be found). This is adequate but leaves some 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, front-loaded sentence that states the purpose and method without any filler. Every word contributes to understanding.
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 output schema and no annotations, the description covers the essential semantics of the tool. It explains what it finds and how. It could mention the return format explicitly, but the name 'get_commits' implies a list of commits, and the schema parameters are already described. Overall sufficiently complete.
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 coverage is 100%, so the baseline is 3. The description adds meaningful value by specifying the '#ID' convention, clarifying how workItemId is matched against commit messages—something not obvious from the schema alone.
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 'Find' with a clear resource ('commits') and association ('work item ID'), and explains the mechanism ('searches commit messages for #ID'). This distinguishes it from siblings like list_commits (which lists all commits) and get_prs_for_work_item (which finds PRs).
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 clearly implies when to use the tool: when you need commits associated with a work item via a #ID reference. It doesn't explicitly mention exclusions or alternatives, but the sibling list makes the differentiation obvious, and the mechanism provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failed_testsA
Get failed tests from a test run - useful for investigating failures
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Get' clearly implies a read-only operation, but no details are given about return format, pagination, or any side effects. The phrase 'useful for investigating failures' adds minimal behavioral context.
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?
Description is a single sentence of 12 words, front-loaded with the action and resource. Every word earns its place, with no filler or repetition.
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?
The tool is low in complexity with two parameters, but there is no output schema and the description does not indicate what a 'failed test' record includes (e.g., test name, error message). The description is adequate for basic invocation but leaves ambiguity about the returned structure.
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 coverage is 100% with both runId and project described in the input schema. The description's 'from a test run' loosely maps to runId but does not add extra meaning beyond what the schema already 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?
Description states an explicit verb 'Get' and a specific resource 'failed tests from a test run', which clearly distinguishes it from siblings like get_test_results or get_test_runs_for_build by scoping to failed tests within a given run.
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?
Adds the context 'useful for investigating failures' but does not explicitly compare with alternatives such as get_test_results or analyze_test_failures, nor does it state when not to use this tool. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentA
Get the content of a file from a repository at a specific branch or commit
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| path | Yes | File path (e.g., "/src/index.ts") | |
| branch | No | Branch name (e.g., "main") | |
| commitId | No | Specific commit SHA (overrides branch) |
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 states a read operation but does not disclose the return format (raw vs base64), handling of large/binary files, error conditions, or pagination. This leaves significant behavioral aspects unspecified for a tool with no annotation safety signals.
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 that is front-loaded with the core action and resource. No redundant words or filler; every word contributes to the meaning.
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 file retrieval tool, the description captures the essential purpose, but it lacks details on how branch and commitId interact (e.g., commitId overrides branch) and what the response contains. With no output schema and no annotations, additional context would improve completeness.
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 covers all 5 parameters with individual descriptions, so baseline is 3. The description adds the branch/commit context but does not provide additional meaning beyond what the schema already states for parameters like path or repository.
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 uses specific verb 'get' and identifies the resource as file content from a repository at a specific branch or commit. This clearly distinguishes it from sibling tools like get_commit (which retrieves commit metadata) and search_code (which searches within code).
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 when file content is needed at a version, but provides no explicit guidance on when to use this tool versus alternatives. It lacks comparisons or exclusions that would help an agent choose among siblings like compare_branches or get_commit_diff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_runsC
Get recent runs for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID | |
| branch | No | Filter by branch | |
| top | No | Max runs 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 only says 'Get recent runs' and does not mention return format, default behavior (e.g., top=25), pagination, or any side effects, leaving significant behavioral aspects undisclosed.
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 redundant words or filler. It is appropriately front-loaded and efficient, though it errs on the side of being too minimal.
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?
With no output schema and no annotations, the description is too sparse to provide complete context. It does not explain what a 'run' response looks like, how filtering works beyond parameter names, or why this tool might be preferred over similar getters. The four parameters and sibling tools suggest more contextual detail 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 provides 100% coverage with descriptions for all four parameters, so a baseline of 3 is appropriate. The tool description adds no additional parameter semantics, leaving the schema to handle parameter explanation.
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 'recent runs for a pipeline', making the tool's purpose evident. It is distinct from siblings like list_pipelines by referencing runs specifically, though it does not explicitly differentiate itself from related tools such as get_build.
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, such as distinguishing pipeline runs from builds or releases. The description only states what it does without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_variablesB
Get variables defined for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID |
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 states the action without disclosing return format, whether secret variables are included, pagination, or any other behavioral details.
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?
A single sentence with no wasted words, clearly and efficiently stating the tool's purpose. It is front-loaded and appropriately sized.
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 operation with complete schema coverage, the description is minimally adequate but lacks detail on return values or behavior, which is more impactful since there is no output schema. The tool's purpose is clear, but completeness is limited.
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?
Both parameters (project and pipelineId) have descriptions in the schema, providing 100% coverage. The description adds no additional parameter semantics beyond what the schema already 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 uses a specific verb and resource ('Get variables defined for a pipeline'), making the tool's purpose clear and distinct from sibling tools that get runs or YAML. It is immediately obvious what the tool does.
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, and no mention of prerequisites or exclusions. Usage is only implied by the tool's name and description, but there is 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_pipeline_yamlB
Get the YAML configuration for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| pipelineId | Yes | Pipeline/definition ID |
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 only states the action and resource, omitting details about output format, error handling, permissions, or side effects. While 'get' implies a read operation, additional context like whether the YAML is returned as raw text or parsed is absent.
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 no redundancy. It is front-loaded with the verb and object, making it concise and easy to parse.
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 too sparse to fully inform the agent. It doesn't describe the response format, whether project is required, or how this tool fits with other pipeline-related tools, leaving the agent with insufficient context 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?
The input schema already provides descriptions for both parameters (project and pipelineId) with 100% coverage. The description adds no extra parameter semantics, such as the optionality of project or how pipelineId relates to a pipeline vs. a definition, so it stays at the baseline.
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 function with a specific verb ('Get') and resource ('YAML configuration for a pipeline'). It distinguishes itself from sibling tools like get_pipeline_runs and get_pipeline_variables by focusing on the YAML configuration retrieval.
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 list_pipelines, get_pipeline_runs, or get_pipeline_variables. The description provides no context, exclusions, or examples of appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectA
Get detailed information about a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name or ID |
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 only states the basic purpose without detailing what 'detailed information' includes, any permissions required, error conditions, or return format. This is minimal and leaves significant gaps for a simple read 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, front-loaded sentence that states the action and resource directly with no filler or redundancy. 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 one-parameter getter with no output schema and no annotations, the description is minimally adequate but not complete. It does not specify the structure or extent of the returned 'detailed information', leaving the agent to infer the response format. Additional detail about what is included would improve completeness.
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% (the lone 'project' parameter is described as 'Project name or ID'). The description adds no further parameter meaning, so per the rules, a baseline of 3 is appropriate. It neither enriches nor contradicts the schema.
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 'Get detailed information about a specific project' uses a specific verb (Get) and resource (project) with scope ('specific'), clearly distinguishing it from sibling list_projects. It also aligns with other get_* tools like get_work_item, making its purpose 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?
The description implies use for a specific project (as opposed to list_projects for all projects), but does not explicitly state when to use it over alternatives or mention any exclusions. The 'specific' qualifier gives a hint, but no direct guidance or alternative naming is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prs_for_work_itemB
Find pull requests linked to a work item
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| workItemId | Yes | Work item ID |
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 only states the core action without explaining nuances like whether 'linked' includes all PR states (open/closed), authentication requirements, or the shape of the return value. This is insufficient for an agent to predict tool 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 concise sentence that immediately states the tool's purpose. It contains no filler or redundant information, making it highly efficient.
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 that there is no output schema, the description should explain what the tool returns or at least mention the result format. It only says 'find pull requests', leaving the agent without enough context to interpret the response or handle edge cases. The simplicity of the tool does not justify this brevity.
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 already provides 100% coverage for parameters, so the baseline is 3. The description adds no extra semantic detail beyond what the schema fields (repository, workItemId) already imply, but it does not need to compensate for any gaps.
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 ('Find') and a clear resource ('pull requests') with a well-defined scope ('linked to a work item'). This distinguishes it from the sibling tool get_commits_for_work_item, which focuses on commits instead.
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 the tool should be used when there is a need to find PRs associated with a work item, but it does not explicitly mention alternatives or provide exclusion criteria. It lacks explicit guidance on when to choose this over the similar sibling get_commits_for_work_item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestA
Get detailed information about a pull request including comments and threads
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| pullRequestId | Yes | Pull request ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosure. It adds that the tool returns comments and threads, which is useful behavioral context, but it does not explicitly state that the operation is read-only (though 'Get' implies it) or describe any other aspects like response format or potential limitations. This is adequate but not rich.
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 that front-loads the action and resource, followed by the key detail about including comments and threads. There is no redundancy or 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?
The tool has no output schema and no annotations, but it is a simple read operation with fully documented parameters. The description clarifies that it returns comments and threads, but 'detailed information' remains vague about the full set of fields (e.g., status, reviewers, branches). This is adequate for a basic get operation but leaves room for more precision about the response.
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 three parameters. The description adds no additional parameter-specific meaning 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 uses the specific verb 'Get' with the resource 'pull request', and adds 'including comments and threads' to specify the depth of detail. This clearly distinguishes it from sibling tools like list_pull_requests, which would list PRs rather than fetch one detailed object.
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 for retrieving detailed information about a single pull request, but it does not explicitly state when to use this tool versus alternatives like list_pull_requests or get_prs_for_work_item. There is no mention of exclusions or preferred contexts, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_releaseB
Get detailed information about a specific release
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| releaseId | Yes | Release ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not mention the output format, error handling, or whether the optional 'project' parameter affects behavior. 'Detailed information' is vague and gives no insight into what the tool actually returns.
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 that states the action and resource without wasted words. It is 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 getter with no output schema and no annotations, the description is minimally viable but lacks detail about what information is returned or any caveats. 'Detailed information' is too vague to fully prepare the agent for the tool's response.
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 both parameters. The description adds no additional parameter context, and since the schema is sufficient, baseline 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 ('detailed information about a specific release'), using 'specific' to distinguish from list_releases. However, it lacks specificity about what 'detailed information' entails and doesn't differentiate from get_release_logs.
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 mentions no contexts, exclusions, or sibling tools. 'Specific release' implies use for a single item, but that is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_release_logsA
Get deployment logs for a release environment
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| releaseId | Yes | Release ID | |
| environmentId | Yes | Environment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states 'Get' implying a read-only operation, but does not explicitly mention safety, permissions, rate limits, or return format. It adds no behavioral context beyond the basic action.
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, focused sentence with no filler. It front-loads the verb and resource, making it immediately scannable.
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?
The tool is a simple get operation with well-documented parameters, but without annotations or an output schema, the description leaves gaps about what 'logs' entails and any response shape. It is minimally adequate but lacks helpful context for correct 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%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides for releaseId and environmentId. It names the resource but does not elaborate on parameter relationships or expected values.
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 ('deployment logs for a release environment'), clearly distinguishing it from siblings like get_build_logs or get_release. It immediately conveys what the tool returns.
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 for retrieving deployment logs tied to a release environment, but provides no explicit guidance on when to choose this tool over alternatives like get_build_logs or get_pipeline_runs. No exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_test_resultsB
Get test results from a test run - shows which tests passed/failed
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID | |
| top | No | Max results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states that results include pass/fail status. It does not mention pagination (top), filtering by project, ordering, or what fields are returned. The absence of annotations makes this 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?
A single, front-loaded sentence that conveys the core purpose without any wasted words. It is concise and immediately understandable.
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?
The tool has 3 parameters, no annotations, and no output schema, so the description must carry more weight. It explains the basic result (passed/failed) but omits how the parameters affect the output, such as whether project is required or how top limits results. Given the simplicity of the tool, it is minimally complete but with clear gaps.
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 itself adds no parameter-specific information beyond the schema, but the schema already documents all three parameters clearly. No additional context is provided about how runId, project, and top interact.
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 and resource ('Get test results from a test run') and clarifies the scope with 'shows which tests passed/failed'. This clearly distinguishes it from siblings like get_failed_tests (only failures) and get_test_run (run 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 explicit guidance on when to use this tool versus alternatives such as get_failed_tests or analyze_test_failures. The usage context is only implied ('from a test run'), and there are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_test_runB
Get detailed information about a specific test run
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| runId | Yes | Test run ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It fails to describe what 'detailed information' includes, whether the operation is read-only (though 'get' implies it), error behavior, or any required permissions. It adds no meaningful context beyond the tool's name.
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 that directly states the core purpose without any fluff. It is concise and appropriately sized for a simple get-by-ID 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?
With no output schema and no annotations, the description must compensate by explaining what the returned 'detailed information' contains and how it differs from related tools like get_test_results. It does not, leaving the agent with significant ambiguity about the expected response structure and scope.
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 (runId and project) described in the schema. The tool description adds no additional parameter meaning, 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 uses a specific verb 'Get' and a clear resource 'detailed information about a specific test run', which distinguishes it from sibling tools like list_test_runs (which lists runs) and get_test_results (which retrieves results). It effectively communicates that this tool returns the full details of a single test run.
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 about when to use this tool versus alternatives such as get_test_results or get_test_runs_for_build. The description only restates the function without mentioning prerequisites, exclusions, or scenarios where another sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_test_runs_for_buildB
Get test runs associated with a specific build
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildId | Yes | Build ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the transparency burden. It only says 'Get test runs' and doesn't mention what a successful call returns (e.g., array, null), pagination, error behavior, or permission requirements. The verb 'Get' implies read-only, but lacks depth.
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 with no redundant words; efficient and front-loaded with the verb and resource.
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?
The tool is minimal: no output schema, no annotations, and a one-line description. It doesn't describe return payload, edge cases (e.g., missing buildId), or how project affects results, making it incomplete for an agent to understand the full behavior.
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 covers both parameters with descriptions ('Build ID', 'Project name'), and the description adds no extra meaning. Since coverage is 100%, baseline 3 applies; the description doesn't clarify how buildId is used or when project is needed.
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 clearly states 'Get test runs associated with a specific build' — a specific verb (get), resource (test runs), and scope (associated with a build), distinguishing it from sibling tools like list_test_runs (all runs) and get_test_run (single run).
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 list_test_runs or get_test_run; the description only names the function without context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_itemB
Get detailed information about a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID | |
| expand | No | Include all fields and relations |
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 merely restates the tool's purpose without explaining what 'detailed information' entails, default behavior, response format, or any side effects. It does not reveal that the operation is read-only or that expand defaults to true, which are important behavioral traits.
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, perfectly front-loaded sentence with no wasted words. It immediately states the action and resource, making it highly efficient. Every word contributes to understanding the tool's basic purpose.
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 get-by-id tool with a fully documented schema, the description is minimally adequate. However, it lacks any contextual guidance on when to use this tool versus the many related siblings, and does not clarify what 'detailed' means or how the expand parameter affects the response. With no output schema, the description could have provided more context about the return value, but it does not.
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 provides full coverage for both parameters (id and expand) with clear descriptions. The description itself adds no additional parameter semantics beyond what the schema already states. Since schema coverage is 100%, the baseline of 3 is appropriate; the description does not compensate or 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 tool gets detailed information about a specific work item, using a specific verb and resource. It does not explicitly distinguish itself from query_work_items or other sibling tools, but the focus on 'a specific work item' implies single-item retrieval as opposed to listing or searching, which is a reasonable 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 implies usage when you have a work item ID and need detailed information, but it does not provide explicit guidance on when to use this tool versus alternatives like query_work_items or get_commits_for_work_item. There are no exclusions or alternative recommendations, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_areasA
List area paths in a project - useful for organizing and filtering work items by team or component
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| depth | No | Depth of child areas 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 only says 'List area paths', implying a read operation, but gives no details about return format, ordering, depth behavior, or pagination. The description does not add meaningful behavioral context beyond the bare function name.
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 sentence, front-loaded with the verb and resource, and provides a brief use-case note. Every word earns its place with no redundancy or filler.
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?
The tool is simple, with only two optional parameters and no output schema, but the description is minimal. It does not explain what the returned area paths look like, how depth affects results, or whether a project is required. This is adequate but leaves clear gaps in expected behavior.
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 `depth` and `project` have descriptions), so the schema already documents the parameters. The description adds tangential context about filtering work items but does not elaborate on how parameters affect the list. Baseline 3 is appropriate 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 uses a specific verb 'List' with a clear resource 'area paths' and scope 'in a project'. It is distinct from all sibling tools, which focus on commits, work items, builds, etc. This leaves no ambiguity about what the tool does.
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 clear use-case context: it is 'useful for organizing and filtering work items by team or component'. While it doesn't explicitly mention when not to use it or name alternatives, the context sufficiently guides an agent to select this tool when area paths are relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branchesC
List branches in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID |
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 implies a read operation but does not state pagination, sorting, or what data is returned, leaving the agent with minimal insight into the tool's 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 sentence that is concise and front-loaded. Every word is essential, and there is no redundancy or extraneous information.
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?
The tool is simple, but without an output schema or annotations, the description should explain return values or pagination. It does not, leaving the agent to guess what 'list branches' produces. This is a clear gap for a list operation.
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 coverage is 100%, and both 'project' and 'repository' are described in the schema. The description adds no additional parameter context, so 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 'List branches in a repository' uses a specific verb and resource, clearly indicating the operation. It is implicitly distinct from sibling tools like compare_branches or list_repos, though it does not explicitly call out that 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, nor are any exclusions or prerequisites mentioned. The description states only what it does, not when it is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_build_definitionsC
List build/pipeline definitions
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| name | No | Filter by definition name (supports wildcards *) | |
| path | No | Filter by folder path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral transparency. It only states that it lists definitions, with no mention of return format, output structure, permissions, pagination, or side effects. The phrase 'build/pipeline definitions' adds some clarity but still leaves behavior largely implicit.
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 fluff or repetition. It is appropriately sized for the simplicity of the tool, though it could be slightly more informative about what 'definitions' entails.
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 the presence of sibling tools, the description is too minimal to be contextually complete. It does not explain return values, filtering behavior, or relationships to other pipeline-related tools, leaving the agent with limited context for correct 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?
The input schema descriptions cover all three parameters (name, path, project) completely, so the tool description adds no additional meaning. Baseline is 3 because the schema does the heavy lifting for 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 uses a clear verb and resource: 'List build/pipeline definitions.' It explains the tool's function and distinguishes it from listing actual builds (like list_builds) by focusing on 'definitions,' though it doesn't explicitly differentiate from the similar 'list_pipelines' sibling tool.
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 list_pipelines or list_release_definitions. The description only states what it does, without any context on prerequisites, use cases, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_buildsB
List recent builds with status and results
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| definitions | No | Filter by build definition IDs | |
| branchName | No | Filter by branch (e.g., "refs/heads/main") | |
| statusFilter | No | Filter by status | |
| resultFilter | No | Filter by result | |
| requestedFor | No | Filter by user who requested the build | |
| top | No | Max builds to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the tool lists 'recent builds' and includes 'status and results', but it does not disclose ordering, pagination behavior, or whether it operates across all projects or a specific one. It also doesn't explicitly state that this is a read-only operation, though that is implied by the verb 'List'. It provides minimal value beyond the obvious.
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 that is front-loaded with the action and resource. Every word serves a purpose, with no fluff or repetition. It is ideally sized for quick comprehension.
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?
The tool has 7 optional parameters, no output schema, and no annotations, leaving the description as the primary context source. The description gives a high-level overview but omits details like default behavior, return format, and how filters combine. For a relatively simple list tool, it is adequate but not comprehensive, especially without an output schema to explain the result structure.
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 the baseline is 3. The description adds little beyond the schema—it mentions 'status and results', which loosely aligns with statusFilter and resultFilter, but it doesn't clarify parameter usage or relationships. The 'recent' qualifier slightly hints at the 'top' parameter but not meaningfully.
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 a specific action ('List') on a specific resource ('recent builds') and includes the key output fields ('status and results'). It distinguishes itself from sibling tools like get_build (single build) and list_build_definitions (build definitions), though it doesn't explicitly name alternatives. The word 'recent' adds scope but could be more precise.
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 gives no guidance on when to use this tool versus alternatives such as get_build or list_build_definitions. There is no mention of when not to use it or what distinguishes it from other list tools. The intended use is only implied by the name and description, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commitsB
Get commit history for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| branch | No | Branch name (e.g., "refs/heads/main") | |
| author | No | Filter by author email | |
| fromDate | No | Start date (ISO format) | |
| toDate | No | End date (ISO format) | |
| top | No | Max commits to return |
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 only states the basic action and resource, omitting important behaviors like pagination (top default), filtering (author, branch, dates), or what the response contains. This is a significant gap for a tool with many parameters.
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 that is front-loaded with the action and resource. Every word earns its place, and there is no unnecessary verbosity.
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 7 parameters and lack of an output schema, the description is incomplete. It does not explain return value structure, default ordering, or how filters affect results. This under-specification could leave an agent uncertain about the tool's behavior beyond the basic action.
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% coverage with descriptions for every parameter, so the baseline is 3. The description adds no extra semantic meaning beyond the schema; it merely names 'repository' without elaborating on any parameter behavior or formats.
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 'Get commit history for a repository' uses a specific verb and resource, clearly distinguishing it from sibling tools like get_commit (single commit) and get_commit_diff (diff). This is unambiguous and purpose-driven.
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 such as get_commit or list_branches. The description does not mention any exclusions or competing scenarios, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_iterationsA
List iterations (sprints) in a project - useful for sprint planning and filtering work items
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| depth | No | Depth of child iterations to return |
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. However, it only states the basic function ('List iterations') and does not reveal behavioral traits such as whether the operation is read-only, how the depth parameter affects results, or any potential side effects. This is a significant gap for a tool with no annotation support.
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 that includes the tool's primary function and a clear use case. It is front-loaded with the key action and resource, with no wasted words.
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?
The description covers the essential purpose and usage context, but it lacks details about the depth parameter behavior and the structure of the returned data. Given that there is no output schema and annotations, the description leaves some ambiguity about what the agent can expect from the tool.
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 provides 100% coverage with descriptions for both parameters ('Depth of child iterations to return' and 'Project name'). The tool description adds no additional parameter semantics beyond the schema, 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 tool lists iterations (sprints) in a project, using a specific verb and resource. It also explains its utility for sprint planning and filtering work items, distinguishing it from other list tools by the unique resource type.
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 clear context on when to use the tool ('useful for sprint planning and filtering work items'), but it does not explicitly mention alternatives or when not to use it. This is sufficient context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesB
List pipeline definitions in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| name | No | Filter by name (supports * wildcard) | |
| path | No | Filter by folder path | |
| top | No | Max pipelines to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It merely says 'List pipeline definitions' with no mention of pagination, default sorting, whether project is required, or what fields are returned. This leaves the agent without critical context.
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 that immediately conveys the core action. No wasted words, and it is appropriately front-loaded.
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 listing tool with no output schema and no annotations, the description is too sparse. It fails to explain what a pipeline definition includes, whether pagination applies, or how it relates to sibling tools. The parameter schema provides some structure but not enough for the agent to fully understand the tool's behavior.
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 (top, name, path, project). The description adds no additional parameter meaning, but the baseline of 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 uses a specific verb ('List') and resource ('pipeline definitions') with a scope ('in a project'), clearly distinguishing it from siblings like list_build_definitions and get_pipeline_runs. It is unambiguous about what the tool does.
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 only states the action, leaving implied usage without exclusions or references to sibling tools like list_build_definitions or get_pipeline_runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all projects in the Azure DevOps organization/collection
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only says 'List all projects' without disclosing return format, pagination, permissions, or any side effects. While 'List' suggests a read-only operation, it does not explicitly state safety or behavioral details.
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 that is front-loaded with the action and resource, containing no filler or redundant information.
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 zero-parameter list tool, the description covers the primary action but lacks any indication of the return shape (e.g., project names, IDs, URLs) or potential limitations. Without an output schema, more detail on what 'projects' includes would make it complete.
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 zero parameters, and the description correctly implies no arguments are needed. Baseline 4 is appropriate for a zero-parameter tool; the description adds no extra parameter info but none is required.
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 the specific verb 'List' with resource 'projects' and scope 'in the Azure DevOps organization/collection', clearly distinguishing it from the sibling 'get_project' tool (which retrieves a single project).
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 states the tool lists all projects, which implies when to use it, but does not explicitly mention alternatives like 'get_project' for a single project or exclude any cases. No explicit when-not-to-use guidance is provided.
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 |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| status | No | PR status filter | active |
| creatorId | No | Filter by creator ID | |
| reviewerId | No | Filter by reviewer ID | |
| top | No | Max PRs to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavior. It only says 'List pull requests' and does not mention default status ('active'), default top limit (50), sorting, pagination, or any side effects. The description fails to add behavioral context.
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 redundant wording. However, it is only 5 words and lacks important context, so it is not a 5.
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?
The tool has 6 parameters, a required 'repository', an enum, and no output schema. The description does not explain return values, default filters, or any limitations. Combined with no annotations, the tool is severely under-specified.
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?
All 6 parameters have descriptions in the schema, so the baseline is 3. The description adds no additional semantics beyond what the schema already provides, so it remains at 3.
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 ('List'), resource ('pull requests'), and scope ('in a repository'). It distinguishes from siblings like 'get_pull_request' via the plural form and from 'get_prs_for_work_item' via repo scope, though it does not explicitly name alternatives.
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 gives no guidance on when to use this tool versus alternatives such as get_pull_request or get_prs_for_work_item. It lacks any mention of use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_release_definitionsC
List release/deployment pipeline definitions
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| searchText | No | Filter by name | |
| path | No | Filter by folder path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It only states the tool 'List's definitions, implying a read-only operation, but it does not disclose whether results are paginated, what the return format is, or whether any special permissions are required. Minimal additional context is provided.
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 unnecessary words. It is front-loaded with the action and resource, and 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?
The tool lacks an output schema and annotations, and the description provides no usage context or behavioral details. For an agent deciding among many sibling tools, this description is insufficient. The three optional parameters are explained only in the schema, and no distinction from similar tools is made.
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 covers all three parameters with descriptions, so schema coverage is 100%. The description itself adds no parameter-specific information, but the baseline of 3 is appropriate since the schema already handles semantic explanation.
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 release/deployment pipeline definitions' clearly states the action (List) and the resource (release/deployment pipeline definitions), distinguishing it from siblings like list_releases or list_pipelines by focusing on definitions. It is not fully specific about what constitutes a definition, but it is clear enough.
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 such as list_pipelines, list_releases, or get_pipeline_runs. The description does not mention filtering, prerequisites, or any context that would help an agent choose it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_releasesB
List releases with deployment status
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| definitionId | No | Filter by release definition ID | |
| statusFilter | No | Filter by status | |
| environmentStatusFilter | No | Filter by environment status | |
| top | No | Max releases 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. It only states that it lists releases with deployment status, but does not disclose important behaviors such as default result limits (e.g., top=25), pagination, whether it returns all deployment statuses or the latest one, or any side effects (though it is likely read-only). This minimal disclosure is insufficient for a tool with multiple optional parameters.
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 immediately conveys the core function with no wasted words. However, it is slightly too terse to include usage guidance, which would have made it more helpful without sacrificing conciseness.
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 an output schema and annotations, the description should explain return values and behavior. It fails to mention what the response contains (e.g., fields like deployment status, environment details), how the top parameter interacts with other filters, or whether project is required. This incompleteness is a clear gap for a tool with 5 parameters.
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 each of the 5 parameters clearly described (e.g., 'Filter by release definition ID'). The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate; 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 'List releases with deployment status' uses a specific verb (List) and resource (releases), and adds a meaningful qualifier ('with deployment status') that distinguishes it from sibling tools like list_release_definitions, which lists definitions rather than release instances. The purpose is unambiguous and immediately understandable.
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 many sibling tools such as get_release, list_release_definitions, and get_release_logs, the absence of any contextual hints or exclusions leaves the agent without direction for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reposA
List all Git repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name (uses default if not specified) |
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. 'List all' indicates read-only scope, but it does not mention default project behavior, authentication needs, pagination, or output format. It restates the core function without adding meaningful behavioral context.
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, well-formed sentence that front-loads the action and object. There is no filler, repetition, or unnecessary detail.
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 list operation with one optional parameter, the description is functionally adequate. It covers the essential purpose and scope, though it could mention default project behavior or return type. Given the simplicity and schema coverage, it is sufficiently complete.
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 covers 100% of the single optional parameter 'project' with a description explaining the default behavior. The tool description's 'in a project' adds little beyond the schema, so the parameter semantics are adequately handled by the schema.
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 'List' with the resource 'Git repositories' and a scope qualifier 'in a project'. This clearly distinguishes it from sibling tools like list_projects or list_branches.
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 when to use the tool (when a list of repositories is needed), but provides no explicit exclusions, prerequisites, or alternatives. It does not mention when not to use it or direct users to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_test_runsB
List test runs for a project - useful for finding test execution history
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| buildUri | No | Filter by build URI | |
| top | No | Max runs to return |
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 'List test runs' without disclosing return format, ordering, pagination, or the fact that project and buildUri are optional filters. The statement 'for a project' contradicts the schema where project is optional, creating ambiguity about the default scope.
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 that immediately conveys the tool's purpose and use case. Every word earns its place with no redundancy or filler.
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?
While this is a simple list tool, the description is incomplete in explaining optional filters and default behavior. The lack of an output schema and annotations means the agent must infer return structure and behavior. The ambiguity about 'for a project' when project is optional further reduces completeness.
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 adds minimal value beyond the schema, only reinforcing that 'project' is a scope. No extra semantics for 'top' or 'buildUri' are 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 clearly states the tool lists test runs for a project, using a specific verb and resource. It identifies the use case (finding test execution history) but does not explicitly differentiate from sibling tool get_test_runs_for_build, which also lists test runs but filtered by build.
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?
It implies the tool is useful for viewing test execution history, but does not provide explicit guidance on when to use this vs alternatives like get_test_runs_for_build or get_test_results. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_work_item_typesA
List available work item types in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project 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 not reveal what the response includes (e.g., IDs, names), whether authentication is needed, or if pagination applies. The description essentially restates the tool name and adds no behavioral context beyond the fact that it lists items.
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 one short sentence of seven words, front-loading the action and resource. There is zero redundancy and every word earns its place, 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?
For a tool with one optional parameter and no output schema, the description is minimally complete: it states the purpose and the parameter is defined in the schema. However, it lacks any detail about the return value or the nature of 'work item types', which could be enriched with a brief mention of what the response contains.
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 fully documents the single parameter 'project' with description 'Project name' (schema coverage 100%). The tool description adds nothing beyond the schema, merely echoing 'in a project'. Baseline 3 is appropriate 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 uses the specific verb 'List' with the clear resource 'work item types' and the scope 'in a project', which distinguishes it from sibling tools like query_work_items or get_work_item. Even without the title, the purpose is immediately understandable.
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 by stating 'in a project', indicating a project is required, but it does not explicitly say when to use this tool instead of alternatives, nor does it mention any exclusions or prerequisites. The usage is clear but not enhanced with guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_work_itemsC
Query work items using WIQL (Work Item Query Language) or simple filters
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| wiql | No | WIQL query string (if provided, other filters are ignored) | |
| workItemType | No | Filter by type (Bug, Task, User Story, etc.) | |
| state | No | Filter by state (Active, Closed, etc.) | |
| assignedTo | No | Filter by assigned user (use "@Me" for current user) | |
| areaPath | No | Filter by area path | |
| iterationPath | No | Filter by iteration path | |
| tags | No | Filter by tag | |
| top | No | Max items to return |
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 does not mention that WIQL overrides other filters (a key behavior captured only in the schema), nor does it describe pagination, default limits, or return format. The word 'Query' implies a read operation, but safety is not explicitly stated.
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 that clearly conveys the core functionality. It is well-structured and free of unnecessary words, though it is brief given the tool's complexity.
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?
The tool has 9 optional parameters and no output schema, yet the description is only one sentence. It does not clarify expected return values, the precedence of WIQL over filters, or when to choose this tool over related siblings like get_work_item. The brevity leaves significant gaps for a tool with this parameter count.
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 adds the high-level distinction between WIQL and simple filters, but does not explain individual parameter semantics beyond the schema. The schema itself already provides clear descriptions for all 9 parameters, so the description adds marginal 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 tool queries work items using WIQL or simple filters. It identifies a specific verb ('Query') and resource ('work items'), which distinguishes it from single-item retrieval tools like get_work_item, though it does not explicitly name that sibling alternative.
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 such as get_work_item or list_work_item_types. The description only mentions two query modes (WIQL or filters) but does not state use cases, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeB
Search for code/text content in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name | |
| repository | Yes | Repository name or ID | |
| searchText | Yes | Text to search for in file contents | |
| path | No | Folder path to search in (e.g., "/src") | |
| branch | No | Branch to search (default: default branch) | |
| fileExtension | No | Filter by file extension (e.g., ".cs", ".ts") | |
| top | No | Max results to return |
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 only states the basic purpose and does not mention any behavioral traits such as result format, pagination, rate limits, or whether it searches file contents versus metadata. This is a minimal description with no extra detail.
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 wasted words. It clearly states the action and target. However, it is somewhat minimal and doesn't include any additional structure like usage hints, but for conciseness it is effective.
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 (7 parameters) and the absence of an output schema or annotations, the description is incomplete. It doesn't explain what the search returns (e.g., a list of matching files with snippets or just paths), nor does it cover pagination or result limits. The parameter schema covers inputs well, but the output behavior is entirely unexplained.
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 for all 7 parameters, so the baseline is 3. The description adds no additional meaning to the parameters; it only repeats the general search function. It doesn't elaborate on how 'searchText' relates to 'path' or 'fileExtension', but the schema already provides adequate per-parameter descriptions.
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 'Search for code/text content in a repository' clearly states the specific verb (search), resource (code/text content), and scope (repository). It distinguishes the tool from siblings like 'get_file_content' (which retrieves a single file) and the various 'list_*' tools, as 'search' is a unique operation among the siblings.
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 doesn't state conditions like 'when you need to find a string in code' or mention that for retrieving a known file, 'get_file_content' should be used instead. There is no explicit or implied 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.
test_connectionA
Test the connection to Azure DevOps Server and verify authentication
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 states the action but does not disclose return format, whether it performs any writes, what happens on authentication failure, or if there are side effects. This is minimal behavioral context.
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 that immediately states the verb and target. It contains no filler and is appropriately front-loaded.
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 zero-parameter connection test, the description covers the essential purpose. However, with no output schema or annotations, it might be improved by mentioning the expected outcome or when to use it. Still, it is adequate for this simple utility.
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 zero parameters and an empty schema with 100% coverage, so there is nothing for the description to add. Baseline 4 applies as no parameter documentation is needed.
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 'Test' and identifies the resource 'connection to Azure DevOps Server' plus 'verify authentication'. This clearly distinguishes it from sibling tools, which all perform specific data retrieval or mutation 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 explicit guidance on when to use this tool versus alternative tools, nor does it mention prerequisites or that it might be used before other API calls. The intended use is implied by the name but not stated.
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.
39 tool updates
v1.1.2- First observed
analyze_build_errors - First observed
analyze_test_failures - First observed
compare_branches - First observed
get_build - First observed
get_build_logs - First observed
get_commit - First observed
get_commit_diff - First observed
get_commits_for_work_item - First observed
get_failed_tests - First observed
get_file_content - First observed
get_pipeline_runs - First observed
get_pipeline_variables - First observed
get_pipeline_yaml - First observed
get_project - First observed
get_prs_for_work_item - First observed
get_pull_request - First observed
get_release - First observed
get_release_logs - First observed
get_test_results - First observed
get_test_run - First observed
get_test_runs_for_build - First observed
get_work_item - First observed
list_areas - First observed
list_branches - First observed
list_build_definitions - First observed
list_builds - First observed
list_commits - First observed
list_iterations - First observed
list_pipelines - First observed
list_projects - First observed
list_pull_requests - First observed
list_release_definitions - First observed
list_releases - First observed
list_repos - First observed
list_test_runs - First observed
list_work_item_types - First observed
query_work_items - First observed
search_code - First observed
test_connection
TDQS
Scored across 39 tools
Most tools target distinct resources (builds, repos, work items, tests, releases), but some overlap exists, e.g., list_builds vs get_pipeline_runs, and multiple test analysis tools. Descriptions help differentiate, but an agent might occasionally select the wrong tool.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., list_branches, get_work_item, analyze_build_errors). No mixing of conventions, making the set predictable for agents.
At 39 tools, the count is high but justified by the broad scope of Azure DevOps (builds, repos, work items, tests, releases). However, it exceeds the typical 15-25 range and feels heavy, fitting the 'borderline' description.
The tool surface is heavily read-oriented, lacking mutation operations such as create, update, delete for work items, pull requests, pipelines, and releases. This is a significant gap for a DevOps server, likely causing agent failures when workflows require state changes.
Maintenance
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
An MCP server that provides access to Testiny projects, test cases and test runs
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI assistants to manage Azure DevOps resources including Work Items, Git repositories, pipelines, and user identities.11 npmMIT
- AlicenseBqualityBmaintenanceMCP server for on-premises Azure DevOps that lets AI assistants browse repositories, review pull requests, manage work items, and interact with wikis, with NTLM authentication support.3665 PyPI1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for Azure DevOps Server 2022 (on-premises) that enables AI assistants to interact with work items, repositories, builds, and sprints through 29 tools.11 npmMIT
- FlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to interact with Azure DevOps projects, work items, repositories, pipelines, wikis, and more via 21 tools.21-