Skip to main content
Glama
Elad-Health
by Elad-Health

Azure DevOps MCP Server

A READ-ONLY MCP (Model Context Protocol) server that connects AI assistants to Azure DevOps Server (on-premises). Works with Claude Code CLI, VS Code AI extensions (Continue, Cline), Cursor, and any MCP-compatible client.

Features

  • Projects: List and explore projects

  • Git/Repos: Browse repositories, commits, branches, pull requests, diffs, and code search

  • Builds: List builds, view logs, analyze errors

  • Work Items: Query work items, find linked commits/PRs

  • Releases: View releases and deployment status

  • Pipelines: List YAML pipelines, view runs, get pipeline configuration

  • Test Results: View test runs, results, and analyze failures

Related MCP server: Azure DevOps MCP Server

Prerequisites

  • Node.js 18 or higher

  • Azure DevOps Server 2020 or 2022 (on-premises)

  • Personal Access Token (PAT) with read scopes

Installation

npx azure-devops-mcp@latest

Option 2: Clone and Build

git clone https://github.com/elad-nofy/azure-devops-mcp.git
cd azure-devops-mcp
npm install
npm run build

Configuration

Create a Personal Access Token (PAT)

  1. Go to Azure DevOps Server

  2. Click on your profile icon > Security > Personal access tokens

  3. Create a new token with the following scopes:

    • Code: Read

    • Build: Read

    • Work Items: Read

    • Release: Read

    • Test Management: Read

Configure MCP Client

Claude Code CLI

Add to your global settings (~/.claude.json on macOS/Linux, %USERPROFILE%\.claude.json on Windows):

Windows:

{
  "mcpServers": {
    "azure-devops": {
      "command": "cmd",
      "args": ["/c", "npx", "azure-devops-mcp"],
      "env": {
        "AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
        "AZURE_DEVOPS_PAT": "your-personal-access-token",
        "AZURE_DEVOPS_COLLECTION": "YourCollection",
        "AZURE_DEVOPS_PROJECT": "YourDefaultProject"
      }
    }
  }
}

macOS / Linux:

{
  "mcpServers": {
    "azure-devops": {
      "command": "npx",
      "args": ["azure-devops-mcp"],
      "env": {
        "AZURE_DEVOPS_URL": "http://your-tfs-server:8080/tfs",
        "AZURE_DEVOPS_PAT": "your-personal-access-token",
        "AZURE_DEVOPS_COLLECTION": "YourCollection",
        "AZURE_DEVOPS_PROJECT": "YourDefaultProject"
      }
    }
  }
}

VS Code (Continue/Cline)

Add similar configuration to the extension's MCP settings.

Environment Variables

Variable

Required

Description

AZURE_DEVOPS_URL

Yes

Server base URL (e.g., http://tfs:8080/tfs)

AZURE_DEVOPS_PAT

Yes

Personal Access Token

AZURE_DEVOPS_COLLECTION

No

Collection name (default: DefaultCollection)

AZURE_DEVOPS_PROJECT

No

Default project for commands

Available Tools

Projects

Tool

Description

test_connection

Test connection to Azure DevOps and verify authentication

list_projects

List all projects in the organization

get_project

Get detailed project information

Git / Repositories

Tool

Description

list_repos

List repositories in a project

list_branches

List branches in a repository

list_commits

Get commit history with filters

get_commit

Get commit details with changes

get_commit_diff

Get file diff for a commit

list_pull_requests

List pull requests

get_pull_request

Get PR details with comments

compare_branches

Compare two branches (regression analysis)

search_code

Search for text in repository files

get_file_content

Get file content from a repo at a specific branch/commit

get_commits_for_work_item

Find commits referencing a work item

get_prs_for_work_item

Find PRs linked to a work item

Builds

Tool

Description

list_builds

List recent builds

get_build

Get build details

get_build_logs

Get build logs

list_build_definitions

List build definitions

analyze_build_errors

Extract errors from failed builds

Work Items

Tool

Description

query_work_items

Search work items (WIQL or filters)

get_work_item

Get work item details

list_work_item_types

List available work item types

list_iterations

List iterations/sprints in a project

list_areas

List area paths in a project

Releases

Tool

Description

list_releases

List releases

get_release

Get release details

list_release_definitions

List release definitions

get_release_logs

Get deployment logs

Pipelines

Tool

Description

list_pipelines

List YAML pipelines

get_pipeline_runs

Get recent pipeline runs

get_pipeline_yaml

Get pipeline YAML configuration

get_pipeline_variables

Get pipeline variables

Test Results

Tool

Description

list_test_runs

List test runs in a project

get_test_run

Get test run details

get_test_results

Get test results from a run

get_failed_tests

Get failed tests from a run

get_test_runs_for_build

Get test runs for a specific build

analyze_test_failures

Analyze and group test failures

Usage Examples

Once configured, you can ask your AI assistant questions like:

  • "Show me the recent builds for project X"

  • "What's the status of PR #123?"

  • "List all bugs assigned to me"

  • "Show me the commits from last week"

  • "Why did build #456 fail?"

  • "What tests failed in build #789?"

  • "Compare branches Dev/9.1 and Dev/9.2"

  • "Search for 'IMediator' in the Controllers folder"

Development

# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

Troubleshooting

Connection errors

  • Verify AZURE_DEVOPS_URL is correct and accessible

  • Check if your PAT has not expired

  • Ensure your network allows connection to the server

Permission errors

  • Verify PAT has required scopes

  • Check if you have access to the project/repository

"Project is required" errors

  • Set AZURE_DEVOPS_PROJECT environment variable, or

  • Pass project parameter in tool calls

License

MIT

Available Tools

39 tools
analyze_build_errorsB

Analyze a failed build and extract errors, warnings, and issues from logs

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildIdYesBuild ID to analyze

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic function. No disclosure of side effects, authentication needs, rate limits, or output format. It adds minimal behavioral context beyond the tool name.

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

Conciseness4/5

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

Single sentence of 12 words is concise and front-loaded with the verb. Could benefit from slightly more detail, but no wasted words.

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

Completeness2/5

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

Without output schema or annotations, the description is minimal. It doesn't specify what the analysis returns (e.g., structured error list) or any side effects. While simple, a tool expected to handle errors should provide more context.

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

Parameters3/5

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

Schema description coverage is 100% with clear parameter descriptions. The tool description adds no additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the verb 'analyze', the resource 'failed build', and the outcome 'extract errors, warnings, and issues from logs'. This distinguishes it from siblings like get_build (retrieve raw info) and get_build_logs (retrieve raw logs).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_build_logs or get_failed_tests. Description implies usage for failed builds but lacks explicit context for selection or exclusions.

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

analyze_test_failuresB

Analyze test failures in a build - groups failures by error type

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildIdYesBuild ID to analyze

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so description must disclose behaviors. Only mentions grouping by error type; does not state if read-only, permissions needed, side effects, or output format.

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

Conciseness4/5

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

Single sentence, front-loaded purpose, no wasted words. Could add more context but remains efficient.

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

Completeness2/5

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

For a tool with no output schema, description should explain what the grouped output looks like. Only mentions grouping behavior vaguely; misses return value details.

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

Parameters3/5

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

Schema coverage is 100% with basic descriptions. Tool description adds no extra meaning beyond 'Project name' and 'Build ID to analyze', so baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states verb (analyze) and resource (test failures in a build), and distinguishes from siblings like 'get_failed_tests' by mentioning grouping by error type.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like 'get_failed_tests' or 'analyze_build_errors'. Context provides many sibling tools but description offers no differentiation.

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

compare_branchesA

Compare two branches - shows commits in target that are not in base (useful for regression analysis)

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
baseBranchYesBase branch (e.g., "main" or "refs/heads/main")
targetBranchYesTarget branch to compare (e.g., "develop")
topNoMax commits to return

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It clearly states the output is commits that are in target but not base, but does not disclose additional behavioral traits like read-only nature, performance expectations, or pagination behavior.

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

Conciseness5/5

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

The description is a single, dense sentence that conveys purpose, output, and usage context without any wasted words.

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

Completeness3/5

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

Given the absence of an output schema, the description does not detail the structure of returned commits (e.g., fields), though it implies a list. It adequately covers the basic functionality but lacks details on default sorting, number of commits, or relationship to other tools.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents parameters. The description adds context by explaining the comparison direction (target vs base) but does not provide additional details beyond schema examples.

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

Purpose5/5

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

The description clearly states the tool compares two branches and shows commits in target not in base, which is specific and distinguishes from sibling tools like list_branches or get_commit_diff.

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

Usage Guidelines3/5

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

The description indicates it's useful for regression analysis, providing a usage context, but does not explicitly mention when not to use or list alternative tools for similar tasks.

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

get_buildC

Get detailed information about a specific build

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildIdYesBuild ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It only states 'detailed information' without specifying what is included (e.g., status, duration, stages) or confirming read-only nature. This leaves significant ambiguity.

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

Conciseness5/5

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

A single, well-structured sentence that is immediately understandable. No extraneous words.

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

Completeness2/5

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

The description is too minimal for a tool with no output schema and many siblings. It does not explain the scope of 'detailed information' or how this tool relates to others (e.g., get_build_logs).

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The tool description adds no extra meaning beyond the schema, meeting the baseline expectation.

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

Purpose4/5

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

The description clearly states the tool retrieves detailed information about a specific build. However, it does not distinguish itself from sibling tools like get_build_logs, get_commit, etc., which also retrieve details about specific entities.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., get_build_logs for logs, get_failed_tests for failures). The description lacks context for selection.

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

get_build_logsA

Get build logs - useful for analyzing build errors and failures

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildIdYesBuild ID
logIdNoSpecific log ID (omit to get log list first)

TDQS

A3.5/5.0
Behavior3/5

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

The description implies a read-only operation without destructive actions, but fails to disclose any specific behavioral traits such as authentication needs, rate limits, or response size. With no annotations, some behavioral context is missing.

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

Conciseness5/5

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

The description is extremely concise at 8 words, with no wasted text. It is front-loaded with the core action and directly follows with the purpose.

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

Completeness2/5

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

The description lacks details on return value format or pagination behavior, and fails to differentiate from sibling tools like get_release_logs or get_build. Given no output schema, more contextual information is needed for effective use.

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

Parameters4/5

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

The schema already has 100% parameter descriptions, but the tool description adds useful guidance for the logId parameter ('omit to get log list first'), which provides semantic value beyond the schema alone.

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

Purpose4/5

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

The description clearly states the tool retrieves build logs and indicates its utility for analyzing errors. However, it does not distinguish itself from siblings like get_build or get_release_logs, which are related but different resources.

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

Usage Guidelines3/5

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

The description implicitly suggests use for analyzing build errors and failures, but provides no explicit guidance on when to use this tool versus alternatives like analyze_build_errors or get_build. No when-not-to-use or alternative tool mentions.

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

get_commitA

Get detailed information about a specific commit including changes

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
commitIdYesFull commit SHA
includeChangesNoInclude file changes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the tool includes file changes, implying a read-only retrieval. However, it does not disclose any additional behavioral traits such as whether it returns paginated results, rate limits, or any side effects. The description adds minimal context beyond the basic operation.

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

Conciseness5/5

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

The description is a single, concise sentence that immediately conveys the tool's core function. It is front-loaded and contains no superfluous words, maximizing clarity in minimal space.

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

Completeness3/5

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

For a simple retriever with 4 parameters (2 required) and no output schema, the description covers the basic action. However, it lacks details on return format, limits, or how it differs from sibling tools like 'get_commit_diff'. Some additional context would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description does not add meaningful extra semantics beyond aligning with the includeChanges parameter. Baseline 3 is appropriate as the description adds no further value.

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

Purpose5/5

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

The description clearly states the verb ('Get'), resource ('detailed information about a specific commit'), and scope ('including changes'). It effectively distinguishes this tool from sibling tools like 'get_commit_diff' (which focuses on diff) and 'list_commits' (which lists multiple).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or specific contexts (e.g., 'Use this for full commit details; for diff only, use get_commit_diff'). This lack of guidance leaves the agent to infer usage without support.

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

get_commit_diffC

Get the diff/changes for a file in a commit

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
commitIdYesCommit SHA
pathYesFile path to get diff for

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It implies a read operation but lacks details on side effects, authentication requirements, rate limits, or error handling (e.g., behavior when file is unchanged).

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

Conciseness5/5

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

Single sentence, front-loaded with the action, no redundant words. Very concise and to the point.

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

Completeness2/5

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

With no output schema and 4 parameters, the description is minimal. It does not explain the return format, possible error states, or any constraints beyond the schema. More detail would be beneficial.

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

Parameters3/5

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

Schema description coverage is 100% (all 4 parameters have descriptions), so baseline is 3. The description adds no extra meaning beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('diff/changes for a file in a commit'). However, it does not differentiate from sibling tools like get_file_content or compare_branches, which also deal with file changes.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. Sibling tools like get_file_content or compare_branches could be relevant, but no exclusions or context are provided.

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

get_commits_for_work_itemA

Find commits associated with a work item ID (searches commit messages for #ID)

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
workItemIdYesWork item ID to search for
topNoMax commits to return

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description reveals the search mechanism (matching #ID in commit messages). However, it does not disclose potential case sensitivity, exact pattern matching, or rate limits.

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

Conciseness5/5

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

One concise sentence front-loads the action and key detail (search commit messages). No wasted words.

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

Completeness3/5

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

There is no output schema, yet the description does not describe the return format (e.g., commit IDs, details). This missing information reduces completeness for a search tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how workItemId is used in commit message search, clarifying the parameter's role beyond the schema.

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

Purpose5/5

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

The description clearly states the tool finds commits associated with a work item ID by searching commit messages. It distinguishes from siblings like list_commits and get_prs_for_work_item.

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

Usage Guidelines3/5

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

The description implies usage for finding commits that reference a work item ID, but does not explicitly state when to use versus alternatives or provide usage conditions.

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

get_failed_testsB

Get failed tests from a test run - useful for investigating failures

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
runIdYesTest run ID

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, rate limits, or side effects. Despite the tool name suggesting a read operation, the description lacks explicit transparency beyond the purpose.

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

Conciseness4/5

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

Single sentence is concise and front-loaded with key information. No wasted words, though could benefit from structured formatting for clarity.

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

Completeness3/5

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

No output schema exists, and the description does not explain what constitutes 'failed tests', result format, or pagination. Adequate for a simple retrieval tool but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides for parameters 'project' and 'runId'.

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

Purpose5/5

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

Description clearly states the verb 'Get', the resource 'failed tests from a test run', and the context 'useful for investigating failures'. It differentiates from siblings like get_test_results and analyze_test_failures by focusing on failures specifically.

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

Usage Guidelines3/5

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

Description implies usage for investigating failures but does not explicitly state when not to use it or mention alternative tools. Sibling tools like get_test_results or analyze_test_failures could be alternatives, but no guidance is provided.

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

get_file_contentA

Get the content of a file from a repository at a specific branch or commit

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
pathYesFile path (e.g., "/src/index.ts")
branchNoBranch name (e.g., "main")
commitIdNoSpecific commit SHA (overrides branch)

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as return format (raw text vs. structured), size limits, or encoding. For a simple read operation, the description fails to add value beyond the purpose.

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

Conciseness5/5

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

The description is a single concise sentence with no unnecessary words, front-loading the primary action and resource. It efficiently conveys the tool's purpose.

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

Completeness3/5

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

Given the absence of output schema and annotations, the description is adequate for a simple file retrieval tool but lacks details on output format or potential limitations. It is minimally complete.

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

Parameters3/5

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

The input schema has 100% description coverage, and the tool description adds no additional meaning to the parameters. The baseline of 3 is appropriate as the schema already documents each parameter.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'content of a file', specifying the context 'from a repository at a specific branch or commit'. It distinguishes the tool from siblings like search_code (which searches across files) and get_commit_diff (which shows differences).

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

Usage Guidelines4/5

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

The description implies the tool is for retrieving file content at a specific branch/commit, which is clear. However, it does not explicitly mention when not to use it or provide alternatives. The context of sibling tools is present but not leveraged in the description.

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

get_pipeline_runsB

Get recent runs for a pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
pipelineIdYesPipeline/definition ID
branchNoFilter by branch
topNoMax runs to return

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so the description must provide behavioral context. It only says 'Get recent runs' without defining recency, ordering, pagination, or any limitations.

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

Conciseness4/5

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

Extremely concise, one sentence. The brevity is appropriate for a straightforward tool, though more detail could be included without harming conciseness.

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

Completeness2/5

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

With 4 parameters and no output schema, the description is too minimal. It fails to explain the return structure, data semantics, or any constraints like rate limiting.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is already described. The description adds no extra meaning beyond the schema, resulting in a baseline score.

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

Purpose5/5

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

The description clearly states it retrieves recent runs for a pipeline, with a specific verb and resource. It distinguishes from siblings like get_build or list_builds by focusing on runs.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like list_builds or get_pipeline_yaml. Context for filtering or scope is missing.

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

get_pipeline_variablesB

Get variables defined for a pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
pipelineIdYesPipeline/definition ID

TDQS

B3/5.0
Behavior2/5

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

Description provides no behavioral traits beyond the basic read intent. No mention of read-only, side effects, return format, or pagination. With no annotations, this is insufficient for an agent to understand consequences.

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

Conciseness3/5

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

Single sentence is concise but lacks necessary detail. Not ideal for tool selection, as it omits scope and context.

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

Completeness2/5

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

Given no annotations and no output schema, description should clarify what 'variables' means (e.g., scope, system vs. custom). Does not address potential ambiguity with sibling tools like get_pipeline_yaml which may also contain variable info.

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

Parameters3/5

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

Schema covers 100% of parameters with descriptions. Description adds no additional parameter meaning beyond 'Get variables defined for a pipeline'. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool retrieves variables for a pipeline, with specific verb 'Get' and resource 'variables defined for a pipeline'. Distinguished from sibling tools like get_pipeline_runs or get_pipeline_yaml.

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

Usage Guidelines2/5

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

No guidance on when to use or when not to use, nor any alternatives mentioned. Sibling tools like get_pipeline_yaml or list_pipelines might overlap, but no exclusions are given.

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

get_pipeline_yamlC

Get the YAML configuration for a pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
pipelineIdYesPipeline/definition ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose behavioral traits such as read-only nature, required permissions, or whether it fetches the latest YAML. The minimal description leaves the agent guessing about side effects or limits.

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

Conciseness4/5

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

The description is a single sentence, which is concise. However, it could be structured to include more context without becoming verbose, such as specifying the output format.

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

Completeness2/5

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

No output schema is provided, and the description does not explain the return value (the YAML content). For a tool that retrieves a configuration, the agent needs to know what to expect. Also lacks context on error scenarios or usage limitations.

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

Parameters3/5

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

Parameters are fully documented in the schema with descriptions (100% coverage). The description adds no additional meaning beyond what the schema already provides, so it meets the baseline.

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

Purpose4/5

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

The description clearly states it retrieves YAML configuration for a pipeline, distinguishing it from other get tools that fetch different data (e.g., builds, logs, variables). However, it could be more specific about whether it's for a definition or a run.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus get_pipeline_variables or list_pipelines. The description does not mention any prerequisites or alternative use cases.

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

get_projectC

Get detailed information about a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name or ID

TDQS

C2.5/5.0
Behavior2/5

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

No annotations provided; the description only implies a read operation but lacks details on authentication, error handling, or idempotency.

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

Conciseness3/5

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

The description is a single short sentence, front-loaded but too brief to add substantial value; it repeats the tool's purpose without elaboration.

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

Completeness2/5

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

Lacks details about return values, error conditions, or usage context, making it insufficient for a tool with no output schema and no annotations.

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

Parameters3/5

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

Schema coverage is 100% with a description for the parameter, so baseline 3 is appropriate; the description adds no extra meaning.

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

Purpose3/5

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

The description states the tool retrieves detailed information about a specific project, but it is vague and does not differentiate from siblings like list_projects or get_work_item.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as using list_projects to get a list of projects first.

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

get_prs_for_work_itemC

Find pull requests linked to a work item

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
workItemIdYesWork item ID

TDQS

C2.9/5.0
Behavior1/5

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

No annotations are provided, and the description fails to disclose behavioral traits such as read-only nature, pagination, error behavior, or what counts as 'linked' (e.g., direct link via commits). The tool's behavior is opaque.

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

Conciseness4/5

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

The description is a single concise sentence that gets straight to the point. It could be improved by adding a second sentence for structure, but it is not verbose.

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

Completeness2/5

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

Given the lack of an output schema and the moderate complexity (3 params, 2 required), the description is too minimal. It does not explain the return format or what 'linked' means, leaving significant gaps for the agent to infer.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter. The description adds no additional meaning beyond what is in the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description 'Find pull requests linked to a work item' clearly states the verb (Find) and resource (pull requests linked to a work item). It differentiates from sibling tools like get_pull_request (single PR) and list_pull_requests (all PRs) by specifying the linkage to a work item.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives such as get_commits_for_work_item or list_pull_requests. The description implies usage when needing PRs for a specific work item but does not specify exclusion criteria or context.

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

get_pull_requestC

Get detailed information about a pull request including comments and threads

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
pullRequestIdYesPull request ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose all behavioral traits. It only mentions output content (comments and threads) but fails to indicate whether the operation is read-only, has rate limits, or requires specific permissions.

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

Conciseness4/5

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

The description is a single concise sentence that effectively communicates the tool's core function without extraneous information. It is front-loaded and easy to parse.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description should provide more context about the response structure, result size, or potential performance implications. It only mentions two elements (comments and threads) but not the full scope of returned data.

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

Parameters3/5

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

The input schema covers all parameters with descriptions, achieving 100% coverage. The description adds no additional parameter semantics beyond the schema, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it retrieves detailed pull request information including comments and threads, distinguishing it from list_pull_requests which only lists PRs. However, it could be more specific about the scope of 'detailed information'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus sibling tools like get_commit_diff or list_pull_requests. The description does not mention prerequisites or typical usage scenarios.

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

get_releaseA

Get detailed information about a specific release

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
releaseIdYesRelease ID

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description must convey behavior. It implies a read operation, but does not explicitly state it is read-only, nor does it disclose required permissions or side effects. For a 'get' tool, the risk is low, but transparency is minimal.

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

Conciseness5/5

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

A single sentence that conveys the essential purpose without any superfluous words. It is efficient and front-loaded.

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

Completeness3/5

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

Lacks an output schema and does not describe what 'detailed information' includes (e.g., metadata, artifacts). For a tool with only two parameters and no nested objects, the description is adequate but not comprehensive.

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

Parameters3/5

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

Schema description coverage is 100% with both parameters documented in the input schema. The description adds no extra meaning beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get' and resource 'release', with 'detailed information' distinguishing it from list_releases and get_release_logs. It is specific and unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this tool over alternatives. The description does not mention prerequisites, context, or when not to use it. Given the many sibling tools, this is a notable gap.

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

get_release_logsC

Get deployment logs for a release environment

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
releaseIdYesRelease ID
environmentIdYesEnvironment ID

TDQS

C2.9/5.0
Behavior2/5

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

The description does not disclose behavioral traits such as read-only nature, pagination, response format, or authentication requirements. With no annotations, the description alone is insufficient for safe invocation.

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

Conciseness4/5

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

The description is a single sentence that directly states the tool's function. It is concise and front-loaded, though it could be slightly expanded for clarity.

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

Completeness2/5

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

Given the absence of an output schema and annotations, the description does not adequately explain the tool's behavior, return format, or any constraints. For a tool with three parameters, more context is needed.

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

Parameters3/5

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

The schema covers all parameters with descriptions, meeting the baseline expectation. However, the description adds no additional semantic detail beyond the schema, such as value constraints or examples.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('deployment logs for a release environment'), making the tool's purpose evident. However, it does not differentiate from sibling tools like 'get_build_logs' or 'get_release', which could cause confusion.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or situations where this tool is preferred over similar siblings.

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

get_test_resultsA

Get test results from a test run - shows which tests passed/failed

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
runIdYesTest run ID
topNoMax results to return

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the tool shows pass/fail but doesn't disclose pagination behavior (top parameter), performance implications, or whether results are sorted. No contradictions.

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

Conciseness5/5

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

Single sentence that front-loads the action and resource. No unnecessary words; every part earns its place.

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

Completeness3/5

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

Adequate for a simple retrieval tool but lacks context on pagination, ordering, and differentiation from closely related siblings like 'get_test_run' and 'get_failed_tests'. No output schema to clarify return structure.

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

Parameters3/5

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

Schema description coverage is 100% for all three parameters (project, runId, top). The description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool returns test results from a test run, showing pass/fail status. It uses a specific verb ('Get') and resource ('test results from a test run'), and distinguishes it from siblings like 'get_test_run' (run metadata) and 'get_failed_tests' (filtered).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings such as 'get_failed_tests', 'analyze_test_failures', or 'get_test_run'. Without such context, an AI agent may not select the most appropriate tool.

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

get_test_runB

Get detailed information about a specific test run

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
runIdYesTest run ID

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It only states 'Get,' implying a read operation, but fails to note potential errors (e.g., 404 if runId is invalid), required permissions, or whether the response includes nested structures like test points. The lack of output schema amplifies this gap.

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

Conciseness5/5

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

A single sentence conveys the core purpose without unnecessary words. It is front-loaded and efficient, making it easy for an agent to parse quickly.

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

Completeness2/5

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

The description lacks output schema and annotations, yet it does not compensate by describing return fields (e.g., 'details include status, duration, and environment'). For a tool with two parameters and no structured output, the agent needs more context to interpret the response.

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

Parameters3/5

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

Schema coverage is 100% with both parameters having descriptions ('Project name' and 'Test run ID'). The description adds no extra meaning beyond 'specific test run,' so the value is neutral—baseline 3 without improvement.

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

Purpose5/5

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

The description explicitly states 'Get detailed information about a specific test run,' clearly defining the action (get) and resource (a single test run). This distinguishes it from sibling tools like list_test_runs (which retrieves multiple runs) and get_test_results (which focuses on test outcomes).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus siblings. For example, it does not advise using get_test_run for run metadata versus get_test_results for individual test case outcomes, nor does it mention prerequisites like requiring a run ID from a previous search.

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

get_test_runs_for_buildB

Get test runs associated with a specific build

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildIdYesBuild ID

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. However, it only states a simple 'Get' operation without indicating relevant details such as read-only nature, authorization requirements, or side effects. Minimal transparency beyond obvious purpose.

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

Conciseness4/5

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

Single sentence without unnecessary words. It is appropriately sized for a simple retrieval tool. However, it could be slightly more informative without becoming verbose.

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

Completeness3/5

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

Given no output schema, the description should convey what the output contains. It does not mention response format, pagination, or any additional context. Adequate for a simple tool but lacks completeness.

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

Parameters3/5

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

Schema coverage is 100% with both 'project' and 'buildId' described. The description does not add any meaning beyond the schema; it's a baseline score since the schema already explanations the parameters.

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

Purpose5/5

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

Description uses specific verb 'Get' and resource 'test runs', clearly scoping to 'associated with a specific build'. This distinguishes it from sibling tools like 'get_test_run' (singular) and 'list_test_runs' (all runs without build filter).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Sibling tools like 'get_test_run' (singular) and 'list_test_runs' (all runs) exist but are not mentioned. The description does not provide any exclusion criteria or context about when not to use this tool.

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

get_work_itemB

Get detailed information about a specific work item

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWork item ID
expandNoInclude all fields and relations

TDQS

B3.2/5.0
Behavior2/5

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

Without annotations, the description should disclose behavioral traits. It only implies a read operation but does not explicitly state read-only nature, authentication needs, side effects, or rate limits. The description adds no value beyond the obvious.

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

Conciseness5/5

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

The description is a single sentence with no unnecessary words, conveying the core purpose efficiently. It is well-structured for quick understanding.

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

Completeness2/5

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

The tool has no output schema, yet the description only says 'detailed information' without specifying what fields or structure are returned. It also omits mention of the 'expand' parameter. This leaves the agent guessing about the response format.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add meaning to the parameters beyond what the schema already provides (e.g., 'id' and 'expand' with their descriptions).

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'work item', indicating it retrieves detailed information for a single item. This distinguishes it from sibling tools like 'query_work_items' which search for multiple items.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'query_work_items' or 'get_commits_for_work_item'. The description offers no context on prerequisites or best use cases.

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

list_areasA

List area paths in a project - useful for organizing and filtering work items by team or component

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
depthNoDepth of child areas to return

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the operation (list) without disclosing whether it's read-only, permissions needed, or any side effects. 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.

Conciseness5/5

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

The description is a single, well-structured sentence that efficiently conveys the tool's purpose and utility without any wasted words.

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

Completeness3/5

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

For a simple list tool with two parameters and no output schema, the description adequately covers the purpose but lacks behavioral details (e.g., pagination, depth limits). Given the presence of similar sibling tools, more differentiation would be beneficial.

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

Parameters3/5

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

Schema coverage is 100% with both parameters well-described in the schema. The description does not add extra meaning beyond the schema; it mentions 'project' context but not 'depth'. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'area paths in a project', adding context on its usefulness for organizing and filtering work items. This is specific and distinguishes it from other list tools like 'list_iterations'.

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

Usage Guidelines3/5

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

The description provides implied usage ('useful for organizing and filtering work items by team or component') but lacks explicit when-to-use or when-not-to-use guidance, nor does it reference alternative tools from the sibling list.

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

list_branchesC

List branches in a repository

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID

TDQS

C2.9/5.0
Behavior1/5

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

No annotations provided, and the description offers minimal behavioral detail—no mention of output format, pagination, error handling, or constraints. Completely inadequate for a tool that likely returns a list.

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

Conciseness4/5

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

Single sentence is concise and front-loaded, but could include more useful information without becoming verbose.

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

Completeness2/5

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

No output schema and the description does not explain return values or behavior. For a simple list tool, more context (e.g., sorting, filtering) would be helpful.

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

Parameters3/5

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

Schema description coverage is 100% (both parameters have descriptions), so the description adds no additional meaning. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'branches in a repository', distinguishing it from sibling tools like 'list_commits' and 'list_repos'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as 'compare_branches' or other branch-related tools. Missing context about prerequisites or typical use cases.

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

list_build_definitionsC

List build/pipeline definitions

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
nameNoFilter by definition name (supports wildcards *)
pathNoFilter by folder path

TDQS

C2.6/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose behavioral traits like pagination, permissions, or what happens with empty results. It carries the full burden but fails to provide sufficient context.

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

Conciseness4/5

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

The description is a single sentence with no wasted words. It is appropriately concise, though it could be slightly more informative without losing brevity.

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

Completeness2/5

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

Given no output schema and no annotations, the description is minimal. It omits details on return format, pagination, and ordering, leaving the agent uncertain about the tool's output and behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents parameters. The description adds no additional meaning beyond what's in the schema, justifying a baseline score of 3.

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

Purpose3/5

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

The description states 'List build/pipeline definitions', which is clear but vague. It doesn't differentiate from siblings like 'list_builds' or 'list_pipelines', leaving ambiguity about what a 'definition' is.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as 'list_builds' or 'get_build'. The description lacks context for choosing this tool.

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

list_buildsC

List recent builds with status and results

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
definitionsNoFilter by build definition IDs
branchNameNoFilter by branch (e.g., "refs/heads/main")
statusFilterNoFilter by status
resultFilterNoFilter by result
requestedForNoFilter by user who requested the build
topNoMax builds to return

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states it lists builds. It does not mention that it is read-only, what 'recent' means, or any pagination behavior beyond the 'top' parameter not referenced.

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

Conciseness4/5

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

The description is a single sentence with no extraneous words. It is front-loaded with the core action and resource, but could be slightly more informative without being verbose.

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

Completeness2/5

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

Without an output schema, the description should explain return values (status, results) but does not. It also fails to integrate context from sibling tools to aid disambiguation. Seven parameters are present but no behavioral details provided.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are documented structurally. The description adds no additional meaning or constraints beyond what the schema provides, earning a baseline 3.

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

Purpose4/5

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

The description clearly states the action (List) and resource (builds) with qualifiers 'recent' and 'with status and results', distinguishing it from sibling tools like 'get_build' or 'list_build_definitions'. However, 'recent' is vague and not defined.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'get_build' for a single build or 'get_build_logs' for logs. The description does not specify when not to use it or provide context for selection among siblings.

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

list_commitsA

Get commit history for a repository

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
branchNoBranch name (e.g., "refs/heads/main")
authorNoFilter by author email
fromDateNoStart date (ISO format)
toDateNoEnd date (ISO format)
topNoMax commits to return

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided; description only implies a read operation. No mention of pagination, ordering, side effects, or response behavior beyond returning history.

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

Conciseness5/5

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

Single sentence, front-loaded with key information. No wasted words, efficient and clear.

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

Completeness2/5

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

Many parameters (7) but no output schema; description fails to explain return fields, ordering, or parameter usage tips. Lacks completeness for a complex tool.

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

Parameters3/5

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

Schema covers all 7 parameters (100% coverage). Description adds no extra meaning beyond what schema provides, so baseline score of 3 applies.

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

Purpose5/5

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

Description clearly states the verb 'Get', resource 'commit history', and scope 'for a repository'. It directly distinguishes from siblings like 'get_commit' (single commit) and 'get_commit_diff'.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. Siblings like 'compare_branches' exist, but no mention of alternatives or context for filtering.

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

list_iterationsB

List iterations (sprints) in a project - useful for sprint planning and filtering work items

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
depthNoDepth of child iterations to return

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It only implies a read operation via 'list' but does not confirm safety, permissions, or side effects. Missing details on depth behavior or return format.

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

Conciseness4/5

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

The description is a single 14-word sentence with key front-loaded information. It is efficient but lacks structured formatting (e.g., bullet points).

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

Completeness3/5

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

Given 2 parameters, no output schema, and no annotations, the description is adequate for a simple list tool but does not explain return values or depth semantics. Could benefit from brief examples or clarifications.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds no new meaning beyond the schema's parameter descriptions. Baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'list' and resource 'iterations (sprints) in a project'. It distinguishes from sibling list tools by specifying the unique resource type.

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

Usage Guidelines3/5

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

The description implies usage context ('useful for sprint planning and filtering work items') but lacks explicit when-to-use or when-not-to-use guidance. No alternatives mentioned.

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

list_pipelinesC

List pipeline definitions in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
nameNoFilter by name (supports * wildcard)
pathNoFilter by folder path
topNoMax pipelines to return

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must convey behavioral traits. It only states 'List pipeline definitions', offering no information about side effects, permissions, or return behavior. The agent cannot infer whether it is read-only or has any restrictions.

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

Conciseness5/5

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

The description is extremely concise with a single sentence that directly communicates the tool's purpose. No redundant information.

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

Completeness2/5

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

Given no output schema and no annotations, the description is insufficiently complete. It does not explain the concept of pipeline definitions, any prerequisites, or how default parameter values (like top=50) affect results. This leaves ambiguity for an agent.

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

Parameters3/5

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

Input schema provides 100% coverage with descriptions for all 4 parameters. The description adds no additional meaning beyond what the schema already conveys, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states 'List pipeline definitions in a project', identifying the verb (List), resource (pipeline definitions), and scope (project). However, it does not explicitly distinguish from siblings like list_build_definitions or list_release_definitions.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as get_pipeline_runs or get_pipeline_yaml. The description lacks context for appropriate invocation.

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

list_projectsA

List all projects in the Azure DevOps organization/collection

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only states 'List all projects', but does not disclose any behavioral traits such as pagination, sort order, authentication requirements, or that the list might be filtered by permissions. This is insufficient for an agent to predict behavior.

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

Conciseness5/5

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

The description is one concise sentence with no extraneous information. It is front-loaded and easy to parse.

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

Completeness3/5

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

Given the simplicity of the tool (no parameters, no output schema), the description is minimally adequate but lacks details such as what information is returned for each project (e.g., id, name, description). It could be more helpful for an agent.

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

Parameters4/5

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

The input schema has zero parameters and 100% schema description coverage. The description adds no parameter meaning because there are none. Baseline is high due to no parameters, but the description does not add extra context like output format. Still, a score of 4 is appropriate as it does not mislead.

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

Purpose5/5

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

The description clearly states the action 'List' and the resource 'projects' with scope 'in the Azure DevOps organization/collection'. It is specific and distinguishes from sibling tools like list_branches or list_builds.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. For example, it does not mention that this is the primary tool for listing all projects, or when to use get_project instead. The context signals list many sibling tools, but the description lacks explicit usage context.

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

list_pull_requestsB

List pull requests in a repository

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
statusNoPR status filteractive
creatorIdNoFilter by creator ID
reviewerIdNoFilter by reviewer ID
topNoMax PRs to return

TDQS

B3/5.0
Behavior2/5

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

No annotations exist, so the description bears full burden. It fails to disclose any behavioral traits such as pagination, sorting, rate limits, or authorization requirements. The basic 'list' action is implied but without further detail.

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

Conciseness3/5

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

The description is a single sentence with no wasted words, but it lacks structure and does not front-load critical details. For a simple tool this is acceptable, but it could be improved by including key constraints or output format.

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

Completeness2/5

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

With 6 parameters, no output schema, and no annotations, the description is insufficient. It does not clarify output format, default sorting, or how the filtering parameters interact. The description feels incomplete for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no extra semantic information beyond what the schema provides, meeting the baseline for high coverage.

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

Purpose5/5

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

The description clearly states the verb 'List', the resource 'pull requests', and the context 'in a repository'. It distinguishes from sibling tools like get_pull_request (single PR) and get_prs_for_work_item (filtered by work item).

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., for filtering by creator/reviewer) or when not to use it. The description is too brief to provide context for selection.

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

list_release_definitionsC

List release/deployment pipeline definitions

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
searchTextNoFilter by name
pathNoFilter by folder path

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description must convey behavioral traits. The description only states a basic listing action, with no mention of authentication requirements, pagination, scope, or side effects (none expected). This is insufficient for an agent to understand the tool's behavior.

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

Conciseness4/5

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

The description is a single, concise sentence. It is efficient and front-loaded, but it could be slightly more descriptive to cover resource scope (e.g., distinguishing from build definitions). Still, no wasted words.

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

Completeness3/5

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

The description covers the basic purpose and parameters are documented in schema. However, it lacks information about output format, whether the list is filtered by project or global, and any constraints. For a simple listing tool, it is minimally adequate but not complete.

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

Parameters3/5

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

Schema coverage is 100%, so the input schema already describes each parameter. The tool description does not add additional context 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.

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'release/deployment pipeline definitions', which distinguishes it from sibling tools like list_releases (which lists releases, not definitions) and list_build_definitions. However, it does not explicitly differentiate from list_pipelines, leaving some ambiguity.

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

Usage Guidelines2/5

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

No usage guidelines are provided. The description does not indicate when to use this tool over alternatives, nor when not to use it. With many sibling listing tools, the lack of guidance 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.

list_releasesC

List releases with deployment status

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
definitionIdNoFilter by release definition ID
statusFilterNoFilter by status
environmentStatusFilterNoFilter by environment status
topNoMax releases to return

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It implies a read-only operation but does not disclose permissions, rate limits, pagination behavior (though 'top' param hints at it), or any side effects. This is insufficient for safe invocation.

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

Conciseness4/5

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

The description is a single concise sentence with no wasted words. However, it lacks structure or front-loaded key details that would aid quick understanding. Still, it is appropriately sized.

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

Completeness2/5

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

Given 5 parameters and no output schema, the description is too brief. It does not explain parameter interplay (e.g., statusFilter and environmentStatusFilter) or clarify what 'deployment status' means. This leaves significant gaps for correct usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal value—only the phrase 'with deployment status' hints at the environmentStatusFilter. Baseline 3 is appropriate.

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

Purpose4/5

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

The description 'List releases with deployment status' clearly identifies the action (list) and resource (releases), and adds a meaningful scope (deployment status). However, it does not differentiate from sibling tools like list_release_definitions, which could confuse an agent choosing between listing releases and listing release definitions.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention when-not scenarios or suggest sibling tools like list_releases vs list_release_definitions, 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.

list_reposA

List all Git repositories in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name (uses default if not specified)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided; description implies a read operation but lacks details on permissions, pagination, or rate limits, which is acceptable for a simple list.

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

Conciseness4/5

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

Single sentence is efficient and front-loaded, but could be slightly enhanced with output format or scope.

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

Completeness4/5

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

Given low complexity (1 optional param, no output schema), description covers the purpose and parameter adequately, though output format is missing.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter description; description adds no extra meaning beyond the schema, baseline score applies.

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

Purpose5/5

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

Description uses specific verb 'list' and resource 'Git repositories', clearly distinguishing from sibling tools like 'list_projects' or 'list_branches'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives, nor any context about required prerequisites (e.g., which project).

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

list_test_runsC

List test runs for a project - useful for finding test execution history

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
buildUriNoFilter by build URI
topNoMax runs to return

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must convey behavioral traits. It discloses a read operation (list) but omits details like filtering, pagination (though top parameter exists), or any edge cases. Minimal disclosure beyond the obvious.

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

Conciseness4/5

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

The description is a single sentence, which is concise. However, it lacks any structure (e.g., bullet points or sections) and is somewhat under-specified.

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

Completeness3/5

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

Given the tool has 3 optional parameters, no output schema, and no annotations, the description is adequate but could mention pagination via 'top' or optional filters. It does not fully prepare the agent for effective use.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already documented. The description adds no additional meaning beyond stating 'for a project'. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states 'List test runs for a project', specifying the verb and resource. However, it does not differentiate from sibling tools like 'get_test_runs_for_build' or 'get_test_run'.

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

Usage Guidelines2/5

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

The description mentions 'useful for finding test execution history' but provides no explicit guidance on when to use this tool vs alternatives, such as get_test_runs_for_build or get_test_results.

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

list_work_item_typesB

List available work item types in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name

TDQS

B3.4/5.0
Behavior2/5

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

No annotations exist, so description carries full burden. Only states 'list' without disclosing behavioral traits (e.g., read-only, return format, rate limits, or dependencies). Minimal information beyond the action.

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

Conciseness5/5

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

One short sentence that efficiently states the tool's purpose. No unnecessary words, front-loaded with the verb and resource.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description is mostly complete. Could mention that it returns a list of type names, but not essential given low complexity.

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

Parameters3/5

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

Schema coverage is 100% with a single parameter described as 'Project name'. The description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'List available work item types in a project'. Verb 'list' and resource 'work item types' are specific and distinct from sibling tools like 'query_work_items' or 'list_areas'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. The description does not mention prerequisites, when to prefer this over other list tools, or any exclusions.

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

query_work_itemsA

Query work items using WIQL (Work Item Query Language) or simple filters

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
wiqlNoWIQL query string (if provided, other filters are ignored)
workItemTypeNoFilter by type (Bug, Task, User Story, etc.)
stateNoFilter by state (Active, Closed, etc.)
assignedToNoFilter by assigned user (use "@Me" for current user)
areaPathNoFilter by area path
iterationPathNoFilter by iteration path
tagsNoFilter by tag
topNoMax items to return

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It mentions 'query' (implying read-only) but doesn't explicitly state no writes, permissions needed, rate limits, or error behavior. Significant gaps remain.

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

Conciseness5/5

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

Single sentence, efficient and front-loaded. Every word earns its place, stating the action, resource, and two query modes without redundancy.

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

Completeness2/5

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

Despite 9 parameters and no output schema, the description omits return format (e.g., list of work items with fields), pagination behavior, and how to handle large result sets. The 'top' default is not explained. Major gaps for a complex tool.

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

Parameters4/5

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

Although schema covers all 9 parameters, the description adds key context: WIQL is a language and 'if provided, other filters are ignored' explains parameter precedence. This goes beyond raw schema definitions.

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

Purpose5/5

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

Description clearly states 'Query work items' using WIQL or simple filters, distinguishing it from siblings like get_work_item (single item) and search_code (code search). The verb and resource are specific and unambiguous.

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

Usage Guidelines3/5

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

Description implies usage for querying work items with complex conditions but lacks explicit guidance on when not to use it (e.g., for a single work item, use get_work_item). No alternatives or exclusions are mentioned.

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

search_codeC

Search for code/text content in a repository

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name
repositoryYesRepository name or ID
searchTextYesText to search for in file contents
pathNoFolder path to search in (e.g., "/src")
branchNoBranch to search (default: default branch)
fileExtensionNoFilter by file extension (e.g., ".cs", ".ts")
topNoMax results to return

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits. It only states the action, not whether it is read-only, pagination, limits, or auth needs. Inadequate for agent planning.

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

Conciseness2/5

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

The single sentence is too brief for a tool with 7 parameters. It lacks structure and important details, making it under-specified rather than concise.

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

Completeness2/5

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

No output schema, so description should explain return values. It does not. Also missing usage context for parameters like path or fileExtension. Incomplete for robust agent use.

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

Parameters3/5

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

The schema provides 100% coverage with parameter descriptions. The description adds no new meaning beyond the schema, meeting the baseline for high coverage.

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

Purpose4/5

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

The description clearly states the action (search) and resource (code/text in a repository). It does not differentiate from siblings, but siblings have distinct purposes, so no confusion.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not specify context or exclusions, leaving the agent without decision support.

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

test_connectionA

Test the connection to Azure DevOps Server and verify authentication

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly indicates non-destructive behavior (test/verify) and does not contradict any known behavioral traits. However, it does not mention potential failure modes or response details.

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

Conciseness5/5

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

The description is a single sentence, front-loading the core action. Every word is essential, with no redundancy or wasted content.

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

Completeness4/5

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

For a simple connectivity test tool with no parameters and no output schema, the description provides enough context. It could mention the expected output or success/failure indicators, but the simplicity mitigates this gap.

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

Parameters4/5

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

The tool has 0 parameters, so schema coverage is 100%. The description does not need to explain parameters, and the baseline score of 4 applies since the schema already handles all input requirements.

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

Purpose5/5

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

The description explicitly states the tool's purpose: 'Test the connection to Azure DevOps Server and verify authentication'. It uses a specific verb ('test') and resource ('connection'), clearly distinguishing it from sibling tools that focus on specific data retrieval.

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

Usage Guidelines3/5

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

The description implies usage for initial connectivity and authentication checks but provides no explicit guidance on when to use this tool versus alternatives or what preconditions exist.

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. Dates show when Glama detected each change.

  1. 39 tool updatesv1.1.2
    • First observedanalyze_build_errors
    • First observedanalyze_test_failures
    • First observedcompare_branches
    • First observedget_build
    • First observedget_build_logs
    • First observedget_commit
    • First observedget_commit_diff
    • First observedget_commits_for_work_item
    • First observedget_failed_tests
    • First observedget_file_content
    • First observedget_pipeline_runs
    • First observedget_pipeline_variables
    • First observedget_pipeline_yaml
    • First observedget_project
    • First observedget_prs_for_work_item
    • First observedget_pull_request
    • First observedget_release
    • First observedget_release_logs
    • First observedget_test_results
    • First observedget_test_run
    • First observedget_test_runs_for_build
    • First observedget_work_item
    • First observedlist_areas
    • First observedlist_branches
    • First observedlist_build_definitions
    • First observedlist_builds
    • First observedlist_commits
    • First observedlist_iterations
    • First observedlist_pipelines
    • First observedlist_projects
    • First observedlist_pull_requests
    • First observedlist_release_definitions
    • First observedlist_releases
    • First observedlist_repos
    • First observedlist_test_runs
    • First observedlist_work_item_types
    • First observedquery_work_items
    • First observedsearch_code
    • First observedtest_connection

TDQS

B3.1/5.0
Disambiguation4/5

Most tools target distinct resources (builds, repos, work items, tests, releases), but some overlap exists, e.g., list_builds vs get_pipeline_runs, and multiple test analysis tools. Descriptions help differentiate, but an agent might occasionally select the wrong tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., list_branches, get_work_item, analyze_build_errors). No mixing of conventions, making the set predictable for agents.

Tool Count3/5

At 39 tools, the count is high but justified by the broad scope of Azure DevOps (builds, repos, work items, tests, releases). However, it exceeds the typical 15-25 range and feels heavy, fitting the 'borderline' description.

Completeness2/5

The tool surface is heavily read-oriented, lacking mutation operations such as create, update, delete for work items, pull requests, pipelines, and releases. This is a significant gap for a DevOps server, likely causing agent failures when workflows require state changes.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Elad-Health/azure-devops-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server