Skip to main content
Glama
Tiberriver256

Azure DevOps MCP Server

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 @tiberriver256/mcp-server-azure-devops

Running 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.js

For iterative development (auto-reload):

npm run dev            # runs src/index.ts via tsx watch

Usage 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", "@tiberriver256/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", "@tiberriver256/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", "@tiberriver256/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

  1. Personal Access Token (PAT) - Simple token-based authentication

  2. Azure Identity (DefaultAzureCredential) - Flexible authentication using the Azure Identity SDK

  3. 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

AZURE_DEVOPS_AUTH_METHOD

Authentication method (pat, azure-identity, or azure-cli) - case-insensitive

No

azure-identity

AZURE_DEVOPS_ORG_URL

Full URL to your Azure DevOps organization or Server collection (e.g., https://server:8080/tfs/DefaultCollection)

Yes

-

AZURE_DEVOPS_PAT

Personal Access Token (for PAT auth)

Only with PAT auth

-

AZURE_DEVOPS_DEFAULT_PROJECT

Default project if none specified

No

-

AZURE_DEVOPS_API_VERSION

REST api-version for the tools that call the REST API directly (per-release values)

No

7.1

AZURE_TENANT_ID

Azure AD tenant ID (for service principals)

Only with service principals

-

AZURE_CLIENT_ID

Azure AD application ID (for service principals)

Only with service principals

-

AZURE_CLIENT_SECRET

Azure AD client secret (for service principals)

Only with service principals

-

LOG_LEVEL

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 organization

  • get_project: Get details of a specific project

  • get_project_details: Get comprehensive details of a project including process, work item types, and teams

Repository Tools

  • list_repositories: List all repositories in a project

  • get_repository: Get details of a specific repository

  • get_repository_details: Get detailed information about a repository including statistics and refs

  • get_file_content: Get content of a file or directory from a repository

  • get_repository_tree: List a repository's file tree from any path and depth

  • create_branch: Create a new branch from an existing one

  • create_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 ID

  • create_work_item: Create a new work item

  • update_work_item: Update an existing work item

  • list_work_items: List work items in a project

  • manage_work_item_link: Add, remove, or update links between work items

  • create_work_item_attachment: Upload and attach a file to a work item

  • get_work_item_attachment: Download an attachment from a work item

  • delete_work_item_attachment: Delete an attachment from a work item

Search Tools

  • search_code: Search for code across repositories in a project

  • search_wiki: Search for content across wiki pages in a project

  • search_work_items: Search for work items across projects in Azure DevOps

Pipelines Tools

  • list_pipelines: List pipelines in a project

  • get_pipeline: Get details of a specific pipeline

  • list_pipeline_runs: List recent runs for a pipeline with optional filters

  • get_pipeline_run: Get detailed run information and artifact summaries

  • download_pipeline_artifact: Download a single artifact file as text

  • pipeline_timeline: Retrieve the stage and job timeline for a run

  • get_pipeline_log: Retrieve raw or JSON-formatted log content

  • trigger_pipeline: Trigger a pipeline run with customizable parameters

Wiki Tools

  • get_wikis: List all wikis in a project

  • get_wiki_page: Get content of a specific wiki page as plain text

Pull Request Tools

For comprehensive documentation on all tools, see the Tools Documentation.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for contribution guidelines.

Star History

Star History Chart

License

MIT

Available Tools

49 tools
add_pull_request_commentB

Add a comment to a pull request (repositoryId optional; derived from pullRequestId when omitted)

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoThe status to set for a new thread
contentYesThe content of the comment in markdown
filePathNoThe path of the file to comment on (for new thread on file)
threadIdNoThe ID of the thread to add the comment to
projectIdNoThe ID or name of the project (Default: MyProject)
lineNumberNoThe line number to comment on (for new thread on file)
repositoryIdNoThe ID or name of the repository (optional; derived from pullRequestId when omitted)
pullRequestIdYesThe ID of the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)
parentCommentIdNoID of the parent comment when replying to an existing comment

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states 'Add a comment' without disclosing key behaviors: whether it creates new threads or replies, or side effects like permissions required. The agent lacks insight into comment creation mechanics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no waste. However, it could benefit from slightly more structure, e.g., separating threading and file comment modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters and no output schema or annotations, the description is too minimal. It omits essential context about thread creation, file commenting, status usage, and reply behavior, leaving an AI agent underinformed for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds only minimal value: repeating that repositoryId can be derived. It does not explain complex parameters like threadId vs filePath/lineNumber, but baseline is 3 due to full schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a comment') and the resource ('pull request'), with a useful note about repositoryId derivation. It distinguishes from sibling tools like create_pull_request and get_pull_request_comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers a hint about repositoryId being optional but does not specify when to use this tool versus alternatives like update_pull_request or how to handle threading vs file comments. No explicit when-not or alternative references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_branchB

Create a new branch from an existing one

ParametersJSON Schema
NameRequiredDescriptionDefault
newBranchYesName of the new branch to create (without "refs/heads/", e.g., "feature/my-branch")
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
sourceBranchYesName of the branch to copy from (without "refs/heads/", e.g., "master")
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. Main description is minimal, but input schema description adds useful tips (e.g., plain branch names, fully-qualified refs for PRs). Does not disclose failure modes, permissions, or side effects. Adequate with gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Main description is a single clear sentence. Input schema description adds useful context without excessive verbosity. Overall, concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no description of return values. For a creation tool, the agent needs to know what happens on success (e.g., branch object or acknowledgment). Lacks completeness despite schema tips.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The schema descriptions explain defaults, required fields, and formatting examples. Main description adds no parameter info, but schema is rich enough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new branch from an existing one' clearly states the action and the resource (branch). It distinguishes from other tools like create_commit or create_pull_request. However, it does not explicitly mention the version control context, though siblings imply it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Siblings like create_commit or create_pull_request are related but no comparison or exclusion criteria are provided.

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/filepath and +++ /dev/null

  • For additions: --- /dev/null and +++ 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"
  }]
}
ParametersJSON Schema
NameRequiredDescriptionDefault
changesYesList of file changes as either unified git diffs OR search/replace pairs
projectIdNoThe ID or name of the project (Default: MyProject)
branchNameYesThe branch to commit to (without "refs/heads/", e.g., "codex/test2-delete-main-py")
repositoryIdYesThe ID or name of the repository
commitMessageYesCommit message
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It describes that the server fetches files for SEARCH/REPLACE and generates diffs automatically, and warns about parsing failures for missing line numbers in hunks. However, it does not explicitly state that changes are committed immediately or mention rollback possibilities. Nonetheless, the behavior is adequately transparent for a commit operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is fairly long but well-organized with headers, bullet points, and code blocks. It front-loads key information. Some redundancy exists (e.g., line number warning appears in both description and parameter descriptions), but overall structure is clear and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters (4 required), no output schema, and multiple input formats, the description covers all essential aspects: purpose, input options (with examples), constraints, and usage tips. It is comprehensive enough for an agent to correctly invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds substantial value by explaining the two change formats (search/replace vs patch), clarifying that path is optional for patch but required for search/replace, and providing detailed examples. It also adds constraints like unique file paths per commit, which are not in schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Create a commit on an existing branch using file changes.' It clearly distinguishes from sibling tools like create_branch and create_pull_request by focusing only on committing 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool (committing to existing branches), contrasts with other operations, recommends using the SEARCH/REPLACE format for ease, advises preferring multiple commits for sparse edits, and warns that each file path may appear only once per commit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pull_requestB

Create a new pull request, including reviewers, linked work items, and optional tags

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoList of tags to apply to the pull request
titleYesThe title of the pull request
isDraftNoWhether the pull request should be created as a draft
projectIdNoThe ID or name of the project (Default: MyProject)
reviewersNoList of reviewer email addresses or IDs
descriptionNoThe description of the pull request (markdown is supported)
repositoryIdYesThe ID or name of the repository
workItemRefsNoList of work item IDs to link to the pull request
sourceRefNameYesThe source branch name (e.g., refs/heads/feature-branch)
targetRefNameYesThe target branch name (e.g., refs/heads/main)
organizationIdNoThe ID or name of the organization (Default: mycompany)
additionalPropertiesNoAdditional properties to set on the pull request

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It indicates a creation/mutation operation but does not disclose authentication requirements, side effects, notification behavior, or what happens to linked work items, reviewers, or tags after creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately terse for a one-line summary, though a complex 12-parameter mutation tool could benefit from slightly more structure around required inputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters (4 required), no annotations, and no output schema, the description is incomplete. It omits the required repository, branch, and title context, does not explain permissions or output behavior, and leaves the agent to rely entirely on the schema for invocation-critical details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 12 parameters including required fields and nested additionalProperties are documented in the schema. The description only lists a few optional fields (reviewers, linked work items, tags) and adds no syntax or meaning beyond what the schema already provides, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 new pull request') and clarifies scope with 'new,' which distinguishes it from update_pull_request and get_pull_request. It also names the main associative content (reviewers, linked work items, tags), so an agent can identify the tool 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.

Usage Guidelines2/5

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 alternatives named. The agent is left to infer that this tool is for creating rather than updating or fetching pull requests, which is the minimum but not explicit guidance.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the new wiki
typeYesType of wiki to create (projectWiki or codeWiki)projectWiki
projectIdNoThe ID or name of the project (Default: MyProject)
mappedPathYesFolder path inside repository which is shown as Wiki (only for codeWiki)/
repositoryIdNoThe ID of the repository to associate with the wiki (required for codeWiki)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

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 only says a wiki is created in the project, without stating permissions needed, side effects, reversibility, or whether codeWiki requires a repository. This is minimal 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for the core action, though it omits necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, three required, an enum, and type-dependent requirements (e.g., repositoryId required for codeWiki), the description is far too incomplete. It does not address the two wiki types, defaults, or the repository association needed for codeWiki.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 thoroughly. The description adds no additional parameter meaning, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('wiki'), clearly distinguishing it from creation of other resources. However, it does not distinguish itself from sibling tools like create_wiki_page, which is also about wiki content creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor any prerequisites or exclusions. The description only restates the action; it does not help an agent choose between create_wiki and create_wiki_page, or understand required 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiIdYesThe ID or name of the wiki
commentNoOptional comment for the creation or update
contentYesThe content for the new wiki page in markdown format
pagePathYesPath of the wiki page to create. If the path does not exist, it will be created. Defaults to the wiki root (/). Example: /ParentPage/NewPage/
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A3.5/5.0
Behavior3/5

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 the important non-obvious trait that an existing page at the path will be updated rather than erroring. It stops short of saying whether existing content is overwritten or merged, and says nothing about auth scope or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core action plus its upsert caveat are front-loaded. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The key surprise (silent update of an existing page) is covered, which is the most important thing for a mutation tool with no annotations or output schema. Still missing is any statement of what is returned and whether the update overwrites content, leaving a meaningful gap for a destructive-capable write.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters (including wikiId, pagePath, content, projectId, organizationId, comment) are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 page in a wiki') and adds the upsert qualifier, so the agent understands this is not purely additive. It does not differentiate from the sibling update_wiki_page, which overlaps when the page already exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and the 'already exists' clause, which hints that this can serve as an upsert. However, no sibling is named and there is no explicit guidance on when to prefer update_wiki_page or how to check existence first.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to add to the work item
titleYesThe title of the work item
areaPathNoThe area path for the work item
parentIdNoThe ID of the parent work item to create a relationship with
priorityNoThe priority of the work item
projectIdNoThe ID or name of the project (Default: MyProject)
assignedToNoThe email or name of the user to assign the work item to
descriptionNoWork item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags.
workItemTypeYesThe type of work item to create (e.g., "Task", "Bug", "User Story")
iterationPathNoThe iteration path for the work item
organizationIdNoThe ID or name of the organization (Default: mycompany)
additionalFieldsNoAdditional 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

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the entire behavioral burden, and it discloses nothing about permissions required, whether the operation is reversible, what relationships (e.g. parentId linking) are set up, or what is returned. The use of 'Create' at least signals a mutation, but no substantive behavioral context is offered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and free of padding, but its brevity reflects under-specification rather than disciplined conciseness. It does not earn its place as a full description of a 12-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 no annotations and no output schema, the description is far too thin. The rich schema mitigates the parameter gap (100% coverage), but nothing addresses permissions, project defaults, relationship side effects, or post-creation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 12 parameters are already documented in the schema, including the non-obvious additionalFields HTML-formatting notes and defaults. The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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 clear verb and resource, but it essentially restates the tool name create_work_item and adds no scope, differentiation, or detail about what a work item is. Siblings like update_work_item and get_work_item are distinguished only by the verb, with no explicit contrast drawn in the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 update_work_item, get_work_item, or list_work_items, nor any prerequisites such as required project/organization context. The agent must infer everything about invocation context.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNoOptional comment for the attachment
fileNameNoThe name to use for the attachment. If not provided, the name will be extracted from the file path.
filePathYesThe absolute path to the file to upload as an attachment
workItemIdYesThe ID of the work item to attach the file to

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workItemIdYesThe ID of the work item to delete the attachment from
attachmentIdYesThe ID (GUID) of the attachment to delete. Can be obtained from the work item relations.

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_artifactB

Download a file from a pipeline run artifact and return its textual content

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesPipeline run identifier
projectIdNoThe ID or name of the project (Default: MyProject)
pipelineIdNoOptional guard; validates the run belongs to this pipeline
artifactPathYesPath to the desired file inside the artifact (format: <artifactName>/<path/to/file>)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses the return shape (textual content, implying non-text/binary artifacts are not supported), but it omits access requirements, size limits, and failure behavior for missing paths.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause earns its place. It is appropriately sized, though it could have spent one more sentence on routing guidance without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with no annotations and no output schema, the description covers the core action and return type but leaves out routing versus siblings and error/limit behavior. It is minimally viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so runId, projectId, pipelineId, and artifactPath are all documented in the schema, including the artifactPath format and the pipelineId guard semantics. The description adds no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (download) plus resource (pipeline run artifact) and clarifies the return is textual content. It distinguishes the artifact source from repo-level fetches, though it does not name the closest sibling (get_file_content) to make the boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to prefer this over get_file_content, get_pipeline_log, or get_pipeline_run, and no prerequisites such as run status or permissions are mentioned. 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.

get_all_repositories_treeB

Displays a hierarchical tree view of files and directories across multiple Azure DevOps repositories within a project, based on their default branches

ParametersJSON Schema
NameRequiredDescriptionDefault
depthYesMaximum depth to traverse within each repository (0 = unlimited)
patternNoFile pattern (wildcard characters allowed) to filter files by within each repository
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the Azure DevOps organization (Default: mycompany)
repositoryPatternNoRepository name pattern (wildcard characters allowed) to filter which repositories are included

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden. It usefully discloses that the tree is built from each repository's default branch, which materially affects the result, but says nothing about permissions, traversal cost of a potentially large multi-repo tree, or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is well-sized for the scope it conveys, though it could have used remaining space for sibling routing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, read-oriented tree traversal with no output schema and no annotations, the description covers the what and the default-branch semantics but omits return format, size/performance implications, and differentiation from the sibling tree/list tools. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter (depth, pattern, projectId, organizationId, repositoryPattern) is already documented. The description adds no syntax, defaults, or format detail beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (displays) and resource (hierarchical tree view of files and directories) with clear scope: across multiple repositories within a project, based on default branches. This distinguishes it implicitly from get_repository_tree (single repo), but it never names the sibling, so the differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'across multiple repositories' scope implies a contrast with get_repository_tree and list_repositories, but the agent must infer the boundary rather than being told.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file or folder/
versionNoThe version (branch, tag, or commit) to get content from
projectIdNoThe ID or name of the project (Default: MyProject)
versionTypeNoType of version specified (branch, commit, or tag)
repositoryIdYesThe ID or name of the repository
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it discloses almost nothing: it does not state that this is a read-only operation, how directories differ from files in the response, how binary content is handled, or whether a version defaults to the default branch. Only the file/directory scope is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or repetition. It is efficient, though so terse that it borders on under-specification rather than genuine conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with no output schema and no annotations, a one-line description is inadequate. It omits return shape, directory-vs-file behavior, version resolution defaults, and any safety profile that the agent would need to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 the versionType enum and defaults are documented in the schema itself. The description adds no parameter meaning beyond what the schema already provides, which makes the baseline 3 appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (content of a file or directory from a repository), which is clear and actionable. However it offers no differentiation from siblings like search_code or get_repository_tree, so an agent must still infer which read tool fits the situation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus search_code, get_repository_tree, or get_repository. The purpose implies retrieval, but no context, prerequisites, or exclusions are stated.

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)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
pipelineIdYesThe numeric ID of the pipeline to retrieve
pipelineVersionNoThe version of the pipeline to retrieve (latest if not specified)

TDQS

C2.6/5.0
Behavior2/5

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 says nothing about permissions, whether a version must exist, how default/version resolution behaves, or what is returned—leaving the agent to guess.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and the description does not describe the returned details, so return-shape expectations are left unclear. Given the crowded sibling set of pipeline-related tools, more disambiguation is needed for the agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so projectId, pipelineId, and pipelineVersion are fully documented in the schema (including the 'latest if not specified' default). The description adds nothing beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('pipeline'), so the basic action is clear. However, it does not distinguish this tool from close siblings such as get_pipeline_run, pipeline_timeline, or list_pipelines, nor does it characterize what 'details' means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_pipeline_run, pipeline_timeline, or list_pipelines. Usage is only implied by the name ('get a specific pipeline'), with no prerequisites like required projectId context mentioned.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
logIdYesLog identifier from the timeline record
runIdYesPipeline run identifier
formatNoOptional format for the log contents (plain or json)
endLineNoOptional ending line number for the log segment
projectIdNoThe ID or name of the project (Default: MyProject)
startLineNoOptional starting line number for the log segment
pipelineIdNoOptional pipeline numeric ID for reference only

TDQS

C2.9/5.0
Behavior2/5

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 says what is retrieved. It does not disclose that log output can be large or paginated via startLine/endLine, whether ranges are inclusive, permission requirements, or the default format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the resource and identifier mechanism come first. It is efficient, though it is arguably too terse to earn a top score given the tool's 7-parameter surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no annotations, and no output schema, the description should do more work than one sentence. It omits segment/range behavior, format defaults, and the fact that the logId originates from a timeline record, leaving an agent to reconstruct the calling workflow from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all seven parameters are documented in the schema, so the baseline of 3 applies. The description only echoes the logId semantics ('timeline log identifier') and adds no meaning beyond the schema, e.g. how logId relates to runId or how line ranges behave.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and resource (pipeline log) and identifies the keying mechanism (timeline log identifier). An agent can distinguish it from list_pipelines or get_pipeline_run, but the description never names or contrasts those adjacent siblings for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 prerequisites, and no mention of alternatives such as pipeline_timeline (which supplies the logId) or get_pipeline_run. Usage is only implied by the tool name and the phrase 'using the timeline log identifier'.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesPipeline run identifier
projectIdNoThe ID or name of the project (Default: MyProject)
pipelineIdNoOptional guard; validates the run belongs to this pipeline

TDQS

C2.9/5.0
Behavior2/5

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. It implies a read ('Get details') but never states read-only safety, required permissions, behavior for an unknown runId, or what the 'details' contain. For an unannotated tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste, but it is arguably under-specified rather than truly concise for a tool with three parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 should be doing more work: it never explains what 'details' are returned or how the optional pipelineId guard behaves on mismatch. The agent has enough to issue the call but not to interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so runId, projectId, and the pipelineId guard are all documented in the schema itself. The description adds nothing beyond that baseline, which is the expected 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (details for a specific pipeline run), and 'specific' implicitly distinguishes it from the sibling list_pipeline_runs. It does not, however, differentiate itself from get_pipeline, pipeline_timeline, or get_pipeline_log, which an agent must disambiguate by name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no named alternatives among the many pipeline siblings (list_pipeline_runs, get_pipeline_log, pipeline_timeline). The agent is left to infer context entirely.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, or potential side effects. The description is too minimal to compensate for missing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no unnecessary words. It is concise, though could benefit from slightly more detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity and presence of a similar sibling tool ('get_project_details'), the description is incomplete as it does not differentiate the two tools. Without an output schema, more details on return values would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with descriptions, and schema_description_coverage is 100%. The description adds no additional meaning beyond the schema, achieving the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get details of a specific project' clearly indicates the tool retrieves project information. However, there is a sibling tool 'get_project_details' which may overlap in function, and the description does not distinguish between them, slightly reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_project_details' or 'list_projects'. No context on prerequisites or use cases is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_detailsC

Get comprehensive details of a project including process, work item types, and teams

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
includeTeamsYesInclude associated teams in the project result
includeFieldsYesInclude field information for work item types
includeProcessYesInclude process information in the project result
organizationIdNoThe ID or name of the organization (Default: mycompany)
expandTeamIdentityYesExpand identity information in the team objects
includeWorkItemTypesYesInclude work item types and their structure

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Get' implies a read, but nothing states permission requirements, whether the call is expensive (it fans out across process, work item types, and teams), or how the optional includes affect cost/response. It also omits that five of the include/expand booleans are marked required despite having defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the content categories are listed up front. It is efficient, though minimally informative rather than maximally useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with 5 required flags, no annotations, and no output schema, the description is too thin: it doesn't explain what the returned detail looks like, how the include flags change the payload, or why they must be passed explicitly. Adequate for a trivial read, insufficient for this parameter surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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, and a 3 is the baseline. The description adds only a generic restatement of three of the include flags and no syntax for projectId/organizationId resolution beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (project details) plus the content categories returned (process, work item types, teams), which is clear. However, it never distinguishes itself from the sibling tools get_project and list_projects, leaving the agent to guess which project-fetching tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, and no routing to alternatives such as get_project (lighter fetch) or list_projects. The agent gets a purpose but no selection criteria among four project-scoped siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pull_requestA

Get a pull request by ID (no repositoryId required; best for Azure DevOps Server where PR IDs are project-scoped)

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID or name of the project
pullRequestIdYesThe ID of the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description only states basic action without disclosing behavior like error handling, permissions, or response format. Minimal transparency beyond schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action, no superfluous information. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, and description does not mention return value structure. For a retrieval tool, response format is important. However, sibling context helps differentiate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. Description adds context by clarifying pullRequestId is project-scoped, providing meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get a pull request by ID' and distinguishes from siblings by noting no repositoryId required and project-scoped ID, differentiating from list_pull_requests and other pull request tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states usage context: 'no repositoryId required; best for Azure DevOps Server where PR IDs are project-scoped', guiding when to use this tool over alternatives that may require repositoryId.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
pullRequestIdYesThe ID of the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It only states the tool 'gets' data, implying a read operation, but does not explicitly confirm it is read-only, mention authorization needs, rate limits, or describe error behavior. This is insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that fully conveys the tool's purpose without any extraneous information. It is front-loaded with the core action and details the key outputs, earning its place with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters and no output schema, the description lists the returned data (diffs, branches, policy status) but omits detail on output format, pagination, error handling, or large data scenarios. While helpful, it is not fully complete for an agent to handle all cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all four parameters. The description adds no further detail about parameter semantics beyond what the schema provides. Baseline score of 3 is appropriate as no extra value is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource ('files changed in a pull request') and the specific data returned (unified diffs, branch names, policy evaluations). It effectively distinguishes this tool from siblings like get_pull_request, which likely returns metadata only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when needing diffs, branches, policy status) but does not explicitly state when not to use it or provide direct comparisons to alternatives. The context from the sibling list helps, but the description itself lacks explicit guidance.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
pullRequestIdYesThe ID of the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the tool summarizes and surfaces identifiers but does not explicitly state that it is read-only or non-destructive. With no annotations, the description carries the full burden, and while the behavior is implied, it lacks explicit safety disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and a bullet point, front-loaded with purpose, and every sentence adds value without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the output is a summary of status checks and surfaces pipeline/run identifiers, which is adequate for a read tool. However, without an output schema, more detail on the returned fields would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% parameter description coverage, so baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides (e.g., what projectId or pullRequestId mean).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'summarize[s] the latest status checks and policy evaluations for a pull request,' using a specific verb and resource. This differentiates it from siblings like get_pull_request (gets the PR itself) and get_pull_request_changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly guides pairing with pipeline tools (e.g., get_pipeline_run, pipeline_timeline) to inspect failures, indicating when to use this tool as an overview and when to use alternatives for deeper inspection.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of threads/comments to return
threadIdNoThe ID of the specific thread to get comments from
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
pullRequestIdYesThe ID of the pull request
includeDeletedNoWhether to include deleted comments
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states 'get comments' without mentioning important behaviors like pagination (top parameter), inclusion of deleted comments, or the ability to filter by threadId. The schema contains these details, but the description does not highlight them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (6 words), but brevity comes at the expense of completeness. While it is not verbose, it could include more detail without becoming excessively long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema and the tool has 7 parameters (2 required), the description should explain what the tool returns (e.g., list of comments) and possibly the structure. It does not, nor does it clarify the role of optional parameters like threadId or includeDeleted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the parameters are already documented. The description adds no extra meaning beyond the schema, earning a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get) and resource (comments from a specific pull request). It differentiates from siblings like add_pull_request_comment (write) and get_pull_request (PR details). However, it could be more precise by noting that it can also retrieve comments from a specific thread.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool over alternatives such as get_pull_request_changes or get_pull_request_checks. The description lacks context on when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_repositoryB

Get details of a specific repository

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behaviors like authentication requirements, error handling, or scope. It simply states 'get details', offering 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with no superfluous information. It is appropriately front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (3 params, no output schema), the description is minimally sufficient but lacks guidance on usage and behavioral traits, making it incomplete for complex decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra semantic value beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves details for a specific repository. However, it does not differentiate from a nearly identical sibling 'get_repository_details', which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_repository_details' or 'list_repositories'. The agent receives no context for selection.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
refFilterNoOptional filter for refs (e.g., "heads/" or "tags/")
branchNameNoName of specific branch to get statistics for (if includeStatistics is true)
includeRefsYesWhether to include repository refs
repositoryIdYesThe ID or name of the repository
organizationIdNoThe ID or name of the organization (Default: mycompany)
includeStatisticsYesWhether to include branch statistics

TDQS

C2.9/5.0
Behavior2/5

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 via 'Get' and mentions statistics and refs, but does not disclose permissions, side effects, rate limits, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It efficiently communicates the core purpose and the main optional data categories.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with seven parameters, no annotations, and no output schema, the description is too sparse. It does not clarify what 'detailed information' returns beyond statistics and refs, nor does it explain required parameters or access expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a documented meaning in the schema. The description adds only a high-level mention of statistics and refs, which does not provide syntax or filtering detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: retrieving detailed repository information including statistics and refs. It distinguishes itself from list-style siblings implicitly, but does not explicitly distinguish itself from near siblings such as get_repository or get_project_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The inclusion of statistics and refs implies a use case, but the agent must infer that from the description alone.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath within the repository to start from/
depthYesMaximum depth to traverse (0 = unlimited)
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdYesThe ID or name of the repository
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Displays' signals a read-only operation, but it says nothing about authentication requirements, result size or pagination for large trees, or how depth traversal affects output volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. Slightly compressed – it could have used the space to clarify the sibling relationship rather than restating the schema's path concept.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only traversal tool with full schema coverage and no output schema, the description is minimally adequate. It omits how large trees are returned and how this differs from the all-repositories tree tool an agent must choose between.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is documented in the schema, establishing a baseline of 3. The description adds the idea of starting from a path but no syntax, format, or behavioral detail beyond the schema; it also calls the path 'optional' while the schema lists it as required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 within a single repository'. The 'single repository' scoping implicitly separates it from get_all_repositories_tree, but it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope ('within a single repository ... starting from an optional path'), which suggests the multi-repo alternative, but there is no explicit when-to-use, when-not-to-use, or named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wiki_pageB

Get the content of a wiki page

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiIdYesThe ID or name of the wiki
pagePathYesThe path of the page within the wiki
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

B3.1/5.0
Behavior2/5

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-only retrieval but does not disclose permissions, pagination, error behavior, or return format for a page that may not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is as concise as possible for a simple lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents parameters and there is no output schema, but the description still omits usage context relative to search_wiki and list_wiki_pages. For a simple read tool this is minimally adequate, though not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no parameter-level meaning beyond the schema, making the baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get the content of a wiki page. It is clear what the tool does, but it does not differentiate from siblings such as search_wiki or list_wiki_pages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 when-not-to-use conditions, and no alternatives named. The agent must infer usage from the tool name and schema alone.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, but it says nothing beyond the name. It does not disclose that it is read-only, whether results are paginated, what the 'details' contain, or how defaults (MyProject/mycompany) resolve.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words, but its brevity comes from under-specification rather than tightness. Nothing is front-loaded beyond the bare verb and noun.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no annotations, and two optional parameters whose defaulting behavior is unexplained. The description does not clarify whether this returns a collection or a single wiki, leaving a meaningful gap for the calling agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both projectId and organizationId are already documented with defaults in the schema. The description adds no additional meaning, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb ('Get') and resource ('wikis'), but 'wikis' plural is ambiguous against siblings like get_wiki_page, list_wiki_pages, and create_wiki. It is not clear whether this returns a list of wikis or a single wiki's details, so an agent cannot distinguish it from siblings 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the related siblings (get_wiki_page, list_wiki_pages, search_wiki). The agent is left to infer usage entirely.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
expandNoThe level of detail to include in the response. Defaults to "all" if not specified.
workItemIdYesThe ID of the work item

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputPathYesThe absolute path where the attachment will be saved
attachmentIdYesThe ID (GUID) of the attachment to download. Can be obtained from the work item relations.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of comments to return
orderYesThe order in which to sort the comments (Default: "asc")asc
expandYesThe level of detail to include in the comments response (Default: "all")all
projectIdNoThe ID or name of the project
workItemIdYesThe ID of the work item
includeDeletedNoInclude deleted comments
continuationTokenNoContinuation token to retrieve the next page of comments

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of commits to return (Default: 10)
skipNoNumber of commits to skip from the newest
projectIdNoThe ID or name of the project (Default: MyProject)
branchNameYesBranch name to list commits from
repositoryIdYesThe ID or name of the repository
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

B3.3/5.0
Behavior3/5

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 discloses that results include file-level diff content, which is useful return behavior, and 'List' implies a read operation. However, it omits permissions, pagination/limit behavior, side effects, and rate context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It efficiently combines the operation, scope, and key return detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist, so the description should fill more gaps. It notes diff content but does not describe result structure, pagination, or auth defaults; parameters are covered by schema, but output context remains thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only echoes branch scope and does not add syntax, defaults, constraints, or meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (recent commits) plus the branch scope and that file-level diff content is included. It is clearly distinct from create_commit by verb, but does not explicitly name alternatives or differentiate from other read/list siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or alternatives are provided. An agent can infer it lists commits, but the description does not say when to choose it over related read tools such as get_pull_request_changes or search_code.

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesMaximum number of runs to return (1-100)
stateNoFilter by current run state
branchNoBranch to filter by (e.g., "main" or "refs/heads/main")
resultNoFilter by final run result
orderByYesSort order for run creation datecreatedDate desc
createdToNoFilter runs created at or before this time (ISO 8601)
projectIdNoThe ID or name of the project (Default: MyProject)
pipelineIdYesPipeline numeric ID
createdFromNoFilter runs created at or after this time (ISO 8601)
continuationTokenNoContinuation token for pagination

TDQS

C2.9/5.0
Behavior2/5

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 does not disclose that this is a read-only listing operation, nor does it mention pagination via continuationToken, default ordering, or the default limit of 50 runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no annotations and no output schema, the description is too thin. It omits key context such as pagination behavior, default sorting, and how it relates to sibling run-retrieval tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters are already documented in the schema. The description adds no parameter meaning beyond the schema baseline, which is appropriate for a score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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. It is clear what the tool does, but it does not distinguish itself from siblings like get_pipeline_run or pipeline_timeline, which also deal with pipeline runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 instead of get_pipeline_run, pipeline_timeline, get_pipeline_log, or list_pipelines. The description implies a listing use case but provides no explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pipelinesB

List pipelines in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of pipelines to return
orderByNoOrder by field and direction (e.g., "createdDate desc")
projectIdNoThe ID or name of the project (Default: MyProject)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only says 'list' without detailing default behavior (e.g., pagination, sorting direction, whether it returns all or a subset). The schema provides some parameter details, but the description adds no behavioral context beyond the verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded. It communicates the core purpose without waste, though it could be slightly more informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and the number of sibling tools, the description does not provide enough context about what the tool returns (e.g., list of pipeline summaries, metadata) or how it relates to other tools. It is incomplete for an AI agent to use confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all parameters have descriptions), so the description adds no additional meaning beyond what the schema provides. Baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List pipelines in a project' clearly states the verb (list) and resource (pipelines) with a scope (in a project). It distinguishes from siblings like get_pipeline (single pipeline) and list_pipeline_runs (pipeline runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., get_pipeline for a single pipeline, list_pipeline_runs for runs). The description gives no context about prerequisites or typical use cases.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of projects to return
skipNoNumber of projects to skip
stateFilterNoFilter on team project state (0: all, 1: well-formed, 2: creating, 3: deleting, 4: new)
organizationIdNoThe ID or name of the organization (Default: mycompany)
continuationTokenNoGets the projects after the continuation token provided

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral transparency. It only states 'list all projects' but fails to disclose pagination (via top, skip, continuationToken), ordering, authentication needs, or error scenarios. This is a significant gap for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but lacks structure. It is front-loaded but too minimal to cover all necessary information. Every sentence should earn its place; this one is adequate but not optimized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no output schema, and no annotations, the description is incomplete. It omits key context like pagination, default filtering, and relationship to sibling tools (e.g., list_organizations). An agent would lack sufficient detail to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, with each parameter described. The description adds no additional meaning beyond the schema, achieving the baseline of 3. No extra value is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and resource (projects in an organization), effectively distinguishing it from sibling tools like get_project or list_repositories. However, it could be more specific about pagination behavior to avoid ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like get_project (single project) or search tools. It lacks context for an agent to make an informed choice.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesMaximum number of pull requests to return (default: 10)
skipNoNumber of pull requests to skip for pagination
statusNoFilter by pull request status
creatorIdNoFilter by creator ID (must be a UUID string)
projectIdNoThe ID or name of the project (Default: MyProject)
reviewerIdNoFilter by reviewer ID (must be a UUID string)
repositoryIdYesThe ID or name of the repository
sourceRefNameNoFilter by source branch name
targetRefNameNoFilter by target branch name
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral disclosure. It states only the basic operation and omits pagination behavior, default result limits, permission requirements, and return characteristics, adding little beyond the schema's parameter definitions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is efficient, though arguably under-specified for a 10-parameter listing tool with no usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents parameters, and there is no output schema requiring return-value explanation. However, the description still omits usage context and behavioral details such as pagination and default result sizing, leaving the agent to rely entirely on structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters are already documented in the input schema. The description adds no additional meaning about filters, defaults, or parameter interactions, which is acceptable but not value-adding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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.' This clearly distinguishes the tool from mutable siblings like create_pull_request or update_pull_request, though it does not explicitly name alternatives such as get_pull_request for retrieving a single PR.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus siblings, nor does it mention prerequisites, exclusions, or filtering scope. The agent must infer that this is the bulk-listing counterpart to get_pull_request, but that inference is not supported by the description text.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe ID or name of the project (Default: MyProject)
includeLinksNoWhether to include reference links
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It does not mention read-only nature, pagination, authentication requirements, or any side effects. The description is too minimal to inform the agent about operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It is efficiently structured and front-loaded, though it may be too brief for completeness. It earns its place but could benefit from more detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and three optional parameters, the description lacks information about return values, pagination, or filtering behavior. For a listing tool, more context on what is listed and how results are presented is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so each parameter is already documented. The description adds no additional meaning beyond what the schema provides, meeting the baseline for adequate semantic support.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List repositories in a project' clearly states verb and resource, but it is vague and does not distinguish from sibling tools like 'get_all_repositories_tree' or 'get_repository_details' which also deal with listing repositories. The lack of specificity on scope or filtering reduces clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of prerequisites, when to prefer it over other repository listing tools, or what the tool does not do. The description offers no context for decision-making.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiIdYesThe ID or name of the wiki
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose whether listing is recursive, whether results are paginated, or what permissions are required — all relevant for a wiki-tree listing. Only the read-only nature is weakly implied by 'List'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is terse to the point of under-specification, but structurally clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter list tool with full schema coverage and no output schema, the description is minimally sufficient. It omits behavior an agent would want (recursion, pagination, auth scope), leaving the definition adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters documented in the schema, including defaults for projectId and organizationId. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (pages within an Azure DevOps wiki), which is clear enough to distinguish it from create_wiki_page or get_wiki_page. However, it does not explicitly differentiate itself from the nearby search_wiki or get_wikis siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no prerequisites, and no mention of alternatives such as search_wiki for filtered lookups or get_wiki_page for a single page. The agent must infer the routing decision from sibling names alone.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of work items to return
skipNoNumber of work items to skip
wiqlNoWork Item Query Language (WIQL) query
fieldsNoList 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".
teamIdNoThe ID of the team
queryIdNoID of a saved work item query
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral-disclosure burden. It does not state that this is a read-only operation, does not mention pagination via top/skip, does not explain WIQL behavior or default project/organization handling, and does not describe response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. However, for an 8-parameter listing tool with no output schema, it is too minimal to be considered appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 8 parameters, the description is not complete enough for correct invocation. It omits pagination semantics, query modes (WIQL vs saved query), default project/organization behavior, and what fields are returned by default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear parameter descriptions for top, skip, wiql, fields, teamId, queryId, projectId, and organizationId. The tool description adds no parameter meaning beyond restating that work items are in a project, so the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List') and resource ('work items') scoped to a project. It does not distinguish itself from sibling tools such as search_work_items, but the basic purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 search_work_items or other work-item tools. The only usage hint is the implicit project scope from the phrase 'in a project'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_timelineC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesRun identifier
stateNoOptional state filter (single value or array) applied to returned timeline records
resultNoOptional result filter (single value or array) applied to returned timeline records
projectIdNoThe ID or name of the project (Default: MyProject)
pipelineIdNoOptional pipeline numeric ID for reference only
timelineIdNoOptional timeline identifier to select a specific timeline record

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Retrieve' implies a read, and the filtering note hints at payload size, but nothing is said about permissions, pagination, response shape, or whether it is safe/non-mutating. For a 6-parameter tool this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action first. The trailing clause about reducing data is slightly awkwardly joined with a comma splice, but overall it is compact with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with fully documented parameters and no output schema, the description covers the core purpose and the main filter rationale. It leaves out the routing guidance against sibling pipeline tools and any behavioral detail, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 runId, state, result, projectId, pipelineId, and timelineId. The description restates the state/result filters but adds no format or defaulting detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Retrieve') and resource ('timeline of stages and jobs for a pipeline run'), which is distinct from siblings like get_pipeline_run or list_pipeline_runs. However it does not explicitly contrast itself with those siblings, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage hint is that filtering by state and result reduces returned data. There is no guidance on when to prefer this over get_pipeline_run, list_pipeline_runs, or get_pipeline_log, and no prerequisites such as needing a runId from a prior call.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesNumber of results to return (default: 100, max: 1000)
skipYesNumber of results to skip for pagination (default: 0)
filtersNoOptional filters to narrow search results
projectIdNoThe ID or name of the project to search in (Default: MyProject). If not provided, the default project will be used.
searchTextYesThe text to search for
includeContentYesWhether to include full file content in results (default: true)
includeSnippetYesWhether to include code snippets in results (default: true)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

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, but it only says 'Search for code.' It does not disclose that this is a read-only operation, how pagination works, whether results include content or snippets by default, or any permission or rate-limit context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It is concise and structurally sound, though it may be too terse for an 8-parameter tool with nested filters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with a nested filters object, no output schema, and no annotations, the description is incomplete. It omits return format, pagination behavior, filter capabilities, and default project/organization behavior, leaving the agent without important context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameter meanings are already documented in the input schema. The description adds no parameter-level detail beyond what the schema provides, making the baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search'), resource ('code'), and scope ('across repositories in a project'), so the agent knows this is a code search tool. It does not explicitly distinguish itself from sibling search tools like search_wiki or search_work_items, but the resource 'code' makes the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this tool versus alternatives such as search_wiki or search_work_items, nor any prerequisites or exclusions. Usage is only implied by the word 'Search'.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesNumber of results to return (default: 100, max: 1000)
skipYesNumber of results to skip for pagination (default: 0)
filtersNoOptional filters to narrow search results
projectIdNoThe ID or name of the project to search in. If omitted, the search runs across the organization when supported.
searchTextYesThe text to search for in wikis
includeFacetsYesWhether to include faceting in results (default: true)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals nothing about pagination behavior (despite top/skip parameters), result ordering, relevance, authentication requirements, or any other operational trait beyond the basic search action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero waste. It efficiently conveys the core action and scope without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, nested filters, no output schema, and no annotations, the description is too thin. It does not mention that projectId is optional (allowing organization-wide search) or that pagination and faceting are available, leaving the agent to rely entirely on the schema for critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no parameter-level meaning, which is acceptable given the high coverage, but it does not compensate for any gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search') and resource ('wiki pages'), and specifies scope ('in a project'), making it clear what the tool does. It implicitly distinguishes from siblings like search_code and search_work_items by specifying 'wiki pages', but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_wiki_pages or get_wiki_page, nor does it mention any prerequisites or conditions. It only states what the tool does, leaving usage entirely to inference.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesNumber of results to return (default: 100, max: 1000)
skipYesNumber of results to skip for pagination (default: 0)
filtersNoOptional filters to narrow search results
orderByNoOptions for sorting search results
projectIdNoThe ID or name of the project to search in. If omitted, the search runs across the organization when supported.
searchTextYesThe text to search for in work items
includeFacetsYesWhether to include faceting in results (default: true)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and discharges almost none of it. It does not disclose whether search is full-text or field-scoped, pagination behavior, authentication requirements, result limits, or how the facets flag changes output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is efficient, though for a task with 8 parameters and nested filter objects it is arguably under-specified rather than optimally sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, nested objects, a required field set, and no output schema or annotations, one sentence is insufficient. An agent gets no information about result shape, facets output, pagination interaction, or when this differs from list_work_items.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed per-parameter descriptions (including nested filters, orderBy, and top/skip semantics), so the schema does the heavy lifting. The description adds no parameter meaning beyond 'across projects', which only loosely gestures at projectId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (work items) with a scope qualifier (across projects in Azure DevOps). It is distinguishable from list_work_items by the search framing, though it never explicitly differentiates itself from that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use search_work_items versus list_work_items or search_code. The word 'across projects' hints at scope, but no conditions, prerequisites, or exclusions are stated.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNoThe branch to run the pipeline on (e.g., "main", "feature/my-branch"). If left empty, the default branch will be used
projectIdNoThe ID or name of the project (Default: MyProject)
variablesNoVariables to pass to the pipeline run
pipelineIdYesThe numeric ID of the pipeline to trigger
stagesToSkipNoStages to skip in the pipeline run
templateParametersNoParameters for template-based pipelines

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states only the action and discloses nothing about side effects, permissions, asynchronous behavior, output, or effects on existing runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The four-word phrase is front-loaded and free of filler, but it is too small for a six-parameter mutation with nested objects and no annotations. The size does not match the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a mutation tool with six parameters, nested variables/templateParameters, no annotations, and no output schema, the description omits usage criteria and behavioral context. The rich schema covers parameters but not when/why to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 in detail. The description adds no parameter meaning beyond 'pipeline run' and is not expected to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Trigger') and resource ('pipeline run'), so the core operation is clear. It does not differentiate from sibling tools like list_pipelines/get_pipeline or state scope, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no alternatives, no prerequisites or exclusions. An agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pull_requestB

Update an existing pull request with new properties, manage reviewers and work items, and add or remove tags

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoThe updated title of the pull request
statusNoThe updated status of the pull request
addTagsNoList of tags to add to the pull request
isDraftNoWhether the pull request should be marked as a draft (true) or unmarked (false)
projectIdNoThe ID or name of the project (Default: MyProject)
removeTagsNoList of tags to remove from the pull request
descriptionNoThe updated description of the pull request
addReviewersNoList of reviewer email addresses or IDs to add
repositoryIdYesThe ID or name of the repository
pullRequestIdYesThe ID of the pull request to update
addWorkItemIdsNoList of work item IDs to link to the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)
removeReviewersNoList of reviewer email addresses or IDs to remove
removeWorkItemIdsNoList of work item IDs to unlink from the pull request
additionalPropertiesNoAdditional properties to update on the pull request

TDQS

B3.2/5.0
Behavior2/5

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 reveals that this is a mutation and which categories of fields change, but says nothing about side effects (reviewer notifications), whether omitted fields are preserved, reversibility of status changes, or permission requirements for a 15-parameter mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with the core verb and resource front-loaded and no filler. The trailing list is dense but each clause corresponds to actual parameter groups, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation with no annotations and no output schema, the description covers the operation categories but leaves the behavior side thin. It does not need to explain return values (no output schema), yet prerequisites, side effects, and partial-update semantics remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 and the description need only add meaning beyond it. The description groups the parameters into reviewer/work-item/tag operations, which is mild organizational value, but adds no format, default, or constraint detail beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing pull request') and enumerates the three mutation families: properties, reviewers/work items, and tags. It's clear and distinguishable from create_pull_request by 'existing', though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'existing pull request' but there is no explicit when-to-use guidance, no preconditions (e.g. required permissions or repo state), and no reference to the alternative create_pull_request tool for the non-existing case.

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_statusA

Update the status of a comment thread in a pull request (repositoryId optional; derived from pullRequestId when omitted)

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesThe status to set on the thread
threadIdYesThe ID of the thread to update
projectIdNoThe ID or name of the project (Default: MyProject)
repositoryIdNoThe ID or name of the repository (optional; derived from pullRequestId when omitted)
pullRequestIdYesThe ID of the pull request
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It indicates a mutation action ('Update') but does not disclose effects like notifications, permission requirements, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence of 20 words, front-loading the key action and resource without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description lacks context on status meanings, transition rules, and return values, leaving the agent with incomplete information for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds value beyond the schema by explaining that repositoryId is optional and derived from pullRequestId, enhancing parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update') and clearly identifies the resource ('comment thread in a pull request'), distinguishing it from sibling tools such as add_pull_request_comment or update_pull_request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by noting that repositoryId is optional and derived from pullRequestId, but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiIdYesThe ID or name of the wiki
commentNoOptional comment for the update
contentYesThe new content for the wiki page in markdown format
pagePathYesPath of the wiki page to update
projectIdNoThe ID or name of the project (Default: MyProject)
organizationIdNoThe ID or name of the organization (Default: mycompany)

TDQS

C2.9/5.0
Behavior2/5

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 mutation tool. It does not disclose whether the page must already exist, what happens on a path collision, whether updates require permissions, or how the optional comment is used.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the resource front-loaded. It is efficient, though the brevity is partly a result of under-specification rather than disciplined editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation tool with no annotations and no output schema, the description should explain prerequisites, conflict behavior, and the effect of the optional comment. It omits all of this, leaving the agent with insufficient context to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 wikiId, pagePath, content, and the optional comment/projectId/organizationId) are already documented in the schema. The description adds no syntax, format, or defaults beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 content of a wiki page'), which is clearly distinguishable from read-oriented siblings like get_wiki_page or search_wiki. It does not, however, differentiate itself from create_wiki_page or list_wiki_pages beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 create_wiki_page or get_wiki_page, and no prerequisites or conditions are stated. 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.

update_work_itemC

Update an existing work item

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOverwrite/set the complete set of tags
stateNoThe updated state of the work item
titleNoThe updated title of the work item
areaPathNoThe updated area path for the work item
priorityNoThe updated priority of the work item
tagsToAddNoList of tags to append to the work item
assignedToNoThe email or name of the user to assign the work item to
workItemIdYesThe ID of the work item to update
descriptionNoWork item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags.
tagsToRemoveNoList of tags to remove from the work item
iterationPathNoThe updated iteration path for the work item
additionalFieldsNoAdditional 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

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

  1. 32 tool updatesv1.0.6
    • Changedcreate_pull_request1 field changed
      • addedInput schema / properties / additionalProperties / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedcreate_wiki9 fields changed
      • removedInput schema / properties / mappedPath / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mappedPath / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / repositoryId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / repositoryId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "type",
        +  "mappedPath"
        +]
    • Changedcreate_wiki_page7 fields changed
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / pagePath / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pagePath / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "wikiId",
        -  "content"
        -]New value: +[
        +  "wikiId",
        +  "pagePath",
        +  "content"
        +]
    • Changedcreate_work_item2 fields changed
      • changedInput schema / properties / additionalFields / description
        Previous value: -"Additional fields to set on the work item. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags."New value: +"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."
      • addedInput schema / properties / additionalFields / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Addedcreate_work_item_attachment
    • Addeddelete_work_item_attachment
    • Changeddownload_pipeline_artifact2 fields changed
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / runId / maximum
        Added value: +9007199254740991
    • Changedget_all_repositories_tree1 field changed
      • addedInput schema / required
        Added value: +[
        +  "depth"
        +]
    • Changedget_file_content1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "repositoryId"
        -]New value: +[
        +  "repositoryId",
        +  "path"
        +]
    • Changedget_pipeline2 fields changed
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / pipelineVersion / maximum
        Added value: +9007199254740991
    • Changedget_pipeline_log5 fields changed
      • addedInput schema / properties / endLine / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / logId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / runId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / startLine / maximum
        Added value: +9007199254740991
    • Changedget_pipeline_run2 fields changed
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / runId / maximum
        Added value: +9007199254740991
    • Changedget_project_details1 field changed
      • addedInput schema / required
        Added value: +[
        +  "includeProcess",
        +  "includeWorkItemTypes",
        +  "includeFields",
        +  "includeTeams",
        +  "expandTeamIdentity"
        +]
    • Changedget_repository_details1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "repositoryId"
        -]New value: +[
        +  "repositoryId",
        +  "includeStatistics",
        +  "includeRefs"
        +]
    • Changedget_repository_tree1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "repositoryId"
        -]New value: +[
        +  "repositoryId",
        +  "path",
        +  "depth"
        +]
    • Changedget_wiki_page4 fields changed
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_wikis4 fields changed
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Addedget_work_item_attachment
    • Changedget_work_item_comments1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "workItemId"
        -]New value: +[
        +  "workItemId",
        +  "expand",
        +  "order"
        +]
    • Changedlist_commits1 field changed
      • addedInput schema / properties / skip / maximum
        Added value: +9007199254740991
    • Changedlist_pipeline_runs4 fields changed
      • addedInput schema / properties / createdFrom / pattern
        Added value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
      • addedInput schema / properties / createdTo / pattern
        Added value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • changedInput schema / required
        Previous value: -[
        -  "pipelineId"
        -]New value: +[
        +  "pipelineId",
        +  "top",
        +  "orderBy"
        +]
    • Changedlist_pull_requests1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "repositoryId"
        -]New value: +[
        +  "repositoryId",
        +  "top"
        +]
    • Changedlist_wiki_pages4 fields changed
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_work_items1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "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\".",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedpipeline_timeline2 fields changed
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / runId / maximum
        Added value: +9007199254740991
    • Changedsearch_code2 fields changed
      • addedInput schema / properties / skip / maximum
        Added value: +9007199254740991
      • changedInput schema / required
        Previous value: -[
        -  "searchText"
        -]New value: +[
        +  "searchText",
        +  "top",
        +  "skip",
        +  "includeSnippet",
        +  "includeContent"
        +]
    • Changedsearch_wiki2 fields changed
      • addedInput schema / properties / skip / maximum
        Added value: +9007199254740991
      • changedInput schema / required
        Previous value: -[
        -  "searchText"
        -]New value: +[
        +  "searchText",
        +  "top",
        +  "skip",
        +  "includeFacets"
        +]
    • Changedsearch_work_items2 fields changed
      • addedInput schema / properties / skip / maximum
        Added value: +9007199254740991
      • changedInput schema / required
        Previous value: -[
        -  "searchText"
        -]New value: +[
        +  "searchText",
        +  "top",
        +  "skip",
        +  "includeFacets"
        +]
    • Changedtrigger_pipeline3 fields changed
      • addedInput schema / properties / pipelineId / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / templateParameters / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / variables / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_pull_request1 field changed
      • addedInput schema / properties / additionalProperties / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_wiki_page6 fields changed
      • removedInput schema / properties / comment / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / comment / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / organizationId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organizationId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "not": {}
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedupdate_work_item2 fields changed
      • changedInput schema / properties / additionalFields / description
        Previous value: -"Additional fields to update on the work item. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags."New value: +"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."
      • addedInput schema / properties / additionalFields / propertyNames
        Added value: +{
        +  "type": "string"
        +}
  2. 4 tool updates
    • Changedcreate_work_item1 field changed
      • addedInput schema / properties / tags
        Added value: +{
        +  "description": "Tags to add to the work item",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addedget_work_item_comments
    • Addedupdate_pull_request_thread_status
    • Changedupdate_work_item3 fields changed
      • addedInput schema / properties / tags
        Added value: +{
        +  "description": "Overwrite/set the complete set of tags",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / tagsToAdd
        Added value: +{
        +  "description": "List of tags to append to the work item",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / tagsToRemove
        Added value: +{
        +  "description": "List of tags to remove from the work item",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}

TDQS

C2.9/5.0

Scored across 49 tools

Disambiguation3/5

Many tools are distinct by resource and action (repositories, work items, PRs, wikis, pipelines), but several overlapping pairs create ambiguity: get_project_details vs get_project, get_repository_details vs get_repository, get_file_content vs tree tools, and create_wiki_page (which also updates) vs update_wiki_page. Descriptions help clarify, but the boundaries are not consistently sharp.

Naming Consistency4/5

Most tools follow a predictable snake_case verb_noun pattern (list_repositories, get_work_item, create_pull_request, update_wiki_page). Minor deviations exist, such as pipeline_timeline lacking a verb and get_wikis vs list_wiki_pages, but the overall convention is readable and mostly consistent.

Tool Count2/5

49 tools is excessive for a single MCP server, far beyond the 3-15 well-scoped range and even beyond the 16-25 heavy range. Azure DevOps is broad, but this surface would benefit from consolidation or grouping.

Completeness3/5

The server covers many core read/write operations across repositories, work items, PRs, wikis, and pipelines. However, notable lifecycle gaps remain: no delete_work_item, no PR merge/abandon/complete operation, no repository create/delete, no wiki page delete, and no pipeline cancel/update.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    This server provides a convenient API for interacting with Azure DevOps services, enabling AI assistants and other tools to manage work items, code repositories, boards, sprints, and more. Built with the Model Context Protocol, it provides a standardized interface for communicating with Azure DevOps
    44 npm
    60
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A reference server implementation for the Model Context Protocol that enables AI assistants to interact with Azure DevOps resources and perform operations such as project management, work item tracking, repository operations, and code search programmatically.
    7
    -
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with Azure DevOps services, allowing users to query work items with plans to support creating/updating items, managing pipelines, handling pull requests, and administering sprints and branch policies.
    21
    49 PyPI
    79
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with Azure DevOps services, providing capabilities for work item management, project management, and team collaboration through natural language.
    21
    -