Skip to main content
Glama
jafarimohammad

Azure DevOps MCP Server

Azure DevOps MCP Server

🇮🇷 نسخه فارسی

A Model Context Protocol (MCP) server for Azure DevOps Server 2022 (on-premise) that exposes Azure DevOps capabilities as AI-callable tools — letting any MCP-compatible AI assistant query pipelines, pull requests, builds, repositories, and work items through natural language.

TypeScript Node.js MCP Docker Kubernetes


What can it do?

Ask your AI assistant in plain language — the MCP server handles the Azure DevOps REST API calls:

Simple queries

"List all projects in the collection"
"What branches does the backend repository have?"
"Show me all open pull requests"
"What's the status of the last build?"
"Who is assigned to work item #42?"
"Read the appsettings.json from the main branch"

Moderate queries

"List all failed builds in the last 24 hours and which pipelines they belong to"
"Show me the open PRs targeting the main branch and their reviewers"
"Find all active bugs in the project"
"Create a pull request from feature/payment to develop with a description"
"Add John as a reviewer to PR #87"
"Run the pipeline named 'deploy-staging' on the release branch"
"What was the last pipeline that ran on agent pool win19-prod-bi?"
"How many builds completed this week compared to last week?"
"How many build agents are online right now?"

Complex queries

"Which PRs opened in the last 48 hours still have no reviewer? Group them by repository."
"Get the logs of the last failed build for the 'deploy-prod' pipeline and summarize what went wrong"
"Find all In Progress work items assigned to me and list them by priority"
"Show me all unresolved review comments on PR #112 — what feedback is still pending?"
"How many completed builds ran in the last 7 days vs the 7 days before that? What is the percentage change?"
"Find high-priority work items that haven't been updated in more than 3 days"
"Which repositories have open PRs with no reviewer and at least one unresolved comment?"
"Which agent pools are available, and how many agents are online in each pool?"

Related MCP server: Azure DevOps MCP Server

Available Tools

Projects

Tool

Description

list_projects

List all projects in the collection

Repositories & Branches

Tool

Description

list_repositories

List Git repositories in a project

list_branches

List branches of a repository

get_file_content

Read file content from a repository at any branch

Pull Requests

Tool

Description

list_pull_requests

List PRs across all repos in a project (filter by status)

list_prs_without_reviewer

Find open PRs with no reviewer, with optional time window (e.g. last 24 hours)

get_pull_request

Get PR details: description, merge status, reviewers and their votes

get_pr_comments

Get review comment threads on a PR (filter by active/resolved)

add_pr_reviewer

Add a reviewer to a PR by email or display name

create_pull_request

Create a new PR from source to target branch (supports draft)

Pipelines & Builds

Tool

Description

list_pipelines

List all pipeline definitions in a project

list_agent_pools

List available agent pools/queues in a project

list_agents

List agents across all pools or a specific pool with online/offline status and counts

get_last_build

Get the most recent build — filter by pipeline name or agent pool name

list_builds

List builds with filters: pipeline (by ID or definitionNameFilter partial name match, e.g. "prod"), statusFilter (running state) and resultFilter (succeeded/failed/canceled), agent pool, and date range (minTime/maxTime). Includes webUrl per build and a truncated flag warning when older builds near minTime may be cut off by the top limit

list_failed_builds

Find failed/partial builds in the last N hours

get_build

Get details of a specific build

get_build_logs

Fetch console log output of a build (auto-truncated, last 150 lines). Set errorsOnly=true to return only error/warning lines — much smaller and faster for diagnosing failures

run_pipeline_by_name

Find and run a pipeline by name (partial match, no ID needed)

run_pipeline

Queue a pipeline run by numeric ID

Work Items

Tool

Description

list_work_items

Search work items by type, state, assignee, or keyword using WIQL

get_work_item

Get full details of a work item by ID

create_work_item

Create a new work item (Bug, Task, User Story, etc.)

update_work_item

Update fields of an existing work item (state, assignee, title, etc.)

Classic Release Pipelines

Tool

Description

list_release_definitions

List classic release pipeline definitions with their stages

list_releases

List releases with per-stage deployment status — filter by pipeline name and/or stage name (e.g. "last release deployed to Shatel")

get_release

Get full details of a release: all stage statuses, deploy times, and artifact versions

get_release_changes

Get the list of commits / TFVC changesets included in a release (answers "what changed in this deployment?")


Architecture

AI Client (Claude, Open WebUI, etc.)
        │  MCP Protocol (JSON-RPC)
        ▼
┌─────────────────────────┐
│   Azure DevOps MCP      │
│   ─────────────────     │
│  HTTP (Kubernetes) or   │
│  stdio (local)          │
│                         │
│  tools/                 │
│    projects.ts          │
│    repos.ts             │
│    pipelines.ts         │
│    workitems.ts         │
└────────────┬────────────┘
             │  REST API (api-version 7.0)
             │  Basic Auth (PAT)
             ▼
┌─────────────────────────┐
│  Azure DevOps Server    │
│  2022 (on-premise)      │
└─────────────────────────┘
  • Transport: Stateless Streamable HTTP for Kubernetes (scales horizontally, no sticky sessions) or stdio for local use

  • Auth: Personal Access Token via HTTP Basic auth (Authorization: Basic base64(:<PAT>))

  • API version: 7.0 — the highest supported by Azure DevOps Server 2022.0.x


Requirements

  • Node.js 20+

  • Azure DevOps Server 2022 (on-premise)

  • A Personal Access Token with:

    • Code (Read & Write) — for repo, branch, file, and pull request tools

    • Build (Read & Execute) — for pipeline and build tools

    • Work Items (Read & Write) — for work item tools


Quick Start

Local (stdio — for Claude Desktop / Claude Code)

npm install
npm run build

# Register with Claude Code
claude mcp add azure-devops \
  --env AZDO_ORG_URL=https://your-server.example.com/YourCollection \
  --env AZDO_PAT=your_pat_here \
  --env AZDO_PROJECT=YourProject \
  -- node dist/index.js

Docker

# Build
docker build -t your-registry/azure-devops-mcp:1.0.0 .

# Run locally for testing
docker run -p 3000:3000 \
  -e AZDO_ORG_URL=https://your-server.example.com/YourCollection \
  -e AZDO_PAT=your_pat_here \
  -e AZDO_PROJECT=YourProject \
  your-registry/azure-devops-mcp:1.0.0

Kubernetes

# 1. Create namespace
kubectl create namespace mcp-servers

# 2. Create secret (keep PAT out of git)
kubectl create secret generic azure-devops-mcp-secret \
  --namespace mcp-servers \
  --from-literal=AZDO_PAT='your_pat_here'

# 3. Edit k8s/configmap.yaml with your AZDO_ORG_URL and AZDO_PROJECT

# 4. Apply manifests
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml

# 5. Verify
kubectl -n mcp-servers rollout status deploy/azure-devops-mcp

In-cluster endpoint:

http://azure-devops-mcp.mcp-servers.svc.cluster.local/mcp

Quick test with port-forward

# Terminal 1
kubectl -n mcp-servers port-forward deploy/azure-devops-mcp 3000:3000

# Terminal 2 — health check
curl http://127.0.0.1:3000/healthz

# Terminal 2 — list projects
curl -sS -X POST http://127.0.0.1:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  --data-binary '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_projects","arguments":{}}}'

Configuration

Environment Variables

Variable

Required

Description

AZDO_ORG_URL

Yes

Collection URL, e.g. https://your-server.example.com/YourCollection

AZDO_PAT

Yes

Personal Access Token

AZDO_PROJECT

No

Default project — avoids passing project name in every request

AZDO_API_VERSION

No

Default: 7.0

MCP_TRANSPORT

No

http for Kubernetes, stdio for local (default: stdio)

PORT

No

HTTP port, default: 3000

MCP_PATH

No

Endpoint path, default: /mcp

.env example

AZDO_ORG_URL=https://your-server.example.com/YourCollection
AZDO_PAT=your_pat_here
AZDO_PROJECT=YourProject
MCP_TRANSPORT=http
PORT=3000

Project Structure

src/
├── index.ts          Entry point — selects transport based on MCP_TRANSPORT
├── config.ts         Env var reading and validation
├── server.ts         MCP server construction and tool registration
├── azureClient.ts    REST client with PAT Basic auth and 30s timeout
├── httpServer.ts     Stateless Streamable HTTP transport for Kubernetes
└── tools/
    ├── projects.ts   Project discovery tools
    ├── repos.ts      Repository, branch, and pull request tools
    ├── pipelines.ts  Pipeline and build tools
    ├── workitems.ts  Work item tools (WIQL, create, update)
    └── helpers.ts    Shared utilities (response formatting, truncation)

k8s/
├── configmap.yaml    Non-secret configuration
├── deployment.yaml   Kubernetes Deployment (non-root, read-only FS)
└── service.yaml      ClusterIP Service

Technical Notes

  • Stateless HTTP: Each request creates an independent MCP server instance — scales horizontally without sticky sessions.

  • Health check: GET /healthz for Kubernetes liveness and readiness probes.

  • API version 7.0: Azure DevOps Server 2022.0.x supports up to 7.0 only. Version 7.1 is available in Azure DevOps Services (cloud) and Server 2022.1+.

  • Response truncation: Tool responses are capped at 24,000 characters to avoid flooding the model context window.

  • Request timeout: All Azure DevOps API calls abort after 30 seconds with a clear error message.

  • Container security: Runs as non-root user 1000, read-only root filesystem, all Linux capabilities dropped.

  • Weak model friendly: Tools return pre-processed, ready-to-answer data rather than raw JSON — works well with smaller models that struggle to process large API responses.


License

MIT

Available Tools

16 tools
create_pull_requestCreate pull requestB

Create a new pull request from a source branch into a target branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
repositoryIdYesRepository id or name.
sourceBranchYesSource branch name (without refs/heads/).
targetBranchYesTarget branch name (without refs/heads/).
titleYesPull request title.
descriptionNoPull request description.
isDraftNoCreate as a draft PR. Default: false.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states the action without describing permissions, side effects, idempotency, or potential failures. This is insufficient for a mutation tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant information. Every word is necessary and earns its place.

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

Completeness2/5

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

Given the tool has 7 parameters (4 required) and no output schema, the description should provide more context about the creation process, return value, and prerequisites. It fails to do so, making it incomplete.

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 tool description adds no additional semantic detail 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.

Purpose5/5

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

The description clearly states 'Create a new pull request' with source and target branches, using a specific verb and resource. It distinguishes from sibling tools that list or get pull requests.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., update or merge). The verb and resource name make the purpose obvious, but no context about when not to use it is provided.

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

get_buildGet buildB

Get details of a single build by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
buildIdYesBuild id.

TDQS

B3.3/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. It only states 'get details' without specifying read-only nature, output format, or any side effects.

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

Conciseness5/5

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

Extremely concise at 8 words, front-loaded, and no unnecessary information.

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

Completeness3/5

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

Given no output schema and 2 simple parameters, the description is minimally complete for a retrieval tool but lacks details on output or 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 coverage is 100% and already documents both parameters adequately. The description adds no additional meaning 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?

Description clearly states 'get details of a single build by id' with specific verb and resource, distinguishing from siblings like list_builds or get_last_build.

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_last_build or list_builds, nor any prerequisites or context.

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

get_build_logsGet build logsA

Fetch the console log output of a build. Use this when the user asks for build logs, error details, failure reason, or what went wrong in a build. Returns log text per stage/task. Large logs are automatically truncated to the last 150 lines per entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
buildIdYesBuild id (from get_last_build or list_builds).
maxLinesPerEntryNoMax lines to return per log entry. Default: 150.

TDQS

A4.5/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 discloses that logs are returned per stage/task and that large logs are truncated to the last 150 lines. This is good for a read-only 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?

Three concise sentences with no filler. First sentence states purpose, second gives usage, third describes behavior and format.

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

Completeness5/5

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

Despite no output schema, the description hints at output structure ('log text per stage/task') and covers truncation. Parameters are well-documented. The tool is simple and complete.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all 3 parameters. The description adds context about truncation and per-stage return, enhancing the schema's info.

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 'Fetch the console log output of a build' and explicitly lists use cases like 'when the user asks for build logs, error details, failure reason, or what went wrong in a build.' This distinguishes it from sibling tools like get_build 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 Guidelines4/5

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

The description provides explicit when-to-use guidance by listing scenarios. It doesn't explicitly say when not to use or compare to siblings, but the context of sibling tools (e.g., get_last_build, list_builds) makes the choice clear.

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

get_file_contentGet file contentB

Read the content of a file from a repository at an optional branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
repositoryIdYesRepository id or name.
pathYesFile path within the repo, e.g. /src/index.ts
branchNoBranch name (without refs/heads/). Defaults to the repo default branch.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only states 'Read' implying a non-destructive operation, but omits details like encoding, size limits, or error handling. This is insufficient for a tool with no annotation support.

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 redundant words. While efficient, it could be more informative without sacrificing brevity, e.g., by mentioning the return type.

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 what the tool returns (content type, format). It also lacks notes on authentication, default branch resolution, or error scenarios. For a file-reading tool, this is incomplete.

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 individual parameter descriptions. The description adds 'optional branch' but this is already captured in the schema's branch parameter description. No additional semantic value is provided 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 specifies the verb 'read' and the resource 'file content', and includes the key constraint 'at an optional branch'. This distinguishes it from sibling tools like 'list_branches' or 'get_build_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 is provided on when to use this tool versus alternatives, such as when to consult other read tools or how to handle branch defaults. The description lacks usage context.

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

get_last_buildGet last build statusA

Get the status and result of the most recent build in a project. Use this to answer questions like 'what is the last pipeline status?', 'did the last build succeed?', 'what ran last?'. Optionally filter by pipeline name (partial match). Returns: buildNumber, status (inProgress/completed), result (succeeded/failed/partiallySucceeded/canceled), pipeline name, branch, who triggered it, and start/finish time.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
pipelineNameNoFilter by pipeline name (partial, case-insensitive). Omit to get the last build across all pipelines.

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 carries full burden. It discloses that it's a read operation returning specific fields (buildNumber, status, result, etc.) and mentions partial matching on pipeline. Missing details on rate limits or authentication, but adequate for a simple read tool.

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

Conciseness4/5

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

The description is four sentences with clear flow: action, usage examples, filtering option, return fields. No redundant information, though the question list could be shortened. Overall efficient for the purpose.

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 read tool with two optional parameters and no output schema, the description covers purpose, usage, and return fields. It does not elaborate on status/result enum values, but that is minor. Adequate for selecting and invoking the 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 coverage is 100%, so baseline is 3. The description adds no significant information beyond the schema descriptions; it merely repeats them. Thus, it meets the baseline but does not exceed it.

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 the most recent build status and result. It specifies the resource (last build in a project) and verb (get). This distinguishes it from siblings like 'list_builds' (list all) and 'get_build' (specific build).

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 provides example questions and notes optional pipeline filtering. However, it does not explicitly state when not to use this tool versus alternatives like 'get_build' for specific builds or 'list_builds' for multiple builds, leaving some ambiguity.

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

get_pull_requestGet pull requestA

Get details of a single pull request by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
repositoryIdYesRepository id or name.
pullRequestIdYesPull request id.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. Minimal description ('Get details of a single pull request by id') adds no behavioral context beyond name, e.g., what details are returned, permissions, or side effects.

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

Conciseness5/5

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

One sentence, nine words. No filler, every word earns its place.

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

Completeness3/5

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

For a simple get-by-ID tool, description is minimally adequate. However, lacks output schema or hints about return shape, which would improve completeness given the context of many sibling 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% with descriptions for all three parameters. Description adds no additional meaning beyond what schema already provides, so baseline 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?

Clear verb+resource: 'Get details of a single pull request by id.' Distinct from sibling tools like list_pull_requests and create_pull_request, which handle multiple or creation.

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?

Implies usage for retrieving a specific pull request by ID, but no explicit when-to-use vs alternatives like list_pull_requests or list_prs_without_reviewer.

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

list_branchesList branchesB

List branches (refs/heads) of a repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
repositoryIdYesRepository id or name.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description is minimal. It does not disclose behavioral traits such as pagination, sorting, whether only active branches are listed, or permission requirements. For a read tool, more detail is needed.

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

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 is very brief and could include additional useful information 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?

The description is adequate for a simple listing tool with two parameters and no output schema. However, it lacks details about the return format or behavior, which would be helpful for an AI agent.

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

Parameters3/5

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

Schema coverage is 100%, as both parameters have descriptions in the schema. The tool description adds no additional semantic information beyond what the schema already 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 'list' and the resource 'branches', specifying 'refs/heads' to distinguish from other ref types. It is unambiguous and differentiates from sibling tools like list_repositories.

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. Among sibling tools, there are multiple list tools, but the description provides no context for selection, prerequisites, or exclusions.

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

list_buildsList buildsB

List recent builds in a project, optionally filtered by pipeline/definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
definitionIdNoFilter by pipeline/definition id.
topNoMax builds to return.
statusFilterNoFilter by build status.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavioral traits. It only states the action without disclosing any side effects, permissions, rate limits, or return format. For a read operation, this is minimal but not harmful.

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 unnecessary words. It is front-loaded with the core action. However, it could benefit from slightly more structure, such as noting that it is read-only.

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 limited annotations, the description does not fully inform the agent about return values, ordering, or pagination behavior. For a tool that returns a list, more context is needed for correct usage.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter already described in the input schema. The description does not add new meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists builds in a project, with optional filtering. It uses a specific verb ('List') and resource ('builds'), and the mention of filtering by pipeline/definition distinguishes it from siblings like get_build or get_last_build.

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 listing builds with optional filters, but provides no explicit guidance on when to use this tool over alternatives like list_failed_builds or get_last_build. No when-not-to-use or prerequisites are mentioned.

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

list_failed_buildsList failed buildsA

Find builds that failed or partially succeeded in the last N hours. Use this for questions like 'آیا build شکست‌خورده‌ای داشتیم؟', 'failed builds in the last 24 hours', 'what broke today?', 'build failures this week'. Returns: pipeline name, result, branch, who triggered it, and when it ran.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
hoursNoLook back this many hours. Default: 24.
includePartialNoInclude partiallySucceeded builds. Default: true.
topNoMax builds to return. Default: 50.

TDQS

A3.8/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 return fields but does not state whether the operation is read-only, any side effects, authentication requirements, rate limits, or ordering behavior. The tool is likely safe but description lacks explicit disclosure.

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

Conciseness4/5

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

Two concise sentences plus a list of example queries. The examples add context but could be shorter. Overall well-structured 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?

No output schema, but description explains return fields. Missing details on default project behavior, pagination, or sorting. Adequate for a filtered list tool but not fully complete.

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%, baseline 3. Description adds value by explaining return fields and giving usage examples (e.g., 'آیا build شکستخوردهای داشتیم؟'), enhancing meaning beyond schema.

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

Purpose5/5

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

Description clearly states 'Find builds that failed or partially succeeded in the last N hours' with specific verb (list/find), resource (failed builds), and scope (time window). It contrasts with sibling tools like list_builds (general) and get_build (single).

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?

Provides concrete query examples ('failed builds in the last 24 hours', 'what broke today?') showing when to use. Does not explicitly state when not to use or alternatives, but context from sibling names implies distinction.

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

list_pipelinesList pipelinesC

List pipelines defined in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.

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 responsibility for behavioral context, but it fails to mention important traits like pagination, sorting, permission requirements, or response details. The description only restates the tool's operation.

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

Conciseness4/5

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

The description is a single concise sentence with no wasted words. While it is minimal, it effectively communicates the core action without unnecessary detail.

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

Completeness3/5

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

For a simple listing tool with one optional parameter and no output schema, the description provides the essential purpose. However, it lacks details about response format, potential filters, or limitations, making it only marginally 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 single parameter 'project' already has a clear description in the input schema (name, default behavior), so the tool description adds no extra meaning. Schema coverage is 100%, meeting baseline expectations.

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 'pipelines defined in a project,' making its purpose straightforward. However, it does not explicitly differentiate from sibling tools like list_builds or list_projects, which are similarly named.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as list_builds or list_projects, nor does it specify prerequisites or exclusions.

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

list_projectsList projectsA

List all projects in the Azure DevOps collection. Call this first when the project name is unknown or a lookup by name fails.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Without annotations, the description carries the burden but only states it lists all projects. It does not disclose potential behavioral aspects like rate limits, pagination, or what information is returned (e.g., only names or full metadata).

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

Conciseness5/5

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

The description is two sentences, front-loading the action and adding usage context. No unnecessary 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 tool with no output schema, the description lacks details about the return format (e.g., project attributes). This is a gap in completeness.

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?

There are no parameters, and schema description coverage is 100% (vacuous). According to the rule '0 params = baseline 4', the description meets the baseline without needing to add parameter info.

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 lists all projects in the Azure DevOps collection, using a specific verb and resource. It distinguishes from siblings that require a project name by providing usage guidance.

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

Usage Guidelines5/5

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

The description explicitly specifies when to call this tool: 'Call this first when the project name is unknown or a lookup by name fails.' This provides clear context for alternative tools.

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

list_prs_without_reviewerList PRs without reviewerA

Find open pull requests that have no reviewer assigned, optionally within a time window. Use this for: 'which PRs have no reviewer?', 'unreviewed PRs in last 24 hours', 'PRs waiting for review this week'. Use the hours parameter to filter by creation date (e.g. hours=24 for last 24 hours). Omit hours to return all open PRs without a reviewer regardless of age.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
hoursNoOnly include PRs created in the last N hours. Omit for all time.
topNoMax PRs to fetch. Default: 200.

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description carries the burden. It correctly implies a read-only operation and explains the hours filter, but does not mention pagination, ordering, or the top parameter's role. Key behaviors are hinted but not fully transparent.

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

Conciseness5/5

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

The description is two sentences plus examples, with no redundant text. Every sentence serves a purpose: it states what the tool does, provides usage examples, and explains parameter behavior. Highly 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?

There is no output schema, and the description does not clarify what the tool returns (e.g., list of PR objects, fields). Context about response structure, error handling, or limitations is missing, making it incomplete 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?

Schema coverage is 100%. The description adds significant context for the 'hours' parameter with concrete examples and behavior on omission. The 'project' and 'top' parameters are not elaborated, but the schema already covers them adequately.

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 'open pull requests that have no reviewer assigned', which is a specific verb+resource. It distinguishes this from the sibling list_pull_requests by focusing on unreviewed PRs.

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 provides explicit use cases (e.g., 'which PRs have no reviewer?') and explains the hours parameter. It lacks explicit exclusions or alternative tools for cases when reviewers are needed.

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

list_pull_requestsList pull requestsA

List pull requests across ALL repositories in a project, or filter to one repository. Use this for questions like 'show all open PRs', 'which PRs have no reviewer', 'list PRs in project X'. Leave repositoryId empty to search the whole project at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
repositoryIdNoRepository id or name. Omit to get PRs across all repositories in the project.
statusNoPR status filter. Default: active.
topNoMax PRs to return. Default: 100.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description bears full burden. It discloses the scope (all or one repo) and implicit filters via parameters, but does not detail pagination behavior or ordering.

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

Conciseness5/5

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

Two-sentence description is concise, front-loaded with purpose, includes examples, and no superfluous text.

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?

Adequately covers functionality and parameters for a list tool without output schema; lacks mention of return structure but that is acceptable per rules.

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 covers 100% of parameters; description adds value by clarifying optional repositoryId behavior and giving usage examples, exceeding the baseline of 3.

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

Purpose5/5

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

Description clearly states it lists pull requests across all repositories or filtered to one, with example questions. Distinct from siblings like get_pull_request and list_prs_without_reviewer.

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?

Provides examples of when to use, but does not explicitly contrast with sibling tools or state when not to use.

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

list_repositoriesList repositoriesB

List all Git repositories in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.

TDQS

B3.1/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 whether the tool is read-only, how results are paginated, or any authentication requirements. The description carries the full burden but offers minimal insight.

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

Conciseness5/5

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

The description is a single concise sentence with no unnecessary words. It efficiently conveys the core action and resource.

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 provides the basic purpose but lacks details about output format, default behavior, and pagination. For a simple list tool, this 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?

The input schema covers 100% of the parameter's description, so the description adds no new semantic value beyond what the schema already provides. Baseline 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 'Git repositories', making the tool's purpose discernible. However, it does not clarify that the 'project' is an optional parameter, which could cause confusion about scope.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like list_projects or list_builds. The description lacks explicit context for when this tool is appropriate.

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

run_pipelineRun pipelineA

Queue a new run of a pipeline by its numeric id. Use run_pipeline_by_name if you only know the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
pipelineIdYesPipeline id (from list_pipelines).
branchNoBranch to run against, without refs/heads/. Defaults to the pipeline default.

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states 'Queue a new run' implying a mutation, but lacks details on permissions, idempotency, side effects (e.g., triggering a build immediately), or return value. The description is too minimal for a create 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 extremely concise at two sentences, with no wasted words. The first sentence states the primary action, and the second provides a usage alternative. This is efficient and front-loaded.

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

Completeness2/5

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

Given the tool is a mutation (queue action) with 3 parameters, no output schema, and no annotations, the description should cover return value, error behavior, and potential prerequisites. It does not mention what the tool returns (e.g., a run ID) or any conditions that might cause failure. The completeness is inadequate.

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 already documents all three parameters with 100% coverage. The description adds no additional parameter-level details beyond noting that the pipeline is identified by numeric id, which aligns with the 'pipelineId' parameter. The mention of 'run_pipeline_by_name' is about tool selection, not parameter semantics. Baseline 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 action ('Queue a new run') and the resource ('a pipeline by its numeric id'), and explicitly distinguishes from the sibling tool 'run_pipeline_by_name', which is used when only the name is known. This provides specific verb+resource identification and differentiation.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool (when you have the numeric id) and when to use the alternative ('run_pipeline_by_name' if you only know the name). This directly helps the agent choose the correct tool.

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

run_pipeline_by_nameRun pipeline by nameA

Find a pipeline by name and run it. Use this when the user says 'run pipeline X', 'اجرا کن pipeline X', 'trigger X'. Searches for the pipeline by partial name match, then queues a run automatically. No need to call list_pipelines first.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoAzure DevOps project name or id. Defaults to AZDO_PROJECT if set.
pipelineNameYesPipeline name or partial name to search for, e.g. 'mdp-monitoring-service [alpha]'.
branchNoBranch to run on (without refs/heads/). Defaults to pipeline default.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description must disclose behavioral traits. It states the tool searches by partial name and queues a run. However, it does not clarify behavior for multiple matches, whether the run is async, or error conditions like insufficient permissions.

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?

Description is 4 sentences, front-loaded with core purpose. Every sentence adds unique value: purpose, usage examples, search-and-run mechanism, and advice to skip list_pipelines. No wasted words.

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 the tool's complexity (3 parameters, no output schema, no annotations), the description covers key aspects: search-and-run workflow, language examples, and workflow optimization. Missing details on multiple matches and async behavior, but still adequate.

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

Parameters3/5

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

Input schema has 100% description coverage for all 3 parameters. The description adds only the notion of 'partial name' for pipelineName, which is marginally more specific than the schema. No added value for other 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 clearly states the tool finds a pipeline by name and runs it. The verb 'run' and resource 'pipeline' are explicit. It distinguishes itself from the sibling 'run_pipeline' by using name-based search rather than requiring an ID.

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?

Provides explicit when-to-use examples (e.g., 'run pipeline X', 'trigger X') and tells users not to call list_pipelines first. However, it does not mention when to prefer the sibling tool 'run_pipeline' (e.g., when pipeline ID is known).

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. 16 tool updatesv0.1.0
    • First observedcreate_pull_request
    • First observedget_build
    • First observedget_build_logs
    • First observedget_file_content
    • First observedget_last_build
    • First observedget_pull_request
    • First observedlist_branches
    • First observedlist_builds
    • First observedlist_failed_builds
    • First observedlist_pipelines
    • First observedlist_projects
    • First observedlist_prs_without_reviewer
    • First observedlist_pull_requests
    • First observedlist_repositories
    • First observedrun_pipeline
    • First observedrun_pipeline_by_name

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: PR creation vs retrieval, build logs vs build listing, specialized tools for failed builds or unreviewed PRs. There is no functional overlap that would cause ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_pull_request, get_last_build, list_repositories). The naming is predictable and uniform across the entire set.

Tool Count5/5

16 tools cover core Azure DevOps operations (projects, repos, branches, PRs, builds, pipelines) without being bloated. Each tool serves a necessary function, and the count is appropriate for the domain.

Completeness4/5

The tool surface covers essential CRUD-like operations for PRs, builds, and pipelines. Minor gaps exist (e.g., no update or merge for PRs, no build cancellation), but the most common agent scenarios are supported.

Maintenance

ActivityStale
ResponsivenessSyncing

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/jafarimohammad/azure-devops-mcp'

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