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 Servershow me the open pull requests in the Contoso project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure DevOps MCP Server
A Model Context Protocol (MCP) server implementation for Azure DevOps, allowing AI assistants to interact with Azure DevOps APIs through a standardized protocol.
Looking for the official server? Microsoft maintains a product-supported Azure DevOps MCP at microsoft/azure-devops-mcp. If you use Azure DevOps Services (cloud), start there.
This community server remains a good fit when you need Azure DevOps Server (on-premises) support — especially older versions that may not work with Microsoft's MCP — or features not yet available in the official server. See Discussion #237 for more context. See ROADMAP.md for where this server differentiates and what is planned.
Overview
This server implements the Model Context Protocol (MCP) for Azure DevOps, enabling AI assistants like Claude to interact with Azure DevOps resources securely. The server acts as a bridge between AI models and Azure DevOps APIs, providing a standardized way to:
Access and manage projects, work items, repositories, and more
Create and update work items, branches, and pull requests
Execute common DevOps workflows through natural language
Access repository content via standardized resource URIs
Safely authenticate and interact with Azure DevOps resources
Related MCP server: Azure DevOps MCP Server
Server Structure
The server is structured around the Model Context Protocol (MCP) for communicating with AI assistants. It provides tools for interacting with Azure DevOps resources including:
Projects
Work Items
Repositories
Pull Requests
Branches
Pipelines
Core Components
AzureDevOpsServer: Main server class that initializes the MCP server and registers tools
Feature Modules: Organized by feature area (work-items, projects, repositories, etc.)
Request Handlers: Each feature module provides request identification and handling functions
Tool Handlers: Modular functions for each Azure DevOps operation
Configuration: Environment-based configuration for organization URL, PAT, etc.
The server uses a feature-based architecture where each feature area (like work-items, projects, repositories) is encapsulated in its own module. This makes the codebase more maintainable and easier to extend with new features.
Getting Started
Prerequisites
Node.js (v16+)
npm or yarn
Azure DevOps account with appropriate access
Authentication credentials (see Authentication Guide for details):
Personal Access Token (PAT), or
Azure Identity credentials, or
Azure CLI login
Running from npm (npx)
If you just want to run the published server package, you do not need to clone or build this repository:
npx -y @billg118/mcp-server-azure-devopsRunning locally (from source)
From a checkout of this repository:
npm ci
cp .env.example .env # then edit values
npm run build
npm start # runs: node dist/index.jsFor iterative development (auto-reload):
npm run dev # runs src/index.ts via tsx watchUsage with Claude Desktop/Cursor AI
To integrate with Claude Desktop or Cursor AI, add one of the following configurations to your configuration file.
Azure Identity Authentication
Be sure you are logged in to Azure CLI with az login then add the following:
{
"mcpServers": {
"azureDevOps": {
"command": "npx",
"args": ["-y", "@billg118/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/your-organization",
"AZURE_DEVOPS_AUTH_METHOD": "azure-identity",
"AZURE_DEVOPS_DEFAULT_PROJECT": "your-project-name"
}
}
}
}Personal Access Token (PAT) Authentication
{
"mcpServers": {
"azureDevOps": {
"command": "npx",
"args": ["-y", "@billg118/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/your-organization",
"AZURE_DEVOPS_AUTH_METHOD": "pat",
"AZURE_DEVOPS_PAT": "<YOUR_PAT>",
"AZURE_DEVOPS_DEFAULT_PROJECT": "your-project-name"
}
}
}
}Azure DevOps Server (on-prem) requires PAT authentication. Example:
{
"mcpServers": {
"azureDevOps": {
"command": "npx",
"args": ["-y", "@billg118/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://server:8080/tfs/DefaultCollection",
"AZURE_DEVOPS_AUTH_METHOD": "pat",
"AZURE_DEVOPS_PAT": "<YOUR_PAT>",
"AZURE_DEVOPS_DEFAULT_PROJECT": "your-project-name"
}
}
}
}For detailed configuration instructions and more authentication options, see the Authentication Guide.
Authentication Methods
This server supports multiple authentication methods for connecting to Azure DevOps APIs. For detailed setup instructions, configuration examples, and troubleshooting tips, see the Authentication Guide.
Supported Authentication Methods
Personal Access Token (PAT) - Simple token-based authentication
Azure Identity (DefaultAzureCredential) - Flexible authentication using the Azure Identity SDK
Azure CLI - Authentication using your Azure CLI login
Example configuration files for each authentication method are available in the examples directory.
Azure DevOps Server (on-prem) supports PAT authentication only. Azure Identity and Azure CLI are supported for Azure DevOps Services.
Environment Variables
For a complete list of environment variables and their descriptions, see the Authentication Guide.
Key environment variables include:
Variable | Description | Required | Default |
| Authentication method ( | No |
|
| Full URL to your Azure DevOps organization or Server collection (e.g., | Yes | - |
| Personal Access Token (for PAT auth) | Only with PAT auth | - |
| Default project if none specified | No | - |
| REST api-version for the tools that call the REST API directly (per-release values) | No |
|
| Azure AD tenant ID (for service principals) | Only with service principals | - |
| Azure AD application ID (for service principals) | Only with service principals | - |
| Azure AD client secret (for service principals) | Only with service principals | - |
| Logging level (debug, info, warn, error) | No | info |
Troubleshooting Authentication
For detailed troubleshooting information for each authentication method, see the Authentication Guide.
Common issues include:
Invalid or expired credentials
Insufficient permissions
Network connectivity problems
Configuration errors
Authentication Implementation Details
For technical details about how authentication is implemented in the Azure DevOps MCP server, see the Authentication Guide and the source code in the src/auth directory.
Available Tools
The Azure DevOps MCP server provides a variety of tools for interacting with Azure DevOps resources. For detailed documentation on each tool, please refer to the corresponding documentation.
User Tools
get_me: Get details of the authenticated user (id, displayName, email) (Azure DevOps Services only)
Organization Tools
list_organizations: List all accessible organizations (Azure DevOps Services only)
Project Tools
list_projects: List all projects in an organizationget_project: Get details of a specific projectget_project_details: Get comprehensive details of a project including process, work item types, and teams
Repository Tools
list_repositories: List all repositories in a projectget_repository: Get details of a specific repositoryget_repository_details: Get detailed information about a repository including statistics and refsget_file_content: Get content of a file or directory from a repositoryget_repository_tree: List a repository's file tree from any path and depthcreate_branch: Create a new branch from an existing onecreate_commit: Commit multiple file changes to a branch using unified diffs or search/replace instructions
Work Item Tools
get_work_item: Retrieve a work item by IDcreate_work_item: Create a new work itemupdate_work_item: Update an existing work itemlist_work_items: List work items in a projectmanage_work_item_link: Add, remove, or update links between work itemscreate_work_item_attachment: Upload and attach a file to a work itemget_work_item_attachment: Download an attachment from a work itemdelete_work_item_attachment: Delete an attachment from a work item
Search Tools
search_code: Search for code across repositories in a projectsearch_wiki: Search for content across wiki pages in a projectsearch_work_items: Search for work items across projects in Azure DevOps
Pipelines Tools
list_pipelines: List pipelines in a projectget_pipeline: Get details of a specific pipelinelist_pipeline_runs: List recent runs for a pipeline with optional filtersget_pipeline_run: Get detailed run information and artifact summariesdownload_pipeline_artifact: Download a single artifact file as textpipeline_timeline: Retrieve the stage and job timeline for a runget_pipeline_log: Retrieve raw or JSON-formatted log contenttrigger_pipeline: Trigger a pipeline run with customizable parameters
Wiki Tools
get_wikis: List all wikis in a projectget_wiki_page: Get content of a specific wiki page as plain text
Pull Request Tools
create_pull_request- Create a new pull requestget_pull_request- Get a pull request by IDlist_pull_requests- List pull requests in a repositoryadd_pull_request_comment- Add a comment to a pull requestget_pull_request_comments- Get comments from a pull requestupdate_pull_request- Update an existing pull request (title, description, status, draft state, reviewers, work items)get_pull_request_changes- List changes in a pull request and policy evaluation statusget_pull_request_checks- Summarize status checks, policy evaluations, and their related pipelines
For comprehensive documentation on all tools, see the Tools Documentation.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for contribution guidelines.
Star History
License
MIT
Available Tools
49 toolsadd_pull_request_commentC
Add a comment to a pull request (repositoryId optional; derived from pullRequestId when omitted)
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | The status to set for a new thread | |
| content | Yes | The content of the comment in markdown | |
| filePath | No | The path of the file to comment on (for new thread on file) | |
| threadId | No | The ID of the thread to add the comment to | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| lineNumber | No | The line number to comment on (for new thread on file) | |
| repositoryId | No | The ID or name of the repository (optional; derived from pullRequestId when omitted) | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| parentCommentId | No | ID of the parent comment when replying to an existing comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a write operation. It says nothing about required permissions, whether adding a comment creates a new thread, whether the optional status enum only applies to newly created threads, or whether the operation is reversible or notifiable to reviewers.
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?
It is a single front-loaded sentence with the core action first and the caveat in parentheses; there is no filler. The sizing is efficient, though arguably too terse for a ten-parameter mutation 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 ten parameters, two distinct comment topologies, a status enum, no annotations, and no output schema, the definition is far too thin. An agent cannot tell from the description which parameter combination produces a thread-anchored comment versus a reply, or what the call returns, and nothing else in the structured data compensates.
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 every parameter is already documented by the input schema, which sets the baseline at 3. The description's only added semantic, repositoryId being derived from pullRequestId when omitted, is already present verbatim in that parameter's schema description, so no genuine meaning is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Add a comment to a pull request"), which lets an agent distinguish it from read-side siblings like get_pull_request_comments and from update_pull_request_thread_status. It stops short of explicitly naming an alternative, so it is clear but not fully differentiated.
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 only guidance is a note that repositoryId is optional and derived from pullRequestId. There is no statement of when to use this versus get_pull_request_comments, and nothing explains when to reply into an existing thread (threadId/parentCommentId) versus open a new file thread (filePath/lineNumber) versus a general PR comment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_branchC
Create a new branch from an existing one
| Name | Required | Description | Default |
|---|---|---|---|
| newBranch | Yes | Name of the new branch to create (without "refs/heads/", e.g., "feature/my-branch") | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| sourceBranch | Yes | Name of the branch to copy from (without "refs/heads/", e.g., "master") | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden and falls well short. It does not say whether the call fails if the branch already exists, whether it is idempotent, what permissions or write access are required, or whether branch protection applies — all critical for a mutation 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?
It is a single front-loaded sentence with no filler, which is structurally clean. However, for a 5-parameter mutation tool with no annotations, that brevity reads as under-specification rather than efficient 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?
A write operation with no annotations, no output schema, and five parameters gets only one sentence, leaving the agent without expected return values, error conditions, or side effects. The rich schema descriptions compensate partially, but the description itself is inadequate for the tool's complexity.
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% and the schema even documents the refs/heads naming convention and an example, so the description needn't repeat parameter details. The description adds no meaning beyond the schema, making the baseline 3 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 states a specific verb and resource (create a branch) plus the origin (from an existing one), so the operation is unambiguous. Siblings contain no other branch-creation tool, so no explicit differentiation is needed, but the branch is implicitly a repository branch only because the schema says so, not the description.
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 when-to-use / when-not-to-use guidance: nothing about when to branch versus committing to an existing branch, no prerequisite that the source branch must exist, and no mention that this pairs with create_pull_request for new-branch workflows. The only procedural hint (refs/heads formatting) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_commitA
Create a commit on an existing branch using file changes.
Provide plain branch names (no "refs/heads/").
⚠️ Each file path may appear only once per commit request—combine all edits to a file into a single change entry.
Prefer multiple commits when you have sparse or unrelated edits; smaller focused commits keep review context clear.
🎯 RECOMMENDED: Use the SEARCH/REPLACE format (much easier, no line counting!).
Option 1: SEARCH/REPLACE format (EASIEST) Simply provide the exact text to find and replace:
{
"changes": [{
"path": "src/api/services/function-call.ts",
"search": "return axios.post(apiUrl, payload, requestConfig);",
"replace": "return axios.post(apiUrl, payload, requestConfig).then(r => { processResponse(r); return r; });"
}]
}The server fetches the file, performs the replacement, and generates the diff automatically. No line counting, no hunk headers, no context lines needed!
Option 2: UNIFIED DIFF format (Advanced) If you prefer full control, provide complete unified diffs:
Each patch MUST have complete hunk headers: @@ -oldStart,oldLines +newStart,newLines @@
CRITICAL: Every @@ marker MUST include line numbers. Do NOT use @@ without line ranges.
Include 3-5 context lines before and after changes.
For deletions:
--- a/filepathand+++ /dev/nullFor additions:
--- /dev/nulland+++ b/filepath
Example unified diff:
{
"changes": [{
"patch": "diff --git a/file.yaml b/file.yaml\n--- a/file.yaml\n+++ b/file.yaml\n@@ -4,7 +4,7 @@ spec:\n spec:\n type: ClusterIP\n ports:\n- - port: 8080\n+ - port: 9090\n targetPort: http\n"
}]
}| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | List of file changes as either unified git diffs OR search/replace pairs | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| branchName | Yes | The branch to commit to (without "refs/heads/", e.g., "codex/test2-delete-main-py") | |
| repositoryId | Yes | The ID or name of the repository | |
| commitMessage | Yes | Commit message | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and discloses important traits: the server fetches the file and generates the diff for search/replace, branch names must omit refs/heads/, and duplicate file paths are rejected. It does not cover permissions, failure modes, or what the successful response contains.
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 front-loaded and well organized, but it is long and duplicates much of the schema with two full JSON examples. Repeated emphasis such as “much easier” and “no line counting” makes it less concise than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the key input complexity: two change formats, required branch naming, and commit-splitting guidance. It still lacks error conditions and return-value information, but is largely sufficient 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 the schema already documents repositoryId, branchName, commitMessage, and both change formats in detail. The description reinforces the preferred search/replace option and the branch-name rule, but mostly restates what the schema provides.
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 first sentence states a specific verb and resource: create a commit on an existing branch using file changes. It clearly distinguishes this from siblings such as create_branch or create_pull_request by focusing on adding changes to an existing branch.
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 useful usage constraints: plain branch names, each file path only once per commit, and preferring multiple commits for sparse edits. It does not explicitly name when to use this instead of create_branch or create_pull_request, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pull_requestC
Create a new pull request, including reviewers, linked work items, and optional tags
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | List of tags to apply to the pull request | |
| title | Yes | The title of the pull request | |
| isDraft | No | Whether the pull request should be created as a draft | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| reviewers | No | List of reviewer email addresses or IDs | |
| description | No | The description of the pull request (markdown is supported) | |
| repositoryId | Yes | The ID or name of the repository | |
| workItemRefs | No | List of work item IDs to link to the pull request | |
| sourceRefName | Yes | The source branch name (e.g., refs/heads/feature-branch) | |
| targetRefName | Yes | The target branch name (e.g., refs/heads/main) | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| additionalProperties | No | Additional properties to set on the pull request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It only implies mutation via "Create"; it says nothing about permission requirements, whether duplicate open PRs are rejected, how reviewers/work items are validated, or what happens on partial failure of a 12-parameter write.
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 with the action first and the salient optional payloads after. Efficient, though the trailing clause slightly duplicates schema content rather than adding new 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 12-parameter mutation tool with a nested free-form additionalProperties object, no annotations, and no output schema, the description is thin. It does not indicate what is returned (PR ID, URL, status) or how the open-ended additionalProperties field interacts with the typed fields, leaving the agent under-informed for a complex write.
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 all twelve parameters (including isDraft, additionalProperties, and the refs/heads branch examples) are already documented in the schema. The description's mention of reviewers, work items, and tags merely restates a subset of that schema and adds no new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a new pull request") and enumerates the notable optional payloads (reviewers, work items, tags). It is unambiguous against siblings like get_pull_request and update_pull_request, though it never names them or explicitly contrasts the create-vs-update boundary.
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 on when to use this versus update_pull_request, no prerequisites stated (source/target branches must already exist, repositoryId/projectId resolution, auth requirements), and no note about behavior when an identical PR already exists. The agent must infer all invocation conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wikiC
Create a new wiki in the project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the new wiki | |
| type | Yes | Type of wiki to create (projectWiki or codeWiki) | projectWiki |
| projectId | No | The ID or name of the project (Default: no default project) | |
| mappedPath | Yes | Folder path inside repository which is shown as Wiki (only for codeWiki) | / |
| repositoryId | No | The ID of the repository to associate with the wiki (required for codeWiki) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden, yet it says nothing about required permissions, whether creation fails on duplicate names, or what happens with the codeWiki vs projectWiki variants. The schema hints that repositoryId is required for codeWiki and mappedPath only applies there, but the description does not surface these behavioral rules.
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?
It is a single front-loaded sentence with zero filler, and the action is stated first. It is efficient, though the brevity edges toward under-specification for a six-parameter mutation 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?
For a six-parameter, three-required mutation tool with conditional variant logic (codeWiki needing repositoryId and mappedPath) and no annotations or output schema, this sentence provides essentially no guidance. An agent calling it correctly would be relying entirely on the schema, and would have no idea what the tool returns or how failures manifest.
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 every parameter including the enum for type and the codeWiki-only constraints is already documented in the schema. The description adds no meaning beyond that, which lands at the baseline 3 rather than lower.
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 gives a specific verb and resource ("Create a new wiki") plus a scope ("in the project"), so an agent knows exactly what object is produced. It does not differentiate from near siblings such as create_wiki_page or get_wikis, which is the only thing keeping it from 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?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives. The agent must infer from the name alone that this creates a container wiki rather than a page, and nothing addresses prerequisites like project or repository context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wiki_pageA
Create a new page in a wiki. If the page already exists at the specified path, it will be updated.
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| comment | No | Optional comment for the creation or update | |
| content | Yes | The content for the new wiki page in markdown format | |
| pagePath | Yes | Path of the wiki page to create. If the path does not exist, it will be created. Defaults to the wiki root (/). Example: /ParentPage/NewPage | / |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses that this is not create-only: an existing page at the path will be updated. It does not clarify whether existing content is replaced, whether history is preserved, or what permissions and failure conditions apply, leaving important mutation behavior unspecified.
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?
Two short sentences state the primary operation and then the important existing-page exception. The wording is direct, front-loaded, and contains no unnecessary 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?
Together with the fully documented flat schema, the description is sufficient for a basic invocation and communicates its central upsert behavior. It is less complete for correct tool selection and safe mutation because update_wiki_page overlap, overwrite semantics, and result behavior remain unexplained, with no output schema to fill the latter gap.
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 explains all six parameters, including Markdown content, page-path creation, and optional identifiers. The description adds a useful connection between pagePath and update-on-existing behavior, but little additional parameter-level detail beyond that.
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 and resource: creating a page within a wiki, rather than creating the wiki itself. The existing-path update behavior is useful, but the description does not distinguish this tool from the sibling update_wiki_page despite their overlapping capabilities.
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 page-existence condition provides some usage context by establishing create-or-update behavior at the supplied path. However, there is no explicit guidance on when to choose this tool over update_wiki_page, or any prerequisites such as identifying the wiki or checking whether the page exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_work_itemC
Create a new work item
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to add to the work item | |
| title | Yes | The title of the work item | |
| areaPath | No | The area path for the work item | |
| parentId | No | The ID of the parent work item to create a relationship with | |
| priority | No | The priority of the work item | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| assignedTo | No | The email or name of the user to assign the work item to | |
| description | No | Work item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. | |
| workItemType | Yes | The type of work item to create (e.g., "Task", "Bug", "User Story") | |
| iterationPath | No | The iteration path for the work item | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| additionalFields | No | Additional Azure DevOps fields to set by reference name (fields not exposed as named parameters). Example for Bug severity: { "Microsoft.VSTS.Common.Severity": "1 - Critical" } (accepted values: "1 - Critical", "2 - High", "3 - Medium", "4 - Low"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden for a mutation tool, yet it discloses nothing. It does not say what permissions/scope (organizationId, projectId) are needed, whether the write is reversible, what the server assigns automatically (ID, state, defaults), or what the call 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 single sentence is trivially short and contains no filler, but its brevity reflects under-specification rather than discipline. It is front-loaded but says nothing an agent could not infer from the name alone.
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 12 parameters, a required workItemType/title pair, a nested free-form additionalFields object, no annotations, and no output schema, the definition is far too thin. An agent gets no guidance on required-field semantics, defaulting behavior for organization/project, or expected 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%, with all 12 parameters documented in-schema including the tricky additionalFields HTML/no-CDATA rule, so the description need not repeat them. It adds no meaning beyond the schema, which is the baseline 3 case rather than a deficiency.
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 phrase 'Create a new work item' names a specific verb and resource, so an agent knows it is a create operation for the work-item entity. However, it is nearly a restatement of the tool name, and it gives no differentiation from siblings such as update_work_item, create_work_item_attachment, or manage_work_item_link.
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 when-to-use guidance, no prerequisites, and no mention of alternatives. Nothing indicates when an agent should create a work item here versus linking, attaching, or updating one via the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_work_item_attachmentA
Upload a file and attach it to a work item. The file is read from the local filesystem, uploaded to Azure DevOps, and linked to the specified work item.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment for the attachment | |
| fileName | No | The name to use for the attachment. If not provided, the name will be extracted from the file path. | |
| filePath | Yes | The absolute path to the file to upload as an attachment | |
| workItemId | Yes | The ID of the work item to attach the file to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a meaningful three-step behavior chain: read from local filesystem, upload to Azure DevOps, link to the work item. It omits preconditions (file must exist, size limits), permission requirements, overwrite/duplicate-name behavior, and what is returned.
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?
Two tight sentences, no filler, with the core action front-loaded and the mechanism following. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the workflow but leaves gaps: it does not describe what is returned (e.g., attachment ID or link) or failure/permission behavior. Since parameters are fully covered by the schema, the remaining shortfall is mainly behavioral and return-value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters (workItemId, filePath, fileName, comment) fully documented in the schema, so the baseline is 3. The description adds no parameter-level detail beyond the schema, such as path format requirements or how fileName defaults are resolved.
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 a specific verb and resource ('Upload a file and attach it to a work item') and distinguishes itself from the read/delete attachment siblings through the create action. The second sentence clarifies the mechanism, so an agent knows exactly what the tool accomplishes.
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 it (attaching a local file to a work item) and notes the file is read from the local filesystem, which is a useful precondition hint. However, it never names alternatives such as get_work_item_attachment or delete_work_item_attachment, nor states when not to use it or what permissions are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_work_item_attachmentA
Delete an attachment from a work item. The attachment ID can be obtained from the work item relations.
| Name | Required | Description | Default |
|---|---|---|---|
| workItemId | Yes | The ID of the work item to delete the attachment from | |
| attachmentId | Yes | The ID (GUID) of the attachment to delete. Can be obtained from the work item relations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Delete' does imply a destructive mutation, but the description says nothing about permissions required, whether the deletion is permanent/irreversible, error behavior for a missing attachment, or any confirmation step.
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?
Two short sentences, purpose front-loaded, zero filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive tool with no output schema, the description covers purpose and ID sourcing adequately. The notable gap is any statement about the irreversibility or permission requirements of a delete, which matters more here because no annotations supply that context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description's note about sourcing the attachment ID merely repeats what the schema description for attachmentId already states, adding no new semantic value. Baseline 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?
States a specific verb (Delete) and resource (attachment from a work item), which cleanly separates it from the sibling get_work_item_attachment and create_work_item_attachment tools. An agent can identify the operation without opening the schema.
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 second sentence gives useful procedural guidance on where the attachmentId comes from ('work item relations'), which is real usage help. However, it offers no when-to-use/when-not framing, no prerequisites, and does not name any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_pipeline_artifactA
Download a file from a pipeline run artifact and return its textual content
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Pipeline run identifier | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| pipelineId | No | Optional guard; validates the run belongs to this pipeline | |
| artifactPath | Yes | Path to the desired file inside the artifact (format: <artifactName>/<path/to/file>) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It usefully discloses that only textual content is returned, which hints binary artifacts are not handled, but it says nothing about permissions needed, file-size or truncation limits, or error behavior when the runId/artifactPath does not resolve.
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 states the action, the source location, and the return type with zero filler. Nothing is redundant or buried.
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 four-parameter read tool with a fully documented schema and no output schema, the description covers what the agent gets back (textual content) and where it comes from. The remaining gaps — binary handling and large-file truncation — are minor but nonexistent in both schema and description.
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% — every parameter, including the optional pipelineId guard and the artifactPath format, is documented in the schema. The description adds no meaning beyond that, 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 gives a specific verb (Download) and a precise resource (a file from a pipeline run artifact), and adds that the result is the textual content. Combined with the name, an agent can distinguish it from repository-file tools like get_file_content and log tools like get_pipeline_log, though the description itself does not name those 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?
Usage is only implied: 'pipeline run artifact' scopes it away from repo files and logs, but there is no explicit when-to-use statement, no mention of the alternative retrieval tools, and no preconditions. Minimum-viable scoping without routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_repositories_treeA
Displays a hierarchical tree view of files and directories across multiple Azure DevOps repositories within a project, based on their default branches
| Name | Required | Description | Default |
|---|---|---|---|
| depth | Yes | Maximum depth to traverse within each repository (0 = unlimited) | |
| pattern | No | File pattern (wildcard characters allowed) to filter files by within each repository | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the Azure DevOps organization (Default: example-org) | |
| repositoryPattern | No | Repository name pattern (wildcard characters allowed) to filter which repositories are included |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it usefully discloses that traversal is based on each repository's default branch, which is real behavioral context an agent could not otherwise know. It says nothing about whether non-default branches are reachable, output shape, size limits, or performance when many repos match.
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 well-formed sentence with the action and scope front-loaded and no filler. It leaves room for a sibling contrast that a fifth scoring level would require, but nothing is wasted.
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?
There is no output schema and no annotations, but the description establishes the key mental model (a tree rooted at each repo's default branch) plus the schema fully covers all five parameters. Given a simple read-only listing tool, what remains missing — return format and cost at scale — is minor.
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 depth, pattern, projectId, organizationId, and repositoryPattern are all documented in the schema, including the 0 = unlimited convention and wildcard support. The description adds only the 'default branches' scoping fact and no parameter-level meaning beyond the schema, so baseline 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 names a specific verb ('Displays') and resource ('hierarchical tree view of files and directories') and qualifies the scope as 'across multiple Azure DevOps repositories within a project'. This distinguishes it in substance from the single-repository sibling get_repository_tree, though that sibling is never named, so an agent must infer the boundary.
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?
'Across multiple repositories' implies the cross-repo use case, but there is no explicit guidance on when to pick this over get_repository_tree or list_repositories, and no mention of prerequisites or cost of spanning many repos. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentC
Get content of a file or directory from a repository
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the file or folder | / |
| version | No | The version (branch, tag, or commit) to get content from | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| versionType | No | Type of version specified (branch, commit, or tag) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses almost nothing. It does not say whether a directory path returns a listing or an error, whether file content is returned raw or encoded, whether large files are truncated, or what the response shape looks like — all critical for a 6-parameter 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?
One front-loaded sentence with no filler or repetition. It is efficient, though for a tool this broad the brevity edges toward under-specification rather than crispness.
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?
Six parameters, no annotations, and no output schema mean the description is the only place return and edge-case behavior could be explained, and it says nothing about them. An agent can guess the invocation but cannot anticipate the result of passing a directory path or a large file.
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 every parameter (path, version, versionType, projectId, repositoryId, organizationId) is already documented in the schema. The description adds no interpretation of defaults or interactions, such as how version and versionType pair together, so baseline 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 names a specific verb and resource ('Get content of a file or directory from a repository'), which is enough for an agent to tell it apart from tree-listing or search siblings. It falls short of 5 because it never names the adjacent alternatives (get_repository_tree, search_code) that could plausibly be confused with it.
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 when-to-use guidance at all: no indication of when to prefer this over get_repository_tree for browsing, or over search_code for locating a known string. The agent must infer the scope of use 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.
get_meA
Get details of the authenticated user (id, displayName, email)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a read-only operation ('Get details') but does not disclose authentication requirements, rate limits, or potential side effects. For a simple read tool, it is minimally adequate.
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 verb and purpose. Every word serves a purpose with no wasted space.
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 a simple tool, the description adequately lists the returned fields (id, displayName, email). It could mention possible additional fields or error conditions, but it is complete enough for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and input schema coverage is 100%. Per guidelines, 0 params yields a baseline of 4. The description adds no parameter information, which is appropriate as none are 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 clearly states the tool retrieves details of the authenticated user, listing specific fields (id, displayName, email). The verb 'Get' and resource 'authenticated user' are specific and distinct from siblings, which focus on repositories, pull requests, etc.
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 vs alternatives, but the purpose is self-evident as there are no other user info tools among siblings. The description does not provide when-not or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipelineC
Get details of a specific pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| pipelineId | Yes | The numeric ID of the pipeline to retrieve | |
| pipelineVersion | No | The version of the pipeline to retrieve (latest if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses nothing beyond the bare retrieval intent. It does not state that this is a non-mutating read, whether projectId is needed to disambiguate a pipeline, how versions are resolved, or what error behavior to expect.
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 short sentence with zero padding, and the resource is front-loaded. It is efficient, though its brevity reflects under-specification rather than disciplined compression.
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 the only place a caller could learn what "details" actually contains (configuration, stages, version metadata). It omits that entirely and never mentions the version-selection semantics that matter for this 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?
Schema description coverage is 100%, so pipelineId, projectId, and pipelineVersion are already documented in the schema, including the "latest if not specified" default. The description adds no meaning beyond that, 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?
"Get details of a specific pipeline" names a verb (get) and a resource (pipeline), but it essentially restates the tool name and adds only the qualifier "specific." It gives no basis for distinguishing this from close siblings such as list_pipelines, get_pipeline_run, get_pipeline_log, or pipeline_timeline.
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 when-to-use guidance, no mention of prerequisites (project scoping via projectId), and no routing to alternatives like list_pipelines for discovery or get_pipeline_run for execution data. The agent must infer the call context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_logC
Retrieve a specific pipeline log using the timeline log identifier
| Name | Required | Description | Default |
|---|---|---|---|
| logId | Yes | Log identifier from the timeline record | |
| runId | Yes | Pipeline run identifier | |
| format | No | Optional format for the log contents (plain or json) | |
| endLine | No | Optional ending line number for the log segment | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| startLine | No | Optional starting line number for the log segment | |
| pipelineId | No | Optional pipeline numeric ID for reference only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden. It states 'Retrieve' indicating a read operation, but omits whether it's safe, requires auth, handles missing logs, or returns partial content via startLine/endLine. 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?
A single, front-loaded sentence with no wasted words. It is appropriately sized, though it could include slightly more context without harming 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?
The tool has 7 parameters and no output schema. The description does not explain what the log contains, how to use range parameters, or what to expect from the 'format' enum. This leaves key context missing for an agent to call it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described in the schema. The description adds no meaning beyond the schema; it only reiterates that a log identifier is used. Baseline 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?
States a specific verb and resource: 'Retrieve a specific pipeline log'. The phrase 'using the timeline log identifier' hints at the input source and distinguishes it from a general log fetch. However, it does not explicitly contrast with siblings like pipeline_timeline or get_pipeline_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?
Provides no explicit when-to-use guidance, prerequisites, or alternatives. The mention of 'timeline log identifier' implies you need a logId from the timeline tool, but it doesn't state when to use this over pipeline_timeline or how to obtain the ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_runC
Get details for a specific pipeline run
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Pipeline run identifier | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| pipelineId | No | Optional guard; validates the run belongs to this pipeline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and discloses almost nothing: not whether the call is read-only, what happens when the run ID does not exist, whether projectId/pipelineId mismatches cause errors, or what shape the response takes. Only the word 'Get' hints at a non-mutating read.
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?
It is a single front-loaded sentence with no filler, which is structurally clean. But the brevity is achieved by omission rather than efficiency — the one clause conveys little beyond the tool name.
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 annotations and no output schema, the description is the only place to learn what a successful result contains and how failures surface, and it says nothing about either. For a three-parameter lookup with an optional validation guard, that leaves real gaps for an agent deciding whether and how to call it.
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 explains runId, projectId, and the pipelineId guard, which sets the baseline at 3. The description adds no extra meaning about scoping, defaults, or the guard's error behavior.
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 names a verb ('Get') and a resource ('details for a specific pipeline run'), so the basic intent is legible. However, it never clarifies what 'details' covers and does not distinguish this tool from adjacent siblings such as pipeline_timeline, get_pipeline_log, or list_pipeline_runs, which plausibly return overlapping information.
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 when-to-use guidance, no prerequisites, and no mention of alternatives. An agent must infer on its own that this is the single-run lookup versus list_pipeline_runs or the timeline/log tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectC
Get details of a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden, yet it says nothing about permissions, error behavior when a project is missing, whether 'details' includes members or repos, or whether the lookup is read-only. Only the weak implicature of the verb 'Get' signals a non-mutating 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?
A single front-loaded sentence with no filler or repetition. It is arguably too thin rather than too verbose, but in terms of structure and waste there is nothing to trim.
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 lookup tool with no annotations and no output schema, the description should clarify what 'details' returns and how it differs from the near-duplicate sibling. Neither is addressed, leaving real ambiguity about scope and return content.
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 projectId and organizationId documented including their defaults, so the schema does the heavy lifting. The description adds no meaning beyond that, which matches the baseline for fully covered schemas.
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 names a specific verb (get) and resource (project) with a singular scope, so the basic operation is legible. However, it does not distinguish this tool from the sibling 'get_project_details', which sounds functionally identical, leaving an agent unable to choose between them from the text alone.
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 versus 'list_projects' or 'get_project_details', nor any prerequisite or exclusion. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_detailsB
Get comprehensive details of a project including process, work item types, and teams
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| includeTeams | Yes | Include associated teams in the project result | |
| includeFields | Yes | Include field information for work item types | |
| includeProcess | Yes | Include process information in the project result | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| expandTeamIdentity | Yes | Expand identity information in the team objects | |
| includeWorkItemTypes | Yes | Include work item types and their structure |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the behavioral burden; it implies a read via 'Get' and notes some included data, but does not state permissions, side effects, defaults, required flag behavior, or error behavior. It provides only 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?
It is a single front-loaded sentence with no filler or repetition, so it is appropriately concise. The terseness contributes to other gaps, but on this dimension it is 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?
For a seven-parameter read tool with no annotations and no output schema, the description should clarify return shape and required include flags; it only names three included sections and omits fields and expansion behavior. The schema is rich on parameters, which keeps this from being worse, but the description is not fully 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 schema already documents all seven parameters and defaults; baseline is 3. The description names process, work item types, and teams but omits fields, expandTeamIdentity, and the fact that include flags are required booleans, adding little beyond 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 names a specific verb and resource ('Get details of a project') and lists process, work item types, and teams, so the core purpose is clear. It does not distinguish this tool from the sibling get_project or list_projects, so it stops 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?
There is no explicit guidance on when to choose this over get_project, list_projects, or other siblings, nor any prerequisites or exclusions. 'Comprehensive details' only weakly implies a detailed retrieval use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestB
Get a pull request by ID (no repositoryId required; best for Azure DevOps Server where PR IDs are project-scoped)
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID or name of the project | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. 'Get' implies a read, but nothing states required permissions, whether the response includes reviewers/changes/checks, or how it behaves when the project-scoped ID does not exist. Only the ID-scoping behavior is disclosed.
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 with the key fact (no repositoryId needed) stated first and no filler. The parenthetical packaging of the scoping note is slightly terse but costs nothing in clarity.
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 full schema coverage and no output schema, the essentials are present. Still, with zero annotations, the agent gets no signal about permissions, error behavior, or what facets of the pull request come back, which leaves the mutation/read profile and return shape underspecified.
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 projectId, pullRequestId, and organizationId are already documented in the schema. The description adds only the notable point that pullRequestId is resolved within the project scope rather than a repository, which is marginal value beyond the schema 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?
States a specific verb and resource ('Get a pull request by ID') and adds a scoping qualifier that separates it from a repositoryId-based variant. It is clear what the tool does, though the contrasting tool it alludes to is never named, so differentiation relies on inference.
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 'best for Azure DevOps Server where PR IDs are project-scoped' gives a genuine usage context that implies an alternative for cloud/organization-scoped lookups. However, that alternative is never named and no explicit when-not-to-use condition or prerequisite is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_changesA
Get the files changed in a pull request, their unified diffs, source/target branch names, and the status of policy evaluations
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose the returned content well (files, diffs, branches, policy status), but it is silent on truncation of large diffs, pagination, required permissions, and whether policy evaluation results may be stale or pending.
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 enumerates the returned artifacts with zero redundant or filler wording. Every clause earns its place by telling the agent what it will receive.
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 read-only, four-parameter retrieval tool with no output schema, describing the return payload is the critical missing piece and the description covers it. It falls short only on operational caveats (diff size limits, permissions), which are secondary for a simple getter.
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 all four parameters (projectId, repositoryId, pullRequestId, organizationId) are already documented in the schema, including defaults for projectId and organizationId. The description adds no additional meaning about parameter interactions or scoping.
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 names a specific verb ('Get') and a specific resource ('files changed in a pull request') and enumerates the payload: unified diffs, source/target branch names, and policy evaluation status. It is clearly distinct from sibling tools such as get_pull_request (metadata) or get_pull_request_comments, though it never names those siblings explicitly.
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 only implied: an agent can infer this is for inspecting the diff of a specific PR, and the presence of get_pull_request and get_pull_request_comments suggests the intended split of responsibilities. There is no explicit statement of when to prefer this tool, no prerequisites, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_checksA
Summarize the latest status checks and policy evaluations for a pull request.
Surfaces pipeline and run identifiers so you can jump straight to the blocking validation.
Pair with pipeline tools (e.g., get_pipeline_run, pipeline_timeline) to inspect failures in depth.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It discloses output content ('pipeline and run identifiers') and implies a read-only summary, but never states that it is non-mutating, nor says anything about permissions, scoping to the default organization, or whether only the latest run per check is returned.
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?
Short and front-loaded: the purpose sentence comes first, then two supporting bullets. The clause 'so you can jump straight to the blocking validation' is mildly promotional, but no sentence is redundant or padding.
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 four-parameter, non-mutating read tool with no output schema, the description covers the purpose, the shape of what is surfaced, and the natural follow-up tools. What remains missing is minor: no mention of whether checks for non-latest commits are excluded, and no explicit read-only assurance.
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 organizationId, projectId, repositoryId and pullRequestId are already documented with defaults. The description adds no meaning beyond the schema — it never clarifies that repositoryId and pullRequestId are required or how ID vs. name is resolved.
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 a specific verb ('summarize') and a specific resource ('latest status checks and policy evaluations for a pull request'), which cleanly separates it from get_pull_request and get_pull_request_changes. An agent can tell what this returns without opening the schema.
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?
Explicitly routes the agent forward: pair with get_pipeline_run and pipeline_timeline to inspect failures in depth, which names concrete alternatives. It gives clear positive context but no exclusions (e.g., when to use get_pull_request instead), so it stops short of a full when/when-not rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_commentsC
Get comments from a specific pull request
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of threads/comments to return | |
| threadId | No | The ID of the specific thread to get comments from | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| includeDeleted | No | Whether to include deleted comments | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden and discloses almost nothing: it does not confirm this is a read-only operation, does not mention pagination behavior for 'top', and does not say whether deleted comments are excluded by default. For a 7-parameter retrieval tool this leaves meaningful behavioral questions unanswered.
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 clear, front-loaded sentence with no wasted wording. Its brevity is efficient, though it edges toward under-specification given the tool's seven parameters.
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 annotations, no output schema, and seven parameters, the description should explain the return shape (threads vs. flat comments) and default filtering behavior. It supplies none of that, leaving the agent dependent entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including top, threadId, includeDeleted, and organizationId is already documented in the schema. The description adds no meaning beyond that, making the baseline 3 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?
States a specific verb and resource ('get comments' from 'a specific pull request'), which is enough to distinguish it from write siblings like add_pull_request_comment or update_pull_request_thread_status. It does not, however, clarify how it differs from get_work_item_comments or whether thread-level versus PR-level retrieval is the point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_pull_request or get_pull_request_changes, and no mention of when the optional threadId/top/includeDeleted filters should be applied. The agent must infer all invocation context from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repositoryC
Get details of a specific repository
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden of behavioral disclosure. It does not state that this is a read-only operation, whether it fails for missing repositories, what fields are returned, or how projectId/organizationId defaults affect resolution.
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 with zero waste, but its brevity comes at the cost of substance rather than through efficient information density. There is no structure to speak of because there is only one clause.
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 lookup tool with three parameters, no output schema, and no annotations, the description should explain what "details" includes and how the optional scoping parameters affect the result. Neither is covered, leaving the agent guessing about return shape and scope resolution.
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 all three parameters are already documented in the schema, which sets the baseline at 3. The description adds nothing about identifier formats (ID vs name) or default resolution behavior, so it does not exceed that 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 states a verb and resource ("Get details of a specific repository"), so the basic action is clear. However, the sibling list contains both get_repository_details and get_repository_tree, and the description gives no basis for choosing between them; it borders on restating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing says when this should be preferred over list_repositories, get_repository_details, or get_repository_tree. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_detailsC
Get detailed information about a repository including statistics and refs
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| refFilter | No | Optional filter for refs (e.g., "heads/" or "tags/") | |
| branchName | No | Name of specific branch to get statistics for (if includeStatistics is true) | |
| includeRefs | Yes | Whether to include repository refs | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| includeStatistics | Yes | Whether to include branch statistics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing beyond the fact that refs and statistics can be included. It does not say whether this is a read-only lookup, whether large repositories produce oversized responses, how refFilter interacts with includeRefs, or what happens when a branch is not specified.
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?
It is a single front-loaded sentence with no filler or redundancy. Its brevity is efficient, though it borders on under-specification for a seven-parameter 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?
For a seven-parameter tool with three required arguments, no annotations, and no output schema, one sentence is thin. The description never characterizes the returned structure or the cost of enabling statistics and refs, so an agent must infer the call's behavior entirely from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the seven parameters already carries its own explanation, including refFilter examples and the branchName/includeStatistics dependency. The description merely echoes 'statistics and refs' and adds no syntax, defaults, or interaction detail beyond the schema, which is the expected 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?
The description gives a specific verb and resource ('Get detailed information about a repository') and names the payload elements (statistics and refs), which is more than a tautology. It stops short of distinguishing itself from close siblings such as get_repository or get_repository_tree, so an agent cannot tell from the text alone which of those to pick.
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 statement of when to use this tool, no prerequisites, and no mention of the alternative siblings (get_repository, list_repositories, get_repository_tree). Usage is only implied by the word 'detailed'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_treeB
Displays a hierarchical tree view of files and directories within a single repository starting from an optional path
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path within the repository to start from | / |
| depth | Yes | Maximum depth to traverse (0 = unlimited) | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses almost nothing beyond the basic action: no note on permission requirements, no warning that depth 0 means unlimited traversal and can return very large trees, and no indication of response shape beyond the phrase "hierarchical tree view".
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 with no filler; the action and scope come first. It is efficient, though it is also thin enough that brevity comes at the cost of guidance.
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 read-only tree-listing tool with fully described parameters, the core need is covered. However, there is no output schema and the description does not clarify the returned structure or the unlimited-depth default, which matters for a potentially large result set.
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 and the schema already documents path, depth, repositoryId, projectId and organizationId. The description adds a little (path as a starting point) but mildly conflicts with the schema by calling the path "optional" when it is listed in the required array.
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 a specific verb and resource ("Displays a hierarchical tree view of files and directories") and narrows scope to "a single repository", which implicitly separates it from get_all_repositories_tree. It does not name that sibling explicitly, so the differentiation is inferable rather than stated.
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 when-to-use framing, no exclusions, and no mention of alternatives such as get_all_repositories_tree for multi-repo trees or get_file_content for individual file reads. An agent must infer selection from the noun phrase alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_pageC
Get the content of a wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| pagePath | Yes | The path of the page within the wiki | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. "Get" implies a read, but it says nothing about permissions needed, behavior on missing wiki/page, whether content is truncated, or the returned format — all relevant for a content-fetch 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?
It is a single front-loaded sentence with zero waste, which is structurally clean. But the brevity comes at the cost of under-specification, so it is efficient rather than appropriately sized for a four-parameter 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 annotations and no output schema, the description is the only place to explain behavior, yet it offers one bare sentence. An agent cannot tell what the content looks like, how pagePath is resolved, or what happens across project/organization scoping.
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 all four parameters (wikiId, pagePath, projectId, organizationId) are already documented in the schema, including defaults. The description adds nothing beyond that, 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?
States a specific verb and resource ("Get the content of a wiki page"), which is unambiguous on its own. It does not, however, distinguish itself from close siblings such as get_wikis, list_wiki_pages, search_wiki, or update_wiki_page, so an agent must infer the boundary.
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 when-to-use or when-not-to-use guidance is given, and no alternative is named. The agent is not told how this differs from search_wiki (which may return snippets) or list_wiki_pages (which returns paths).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wikisC
Get details of wikis in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only safety, pagination, result size, or return shape. Only the word 'Get' weakly implies a 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?
A single short sentence with no wasted wording, and the scope constraint ('in a project') is present up front. Its brevity is appropriate, though it comes at the cost of specification.
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, the description should explain what 'details' are returned and whether the result is a collection or a single wiki, but it does neither. For a tool with two optional parameters and no annotations, this leaves real 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?
The input schema documents both parameters at 100% coverage, including defaults for organizationId and the 'ID or name' accepted format, so the description need not compensate. However, it adds no meaning beyond the schema and doesn't clarify that both parameters are optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Get details of wikis in a project'), but 'wikis' plural leaves it ambiguous whether this lists all wikis in a project or returns details of a single wiki. It does not distinguish itself from siblings such as list_wiki_pages, get_wiki_page, or search_wiki.
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 list_wiki_pages, get_wiki_page, or search_wiki. The only contextual hint is 'in a project', which is implied by the projectId parameter in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_itemC
Get details of a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | The level of detail to include in the response. Defaults to "all" if not specified. | |
| workItemId | Yes | The ID of the work item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral details. 'Get details' implies a read-only operation, but it lacks specifics on permissions, error handling (e.g., missing ID), or side effects. The minimal description does not compensate for the absence of annotations.
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 and efficient, containing only the essential 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?
Given no output schema, the description should specify what 'details' includes (e.g., fields, relations). It fails to explain the return value, making it less useful for selection among similar tools like 'get_work_item' vs 'get_pull_request'. The context signals show siblings that return details, but this tool lacks specificity.
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 for both parameters ('workItemId' and 'expand'). The description adds no additional meaning beyond the schema, so a 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 verb 'get' and resource 'work item', indicating a retrieval operation for a specific item. It differentiates from sibling tools like 'list_work_items' (multiple items) and 'search_work_items' (search), but does not explicitly distinguish from other 'get' tools like 'get_pull_request'.
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 (e.g., 'search_work_items' or 'list_work_items'). There is no mention of prerequisites, context, 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_item_attachmentB
Download an attachment from Azure DevOps and save it to the local filesystem. The attachment ID can be obtained from the work item relations.
| Name | Required | Description | Default |
|---|---|---|---|
| outputPath | Yes | The absolute path where the attachment will be saved | |
| attachmentId | Yes | The ID (GUID) of the attachment to download. Can be obtained from the work item relations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the key side effect (writes a file to the local filesystem) and that the ID comes from work item relations, but it says nothing about overwrite behavior, required permissions, or failure modes when the path or ID is invalid.
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?
Two short, front-loaded sentences with no filler; the action and destination come first. The second sentence largely restates the attachmentId schema description, which is mild redundancy but not bloat.
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 filesystem-writing tool with no annotations and no output schema, the description should say more about what happens on success or failure and whether an existing file is overwritten. It covers the essentials of purpose and ID sourcing but leaves meaningful behavioral 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 both parameters are already documented in the schema, including the same note about obtaining the ID from work item relations. The description adds no syntax, format, or constraint detail beyond the schema, 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?
States a specific verb (download) and resource (attachment) plus the destination (local filesystem), which clearly separates it from create_work_item_attachment and delete_work_item_attachment siblings. It does not explicitly name those siblings, so it falls just short of the top tier.
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 only guidance is where to obtain the attachmentId ('from the work item relations'), which is input sourcing, not usage context. There is no statement of when to use this versus other attachment tools or what prerequisites must be met before downloading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_item_commentsC
Get comments and discussion history for a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of comments to return | |
| order | Yes | The order in which to sort the comments (Default: "asc") | asc |
| expand | Yes | The level of detail to include in the comments response (Default: "all") | all |
| projectId | No | The ID or name of the project | |
| workItemId | Yes | The ID of the work item | |
| includeDeleted | No | Include deleted comments | |
| continuationToken | No | Continuation token to retrieve the next page of comments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden. It says 'get comments and discussion history' but doesn't disclose read-only nature, pagination (continuationToken), includeDeleted behavior, or expand's effect on output. For a read operation with 7 params, this is insufficient 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?
A single, efficient sentence with zero waste. It is front-loaded and appropriately sized for 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?
Given 7 parameters, pagination, and no annotations or output schema, the description is too thin. It omits pagination guidance, expand behavior, and whether deleted comments are included by default. An agent has to consult the schema for every operational detail.
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 7 parameters. The description adds no parameter-specific details beyond 'comments and discussion history'. Baseline 3 is appropriate when the schema does all the work.
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?
Clear verb+resource: 'Get comments and discussion history for a specific work item'. It's specific and distinguishable from sibling tools like get_pull_request_comments, though it doesn't explicitly contrast with them. A solid, unambiguous statement of 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?
No guidance on when to use this tool versus alternatives. It doesn't mention pagination behavior (continuationToken) or how it relates to work item details. The sibling get_pull_request_comments is for PRs, but no routing 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_commitsB
List recent commits on a branch including file-level diff content for each commit
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of commits to return (Default: 10) | |
| skip | No | Number of commits to skip from the newest | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| branchName | Yes | Branch name to list commits from | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one meaningful trait beyond the name: each commit includes file-level diff content, which signals a potentially large payload. It omits ordering (newest-first), truncation/limits on diff size, and any permission requirements, leaving real behavioral gaps for a read 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?
A single sentence with zero filler, and the most consequential detail (file-level diff content) is packed into the same clause rather than buried. Nothing is redundant with the title or restated unnecessarily.
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 six-parameter list tool with no output schema and no annotations, the description covers what is returned at a high level (commits plus diffs) but not the shape of a commit record, ordering, or behavior under large histories. It is adequate to call the tool, but not complete enough to predict 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 all six parameters including top, skip, and organization defaults are already documented in the schema. The description only restates branch scoping ('on a branch') and adds no format or interaction detail beyond that, 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?
States a specific verb and resource ('List recent commits') plus scope ('on a branch'), which clearly separates it from create_commit and from diff-oriented siblings like get_pull_request_changes. It does not explicitly name a sibling to contrast with, so it stops 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?
There is no when-to-use or when-not-to-use guidance. The agent is not told whether to prefer this over get_pull_request_changes, get_repository_tree, or search_code when hunting for changes, nor are prerequisites (repo/branch access) mentioned. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organizationsA
List all Azure DevOps organizations accessible to the current authentication
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description merely states it lists organizations. Does not disclose authentication requirements, rate limits, or behavior when no organizations exist. For a read operation, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no superfluous words. Perfectly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers the purpose and scope adequately for a simple list tool. Could mention return format (e.g., array of organization names) or pagination, but not essential given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params), so description does not need to add parameter info. Baseline 4 is appropriate as there are no 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?
Description clearly states it lists Azure DevOps organizations, specifies scope 'accessible to the current authentication', and is distinct from sibling tools like 'list_projects'.
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 or alternatives, but the tool is straightforward with no parameters. Usage is implied, but lacks exclusionary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipeline_runsC
List recent runs for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Maximum number of runs to return (1-100) | |
| state | No | Filter by current run state | |
| branch | No | Branch to filter by (e.g., "main" or "refs/heads/main") | |
| result | No | Filter by final run result | |
| orderBy | Yes | Sort order for run creation date | createdDate desc |
| createdTo | No | Filter runs created at or before this time (ISO 8601) | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| pipelineId | Yes | Pipeline numeric ID | |
| createdFrom | No | Filter runs created at or after this time (ISO 8601) | |
| continuationToken | No | Continuation token for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but does not explicitly state that, nor does it explain pagination behavior via continuationToken, the default and maximum page size, the effect of projectId defaulting to no default project, or what the returned run records look like.
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 single sentence is front-loaded and contains no wasted wording. However, its extreme brevity leaves substantial behavior unstated for a ten-parameter tool, so conciseness comes at the cost of completeness.
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 ten-parameter listing tool with no annotations and no output schema, the description is far too thin. It should at minimum clarify pagination, default project context, and how it differs from get_pipeline_run and pipeline_timeline.
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 all ten parameters are already documented in the input schema, which sets the baseline at 3. The description adds no parameter meaning beyond the phrase 'recent,' and that phrase arguably conflicts with the schema's arbitrary createdFrom/createdTo range filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List recent runs for a pipeline.' An agent can tell it returns a collection of pipeline runs, but the word 'recent' is imprecise given that the schema exposes createdFrom/createdTo and orderBy. It also does not distinguish this tool from siblings like get_pipeline_run or pipeline_timeline.
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 when-to-use guidance, no mention of alternatives such as get_pipeline_run for a single run or pipeline_timeline for run details, and no stated prerequisites. Usage is only implied by the tool name and the phrase 'recent runs.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesC
List pipelines in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of pipelines to return | |
| orderBy | No | Order by field and direction (e.g., "createdDate desc") | |
| projectId | No | The ID or name of the project (Default: no default project) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it says nothing about pagination, default result size when `top` is omitted, or what happens when `projectId` is absent. It also doesn't state whether the result includes disabled pipelines or how the list is ordered by default.
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 short, front-loaded sentence with zero wasted words. It is efficient, though the terseness borders on under-specification rather than optimal density.
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 annotations, no output schema, and no usage framing, the description leaves the agent guessing about defaults and result behavior. For a collection-listing tool in a large sibling set of pipeline operations, this is thin.
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 all three parameters are already documented in the schema. The description adds no meaning beyond that, so baseline 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?
States a specific verb and resource ("List pipelines") with a scoping qualifier ("in a project"). An agent can tell it retrieves a collection rather than a single pipeline (get_pipeline) or runs (list_pipeline_runs), though the description never names those siblings explicitly.
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 when-to-use guidance, no prerequisites, no mention of when to prefer list_pipeline_runs or get_pipeline instead. The agent must infer selection from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
List all projects in an organization
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of projects to return | |
| skip | No | Number of projects to skip | |
| stateFilter | No | Filter on team project state (0: all, 1: well-formed, 2: creating, 3: deleting, 4: new) | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| continuationToken | No | Gets the projects after the continuation token provided |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about pagination defaults, whether results are capped, what happens when 'top'/'skip'/'continuationToken' are omitted, or what permissions are required. For a paged list operation with five optional controls, that is a meaningful 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 with no wasted words, though the brevity edges into under-specification rather than tight economy.
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 annotations, no output schema, and five optional paging/filter parameters, the description should explain paging behavior and the shape of the returned project list. It does none of that, leaving the agent to guess how to iterate through results.
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 every parameter including the stateFilter enum values and the continuationToken is already documented in the schema. The description adds only the organizational scope, which the organizationId field already conveys, so baseline 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?
States a specific verb and resource ('List all projects') and scopes it to an organization, which is enough to separate it from get_project, get_project_details, and list_organizations. It stops short of distinguishing list-style project retrieval from the detail endpoints by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as get_project for a single project or list_organizations for the parent scope. The agent must infer that this is the enumeration entry point 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_pull_requestsC
List pull requests in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Maximum number of pull requests to return (default: 10) | |
| skip | No | Number of pull requests to skip for pagination | |
| status | No | Filter by pull request status | |
| creatorId | No | Filter by creator ID (must be a UUID string) | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| reviewerId | No | Filter by reviewer ID (must be a UUID string) | |
| repositoryId | Yes | The ID or name of the repository | |
| sourceRefName | No | Filter by source branch name | |
| targetRefName | No | Filter by target branch name | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only implies a read operation. It says nothing about pagination behavior (top/skip), default scoping (organization, project, repository defaults), authentication requirements, or what the result set looks like.
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 with zero filler, which is structurally clean. Its brevity borders on under-specification rather than verbosity, but nothing written is wasted.
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 ten-parameter, filter-heavy listing tool with no annotations and no output schema, the description omits the essential context: that results are paginated and filterable by status, creator, reviewer, and branch, and what the response contains. An agent could call it, but only by reverse-engineering the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all ten parameters documented, including the status enum and default values, so the schema does the heavy lifting. The description adds no meaning beyond that, which is the baseline case for a fully documented 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 states a specific verb and resource ('List pull requests in a repository'), which is unambiguous about what the tool returns. It does not explicitly distinguish itself from siblings like get_pull_request or create_pull_request, but the 'List' verb makes the distinction reasonably clear.
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 get_pull_request or the search tools, and no mention of the supported filtering or pagination workflow. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesC
List repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: no default project) | |
| includeLinks | No | Whether to include reference links | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it discloses nothing beyond the operation itself. It does not state that the call is read-only, whether results are paginated or truncated, what fields a repository entry contains, or what happens when projectId is omitted despite the schema hinting there is no default project.
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 single sentence contains no wasted words and the operation is front-loaded, which is structurally sound. However, its extreme brevity is under-specification rather than disciplined conciseness for a tool with three optional parameters and no annotations.
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 inherently simple — a read-only listing with three optional, fully documented parameters and no output schema — so the description need not enumerate return fields. Still, with no annotations and no statement of result shape, paging, or default scoping, an agent is left guessing about the response and the no-default-project edge case.
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 all three parameters (projectId, includeLinks, organizationId) are already documented in the schema, setting the baseline at 3. The description adds no meaning about parameter interaction, such as how projectId resolves against organizationId or what effect includeLinks has on the payload.
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 gives a specific verb plus resource ("List repositories") and a scope ("in a project"), which is enough to distinguish it from get_repository or get_repository_details. It does not differentiate from the closest sibling, get_all_repositories_tree, which likely also enumerates repositories, 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?
There is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as get_all_repositories_tree or get_repository_details. The usage context is only implied by the phrase "in a project", leaving the agent to infer when this enumeration is preferred over the other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wiki_pagesC
List pages within an Azure DevOps wiki
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies read-only, but nothing is said about whether subpages are included, whether paging occurs, permission requirements, or limits — all material for a hierarchy-walking 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?
A single front-loaded sentence with zero filler or redundancy. It is efficient, though the brevity comes at the cost of guidance rather than being a flaw in structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with three parameters, no annotations, and no output schema, the description leaves key questions unanswered: whether the result is flat or hierarchical, whether it is paginated, and what a page entry contains. The agent knows only the one-line intent.
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 wikiId, projectId, and organizationId, including defaults. The description adds no meaning about how these scope the listing, 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?
States a specific verb and resource ('List pages within an Azure DevOps wiki'), which is clearly distinct from 'get_wiki_page' content retrieval or 'search_wiki'. However, it never names or contrasts those siblings explicitly, so differentiation is inferable rather than stated.
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 when-to-use guidance and no alternatives named. An agent must guess whether this is the right entry point versus get_wiki_page, get_wikis, or search_wiki, and no prerequisites (e.g., needing a wikiId from get_wikis first) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_work_itemsC
List work items in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of work items to return | |
| skip | No | Number of work items to skip | |
| wiql | No | Work Item Query Language (WIQL) query | |
| fields | No | List of additional fields to include in the response beyond the defaults (System.Id, System.Title, System.State, System.AssignedTo). Use full field reference names, e.g. "Microsoft.VSTS.Scheduling.StoryPoints", "System.IterationPath", "System.AreaPath". | |
| teamId | No | The ID of the team | |
| queryId | No | ID of a saved work item query | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden yet says nothing about pagination defaults, result ordering, permissions required, or what happens when wiql/queryId/top/skip are combined. 'List work items' tells the agent nothing about the shape or size of the response, which matters for an 8-parameter listing endpoint.
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 single sentence is efficient with zero waste, but the terseness is under-specification rather than disciplined brevity. There is no front-loaded structure covering filtering modes or pagination for a tool with eight optional parameters.
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 an eight-parameter tool with no annotations and no output schema, the description should at minimum explain the relationship between wiql, queryId, and the project/team scoping parameters, and whether results are paged. None of that is present, leaving the agent to guess at call semantics.
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 each of the eight parameters is already documented in the schema, including the WIQL query, saved query ID, and field reference names. The description adds no meaning beyond the schema, which is acceptable at baseline given the schema's completeness.
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 a specific verb and resource ('List work items') scoped to a project, so the agent knows this is a read/list operation over work items. However, it does nothing to distinguish itself from the sibling search_work_items, nor does it hint at how it relates to get_work_item or create_work_item.
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 when-to-use guidance, no mention of when to prefer this over search_work_items, and no indication of which query mechanism (wiql, queryId, or plain project listing) is appropriate. The agent must infer usage entirely from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_work_item_linkC
Add or remove links between work items
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment explaining the link | |
| operation | Yes | The operation to perform on the link | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| relationType | Yes | The reference name of the relation type (e.g., "System.LinkTypes.Hierarchy-Forward") | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| newRelationType | No | The new relation type to use when updating a link | |
| sourceWorkItemId | Yes | The ID of the source work item | |
| targetWorkItemId | Yes | The ID of the target work item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden, and it discloses almost nothing: removal of a link is likely destructive and irreversible, relation types have enumeration-like constraints, and permission/scope requirements (organizationId, projectId) are unstated. None of these behavioral traits appear in the description.
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 single sentence is lean with no filler, but it is under-specified rather than efficiently concise for an eight-parameter mutation tool. There is no front-loaded framing of the add/remove/update distinction.
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 an eight-parameter mutation tool with no annotations and no output schema, the definition should explain destructive semantics, the update path, and expected outcomes. The one-line description leaves the agent to reconstruct all of that from the schema alone.
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 all eight parameters including the enum, relation type reference names, and optional comment are documented in the schema itself. The description adds no meaning beyond that, which is the expected baseline when the schema is complete.
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 names a verb pair and resource ("Add or remove links between work items"), which is more specific than the name alone. However, the schema's operation enum also allows "update" and exposes newRelationType, neither of which the description acknowledges, so the stated purpose is incomplete and slightly out of step with what the tool actually 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?
There is no guidance on when to link versus when to use update_work_item, no prerequisites (both work items must exist, relation type must be valid), and no indication of when removal is appropriate. The agent must infer everything from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_timelineB
Retrieve the timeline of stages and jobs for a pipeline run, to reduce the amount of data returned, you can filter by state and result
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run identifier | |
| state | No | Optional state filter (single value or array) applied to returned timeline records | |
| result | No | Optional result filter (single value or array) applied to returned timeline records | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| pipelineId | No | Optional pipeline numeric ID for reference only | |
| timelineId | No | Optional timeline identifier to select a specific timeline record |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It only conveys that filtering shrinks the payload; it says nothing about ordering, pagination, permission requirements, or what happens when timelineId or pipelineId are omitted, and there is no output schema to fall back on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the core purpose front-loaded and the filtering hint appended. The comma splice makes the 'to reduce the amount of data' clause read awkwardly, but nothing is padded or redundant.
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 six-parameter read tool with no annotations and no output schema, the description covers the main action and the filters but leaves the return shape, record ordering, and the roles of projectId/pipelineId/timelineId entirely to the schema. Adequate minimum, but thin for the tool's complexity.
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 every parameter is already documented in the schema, including the single-value-or-array enum shape for state and result. The description only restates the two filters and adds no syntax or behavioral nuance beyond the schema, making the baseline of 3 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?
States a specific verb and resource: retrieve the timeline of stages and jobs for a pipeline run. That scope separates it from get_pipeline_run (run-level summary) and get_pipeline_log (log text), though it never names those siblings explicitly.
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?
Gives one piece of situational guidance — filter by state and result to reduce returned data — but no indication of when to prefer this over get_pipeline_run or get_pipeline_log, nor any prerequisite such as needing a valid runId from list_pipeline_runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeC
Search for code across repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| projectId | No | The ID or name of the project to search in (Default: no default project). If not provided, the default project will be used. | |
| searchText | Yes | The text to search for | |
| includeContent | Yes | Whether to include full file content in results (default: true) | |
| includeSnippet | Yes | Whether to include code snippets in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing. It does not state whether matching is literal or regex, case sensitivity, result ranking, pagination semantics, permission requirements, or what happens when projectId/organizationId are omitted beyond what the schema hints at.
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 with no filler or redundancy. Every word describes the tool's scope; the terseness is a coverage problem rather than a conciseness problem.
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 8 parameters, a nested filters object, 5 required fields, no annotations, and no output schema, one sentence is not sufficient. Missing are search semantics, default-project behavior, result shape, and pagination behavior, all of which an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter including the nested filters object documented in the schema, so the baseline is 3. The description adds no meaning beyond the schema — it does not explain how filters combine, whether searchText is literal or pattern-based, or how projectId and organizationId 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 names a concrete verb (Search) and resource (code) with an explicit scope ('across repositories in a project'), so an agent can distinguish it from search_wiki and search_work_items. It stops short of naming a sibling or stating how it differs from get_file_content or get_repository_tree, which keeps it below 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?
There is no when-to-use guidance, no when-not-to-use exclusions, and no mention of alternatives. An agent must infer from the name alone that this is the full-text/structural code lookup rather than file-tree traversal or single-file retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wikiC
Search for content across wiki pages in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| projectId | No | The ID or name of the project to search in. If omitted, the search runs across the organization when supported. | |
| searchText | Yes | The text to search for in wikis | |
| includeFacets | Yes | Whether to include faceting in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and largely drops it. It does not say whether matching is full-text or title-only, how results are ranked, that results are paginated, what facets are returned, or that omitting projectId triggers an organization-wide search (only the schema hints at that).
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 with zero filler, which is structurally clean. It is arguably too terse for a seven-parameter search with a nested filter object, but no wording is wasted.
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 seven parameters, a nested filters object, no annotations and no output schema, a one-line description leaves real gaps: result shape, facet semantics, pagination behavior, and permission/scope behavior are all unexplained. The schema covers parameter meaning, but nothing covers what the agent gets back or how to iterate.
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 top, skip, includeFacets, projectId and organizationId are all documented in the schema itself; the baseline of 3 applies. The description adds no meaning beyond the schema and, notably, does not mention that projectId is optional and widens scope when omitted.
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 pairs a specific verb ("Search") with a specific resource ("wiki pages") and a scope ("in a project"), which is far better than a tautology. It does not, however, distinguish this from sibling search tools such as search_code or search_work_items, so an agent must infer the boundary from the name alone.
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 rather than search_code, search_work_items, or the listing tools get_wikis/list_wiki_pages. No prerequisites, no mention of when a keyword search beats browsing the wiki tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_work_itemsC
Search for work items across projects in Azure DevOps
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| orderBy | No | Options for sorting search results | |
| projectId | No | The ID or name of the project to search in. If omitted, the search runs across the organization when supported. | |
| searchText | Yes | The text to search for in work items | |
| includeFacets | Yes | Whether to include faceting in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and delivers almost nothing: no statement about permissions, result limits, cost of wildcard searches, or what the faceting results look like. 'Across projects in Azure DevOps' conveys scope, but pagination, default behavior, and response shape are left entirely to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is structurally clean. Its brevity costs content rather than wasting it, but the sentence itself 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?
This is a relatively complex tool with 8 parameters, nested filter and orderBy objects, 4 required fields, and no output schema or annotations to fill gaps. One generic sentence is not enough to explain search semantics, pagination, or how results are faceted for an agent to call it confidently.
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 every parameter including the nested filters and orderBy entries is already documented in the schema. The description adds no additional meaning about search text syntax, supported operators, or how filters combine, so the baseline 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?
States a specific verb and resource ('Search for work items') and adds scope ('across projects in Azure DevOps'), so an agent knows this is a text-search operation rather than a plain listing. It does not explicitly contrast itself with the sibling list_work_items, leaving the differentiation to inference.
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 on when to use this versus list_work_items or get_work_item, no mention of prerequisites, and no note about when faceting or filtering is appropriate. The only hint of usage is the word 'search', which implies free-text lookup but is never contrasted against the sibling list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_pipelineC
Trigger a pipeline run
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | The branch to run the pipeline on (e.g., "main", "feature/my-branch"). If left empty, the default branch will be used | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| variables | No | Variables to pass to the pipeline run | |
| pipelineId | Yes | The numeric ID of the pipeline to trigger | |
| stagesToSkip | No | Stages to skip in the pipeline run | |
| templateParameters | No | Parameters for template-based pipelines |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it only implies a mutation via 'trigger'. It says nothing about required permissions, whether the run starts asynchronously, whether triggering is idempotent or can create duplicate runs, or what happens on invalid pipelineId.
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 four-word sentence with zero waste and the core action front-loaded. It is efficient but borders on under-specification for a six-parameter mutation tool, which keeps it from 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?
This is a complex mutation with six parameters, nested objects (variables, templateParameters), no annotations, and no output schema. The description explains neither the outcome of triggering (e.g., a created run and its identifier) nor any operational constraints, leaving the definition substantially incomplete relative to its complexity.
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% and every parameter (pipelineId, branch, projectId, variables, stagesToSkip, templateParameters) is documented in the schema, so the baseline of 3 applies. The description adds no meaning beyond the schema — for example, it never notes that pipelineId is the sole required field.
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 names a specific verb and resource — 'Trigger a pipeline run' — which is clearly distinct from read-oriented siblings such as list_pipelines, get_pipeline, and list_pipeline_runs. It does not, however, explicitly position itself against those siblings or mention what it returns, so it stops 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?
There is no guidance on when to use this tool versus list_pipeline_runs or get_pipeline_run, no mention of prerequisites (permissions, branch existence, required pipeline state), and no note on when triggering is inappropriate. An agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_requestB
Update an existing pull request with new properties, manage reviewers and work items, and add or remove tags
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The updated title of the pull request | |
| status | No | The updated status of the pull request | |
| addTags | No | List of tags to add to the pull request | |
| isDraft | No | Whether the pull request should be marked as a draft (true) or unmarked (false) | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| removeTags | No | List of tags to remove from the pull request | |
| description | No | The updated description of the pull request | |
| addReviewers | No | List of reviewer email addresses or IDs to add | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request to update | |
| addWorkItemIds | No | List of work item IDs to link to the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) | |
| removeReviewers | No | List of reviewer email addresses or IDs to remove | |
| removeWorkItemIds | No | List of work item IDs to unlink from the pull request | |
| additionalProperties | No | Additional properties to update on the pull request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description must carry the full behavioral burden. It usefully reveals that reviewers, work items, and tags are handled as add/remove pairs, but it omits how mutation actually behaves: whether this is a partial update, whether omitted fields are cleared, what a status change to 'abandoned' or 'completed' implies, and what permissions are required.
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 with no filler; the operations are listed in a scannable order. It is efficient for a tool with this many parameters and stops well short of padding.
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?
This is a 15-parameter mutation with no annotations and no output schema, so the description should explain partial-update semantics, required IDs, the organizationId/projectId defaults, and status-change consequences — none of which appear. The 100% schema coverage partially compensates for parameter detail, but the behavioral picture an agent needs to call this safely is missing.
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 every one of the 15 parameters is already documented in the schema and the baseline of 3 applies. The description adds only a top-level grouping of capabilities (properties, reviewers, work items, tags) and no format, default, or interaction semantics beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Update an existing pull request") and enumerates the updateable surface: properties, reviewers, work items, and tags. That distinguishes it from create_pull_request and from add_pull_request_comment, but it never names a sibling explicitly.
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 only implied by "existing pull request" — the agent can infer this is for modifying, not creating or reading, a PR. There is no guidance on when to prefer this over update_pull_request_thread_status, add_pull_request_comment, or update_work_item for linked work items, and no stated prerequisites or status-transition rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_request_thread_statusC
Update the status of a comment thread in a pull request (repositoryId optional; derived from pullRequestId when omitted)
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | The status to set on the thread | |
| threadId | Yes | The ID of the thread to update | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| repositoryId | No | The ID or name of the repository (optional; derived from pullRequestId when omitted) | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
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 disclosure, yet it only says 'update' without addressing permissions, whether the change is reversible, whether notifications are triggered, or what happens to existing thread state. The note about repositoryId being derived is helpful but is parameter-level, not behavioral.
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?
It is a single, front-loaded sentence with no filler, and the core operation comes before the optional-parameter caveat. It is efficient, though it is short enough that it could have afforded one more clause of genuinely useful context.
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 six-parameter mutation tool with no annotations and no output schema, the description is thin but the schema itself is fully documented, which offsets much of the gap. An agent can call it correctly, but it lacks confirmation semantics and any statement of effects, so it is only minimum-viable.
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 six parameters, including the status enum and the repositoryId derivation. The description's parenthetical restates essentially the same repositoryId note found in the schema rather than adding new meaning, so baseline 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 gives a precise verb and resource: it updates the status of a comment thread on a pull request, which is a distinct operation from siblings such as update_pull_request or add_pull_request_comment. It does not explicitly name a sibling or contrast itself with one, so it stops 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?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites such as permissions or thread ownership, and no note on which statuses are legal or when to pick one. The only guidance is the parenthetical about repositoryId resolution, which is about a parameter rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wiki_pageC
Update content of a wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| comment | No | Optional comment for the update | |
| content | Yes | The new content for the wiki page in markdown format | |
| pagePath | Yes | Path of the wiki page to update | |
| projectId | No | The ID or name of the project (Default: no default project) | |
| organizationId | No | The ID or name of the organization (Default: example-org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and largely drops it. It never discloses that this is a destructive full-content overwrite, whether the page must exist, whether the update bumps revisions or requires a comment, or what permissions/scope (organization/project) are needed.
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 with zero padding, which is structurally clean. Its brevity is under-specification rather than verbosity, so it does not lose points for wordiness here.
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 six-parameter mutation tool with no annotations and no output schema, the description is far too thin: overwrite semantics, existence requirements, and permission/scope expectations are all missing. Only the schema's field descriptions provide context, and they say nothing about 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 every one of the six parameters (wikiId, pagePath, content, comment, projectId, organizationId) is already documented in the schema. The description adds no meaning beyond it — it does not even repeat that content must be markdown. 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?
States a specific verb and resource: 'Update content of a wiki page', so an agent knows this mutates an existing page's body. It is clear but does not differentiate from siblings such as create_wiki_page, get_wiki_page, or search_wiki, and never clarifies whether the new content replaces the whole page or is merged in.
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 when-to-use guidance at all: nothing says to prefer this over create_wiki_page for new pages, over get_wiki_page for reads, or what prerequisites (page must already exist, project/org scoping) apply. The agent must infer routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_work_itemC
Update an existing work item
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Overwrite/set the complete set of tags | |
| state | No | The updated state of the work item | |
| title | No | The updated title of the work item | |
| areaPath | No | The updated area path for the work item | |
| priority | No | The updated priority of the work item | |
| tagsToAdd | No | List of tags to append to the work item | |
| assignedTo | No | The email or name of the user to assign the work item to | |
| workItemId | Yes | The ID of the work item to update | |
| description | No | Work item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. | |
| tagsToRemove | No | List of tags to remove from the work item | |
| iterationPath | No | The updated iteration path for the work item | |
| additionalFields | No | Additional Azure DevOps fields to update by reference name (fields not exposed as named parameters). Example for Bug severity: { "Microsoft.VSTS.Common.Severity": "1 - Critical" } (accepted values: "1 - Critical", "2 - High", "3 - Medium", "4 - Low"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. |
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, and it says nothing beyond the name. It does not state that this is a partial update (only provided fields change), what happens to unspecified fields, permission requirements, or how the tags overwrite/append semantics interact across the three tag 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 single sentence is front-loaded and has no waste, but it is under-specified rather than efficient. Brevity here reflects a lack of content, not disciplined 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?
For a 12-parameter mutation tool with nested objects, no annotations, and no output schema, the description is far too thin. It should at minimum state the partial-update semantics and the resulting side effects, which an agent needs to invoke this safely.
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 12 parameters, including the tag overwrite/append/remove distinction and the additionalFields reference-name convention. The description adds no parameter meaning of its own, 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 names a clear verb (update) and resource (work item), so the basic action is understandable. However, it offers no differentiation from siblings like create_work_item, get_work_item, or manage_work_item_link, and adds nothing about scope or supported field set beyond the bare name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_work_item or get_work_item, nor any prerequisites or exclusions. The purpose is only inferable from the verb in the name.
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.
49 tool updates
v0.1.54- First observed
add_pull_request_comment - First observed
create_branch - First observed
create_commit - First observed
create_pull_request - First observed
create_wiki - First observed
create_wiki_page - First observed
create_work_item - First observed
create_work_item_attachment - First observed
delete_work_item_attachment - First observed
download_pipeline_artifact - First observed
get_all_repositories_tree - First observed
get_file_content - First observed
get_me - First observed
get_pipeline - First observed
get_pipeline_log - First observed
get_pipeline_run - First observed
get_project - First observed
get_project_details - First observed
get_pull_request - First observed
get_pull_request_changes - First observed
get_pull_request_checks - First observed
get_pull_request_comments - First observed
get_repository - First observed
get_repository_details - First observed
get_repository_tree - First observed
get_wiki_page - First observed
get_wikis - First observed
get_work_item - First observed
get_work_item_attachment - First observed
get_work_item_comments - First observed
list_commits - First observed
list_organizations - First observed
list_pipeline_runs - First observed
list_pipelines - First observed
list_projects - First observed
list_pull_requests - First observed
list_repositories - First observed
list_wiki_pages - First observed
list_work_items - First observed
manage_work_item_link - First observed
pipeline_timeline - First observed
search_code - First observed
search_wiki - First observed
search_work_items - First observed
trigger_pipeline - First observed
update_pull_request - First observed
update_pull_request_thread_status - First observed
update_wiki_page - First observed
update_work_item
TDQS
Scored across 49 tools
Several near-duplicate pairs create real ambiguity: get_project vs get_project_details, get_repository vs get_repository_details, get_repository_tree vs get_all_repositories_tree, and get_pull_request_checks vs get_pull_request_changes. Descriptions do distinguish them (e.g. 'comprehensive details' vs basic), but an agent must read carefully to pick correctly. The bulk of the remaining tools (work items, pipelines, wikis) are cleanly separated by resource.
Almost everything follows a verb_noun snake_case pattern (list_*, get_*, create_*, update_*, search_*, manage_*). Minor deviations exist: get_me uses a pronoun object, get_all_repositories_tree adds an extra qualifier, and pipeline_timeline drops the verb entirely in favor of noun-first naming. These are readable but break the otherwise predictable convention.
49 tools is well beyond a manageable surface for one server, spanning six distinct domains (orgs/projects, repos/git, work items, search, pull requests, pipelines, wikis). The volume plus the redundant *_details siblings suggests the surface could be consolidated substantially. Agents will struggle to route reliably across this many options.
Read/create/update coverage is broad and genuinely deep (work item attachments and links, PR threads and checks, pipeline logs and timelines, wiki pages). However, delete operations are notably missing across most domains: no delete_work_item, delete_branch, delete_repository, delete_pull_request, or delete_wiki_page — only attachments have a delete tool. These gaps will force agents to declare dead ends on common lifecycle tasks.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps to manage work items, Git repositories, branches, commits, and projects through natural language commands.778 npm5MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Azure DevOps entities like projects, repositories, work items, pull requests, and pipelines.15 npm17MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with Azure DevOps, providing tools for managing work items, repositories, pipelines, and more through the Model Context Protocol.1008 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps projects, including work items, test results, Git repositories, and dependency analysis via the Model Context Protocol.-