Skip to main content
Glama
danielealbano

mcp-for-azure-devops-boards

MCP for Azure DevOps Boards

CI - PR - Build & Test CD - Tag - Build & Release

A Model Context Protocol (MCP) server for interacting with Azure DevOps Boards and Work Items, written in Rust.

Features

  • Work Item Management: Create, update, get, and query work items.

  • Board Integration: List teams, boards, and fetch board items.

  • WIQL Support: Run custom WIQL queries.

  • Simplified Output: Optimized JSON output for LLM consumption (reduced token usage).

Related MCP server: azure-devops-mcp

Installation

Check out the section MCP Configuration for how to configure your preferred AI (MCP) client.

macOS (Homebrew)

brew tap danielealbano/mcp-tools
brew install mcp-for-azure-devops-boards

The path to the binary will be /opt/homebrew/bin/mcp-for-azure-devops-boards.

Windows (Scoop)

scoop bucket add mcp-tools https://github.com/danielealbano/scoop-mcp-tools
scoop install mcp-for-azure-devops-boards

The path to the binary will be %USERPROFILE%\scoop\apps\mcp-for-azure-devops-boards\current\mcp-for-azure-devops-boards.exe.

Configuration

Setting

Description

CLI Flag

Env Variable

Server Mode

Run as HTTP server instead of stdio

--server

N/A

Port

Port for HTTP server (default: 3000)

--port

N/A

Note: If --server is not specified, the software will run in stdio mode.

Authentication

This server leverages standard Azure authentication mechanisms to query Azure DevOps. On every request it acquires a Bearer token for the Azure DevOps REST API (scope 499b84ac-1321-427f-aa17-267ca6975798/.default) by trying the following credential sources in order and using the first one that returns a token:

  1. Environment (client secret) — used only when AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET are all set. If only some are set, it is skipped with a warning.

  2. Azure CLI — runs az account get-access-token for the Azure DevOps scope, using your az login session.

  3. Azure Developer CLI — uses your azd auth login session.

  4. Managed identity — for Azure-hosted deployments. Off Azure this probe is unreachable, so it is bounded by a 2-second timeout and then skipped, ensuring the chain never hangs.

If all sources fail, the returned error lists each source's failure so you can see exactly why (for example, an Azure CLI consent error alongside "azd not found on PATH"), rather than only the last one tried.

For local development, signing in with the Azure CLI (below) is the simplest option — you must have run az login with access to the target Azure DevOps organization.

Installing Azure CLI

If you don't have the Azure CLI installed:

macOS (Homebrew):

brew install azure-cli

Windows (Scoop):

scoop install azure-cli

Windows (Chocolatey):

choco install azure-cli

For other installation methods, see the official Azure CLI installation guide.

Logging In

To authenticate, run:

az login

Usage

Stdio Mode (Default)

This is the standard mode for MCP clients (like Claude Desktop or Cursor). This mode is preferred for security as it ensures no credentials are shared over the network.

path/to/mcp-for-azure-devops-boards

HTTP Server Mode

You can also run it as an HTTP server (SSE). Note that in this mode, the server listens on 0.0.0.0 (all interfaces).

path/to/mcp-for-azure-devops-boards --server --port 3000

MCP Configuration

Note: Make sure you have run az login in your terminal so the process can pick up the credentials.

Quick setup with --install

The fastest way to register the MCP server with your preferred client:

mcp-for-azure-devops-boards --install <target>

Valid targets and where each writes its configuration:

Target

Config file

Scope

claude-code

~/.claude.json

Global (home)

claude-desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.jsonLinux: ~/.config/Claude/claude_desktop_config.jsonWindows: %APPDATA%\Claude\claude_desktop_config.json

Global (per-user)

cursor

~/.cursor/mcp.json

Global (home)

vscode

.vscode/mcp.json

Workspace (current directory)

codex

~/.codex/config.toml

Global (home)

gemini-cli

~/.gemini/settings.json

Global (home)

The command auto-detects the binary path, resolves the correct config file location, and writes the entry in the expected format. Existing configuration is preserved.

Manual configuration

Claude Code

Config file: ~/.claude.json

{
  "mcpServers": {
    "mcp-for-azure-devops-boards": {
      "command": "/opt/homebrew/bin/mcp-for-azure-devops-boards"
    }
  }
}

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

Claude Desktop

Config file locations:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "mcp-for-azure-devops-boards": {
      "command": "/opt/homebrew/bin/mcp-for-azure-devops-boards"
    }
  }
}

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

Cursor

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-for-azure-devops-boards": {
      "command": "/opt/homebrew/bin/mcp-for-azure-devops-boards"
    }
  }
}

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

VS Code

Config file: .vscode/mcp.json (workspace level)

{
  "servers": {
    "mcp-for-azure-devops-boards": {
      "type": "stdio",
      "command": "/opt/homebrew/bin/mcp-for-azure-devops-boards"
    }
  }
}

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

gemini-cli

Config file: ~/.gemini/settings.json

{
  "mcpServers": {
    "mcp-for-azure-devops-boards": {
      "command": "/opt/homebrew/bin/mcp-for-azure-devops-boards"
    }
  }
}

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

Codex CLI

Config file: ~/.codex/config.toml

[mcp_servers.mcp-for-azure-devops-boards]
command = "/opt/homebrew/bin/mcp-for-azure-devops-boards"

Windows (Scoop): Replace the command path with %USERPROFILE%\\scoop\\apps\\mcp-for-azure-devops-boards\\current\\mcp-for-azure-devops-boards.exe.

Available Tools

This software is currently in development. The tools and their parameters are subject to change.

The server exposes the following tools for MCP clients.

The general structure of the tool names is azdo_VERB_WHAT (e.g., azdo_list_teams, azdo_get_work_item).

Discovery

  • azdo_list_organizations: List all Azure DevOps organizations the authenticated user has access to.

    • Required: None (uses authenticated user's credentials)

  • azdo_list_projects: List all projects in an Azure DevOps organization.

    • Required: organization

Work Items

Note: All work item tools require organization and project parameters.

  • azdo_create_work_item: Create a new work item.

    • Required: organization, project, work_item_type, title

    • Optional: description, assigned_to, area_path, iteration_path, state, board_column, board_row, priority, severity, story_points, effort, remaining_work, tags, activity, parent_id, start_date, target_date, acceptance_criteria, repro_steps, fields (JSON string for custom fields).

  • azdo_update_work_item: Update an existing work item.

    • Required: organization, project, id

    • Optional: All fields available in creation.

  • azdo_get_work_item: Get details of a specific work item.

    • Required: organization, project, id

    • Optional: include_latest_n_comments (number of recent comments to include, -1 for all)

  • azdo_get_work_items: Get multiple work items by their IDs.

    • Required: organization, project, ids (array of work item IDs)

    • Optional: include_latest_n_comments (number of recent comments to include, -1 for all)

  • azdo_query_work_items: Query work items using structured filters.

    • Required: organization, project

    • Optional Filters: area_path, iteration_path, created_date_from/to, modified_date_from/to.

    • Inclusion Lists: include_board_column, include_board_row, include_work_item_type, include_state, include_assigned_to, include_tags.

    • Exclusion Lists: exclude_board_column, exclude_board_row, exclude_work_item_type, exclude_state, exclude_assigned_to, exclude_tags.

    • Optional: include_latest_n_comments (number of recent comments to include, -1 for all)

  • azdo_query_work_items_by_wiql: Execute a raw WIQL (Work Item Query Language) query.

    • Required: organization, project, query

    • Optional: include_latest_n_comments (number of recent comments to include, -1 for all)

  • azdo_add_comment: Add a comment to a work item.

    • Required: organization, project, work_item_id, text

  • azdo_link_work_items: Create a relationship between two work items.

    • Required: organization, project, source_id, target_id, link_type (Parent, Child, Related, Duplicate, Dependency).

Boards & Teams

Note: All board and team tools require organization and project parameters.

  • azdo_list_teams: List all teams in the project.

    • Required: organization, project

  • azdo_get_team: Get details of a specific team.

    • Required: organization, project, team_id

  • azdo_list_team_boards: List boards for a specific team.

    • Required: organization, project, team_id

  • azdo_get_team_board: Get details of a specific board.

    • Required: organization, project, team_id, board_id

  • azdo_list_work_item_types: List all available work item types in the project.

    • Required: organization, project

  • azdo_list_tags: List all tags in use in the project.

    • Required: organization, project

  • azdo_get_team_current_iteration: Get the current active iteration/sprint for a team.

    • Required: organization, project, team_id

  • azdo_get_team_iterations: Get all iterations/sprints for a team.

    • Required: organization, project, team_id

Contributing

We welcome contributions!

  1. Fork the repository.

  2. Create a new branch for your feature or bugfix (git checkout -b feature/amazing-feature).

  3. Commit your changes.

  4. Push to your branch.

  5. Open a Pull Request.

Building from Source

Prerequisites

  • Rust (latest stable version)

  • Azure CLI (required for local authentication)

Steps

  1. Clone the repository:

    git clone https://github.com/danielealbano/mcp-for-azure-devops-boards.git
    cd mcp-for-azure-devops-boards
  2. Build the project:

    cargo build --release

Tooling

  • Run tests: cargo test

  • Check code style: cargo fmt --check

  • Linting: cargo clippy

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by Microsoft. Azure, Azure DevOps, and related trademarks are the property of their respective owners. This software uses standard Microsoft's services APIs to interact with Azure and Microsoft Graph, among other services.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

Available Tools

24 tools
azdo_add_commentC

Add a comment to a work item

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesComment text (use markdown syntax when format is "markdown", HTML tags when format is "html")
formatNoComment format: "markdown" or "html" (default: "markdown")markdown
projectYesAzDO project name
organizationYesAzDO org name
work_item_idYesWork item ID to add comment to

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It only states 'Add a comment', missing details like permission requirements, side effects, or response 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?

Extremely concise single sentence, but slightly more information (e.g., response) would be helpful without losing brevity.

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?

Simple tool, but no output schema and minimal description. Missing return value or error handling context, leaving gaps for an 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 coverage is 100%; description adds no extra parameter context beyond what the schema already provides. Baseline 3 applies per criteria.

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?

Description clearly states verb 'Add' and resource 'comment to a work item', distinguishing it from sibling tool 'azdo_update_comment' which modifies existing comments.

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 explicit guidance on when to use this tool vs alternatives like 'azdo_update_comment', nor any prerequisites or exclusions.

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

azdo_create_work_itemD

Create work item

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoComma-separated tags
stateNoInitial state (New, Active, Resolved, etc.)
titleYesWork item title
effortNoEffort estimate in hours
fieldsNoOptional extra fields as JSON string (for custom fields)
formatNoFormat for large text fields (description, acceptance criteria, repro steps, justification): "markdown" or "html" (default: "markdown")markdown
projectYesAzDO project name
activityNoActivity type (Development, Testing, Documentation, etc.)
priorityNoPriority (1-4, where 1 is highest)
severityNoSeverity for bugs (Critical, High, Medium, Low)
area_pathNoArea path (e.g., "MyProject\\Team1")
board_rowNoBoard row/swimlane to place the work item in
parent_idNoID of parent work item
start_dateNoStart date (YYYY-MM-DD)
assigned_toNoUser to assign the work item to (email or display name)
descriptionNoWork item description (use markdown syntax when format is "markdown", HTML tags when format is "html")
repro_stepsNoReproduction steps (use markdown syntax when format is "markdown", HTML tags when format is "html")
target_dateNoTarget/due date (YYYY-MM-DD)
board_columnNoBoard column to place the work item in
organizationYesAzDO org name
story_pointsNoStory points for estimation
justificationNoJustification (CMMI process template; use markdown syntax when format is "markdown", HTML tags when format is "html")
iteration_pathNoIteration path (e.g., "MyProject\\Sprint 1"), use azdo_get_team_current_iteration to get the current iteration
remaining_workNoRemaining work in hours
work_item_typeYesType of work item (User Story, Epic, Feature, etc.)
acceptance_criteriaNoAcceptance criteria (use markdown syntax when format is "markdown", HTML tags when format is "html")

TDQS

D1.6/5.0
Behavior1/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It fails to mention that this tool creates a new work item in Azure DevOps, any potential side effects (e.g., notifications, state transitions), required permissions, or error conditions. Without this, the agent cannot anticipate the tool's impact.

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 description is extremely concise (three words) but at the expense of informativeness. It lacks structure and fails to front-load critical details. True conciseness would preserve meaning while reducing verbosity; here, meaning is sacrificed.

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

Completeness1/5

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

Given the high complexity (26 parameters, no output schema, no annotations), the description is wholly inadequate. It does not explain what happens upon creation (e.g., returns work item ID), error handling, or integration with sibling tools. The agent has no contextual understanding of the tool's role.

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 26 parameters have descriptive definitions in the input schema. The description 'Create work item' adds no extra semantic value beyond what is already documented in the schema. Baseline score is appropriate.

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

Purpose1/5

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

The description 'Create work item' is a tautology that merely restates the tool's name. It does not specify the type of work item, the Azure DevOps context, or any distinguishing features. The agent gains no additional understanding of the tool's unique purpose beyond the name itself.

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 sibling tools such as azdo_update_work_item or azdo_query_work_items. It does not mention prerequisites, typical scenarios, or situations where this tool is preferred. Minimal context is implied from the name, but explicit guidance is absent.

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

azdo_get_current_userB

Get current user profile

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/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. It only says 'Get current user profile', which implies read-only but does not disclose any behavioral traits like authentication requirements or data scope. More context would be needed.

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 very concise (4 words) and front-loaded with the key action. However, it could be slightly more descriptive without losing conciseness, e.g., mentioning the return value.

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 and no annotations, the description is too minimal. It does not explain what fields the profile contains or differentiate it from other get tools. More detail is needed for a complete understanding.

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, and schema description coverage is 100%. With zero parameters, the default baseline is 4. The description adds no parameter information, but none is 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 action ('Get') and the resource ('current user profile'), which is distinct from sibling tools that deal with work items, comments, teams, etc. No confusion about what this tool does.

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, such as other user-related endpoints. For a simple tool it may be obvious, but the rubric penalizes lack of explicit when/when-not/alternatives.

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

azdo_get_teamC

Get team details

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
organizationYesAzDO org name

TDQS

C2.6/5.0
Behavior1/5

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

No annotations are provided, so the description must convey behavioral traits. It merely states 'Get team details' with no mention of read-only nature, required permissions, error handling, or output format. This is insufficient for an agent to understand invocation implications.

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?

At two words, the description is extremely concise but lacks substantive content. It is front-loaded but does not earn its place with useful information beyond the tool name.

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 explain return values or behavior. It does not, leaving the agent uninformed about what details are retrieved or potential side effects.

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 basic field descriptions (e.g., 'AzDO project name'). The description adds no additional meaning beyond the schema, meeting the baseline for high coverage.

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 'Get team details', which clearly identifies the action and resource. It distinguishes from siblings like 'azdo_get_team_board' or 'azdo_list_teams' by focusing on generic details, but lacks specificity on what exactly is included.

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. Siblings like 'azdo_list_teams' for listing or 'azdo_get_team_board' for board-specific info are not mentioned, leaving the agent without context for selection.

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

azdo_get_team_boardC

Get board details

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
board_idYesBoard ID or name
organizationYesAzDO org name

TDQS

C2.4/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, permission requirements, or potential side effects. It carries the full burden but offers minimal insight.

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?

While very short, the description is under-specified rather than concise. It fails to include necessary context, so simplicity comes at the cost of usefulness.

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 no annotations. The description does not explain what 'board details' includes (e.g., metadata, columns, cards), leaving the agent without sufficient context for a retrieval 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 each parameter. The description adds no additional meaning beyond 'Get board details', earning the baseline score.

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 'Get board details' uses a verb and resource but is vague. 'Details' could mean many things (columns, rows, settings). Siblings like 'azdo_list_board_columns' are more specific, so it doesn't clearly distinguish itself.

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 such as 'azdo_list_team_boards' or 'azdo_get_team_current_iteration'. 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.

azdo_get_team_current_iterationC

Get current iteration/sprint for team

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project
team_idYesTeam ID or name
organizationYesAzDO org

TDQS

C2.5/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 only states the action without disclosing any behavioral traits such as read-only nature, required permissions, error handling, or whether it returns a single iteration or can fail if none exists.

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 redundant words, making it concise. However, it may be too terse at the expense of completeness.

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?

The tool has 3 required parameters, no output schema, and no annotations. The description does not explain what the tool returns (e.g., iteration name, dates, or full details), leaving the agent with insufficient context for reliable invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning to the parameters (organization, project, team_id) beyond what the schema already provides.

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 the resource 'current iteration/sprint for team', making the purpose clear. It distinguishes from sibling tools like azdo_get_team and azdo_get_team_board, but it could be more specific by including the tool's context (Azure DevOps).

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

Usage Guidelines1/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, nor does it mention any prerequisites or exclusions. With 23 sibling tools, the lack of usage guidelines is a significant gap.

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

azdo_get_work_itemC

Get work item by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWork item ID
projectYesAzDO project name
organizationYesAzDO org name
include_latest_n_commentsNoInclude the latest N comments (optional). Set to -1 for all comments.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behaviors. It only says 'Get work item by ID', omitting details like return format, error cases, or permissions. This is insufficient for a tool with no annotations.

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 extremely short (one phrase). While concise, it lacks structuring such as bullet points or additional context that would aid an agent. It is not a tautology but is minimally 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 tool has 4 parameters, 3 required, and no output schema, the description should provide more context. It does not explain the return type or the optional 'include_latest_n_comments' parameter's effect, leaving 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%; all parameters have descriptions. The tool description adds no extra meaning beyond the schema, so it meets the baseline but does not enhance understanding.

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 a specific work item by its ID. It contrasts with siblings like 'azdo_get_work_items' (plural) and query tools, but does not explicitly differentiate.

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 'azdo_query_work_items' or 'azdo_get_work_items'. The description lacks usage context.

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

azdo_get_work_itemsB

Get multiple work items by IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesWork item IDs (comma-separated or array)
projectYesAzDO project name
organizationYesAzDO org name
include_latest_n_commentsNoInclude the latest N comments (optional). Set to -1 for all comments.

TDQS

B3.4/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 fully convey behavioral traits. It only states the basic action with no mention of return format, authentication, rate limits, or side effects. For a read operation, it lacks depth.

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

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 with action and resource. It is not verbose, but readability is adequate. Slightly reduced score because it omits details that would enhance understanding.

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 low complexity (4 parameters, no output schema), the description is somewhat complete for a simple retrieval tool. However, it does not specify the return type or any limits, which would help an agent understand the outcome.

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 covers all 4 parameters with descriptions. The tool description adds no additional meaning beyond the schema, so baseline score of 3 applies per guidelines.

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 the tool retrieves multiple work items by IDs. The verb 'Get' and resource 'work items' are specific. It distinguishes from sibling tool 'azdo_get_work_item' by indicating it handles multiple IDs, not a single one.

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 does not provide explicit guidance on when to use this tool versus alternatives like 'azdo_query_work_items' or 'azdo_get_work_item'. It is implied for batch retrieval by known IDs, but no when-not scenarios or prerequisites are mentioned.

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

azdo_list_area_pathsC

List area paths for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
parent_pathNoOptional parent path to traverse the tree (e.g., "Area1\\SubArea1")
organizationYesAzDO org name

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 disclose behavioral traits. It only states 'list' which implies read-only, but no details on depth, pagination, recursion, or side effects are given. The agent receives 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.

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 slightly more detail could be added without harming brevity.

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 no output schema and simple parameter set, the description is minimally adequate. However, it lacks information about return format, pagination, or any constraints, which limits completeness for a list operation.

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?

All three parameters are described in the input schema (100% coverage), so baseline is 3. The description adds no additional meaning beyond what the schema already provides.

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 ('area paths') with scope ('for a project'). It is straightforward and distinguishes its function from sibling tools that list other entities (teams, projects, etc.).

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, when not to use it, or any prerequisites. The description lacks context for effective tool selection.

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

azdo_list_board_columnsC

List board columns

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
board_idYesBoard ID or name
organizationYesAzDO org name

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are given, so the description bears full responsibility. It only states 'List board columns' without disclosing read-only nature, potential errors, or any side effects. This is insufficient for behavioral transparency.

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 extremely concise (3 words), which is efficient but sacrifices necessary detail. It is front-loaded but fails to provide any context beyond the name. It earns a 3 for being minimally adequate.

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 4 required parameters, no output schema, and no annotations, the description is incomplete. It lacks information about return values, pagination, or behavior. More detail is needed to fully guide the 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?

The input schema has 100% description coverage for its 4 parameters, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides, resulting in a neutral score.

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 'List board columns' clearly states the verb (list) and resource (board columns), distinguishing it from siblings like azdo_list_board_rows or azdo_list_team_boards. However, it does not elaborate on the specific board context, so it's not 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 usage guidelines are provided. The description does not suggest when to use this tool versus alternatives, nor does it mention prerequisites or context. This leaves the agent with no guidance for correct invocation.

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

azdo_list_board_rowsB

List board rows (swimlanes)

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
board_idYesBoard ID or name
organizationYesAzDO org name

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description fails to disclose behavioral traits such as read-only nature, potential performance impacts, or error conditions. The simple 'List' verb is not sufficient to convey safety or side-effect information to an AI agent.

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 with no extraneous content, and it is front-loaded with the action and resource. It is as concise as possible while still conveying purpose.

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?

The description does not explain the return format, pagination, or any constraints on the parameters. For a list operation with no output schema, more context is needed to guide the agent on expected results.

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?

All four parameters are described in the input schema with names and types (100% coverage), so the description adds no additional meaning beyond what the schema provides. Baseline score of 3 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 clearly states the verb 'List' and the resource 'board rows (swimlanes)', which distinguishes it from sibling tool azdo_list_board_columns that deals with columns instead of rows.

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 azdo_get_team_board or azdo_list_board_columns. There is no mention of 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.

azdo_list_iteration_pathsC

List iteration paths for a project or team

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idNoOptional team ID or name to get team-specific iterations
timeframeNoOptional timeframe filter: "current", "past", or "future" (only applies when team_id is provided)
organizationYesAzDO org name

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It does not disclose whether the tool is read-only, requires specific permissions, returns paginated results, or has any side effects.

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 concise at one sentence, but it is too minimal. It could include more useful information without being verbose, such as the effect of optional 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?

Given the lack of annotations and output schema, the description is insufficient. It does not describe return values, behavior when team_id is omitted, or potential errors.

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

Parameters2/5

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

Schema coverage is 100%, but the description adds no meaning beyond the schema. It does not explain how parameters interact (e.g., timeframe only applies with team_id) nor provide formatting or validation hints.

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 a list operation on iteration paths scoped to a project or team. It is specific enough to distinguish from area paths but does not explicitly differentiate from other list siblings like azdo_list_projects or azdo_list_boards.

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 gives no guidance on when to use this tool versus alternatives (e.g., when to provide team_id vs. not, or how it differs from azdo_list_area_paths). No exclusions or context for usage are provided.

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

azdo_list_organizationsD

List organizations

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.7/5.0
Behavior1/5

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

With no annotations, the description must disclose behavioral traits, but it only states 'List organizations'. No information about side effects, authentication requirements, rate limits, or response format is given.

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 extremely concise with a single sentence, but this conciseness comes at the cost of informativeness. It is not structured to front-load key details because there are none.

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's simplicity (no params, no annotations, no output schema), the description should at least explain what an 'organization' means in this Azure DevOps context and how the list is obtained. The current description is incomplete for guiding proper use.

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

Parameters2/5

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

There are zero parameters and the schema coverage is 100%, but the description adds no meaning beyond the tool name. It fails to clarify what 'organizations' refers to or how the list is produced, providing no added value over the empty schema.

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

Purpose2/5

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

The description 'List organizations' is a tautology of the tool name, and offers no distinction from sibling list tools like azdo_list_projects or azdo_list_teams. It lacks specificity about which organizations are being listed (e.g., accessible to the user) and the scope of the operation.

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

Usage Guidelines1/5

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

No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives (e.g., azdo_list_projects for projects within an organization), nor does it mention any prerequisites or context.

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

azdo_list_projectsB

List projects in an organization

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationYesAzDO org name

TDQS

B3.2/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 it lists projects, omitting details like error handling (e.g., invalid org name), return format, or whether it is paginated.

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, clear sentence with no extra words. Perfectly concise for a simple list operation.

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?

The description is incomplete for a tool with no output schema and no annotations. It does not mention return values, pagination, or prerequisites, which are important for an AI agent to use 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 coverage is 100% with one parameter. The description adds minimal extra meaning; 'AzDO org name' is already in the schema. Baseline 3 is appropriate as the description does not significantly enhance 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 clearly states the verb 'List' and the resource 'projects in an organization'. It is specific and distinguishes from sibling tools like listing organizations or teams.

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 like azdo_list_organizations or azdo_list_teams. No explicit context or exclusions provided.

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

azdo_list_tagsD

List tags

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
organizationYesAzDO org name

TDQS

D1.8/5.0
Behavior1/5

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

With no annotations, the description must disclose behavioral traits. It says only 'List tags'—no information on authorization, rate limits, pagination, or data scope.

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 description is extremely short (two words) but lacks substance. It is incomplete rather than concise, missing critical context.

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 list tool with two parameters and no output schema, the description does not explain the return format or whether tags are scoped to a project. It is insufficiently 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 coverage is 100% and the description adds no extra meaning beyond the parameter names and types. Per guidelines, baseline 3 is appropriate.

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

Purpose2/5

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

The description 'List tags' is too vague. It does not specify what kind of tags or their scope, and it fails to distinguish from many sibling list tools like azdo_list_projects or azdo_list_teams.

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

Usage Guidelines1/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 such as other list tools. The description offers no context or exclusions.

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

azdo_list_team_boardsC

List boards

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
organizationYesAzDO org name

TDQS

C2.4/5.0
Behavior1/5

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

No annotations are present, and the description fails to disclose any behavioral traits such as return format, pagination, required permissions, or whether the listing is scoped to a team. The description carries the full burden but provides no 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.

Conciseness3/5

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

The description is extremely concise (two words), but this minimalism sacrifices utility. While not verbose, it does not effectively communicate anything beyond the name.

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

Completeness1/5

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

Given the lack of an output schema, the description should clarify what the response contains (e.g., list of board names, IDs) or other contextual details. It does not, leaving the agent with insufficient information.

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 parameter descriptions provided (e.g., 'AzDO org name'). The description does not add meaning beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

The description 'List boards' clearly states the action and resource. It is specific enough given the tool name 'azdo_list_team_boards' which implies team scope, but lacks explicit differentiation from sibling tool 'azdo_get_team_board'.

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 azdo_get_team_board. The description does not indicate context or prerequisites.

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

azdo_list_team_membersC

List team members

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
team_idYesTeam ID or name
organizationYesAzDO org name

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 fully shoulders the burden of behavioral disclosure. It only states 'List team members' without indicating permission requirements, return format, or side effects. The agent receives no insight into read-only status or other behavioral traits.

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

Conciseness3/5

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

The description is extremely concise (3 words), which is efficient but lacks structure or front-loading of critical context. While it doesn't waste words, it omits useful details that could fit in a compact format.

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?

The tool has 3 required parameters and no output schema. The description does not explain what the output represents (e.g., list of member names, IDs, details), nor does it clarify the scope (e.g., only active members). This incompleteness leaves the agent uncertain about outcomes.

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 the baseline is 3. The description adds no additional meaning beyond the schema's parameter descriptions (e.g., it doesn't explain how team_id relates to the members list). It neither enhances nor harms the schema's clarity.

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 team members' conveys the basic verb-resource pair, but it lacks specificity about which team and context. Compared to siblings like 'azdo_get_team' (returns team info) and 'azdo_list_teams' (lists all teams), this tool's purpose is distinguishable but not explicitly differentiated.

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 such as 'azdo_get_team' or 'azdo_get_team_board'. There is no mention of prerequisites, when-not-to-use, or related tools, leaving the agent without context for selection.

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

azdo_list_teamsC

List teams in the project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
organizationYesAzDO org name

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behavioral traits. It only says 'list', implying a read operation, but does not mention pagination, rate limits, or any other behavioral aspects beyond the obvious.

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

Conciseness4/5

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

The description is very short and to the point, with no wasted words. However, it could be slightly expanded to improve clarity without losing conciseness.

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 list tool with two string parameters and no output schema, the description is adequate but incomplete. It does not describe the return format or any default behavior, which would be helpful given the lack of output schema.

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 descriptions for both parameters. The tool description adds no additional meaning, so 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 the action 'List' and resource 'teams' within the scope 'in the project'. It is clear but does not differentiate from sibling tools like 'azdo_get_team' or 'azdo_list_team_members'.

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. Many sibling list tools exist, but no context on prerequisites or exclusions is provided.

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

azdo_list_work_item_typesC

List work item types

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
organizationYesAzDO org name

TDQS

C2.9/5.0
Behavior2/5

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

The description is minimal and does not disclose behavioral traits such as read-only nature, authorization requirements, or output structure. Since no annotations are provided, the description carries full burden but fails to convey that this is a safe, non-destructive operation or how results are returned.

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. While efficient, it sacrifices completeness; additional context would improve understanding without breaking 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?

Given the tool's simplicity (2 params, no output schema) and the presence of many sibling tools, the description lacks sufficient context. It does not explain what work item types are, how to interpret results, or how this tool fits into workflows. A more complete description would improve agent selection.

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% (both parameters have descriptions), so the schema already documents purpose. The description adds no additional meaning beyond the schema, warranting the 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 'List work item types' clearly states the verb and resource, making the basic purpose understandable. However, it lacks specificity about scope (e.g., 'for a project') and does not differentiate from sibling list tools like azdo_list_team_boards or azdo_list_projects, 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 on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusion criteria. For instance, it does not state that this is a read operation or that it requires project and organization parameters.

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

azdo_query_work_itemsC

Query work items by filters

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesAzDO project name
area_pathNoArea path to filter by (e.g., "MyProject\\Team1"). Uses UNDER operator to include child paths.
exclude_tagsNoTags to exclude (e.g., ["wontfix"])
include_tagsNoTags to include (e.g., ["bug", "critical"])
organizationYesAzDO org name
exclude_stateNoStates to exclude (e.g., ["Closed", "Removed"])
include_stateNoStates to include (e.g., ["Active", "Resolved"])
iteration_pathNoIteration path to filter by (e.g., "MyProject\\Sprint 1"). Uses UNDER operator to include child paths.
changed_date_toNoFilter by changed date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
created_date_toNoFilter by creation date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
changed_date_fromNoFilter by changed date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
created_date_fromNoFilter by creation date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
exclude_board_rowNoBoard rows/swimlanes to exclude
include_board_rowNoBoard rows/swimlanes to include (e.g., ["General", "Scraping Platform"])
exclude_changed_byNoChanged by users to exclude
include_changed_byNoChanged by users to include (e.g., ["John Doe", "jane@example.com"])
exclude_assigned_toNoAssignees to exclude
include_assigned_toNoAssignees to include (e.g., ["John Doe", "jane@example.com"])
exclude_board_columnNoBoard columns to exclude
include_board_columnNoBoard columns to include (e.g., ["Active", "Resolved"])
state_change_date_toNoFilter by state change date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
exclude_work_item_typeNoWork item types to exclude
include_work_item_typeNoWork item types to include (e.g., ["Bug", "User Story"])
state_change_date_fromNoFilter by state change date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ
include_latest_n_commentsNoInclude the latest N comments (optional). Set to -1 for all comments.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, so description must carry full burden. Description only says 'Query', implying read operation but does not explicitly state read-only nature, side effects, permissions, or rate limits. No behavioral traits disclosed 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.

Conciseness3/5

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

Extremely short at 4 words, which is concise but lacks structure. No front-loading of critical information. Adequate for a simple tool but could benefit from more details in a structured format.

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 25 parameters and no output schema, the description is incomplete. No mention of return format, pagination, or behavior when no filters are applied. The tool is complex but description is minimal, leaving agents unprepared.

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 tool description adds no additional meaning beyond what is already in the schema parameters. No credit for extra context.

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?

Description clearly states verb (query) and resource (work items) with method (by filters). However, it does not distinguish from siblings like azdo_get_work_items or azdo_query_work_items_by_wiql, which have overlapping functionality. A 4 is appropriate as purpose is clear but lacks 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?

No guidance on when to use this tool versus alternatives like azdo_query_work_items_by_wiql or azdo_get_work_items. No explicit context for usage, prerequisites, or exclusions. This is a significant gap given the array of sibling tools.

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

azdo_query_work_items_by_wiqlB

Query work items using WIQL

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWIQL query string (e.g., "SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active'")
projectYesAzDO project name
organizationYesAzDO org name
include_latest_n_commentsNoInclude the latest N comments (optional). Set to -1 for all comments.

TDQS

B3.2/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 traits. The description is too minimal: it does not disclose whether the operation is read-only, permissions needed, rate limits, or any side effects. With no annotations and no behavioral context, the agent is left uninformed about important operational characteristics.

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 short (one sentence, five words). While concise, it sacrifices valuable context. It is front-loaded with the core purpose, but every sentence should earn its place; here, the single sentence lacks sufficient detail for a tool with four parameters and no output schema. Conciseness alone is not enough.

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 no annotations, the description should provide more context about return values, pagination, or common WIQL examples. The description is too brief to be considered complete for an agent to understand behavior and outcomes, especially when compared to sibling tools that may have richer descriptions.

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 four parameters have descriptions). The tool description adds minimal value beyond the schema—it only says 'using WIQL', which is already exemplified in the query parameter description. Baseline score of 3 is appropriate since schema does most of the work.

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 'Query work items using WIQL' clearly specifies the action (query) and resource (work items) and the specific method (WIQL). This distinguishes it from sibling tools like azdo_query_work_items which likely uses non-WIQL queries, so purpose is clear and distinct.

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 versus alternatives. The name implies it's for custom WIQL queries, but there's no mention of prerequisites, limitations, or comparison with other query tools. Usage is implied but not explicitly stated.

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

azdo_update_commentB

Update a comment on a work item

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesUpdated comment text (use markdown syntax when format is "markdown", HTML tags when format is "html")
formatNoComment format: "markdown" or "html" (default: "markdown")markdown
projectYesAzDO project name
comment_idYesComment ID to update
organizationYesAzDO org name
work_item_idYesWork item ID the comment belongs to

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided. The description only states 'Update', indicating mutation, but lacks disclosure of behavioral traits such as required permissions, idempotency, error handling, or effects of updating a non-existent comment. The agent gets minimal insight 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.

Conciseness5/5

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

The description is a single, efficient sentence with no extraneous words. It is front-loaded and concise, earning its place.

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 6 parameters and no output schema or annotations, the description is too brief. It omits important context such as success/failure behavior, partial vs full replacement of text, and how the format parameter affects the update. Not sufficiently complete for the tool's complexity.

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 description adds no additional meaning beyond the schema; it simply restates the operation. The schema itself already documents all parameters clearly.

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 'Update a comment on a work item' uses a specific verb and resource, clearly indicating the tool's function. It effectively distinguishes from siblings like azdo_add_comment (add) and azdo_update_work_item (update work item).

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 updating an existing comment but provides no explicit guidance on when to use this tool versus alternatives (e.g., azdo_add_comment for new comments, azdo_update_work_item for other updates). Usage context is implied rather than stated.

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

azdo_update_work_itemC

Update work item

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWork item ID to update
tagsNoComma-separated tags (e.g., "bug, critical, ui")
stateNoState (New, Active, Resolved, Closed, etc.)
titleNoWork item title
effortNoEffort estimate in hours
fieldsNoOptional extra fields as JSON string (for custom fields)
formatNoFormat for large text fields (description, acceptance criteria, repro steps, justification): "markdown" or "html" (default: "markdown")markdown
projectYesAzDO project name
activityNoActivity type (Development, Testing, Documentation, etc.)
priorityNoPriority (1-4, where 1 is highest)
severityNoSeverity for bugs (Critical, High, Medium, Low)
area_pathNoArea path (e.g., "MyProject\\Team1")
board_rowNoBoard row/swimlane to place the work item in
start_dateNoStart date (YYYY-MM-DD)
assigned_toNoUser to assign the work item to (email or display name)
descriptionNoWork item description (use markdown syntax when format is "markdown", HTML tags when format is "html")
repro_stepsNoReproduction steps (use markdown syntax when format is "markdown", HTML tags when format is "html")
target_dateNoTarget/due date (YYYY-MM-DD)
board_columnNoBoard column to place the work item in
organizationYesAzDO org name
story_pointsNoStory points for estimation
justificationNoJustification (CMMI process template; use markdown syntax when format is "markdown", HTML tags when format is "html")
iteration_pathNoIteration path (e.g., "MyProject\\Sprint 1")
remaining_workNoRemaining work in hours
acceptance_criteriaNoAcceptance criteria (use markdown syntax when format is "markdown", HTML tags when format is "html")

TDQS

C2.4/5.0
Behavior1/5

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

No annotations are present, and the description does not disclose any behavioral traits (e.g., idempotency, side effects, permissions, or rate limits). The agent receives no insight into how the tool behaves beyond the simple verb.

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 description is extremely short but lacks substance. It is nearly a tautology (restating the tool name). It could be expanded to include key details without becoming verbose.

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

Completeness1/5

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

Given the tool's complexity (25 parameters, no output schema, no annotations), the one-line description is woefully inadequate. It omits prerequisites, return values, and behavioral context, leaving the agent underinformed.

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 is documented. The input schema fully describes the fields. The tool description adds no extra meaning beyond what the schema already provides, meeting the baseline.

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 'Update work item' clearly indicates a write operation on an existing work item, distinguishing it from create or query siblings. However, it lacks specificity on what aspects can be updated, which could be clearer.

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 'azdo_create_work_item' or 'azdo_link_work_items'. There are no context hints or exclusions.

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. 24 tool updates
    • Changedazdo_add_comment4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "markdown",
        +  "description": "Comment format: \"markdown\" or \"html\" (default: \"markdown\")",
        +  "type": "string"
        +}
      • changedInput schema / properties / text / description
        Previous value: -"Comment text (supports markdown)"New value: +"Comment text (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / title
        Removed value: -"AddCommentArgs"
    • Changedazdo_create_work_item47 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / acceptance_criteria / description
        Previous value: -"Acceptance criteria"New value: +"Acceptance criteria (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / acceptance_criteria / nullable
        Removed value: -true
      • changedInput schema / properties / acceptance_criteria / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / activity / nullable
        Removed value: -true
      • changedInput schema / properties / activity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / area_path / nullable
        Removed value: -true
      • changedInput schema / properties / area_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / assigned_to / nullable
        Removed value: -true
      • changedInput schema / properties / assigned_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / board_column / nullable
        Removed value: -true
      • changedInput schema / properties / board_column / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / board_row / nullable
        Removed value: -true
      • changedInput schema / properties / board_row / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / description / description
        Previous value: -"Work item description (Basic HTML supported)"New value: +"Work item description (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / description / nullable
        Removed value: -true
      • changedInput schema / properties / description / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / effort / nullable
        Removed value: -true
      • changedInput schema / properties / effort / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / fields / nullable
        Removed value: -true
      • changedInput schema / properties / fields / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "markdown",
        +  "description": "Format for large text fields (description, acceptance criteria, repro steps, justification): \"markdown\" or \"html\" (default: \"markdown\")",
        +  "type": "string"
        +}
      • removedInput schema / properties / iteration_path / nullable
        Removed value: -true
      • changedInput schema / properties / iteration_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedInput schema / properties / justification
        Added value: +{
        +  "default": null,
        +  "description": "Justification (CMMI process template; use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedInput schema / properties / parent_id / nullable
        Removed value: -true
      • changedInput schema / properties / parent_id / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / properties / priority / nullable
        Removed value: -true
      • changedInput schema / properties / priority / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / properties / remaining_work / nullable
        Removed value: -true
      • changedInput schema / properties / remaining_work / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / properties / repro_steps / description
        Previous value: -"Reproduction steps"New value: +"Reproduction steps (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / repro_steps / nullable
        Removed value: -true
      • changedInput schema / properties / repro_steps / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / severity / nullable
        Removed value: -true
      • changedInput schema / properties / severity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / start_date / nullable
        Removed value: -true
      • changedInput schema / properties / start_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / state / nullable
        Removed value: -true
      • changedInput schema / properties / state / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / story_points / nullable
        Removed value: -true
      • changedInput schema / properties / story_points / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / tags / nullable
        Removed value: -true
      • changedInput schema / properties / tags / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / target_date / nullable
        Removed value: -true
      • changedInput schema / properties / target_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"CreateWorkItemArgs"
    • Changedazdo_get_current_user2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"GetCurrentUserArgs"
    • Changedazdo_get_team2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"GetTeamArgs"
    • Changedazdo_get_team_board2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"GetBoardArgs"
    • Changedazdo_get_team_current_iteration2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"GetTeamCurrentIterationArgs"
    • Changedazdo_get_work_item4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / include_latest_n_comments / nullable
        Removed value: -true
      • changedInput schema / properties / include_latest_n_comments / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"GetWorkItemArgs"
    • Changedazdo_get_work_items4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / include_latest_n_comments / nullable
        Removed value: -true
      • changedInput schema / properties / include_latest_n_comments / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"GetWorkItemsArgs"
    • Changedazdo_link_work_items2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"LinkWorkItemsArgs"
    • Changedazdo_list_area_paths4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / parent_path / nullable
        Removed value: -true
      • changedInput schema / properties / parent_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"ListAreaPathsArgs"
    • Changedazdo_list_board_columns2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListBoardColumnsArgs"
    • Changedazdo_list_board_rows2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListBoardRowsArgs"
    • Changedazdo_list_iteration_paths6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / team_id / nullable
        Removed value: -true
      • changedInput schema / properties / team_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / timeframe / nullable
        Removed value: -true
      • changedInput schema / properties / timeframe / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"ListIterationPathsArgs"
    • Changedazdo_list_organizations2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListOrganizationsArgs"
    • Changedazdo_list_projects2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListProjectsArgs"
    • Changedazdo_list_tags2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListTagsArgs"
    • Changedazdo_list_team_boards2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListBoardsArgs"
    • Changedazdo_list_team_members2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListTeamMembersArgs"
    • Changedazdo_list_teams2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListTeamsArgs"
    • Changedazdo_list_work_item_types2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / title
        Removed value: -"ListWorkItemTypesArgs"
    • Changedazdo_query_work_items20 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / area_path / nullable
        Removed value: -true
      • changedInput schema / properties / area_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / changed_date_from / nullable
        Removed value: -true
      • changedInput schema / properties / changed_date_from / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / changed_date_to / nullable
        Removed value: -true
      • changedInput schema / properties / changed_date_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / created_date_from / nullable
        Removed value: -true
      • changedInput schema / properties / created_date_from / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / created_date_to / nullable
        Removed value: -true
      • changedInput schema / properties / created_date_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / include_latest_n_comments / nullable
        Removed value: -true
      • changedInput schema / properties / include_latest_n_comments / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / properties / iteration_path / nullable
        Removed value: -true
      • changedInput schema / properties / iteration_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / state_change_date_from / nullable
        Removed value: -true
      • changedInput schema / properties / state_change_date_from / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / state_change_date_to / nullable
        Removed value: -true
      • changedInput schema / properties / state_change_date_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"QueryWorkItemsArgs"
    • Changedazdo_query_work_items_by_wiql4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / properties / include_latest_n_comments / nullable
        Removed value: -true
      • changedInput schema / properties / include_latest_n_comments / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"QueryWorkItemsArgsWiql"
    • Addedazdo_update_comment
    • Changedazdo_update_work_item47 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / acceptance_criteria / description
        Previous value: -"Acceptance criteria (for user stories)"New value: +"Acceptance criteria (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / acceptance_criteria / nullable
        Removed value: -true
      • changedInput schema / properties / acceptance_criteria / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / activity / nullable
        Removed value: -true
      • changedInput schema / properties / activity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / area_path / nullable
        Removed value: -true
      • changedInput schema / properties / area_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / assigned_to / nullable
        Removed value: -true
      • changedInput schema / properties / assigned_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / board_column / nullable
        Removed value: -true
      • changedInput schema / properties / board_column / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / board_row / nullable
        Removed value: -true
      • changedInput schema / properties / board_row / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / description / description
        Previous value: -"Work item description (Basic HTML supported)"New value: +"Work item description (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / description / nullable
        Removed value: -true
      • changedInput schema / properties / description / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / effort / nullable
        Removed value: -true
      • changedInput schema / properties / effort / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / fields / nullable
        Removed value: -true
      • changedInput schema / properties / fields / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "markdown",
        +  "description": "Format for large text fields (description, acceptance criteria, repro steps, justification): \"markdown\" or \"html\" (default: \"markdown\")",
        +  "type": "string"
        +}
      • removedInput schema / properties / iteration_path / nullable
        Removed value: -true
      • changedInput schema / properties / iteration_path / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedInput schema / properties / justification
        Added value: +{
        +  "default": null,
        +  "description": "Justification (CMMI process template; use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedInput schema / properties / priority / nullable
        Removed value: -true
      • changedInput schema / properties / priority / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "null"
        +]
      • removedInput schema / properties / remaining_work / nullable
        Removed value: -true
      • changedInput schema / properties / remaining_work / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / properties / repro_steps / description
        Previous value: -"Reproduction steps (for bugs)"New value: +"Reproduction steps (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")"
      • removedInput schema / properties / repro_steps / nullable
        Removed value: -true
      • changedInput schema / properties / repro_steps / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / severity / nullable
        Removed value: -true
      • changedInput schema / properties / severity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / start_date / nullable
        Removed value: -true
      • changedInput schema / properties / start_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / state / nullable
        Removed value: -true
      • changedInput schema / properties / state / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / story_points / nullable
        Removed value: -true
      • changedInput schema / properties / story_points / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / tags / nullable
        Removed value: -true
      • changedInput schema / properties / tags / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / target_date / nullable
        Removed value: -true
      • changedInput schema / properties / target_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / title / nullable
        Removed value: -true
      • changedInput schema / properties / title / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"UpdateWorkItemArgs"
  2. 23 tool updatesv1.0.0
    • Addedazdo_add_comment
    • Addedazdo_create_work_item
    • Addedazdo_get_current_user
    • Addedazdo_get_team
    • Addedazdo_get_team_board
    • Addedazdo_get_team_current_iteration
    • Addedazdo_get_work_item
    • Addedazdo_get_work_items
    • Addedazdo_link_work_items
    • Addedazdo_list_area_paths
    • Addedazdo_list_board_columns
    • Addedazdo_list_board_rows
    • Addedazdo_list_iteration_paths
    • Addedazdo_list_organizations
    • Addedazdo_list_projects
    • Addedazdo_list_tags
    • Addedazdo_list_team_boards
    • Addedazdo_list_team_members
    • Addedazdo_list_teams
    • Addedazdo_list_work_item_types
    • Addedazdo_query_work_items
    • Addedazdo_query_work_items_by_wiql
    • Addedazdo_update_work_item

TDQS

B3/5.0

Scored across 24 tools

Disambiguation5/5

Each tool has a clear, distinct purpose. While there are multiple query/get tools, the parameters differ (single vs multiple, WIQL vs filters), and descriptions make the distinction obvious.

Naming Consistency5/5

All tools follow the consistent pattern 'azdo_verb_noun' with underscores, using standard verbs (list, get, create, update, query). No mixing of conventions.

Tool Count4/5

24 tools is comprehensive but not excessive. Each tool serves a specific need in the Azure DevOps Boards domain, and the count reflects the complexity of the domain.

Completeness4/5

The tool set covers most common operations: CRUD for work items, comments, queries, team/board info, and metadata. Missing delete work item, but the core workflows are well-supported.

Maintenance

ActivitySlowing
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
    13
    58
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that integrates with Azure DevOps, enabling users to query work items, access backlogs, and perform various Azure DevOps operations through a standardized interface.
    1
    -