mcp-for-azure-devops-boards
This MCP server provides a standardized interface to manage Azure DevOps Boards and Work Items, enabling AI assistants to interact with Azure DevOps programmatically.
Discovery & Organization
List accessible Azure DevOps organizations and projects
Get the current authenticated user's profile
Work Item Management
Create and update work items (User Stories, Epics, Features, Bugs, Tasks, etc.) with rich metadata: title, description, type, assignee, state, priority, severity, story points, effort, remaining work, area/iteration paths, board columns/rows, tags, dates, acceptance criteria, reproduction steps, and custom fields via JSON
Get single or multiple work items by ID (optionally including comments)
Add comments to work items
Link work items with relationship types: Parent, Child, Related, Duplicate, or Dependency
Querying Work Items
Query using structured filters (area/iteration path, date ranges, state, type, assignee, tags, board column/row, changed-by user) with inclusion and exclusion support
Execute raw WIQL (Work Item Query Language) queries for advanced filtering
Teams & Boards
List teams, get team details, and list team members
List boards for a team, get board details, and list board columns and rows (swimlanes)
Iterations & Paths
Get current, past, or future iterations/sprints for a team
List area paths and iteration paths for a project
Project Metadata
List available work item types and tags in use for a project
Deployment & Auth
Uses Azure CLI authentication for secure access
Supports stdio mode (default) and HTTP server mode, with optimized JSON output for efficient LLM consumption
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-for-azure-devops-boardslist all active bugs in the Contoso project for organization Fabrikam"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP for Azure DevOps Boards
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-boardsThe 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-boardsThe 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 |
| N/A |
Port | Port for HTTP server (default: 3000) |
| 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:
Environment (client secret) — used only when
AZURE_TENANT_ID,AZURE_CLIENT_ID, andAZURE_CLIENT_SECRETare all set. If only some are set, it is skipped with a warning.Azure CLI — runs
az account get-access-tokenfor the Azure DevOps scope, using youraz loginsession.Azure Developer CLI — uses your
azd auth loginsession.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-cliWindows (Scoop):
scoop install azure-cliWindows (Chocolatey):
choco install azure-cliFor other installation methods, see the official Azure CLI installation guide.
Logging In
To authenticate, run:
az loginUsage
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-boardsHTTP 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 3000MCP 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 |
|
| Global (home) |
| macOS: | Global (per-user) |
|
| Global (home) |
|
| Workspace (current directory) |
|
| Global (home) |
|
| 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.jsonLinux:
~/.config/Claude/claude_desktop_config.jsonWindows:
%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
organizationandprojectparameters.
azdo_create_work_item: Create a new work item.Required:
organization,project,work_item_type,titleOptional:
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,idOptional: All fields available in creation.
azdo_get_work_item: Get details of a specific work item.Required:
organization,project,idOptional:
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,projectOptional 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,queryOptional:
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
organizationandprojectparameters.
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!
Fork the repository.
Create a new branch for your feature or bugfix (
git checkout -b feature/amazing-feature).Commit your changes.
Push to your branch.
Open a Pull Request.
Building from Source
Prerequisites
Steps
Clone the repository:
git clone https://github.com/danielealbano/mcp-for-azure-devops-boards.git cd mcp-for-azure-devops-boardsBuild the project:
cargo build --release
Tooling
Run tests:
cargo testCheck code style:
cargo fmt --checkLinting:
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 toolsazdo_add_commentC
Add a comment to a work item
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Comment text (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| format | No | Comment format: "markdown" or "html" (default: "markdown") | markdown |
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name | |
| work_item_id | Yes | Work item ID to add comment to |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Comma-separated tags | |
| state | No | Initial state (New, Active, Resolved, etc.) | |
| title | Yes | Work item title | |
| effort | No | Effort estimate in hours | |
| fields | No | Optional extra fields as JSON string (for custom fields) | |
| format | No | Format for large text fields (description, acceptance criteria, repro steps, justification): "markdown" or "html" (default: "markdown") | markdown |
| project | Yes | AzDO project name | |
| activity | No | Activity type (Development, Testing, Documentation, etc.) | |
| priority | No | Priority (1-4, where 1 is highest) | |
| severity | No | Severity for bugs (Critical, High, Medium, Low) | |
| area_path | No | Area path (e.g., "MyProject\\Team1") | |
| board_row | No | Board row/swimlane to place the work item in | |
| parent_id | No | ID of parent work item | |
| start_date | No | Start date (YYYY-MM-DD) | |
| assigned_to | No | User to assign the work item to (email or display name) | |
| description | No | Work item description (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| repro_steps | No | Reproduction steps (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| target_date | No | Target/due date (YYYY-MM-DD) | |
| board_column | No | Board column to place the work item in | |
| organization | Yes | AzDO org name | |
| story_points | No | Story points for estimation | |
| justification | No | Justification (CMMI process template; use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| iteration_path | No | Iteration path (e.g., "MyProject\\Sprint 1"), use azdo_get_team_current_iteration to get the current iteration | |
| remaining_work | No | Remaining work in hours | |
| work_item_type | Yes | Type of work item (User Story, Epic, Feature, etc.) | |
| acceptance_criteria | No | Acceptance criteria (use markdown syntax when format is "markdown", HTML tags when format is "html") |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| board_id | Yes | Board ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project | |
| team_id | Yes | Team ID or name | |
| organization | Yes | AzDO org |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID | |
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name | |
| include_latest_n_comments | No | Include the latest N comments (optional). Set to -1 for all comments. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Work item IDs (comma-separated or array) | |
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name | |
| include_latest_n_comments | No | Include the latest N comments (optional). Set to -1 for all comments. |
TDQS
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.
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.
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.
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.
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.
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_link_work_itemsC
Link work items
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| link_type | Yes | Link type: "Parent", "Child", "Related", "Duplicate", "Dependency" | |
| source_id | Yes | Source work item ID | |
| target_id | Yes | Target work item ID | |
| organization | Yes | AzDO org name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Link work items', which implies a write operation, but it does not disclose any behavioral traits such as whether existing links are affected, permission requirements, or reversibility. No annotations exist to compensate, leaving the agent with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (three words), which avoids verbosity but lacks sufficient substance. It is front-loaded but under-specified, earning a middle score for conciseness without adequate informativeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with five required parameters and no output schema. The description fails to explain what 'linking' means in Azure DevOps, what happens upon success, or any constraints. This leaves the agent underinformed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters have descriptions in the schema (100% coverage), so the description adds no extra meaning. The baseline is 3, and the parameter descriptions are clear enough for understanding inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Link work items' clearly states the verb and resource, and the schema parameters (source_id, target_id, link_type) confirm the purpose of linking two items with a type. However, it could be more explicit about creating a relationship, but it's not ambiguous given sibling tool names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. There is no indication of when to use this tool versus alternatives like azdo_update_work_item (which might also manage links) or azdo_create_work_item. The agent receives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azdo_list_area_pathsC
List area paths for a project
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| parent_path | No | Optional parent path to traverse the tree (e.g., "Area1\\SubArea1") | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| board_id | Yes | Board ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| board_id | Yes | Board ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | No | Optional team ID or name to get team-specific iterations | |
| timeframe | No | Optional timeframe filter: "current", "past", or "future" (only applies when team_id is provided) | |
| organization | Yes | AzDO org name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states '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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| team_id | Yes | Team ID or name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | AzDO project name | |
| area_path | No | Area path to filter by (e.g., "MyProject\\Team1"). Uses UNDER operator to include child paths. | |
| exclude_tags | No | Tags to exclude (e.g., ["wontfix"]) | |
| include_tags | No | Tags to include (e.g., ["bug", "critical"]) | |
| organization | Yes | AzDO org name | |
| exclude_state | No | States to exclude (e.g., ["Closed", "Removed"]) | |
| include_state | No | States to include (e.g., ["Active", "Resolved"]) | |
| iteration_path | No | Iteration path to filter by (e.g., "MyProject\\Sprint 1"). Uses UNDER operator to include child paths. | |
| changed_date_to | No | Filter by changed date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| created_date_to | No | Filter by creation date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| changed_date_from | No | Filter by changed date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| created_date_from | No | Filter by creation date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| exclude_board_row | No | Board rows/swimlanes to exclude | |
| include_board_row | No | Board rows/swimlanes to include (e.g., ["General", "Scraping Platform"]) | |
| exclude_changed_by | No | Changed by users to exclude | |
| include_changed_by | No | Changed by users to include (e.g., ["John Doe", "jane@example.com"]) | |
| exclude_assigned_to | No | Assignees to exclude | |
| include_assigned_to | No | Assignees to include (e.g., ["John Doe", "jane@example.com"]) | |
| exclude_board_column | No | Board columns to exclude | |
| include_board_column | No | Board columns to include (e.g., ["Active", "Resolved"]) | |
| state_change_date_to | No | Filter by state change date (to). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| exclude_work_item_type | No | Work item types to exclude | |
| include_work_item_type | No | Work item types to include (e.g., ["Bug", "User Story"]) | |
| state_change_date_from | No | Filter by state change date (from). Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ | |
| include_latest_n_comments | No | Include the latest N comments (optional). Set to -1 for all comments. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | WIQL query string (e.g., "SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active'") | |
| project | Yes | AzDO project name | |
| organization | Yes | AzDO org name | |
| include_latest_n_comments | No | Include the latest N comments (optional). Set to -1 for all comments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Updated comment text (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| format | No | Comment format: "markdown" or "html" (default: "markdown") | markdown |
| project | Yes | AzDO project name | |
| comment_id | Yes | Comment ID to update | |
| organization | Yes | AzDO org name | |
| work_item_id | Yes | Work item ID the comment belongs to |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work item ID to update | |
| tags | No | Comma-separated tags (e.g., "bug, critical, ui") | |
| state | No | State (New, Active, Resolved, Closed, etc.) | |
| title | No | Work item title | |
| effort | No | Effort estimate in hours | |
| fields | No | Optional extra fields as JSON string (for custom fields) | |
| format | No | Format for large text fields (description, acceptance criteria, repro steps, justification): "markdown" or "html" (default: "markdown") | markdown |
| project | Yes | AzDO project name | |
| activity | No | Activity type (Development, Testing, Documentation, etc.) | |
| priority | No | Priority (1-4, where 1 is highest) | |
| severity | No | Severity for bugs (Critical, High, Medium, Low) | |
| area_path | No | Area path (e.g., "MyProject\\Team1") | |
| board_row | No | Board row/swimlane to place the work item in | |
| start_date | No | Start date (YYYY-MM-DD) | |
| assigned_to | No | User to assign the work item to (email or display name) | |
| description | No | Work item description (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| repro_steps | No | Reproduction steps (use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| target_date | No | Target/due date (YYYY-MM-DD) | |
| board_column | No | Board column to place the work item in | |
| organization | Yes | AzDO org name | |
| story_points | No | Story points for estimation | |
| justification | No | Justification (CMMI process template; use markdown syntax when format is "markdown", HTML tags when format is "html") | |
| iteration_path | No | Iteration path (e.g., "MyProject\\Sprint 1") | |
| remaining_work | No | Remaining work in hours | |
| acceptance_criteria | No | Acceptance criteria (use markdown syntax when format is "markdown", HTML tags when format is "html") |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
- Changed
azdo_add_comment4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / formatAdded value: +{ + "default": "markdown", + "description": "Comment format: \"markdown\" or \"html\" (default: \"markdown\")", + "type": "string" +} - changed
Input schema / properties / text / descriptionPrevious value: -"Comment text (supports markdown)"New value: +"Comment text (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")" - removed
Input schema / titleRemoved value: -"AddCommentArgs"
- Changed
azdo_create_work_item47 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / acceptance_criteria / descriptionPrevious value: -"Acceptance criteria"New value: +"Acceptance criteria (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")" - removed
Input schema / properties / acceptance_criteria / nullableRemoved value: -true - changed
Input schema / properties / acceptance_criteria / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / activity / nullableRemoved value: -true - changed
Input schema / properties / activity / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / area_path / nullableRemoved value: -true - changed
Input schema / properties / area_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / assigned_to / nullableRemoved value: -true - changed
Input schema / properties / assigned_to / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / board_column / nullableRemoved value: -true - changed
Input schema / properties / board_column / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / board_row / nullableRemoved value: -true - changed
Input schema / properties / board_row / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / description / descriptionPrevious 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\")" - removed
Input schema / properties / description / nullableRemoved value: -true - changed
Input schema / properties / description / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / effort / nullableRemoved value: -true - changed
Input schema / properties / effort / typePrevious value: -"number"New value: +[ + "number", + "null" +] - removed
Input schema / properties / fields / nullableRemoved value: -true - changed
Input schema / properties / fields / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Input schema / properties / formatAdded value: +{ + "default": "markdown", + "description": "Format for large text fields (description, acceptance criteria, repro steps, justification): \"markdown\" or \"html\" (default: \"markdown\")", + "type": "string" +} - removed
Input schema / properties / iteration_path / nullableRemoved value: -true - changed
Input schema / properties / iteration_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Input schema / properties / justificationAdded value: +{ + "default": null, + "description": "Justification (CMMI process template; use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")", + "type": [ + "string", + "null" + ] +} - removed
Input schema / properties / parent_id / nullableRemoved value: -true - changed
Input schema / properties / parent_id / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / properties / priority / nullableRemoved value: -true - changed
Input schema / properties / priority / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / properties / remaining_work / nullableRemoved value: -true - changed
Input schema / properties / remaining_work / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Input schema / properties / repro_steps / descriptionPrevious value: -"Reproduction steps"New value: +"Reproduction steps (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")" - removed
Input schema / properties / repro_steps / nullableRemoved value: -true - changed
Input schema / properties / repro_steps / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / severity / nullableRemoved value: -true - changed
Input schema / properties / severity / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / start_date / nullableRemoved value: -true - changed
Input schema / properties / start_date / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / state / nullableRemoved value: -true - changed
Input schema / properties / state / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / story_points / nullableRemoved value: -true - changed
Input schema / properties / story_points / typePrevious value: -"number"New value: +[ + "number", + "null" +] - removed
Input schema / properties / tags / nullableRemoved value: -true - changed
Input schema / properties / tags / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / target_date / nullableRemoved value: -true - changed
Input schema / properties / target_date / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"CreateWorkItemArgs"
- Changed
azdo_get_current_user2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"GetCurrentUserArgs"
- Changed
azdo_get_team2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"GetTeamArgs"
- Changed
azdo_get_team_board2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"GetBoardArgs"
- Changed
azdo_get_team_current_iteration2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"GetTeamCurrentIterationArgs"
- Changed
azdo_get_work_item4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / include_latest_n_comments / nullableRemoved value: -true - changed
Input schema / properties / include_latest_n_comments / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / titleRemoved value: -"GetWorkItemArgs"
- Changed
azdo_get_work_items4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / include_latest_n_comments / nullableRemoved value: -true - changed
Input schema / properties / include_latest_n_comments / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / titleRemoved value: -"GetWorkItemsArgs"
- Changed
azdo_link_work_items2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"LinkWorkItemsArgs"
- Changed
azdo_list_area_paths4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / parent_path / nullableRemoved value: -true - changed
Input schema / properties / parent_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"ListAreaPathsArgs"
- Changed
azdo_list_board_columns2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListBoardColumnsArgs"
- Changed
azdo_list_board_rows2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListBoardRowsArgs"
- Changed
azdo_list_iteration_paths6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / team_id / nullableRemoved value: -true - changed
Input schema / properties / team_id / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / timeframe / nullableRemoved value: -true - changed
Input schema / properties / timeframe / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"ListIterationPathsArgs"
- Changed
azdo_list_organizations2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListOrganizationsArgs"
- Changed
azdo_list_projects2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListProjectsArgs"
- Changed
azdo_list_tags2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListTagsArgs"
- Changed
azdo_list_team_boards2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListBoardsArgs"
- Changed
azdo_list_team_members2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListTeamMembersArgs"
- Changed
azdo_list_teams2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListTeamsArgs"
- Changed
azdo_list_work_item_types2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / titleRemoved value: -"ListWorkItemTypesArgs"
- Changed
azdo_query_work_items20 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / area_path / nullableRemoved value: -true - changed
Input schema / properties / area_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / changed_date_from / nullableRemoved value: -true - changed
Input schema / properties / changed_date_from / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / changed_date_to / nullableRemoved value: -true - changed
Input schema / properties / changed_date_to / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / created_date_from / nullableRemoved value: -true - changed
Input schema / properties / created_date_from / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / created_date_to / nullableRemoved value: -true - changed
Input schema / properties / created_date_to / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / include_latest_n_comments / nullableRemoved value: -true - changed
Input schema / properties / include_latest_n_comments / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / properties / iteration_path / nullableRemoved value: -true - changed
Input schema / properties / iteration_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / state_change_date_from / nullableRemoved value: -true - changed
Input schema / properties / state_change_date_from / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / state_change_date_to / nullableRemoved value: -true - changed
Input schema / properties / state_change_date_to / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"QueryWorkItemsArgs"
- Changed
azdo_query_work_items_by_wiql4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / include_latest_n_comments / nullableRemoved value: -true - changed
Input schema / properties / include_latest_n_comments / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / titleRemoved value: -"QueryWorkItemsArgsWiql"
- Added
azdo_update_comment - Changed
azdo_update_work_item47 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / acceptance_criteria / descriptionPrevious value: -"Acceptance criteria (for user stories)"New value: +"Acceptance criteria (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")" - removed
Input schema / properties / acceptance_criteria / nullableRemoved value: -true - changed
Input schema / properties / acceptance_criteria / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / activity / nullableRemoved value: -true - changed
Input schema / properties / activity / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / area_path / nullableRemoved value: -true - changed
Input schema / properties / area_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / assigned_to / nullableRemoved value: -true - changed
Input schema / properties / assigned_to / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / board_column / nullableRemoved value: -true - changed
Input schema / properties / board_column / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / board_row / nullableRemoved value: -true - changed
Input schema / properties / board_row / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / description / descriptionPrevious 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\")" - removed
Input schema / properties / description / nullableRemoved value: -true - changed
Input schema / properties / description / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / effort / nullableRemoved value: -true - changed
Input schema / properties / effort / typePrevious value: -"number"New value: +[ + "number", + "null" +] - removed
Input schema / properties / fields / nullableRemoved value: -true - changed
Input schema / properties / fields / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Input schema / properties / formatAdded value: +{ + "default": "markdown", + "description": "Format for large text fields (description, acceptance criteria, repro steps, justification): \"markdown\" or \"html\" (default: \"markdown\")", + "type": "string" +} - removed
Input schema / properties / iteration_path / nullableRemoved value: -true - changed
Input schema / properties / iteration_path / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Input schema / properties / justificationAdded value: +{ + "default": null, + "description": "Justification (CMMI process template; use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")", + "type": [ + "string", + "null" + ] +} - removed
Input schema / properties / priority / nullableRemoved value: -true - changed
Input schema / properties / priority / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Input schema / properties / remaining_work / nullableRemoved value: -true - changed
Input schema / properties / remaining_work / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Input schema / properties / repro_steps / descriptionPrevious value: -"Reproduction steps (for bugs)"New value: +"Reproduction steps (use markdown syntax when format is \"markdown\", HTML tags when format is \"html\")" - removed
Input schema / properties / repro_steps / nullableRemoved value: -true - changed
Input schema / properties / repro_steps / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / severity / nullableRemoved value: -true - changed
Input schema / properties / severity / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / start_date / nullableRemoved value: -true - changed
Input schema / properties / start_date / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / state / nullableRemoved value: -true - changed
Input schema / properties / state / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / story_points / nullableRemoved value: -true - changed
Input schema / properties / story_points / typePrevious value: -"number"New value: +[ + "number", + "null" +] - removed
Input schema / properties / tags / nullableRemoved value: -true - changed
Input schema / properties / tags / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / target_date / nullableRemoved value: -true - changed
Input schema / properties / target_date / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / properties / title / nullableRemoved value: -true - changed
Input schema / properties / title / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"UpdateWorkItemArgs"
23 tool updates
v1.0.0- Added
azdo_add_comment - Added
azdo_create_work_item - Added
azdo_get_current_user - Added
azdo_get_team - Added
azdo_get_team_board - Added
azdo_get_team_current_iteration - Added
azdo_get_work_item - Added
azdo_get_work_items - Added
azdo_link_work_items - Added
azdo_list_area_paths - Added
azdo_list_board_columns - Added
azdo_list_board_rows - Added
azdo_list_iteration_paths - Added
azdo_list_organizations - Added
azdo_list_projects - Added
azdo_list_tags - Added
azdo_list_team_boards - Added
azdo_list_team_members - Added
azdo_list_teams - Added
azdo_list_work_item_types - Added
azdo_query_work_items - Added
azdo_query_work_items_by_wiql - Added
azdo_update_work_item
TDQS
Scored across 24 tools
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.
All tools follow the consistent pattern 'azdo_verb_noun' with underscores, using standard verbs (list, get, create, update, query). No mixing of conventions.
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.
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
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityDmaintenanceIntegrates Cline with Azure DevOps services, enabling access to work items, repositories, and pull requests through configurable MCP tools.1533MIT
- AlicenseNot gradedqualityDmaintenanceThis 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 DevOps1358MIT
- FlicenseNot gradedqualityDmaintenanceA 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-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Azure DevOps services including work items, repositories, pipelines, wikis, and test plans through a local MCP server that provides direct access to Azure DevOps REST APIs from your code editor.87,170MIT