Azure DevOps MCP Server
Сервер Azure DevOps MCP
Реализация сервера Model Context Protocol (MCP) для Azure DevOps, позволяющая помощникам на основе ИИ взаимодействовать с API-интерфейсами Azure DevOps через стандартизированный протокол.
Обзор
Этот сервер реализует протокол контекста модели (MCP) для Azure DevOps, позволяя помощникам ИИ, таким как Клод, безопасно взаимодействовать с ресурсами Azure DevOps. Сервер действует как мост между моделями ИИ и API Azure DevOps, предоставляя стандартизированный способ:
Доступ и управление проектами, рабочими элементами, репозиториями и многим другим
Создание и обновление рабочих элементов, ветвей и запросов на извлечение
Выполняйте стандартные рабочие процессы DevOps с помощью естественного языка
Доступ к содержимому репозитория через стандартизированные URI ресурсов
Безопасная аутентификация и взаимодействие с ресурсами Azure DevOps
Related MCP server: Azure DevOps MCP Server
Структура сервера
Сервер структурирован вокруг Model Context Protocol (MCP) для связи с помощниками ИИ. Он предоставляет инструменты для взаимодействия с ресурсами Azure DevOps, включая:
Проекты
Рабочие элементы
Репозитории
Запросы на извлечение
Филиалы
Трубопроводы
Основные компоненты
AzureDevOpsServer : основной класс сервера, который инициализирует сервер MCP и регистрирует инструменты.
Модули функций : организованы по функциональным областям (рабочие элементы, проекты, репозитории и т. д.)
Обработчики запросов : каждый функциональный модуль обеспечивает функции идентификации и обработки запросов.
Обработчики инструментов : модульные функции для каждой операции Azure DevOps
Конфигурация : Конфигурация на основе среды для URL-адреса организации, PAT и т. д.
Сервер использует архитектуру на основе функций, где каждая область функций (например, рабочие элементы, проекты, репозитории) инкапсулирована в свой собственный модуль. Это делает кодовую базу более удобной для обслуживания и более простой для расширения новыми функциями.
Начиная
Предпосылки
Node.js (v16+)
нпм или пряжа
Учетная запись Azure DevOps с соответствующим доступом
Учетные данные для аутентификации (подробности см. в Руководстве по аутентификации ):
Персональный токен доступа (PAT) или
Учетные данные Azure Identity или
Вход в Azure CLI
Работает с NPX
Использование с Claude Desktop/Cursor AI
Для интеграции с Claude Desktop или Cursor AI добавьте в файл конфигурации одну из следующих конфигураций.
Проверка подлинности удостоверения Azure
Убедитесь, что вы вошли в Azure CLI с помощью az login а затем добавьте следующее:
{
"mcpServers": {
"azureDevOps": {
"command": "npx",
"args": ["-y", "@tiberriver256/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/your-organization",
"AZURE_DEVOPS_AUTH_METHOD": "azure-identity",
"AZURE_DEVOPS_DEFAULT_PROJECT": "your-project-name"
}
}
}
}Аутентификация с помощью персонального токена доступа (PAT)
{
"mcpServers": {
"azureDevOps": {
"command": "npx",
"args": ["-y", "@tiberriver256/mcp-server-azure-devops"],
"env": {
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/your-organization",
"AZURE_DEVOPS_AUTH_METHOD": "pat",
"AZURE_DEVOPS_PAT": "<YOUR_PAT>",
"AZURE_DEVOPS_DEFAULT_PROJECT": "your-project-name"
}
}
}
}Подробные инструкции по настройке и дополнительные параметры аутентификации см. в Руководстве по аутентификации .
Методы аутентификации
Этот сервер поддерживает несколько методов аутентификации для подключения к API Azure DevOps. Подробные инструкции по настройке, примеры конфигурации и советы по устранению неполадок см. в руководстве по аутентификации .
Поддерживаемые методы аутентификации
Персональный токен доступа (PAT) — простая аутентификация на основе токенов
Azure Identity (DefaultAzureCredential) — гибкая аутентификация с использованием Azure Identity SDK
Azure CLI — аутентификация с использованием вашего имени входа Azure CLI
Примеры файлов конфигурации для каждого метода аутентификации доступны в каталоге примеров .
Переменные среды
Полный список переменных среды и их описания см. в Руководстве по аутентификации .
Ключевые переменные среды включают в себя:
Переменная | Описание | Необходимый | По умолчанию |
| Метод аутентификации ( | Нет |
|
| Полный URL-адрес вашей организации Azure DevOps | Да | - |
| Персональный токен доступа (для аутентификации PAT) | Только с аутентификацией PAT | - |
| Проект по умолчанию, если не указан | Нет | - |
| Версия API для использования | Нет | Последний |
| Идентификатор клиента Azure AD (для субъектов-служб) | Только с директорами служб | - |
| Идентификатор приложения Azure AD (для субъектов-служб) | Только с директорами служб | - |
| Секрет клиента Azure AD (для субъектов-служб) | Только с директорами служб | - |
| Уровень ведения журнала (отладка, информация, предупреждение, ошибка) | Нет | информация |
Устранение неполадок аутентификации
Подробную информацию об устранении неполадок для каждого метода аутентификации см. в Руководстве по аутентификации .
К распространенным проблемам относятся:
Недействительные или просроченные учетные данные
Недостаточно прав
Проблемы с сетевым подключением
Ошибки конфигурации
Подробности реализации аутентификации
Технические сведения о реализации аутентификации на сервере Azure DevOps MCP см. в Руководстве по аутентификации и исходном коде в каталоге src/auth .
Доступные инструменты
Сервер Azure DevOps MCP предоставляет множество инструментов для взаимодействия с ресурсами Azure DevOps. Подробную документацию по каждому инструменту см. в соответствующей документации.
Пользовательские инструменты
get_me: Получить данные аутентифицированного пользователя (id, displayName, email)
Организационные инструменты
list_organizations: Список всех доступных организаций
Инструменты проекта
list_projects: Список всех проектов в организацииget_project: Получить сведения о конкретном проектеget_project_details: получите полную информацию о проекте, включая процесс, типы рабочих элементов и команды
Инструменты репозитория
list_repositories: Список всех репозиториев в проектеget_repository: Получить сведения о конкретном репозиторииget_repository_details: Получить подробную информацию о репозитории, включая статистику и ссылкиget_file_content: Получить содержимое файла или каталога из репозитория
Инструменты рабочего элемента
get_work_item: Получить рабочий элемент по идентификаторуcreate_work_item: Создать новый рабочий элементupdate_work_item: обновить существующий рабочий элементlist_work_items: Список рабочих элементов проектаmanage_work_item_link: добавление, удаление или обновление связей между рабочими элементами
Инструменты поиска
search_code: Поиск кода в репозиториях проектаsearch_wiki: Поиск контента на страницах вики в проектеsearch_work_items: Поиск рабочих элементов по проектам в Azure DevOps
Инструменты для трубопроводов
list_pipelines: Список конвейеров в проектеget_pipeline: Получить сведения о конкретном конвейереtrigger_pipeline: Запуск конвейера с настраиваемыми параметрами
Вики-инструменты
get_wikis: Список всех вики в проектеget_wiki_page: Получить содержимое определенной страницы вики в виде обычного текста
Инструменты запроса на извлечение
create_pull_request— создать новый запрос на извлечениеlist_pull_requests— список запросов на извлечение в репозиторииadd_pull_request_comment— Добавить комментарий к запросу на извлечениеget_pull_request_comments— Получить комментарии из запроса на включение измененийupdate_pull_request— обновление существующего запроса на извлечение (название, описание, статус, состояние черновика, рецензенты, рабочие элементы)
Подробную документацию по всем инструментам см. в разделе «Документация по инструментам» .
Внося вклад
Вклады приветствуются! Пожалуйста, ознакомьтесь с рекомендациями по вкладам на сайте CONTRIBUTING.md .
История Звезды
Лицензия
Массачусетский технологический институт
Available Tools
49 toolsadd_pull_request_commentB
Add a comment to a pull request (repositoryId optional; derived from pullRequestId when omitted)
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | The status to set for a new thread | |
| content | Yes | The content of the comment in markdown | |
| filePath | No | The path of the file to comment on (for new thread on file) | |
| threadId | No | The ID of the thread to add the comment to | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| lineNumber | No | The line number to comment on (for new thread on file) | |
| repositoryId | No | The ID or name of the repository (optional; derived from pullRequestId when omitted) | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| parentCommentId | No | ID of the parent comment when replying to an existing comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states 'Add a comment' without disclosing key behaviors: whether it creates new threads or replies, or side effects like permissions required. The agent lacks insight into comment creation mechanics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no waste. However, it could benefit from slightly more structure, e.g., separating threading and file comment modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters and no output schema or annotations, the description is too minimal. It omits essential context about thread creation, file commenting, status usage, and reply behavior, leaving an AI agent underinformed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds only minimal value: repeating that repositoryId can be derived. It does not explain complex parameters like threadId vs filePath/lineNumber, but baseline is 3 due to full schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a comment') and the resource ('pull request'), with a useful note about repositoryId derivation. It distinguishes from sibling tools like create_pull_request and get_pull_request_comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers a hint about repositoryId being optional but does not specify when to use this tool versus alternatives like update_pull_request or how to handle threading vs file comments. No explicit when-not or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_branchB
Create a new branch from an existing one
| Name | Required | Description | Default |
|---|---|---|---|
| newBranch | Yes | Name of the new branch to create (without "refs/heads/", e.g., "feature/my-branch") | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| sourceBranch | Yes | Name of the branch to copy from (without "refs/heads/", e.g., "master") | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Main description is minimal, but input schema description adds useful tips (e.g., plain branch names, fully-qualified refs for PRs). Does not disclose failure modes, permissions, or side effects. Adequate with gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Main description is a single clear sentence. Input schema description adds useful context without excessive verbosity. Overall, concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no description of return values. For a creation tool, the agent needs to know what happens on success (e.g., branch object or acknowledgment). Lacks completeness despite schema tips.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The schema descriptions explain defaults, required fields, and formatting examples. Main description adds no parameter info, but schema is rich enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new branch from an existing one' clearly states the action and the resource (branch). It distinguishes from other tools like create_commit or create_pull_request. However, it does not explicitly mention the version control context, though siblings imply it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Siblings like create_commit or create_pull_request are related but no comparison or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_commitA
Create a commit on an existing branch using file changes.
Provide plain branch names (no "refs/heads/").
⚠️ Each file path may appear only once per commit request—combine all edits to a file into a single change entry.
Prefer multiple commits when you have sparse or unrelated edits; smaller focused commits keep review context clear.
🎯 RECOMMENDED: Use the SEARCH/REPLACE format (much easier, no line counting!).
Option 1: SEARCH/REPLACE format (EASIEST) Simply provide the exact text to find and replace:
{
"changes": [{
"path": "src/api/services/function-call.ts",
"search": "return axios.post(apiUrl, payload, requestConfig);",
"replace": "return axios.post(apiUrl, payload, requestConfig).then(r => { processResponse(r); return r; });"
}]
}The server fetches the file, performs the replacement, and generates the diff automatically. No line counting, no hunk headers, no context lines needed!
Option 2: UNIFIED DIFF format (Advanced) If you prefer full control, provide complete unified diffs:
Each patch MUST have complete hunk headers: @@ -oldStart,oldLines +newStart,newLines @@
CRITICAL: Every @@ marker MUST include line numbers. Do NOT use @@ without line ranges.
Include 3-5 context lines before and after changes.
For deletions:
--- a/filepathand+++ /dev/nullFor additions:
--- /dev/nulland+++ b/filepath
Example unified diff:
{
"changes": [{
"patch": "diff --git a/file.yaml b/file.yaml\n--- a/file.yaml\n+++ b/file.yaml\n@@ -4,7 +4,7 @@ spec:\n spec:\n type: ClusterIP\n ports:\n- - port: 8080\n+ - port: 9090\n targetPort: http\n"
}]
}| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | List of file changes as either unified git diffs OR search/replace pairs | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| branchName | Yes | The branch to commit to (without "refs/heads/", e.g., "codex/test2-delete-main-py") | |
| repositoryId | Yes | The ID or name of the repository | |
| commitMessage | Yes | Commit message | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It describes that the server fetches files for SEARCH/REPLACE and generates diffs automatically, and warns about parsing failures for missing line numbers in hunks. However, it does not explicitly state that changes are committed immediately or mention rollback possibilities. Nonetheless, the behavior is adequately transparent for a commit operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is fairly long but well-organized with headers, bullet points, and code blocks. It front-loads key information. Some redundancy exists (e.g., line number warning appears in both description and parameter descriptions), but overall structure is clear and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (4 required), no output schema, and multiple input formats, the description covers all essential aspects: purpose, input options (with examples), constraints, and usage tips. It is comprehensive enough for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds substantial value by explaining the two change formats (search/replace vs patch), clarifying that path is optional for patch but required for search/replace, and providing detailed examples. It also adds constraints like unique file paths per commit, which are not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a commit on an existing branch using file changes.' It clearly distinguishes from sibling tools like create_branch and create_pull_request by focusing only on committing changes to an existing branch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (committing to existing branches), contrasts with other operations, recommends using the SEARCH/REPLACE format for ease, advises preferring multiple commits for sparse edits, and warns that each file path may appear only once per commit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pull_requestB
Create a new pull request, including reviewers, linked work items, and optional tags
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | List of tags to apply to the pull request | |
| title | Yes | The title of the pull request | |
| isDraft | No | Whether the pull request should be created as a draft | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| reviewers | No | List of reviewer email addresses or IDs | |
| description | No | The description of the pull request (markdown is supported) | |
| repositoryId | Yes | The ID or name of the repository | |
| workItemRefs | No | List of work item IDs to link to the pull request | |
| sourceRefName | Yes | The source branch name (e.g., refs/heads/feature-branch) | |
| targetRefName | Yes | The target branch name (e.g., refs/heads/main) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| additionalProperties | No | Additional properties to set on the pull request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It indicates a creation/mutation operation but does not disclose authentication requirements, side effects, notification behavior, or what happens to linked work items, reviewers, or tags after creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately terse for a one-line summary, though a complex 12-parameter mutation tool could benefit from slightly more structure around required inputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters (4 required), no annotations, and no output schema, the description is incomplete. It omits the required repository, branch, and title context, does not explain permissions or output behavior, and leaves the agent to rely entirely on the schema for invocation-critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters including required fields and nested additionalProperties are documented in the schema. The description only lists a few optional fields (reviewers, linked work items, tags) and adds no syntax or meaning beyond what the schema already provides, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new pull request') and clarifies scope with 'new,' which distinguishes it from update_pull_request and get_pull_request. It also names the main associative content (reviewers, linked work items, tags), so an agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no alternatives named. The agent is left to infer that this tool is for creating rather than updating or fetching pull requests, which is the minimum but not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wikiC
Create a new wiki in the project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the new wiki | |
| type | Yes | Type of wiki to create (projectWiki or codeWiki) | projectWiki |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| mappedPath | Yes | Folder path inside repository which is shown as Wiki (only for codeWiki) | / |
| repositoryId | No | The ID of the repository to associate with the wiki (required for codeWiki) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only says a wiki is created in the project, without stating permissions needed, side effects, reversibility, or whether codeWiki requires a repository. This is minimal for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for the core action, though it omits necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, three required, an enum, and type-dependent requirements (e.g., repositoryId required for codeWiki), the description is far too incomplete. It does not address the two wiki types, defaults, or the repository association needed for codeWiki.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds no additional parameter meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('wiki'), clearly distinguishing it from creation of other resources. However, it does not distinguish itself from sibling tools like create_wiki_page, which is also about wiki content creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description only restates the action; it does not help an agent choose between create_wiki and create_wiki_page, or understand required context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wiki_pageA
Create a new page in a wiki. If the page already exists at the specified path, it will be updated.
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| comment | No | Optional comment for the creation or update | |
| content | Yes | The content for the new wiki page in markdown format | |
| pagePath | Yes | Path of the wiki page to create. If the path does not exist, it will be created. Defaults to the wiki root (/). Example: /ParentPage/NewPage | / |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the important non-obvious trait that an existing page at the path will be updated rather than erroring. It stops short of saying whether existing content is overwritten or merged, and says nothing about auth scope or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core action plus its upsert caveat are front-loaded. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The key surprise (silent update of an existing page) is covered, which is the most important thing for a mutation tool with no annotations or output schema. Still missing is any statement of what is returned and whether the update overwrites content, leaving a meaningful gap for a destructive-capable write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters (including wikiId, pagePath, content, projectId, organizationId, comment) are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new page in a wiki') and adds the upsert qualifier, so the agent understands this is not purely additive. It does not differentiate from the sibling update_wiki_page, which overlaps when the page already exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the 'already exists' clause, which hints that this can serve as an upsert. However, no sibling is named and there is no explicit guidance on when to prefer update_wiki_page or how to check existence first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_work_itemC
Create a new work item
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to add to the work item | |
| title | Yes | The title of the work item | |
| areaPath | No | The area path for the work item | |
| parentId | No | The ID of the parent work item to create a relationship with | |
| priority | No | The priority of the work item | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| assignedTo | No | The email or name of the user to assign the work item to | |
| description | No | Work item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. | |
| workItemType | Yes | The type of work item to create (e.g., "Task", "Bug", "User Story") | |
| iterationPath | No | The iteration path for the work item | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| additionalFields | No | Additional Azure DevOps fields to set by reference name (fields not exposed as named parameters). Example for Bug severity: { "Microsoft.VSTS.Common.Severity": "1 - Critical" } (accepted values: "1 - Critical", "2 - High", "3 - Medium", "4 - Low"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the entire behavioral burden, and it discloses nothing about permissions required, whether the operation is reversible, what relationships (e.g. parentId linking) are set up, or what is returned. The use of 'Create' at least signals a mutation, but no substantive behavioral context is offered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of padding, but its brevity reflects under-specification rather than disciplined conciseness. It does not earn its place as a full description of a 12-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no annotations and no output schema, the description is far too thin. The rich schema mitigates the parameter gap (100% coverage), but nothing addresses permissions, project defaults, relationship side effects, or post-creation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are already documented in the schema, including the non-obvious additionalFields HTML-formatting notes and defaults. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Create a new work item' names a clear verb and resource, but it essentially restates the tool name create_work_item and adds no scope, differentiation, or detail about what a work item is. Siblings like update_work_item and get_work_item are distinguished only by the verb, with no explicit contrast drawn in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus update_work_item, get_work_item, or list_work_items, nor any prerequisites such as required project/organization context. The agent must infer everything about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_work_item_attachmentA
Upload a file and attach it to a work item. The file is read from the local filesystem, uploaded to Azure DevOps, and linked to the specified work item.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment for the attachment | |
| fileName | No | The name to use for the attachment. If not provided, the name will be extracted from the file path. | |
| filePath | Yes | The absolute path to the file to upload as an attachment | |
| workItemId | Yes | The ID of the work item to attach the file to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a meaningful three-step behavior chain: read from local filesystem, upload to Azure DevOps, link to the work item. It omits preconditions (file must exist, size limits), permission requirements, overwrite/duplicate-name behavior, and what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no filler, with the core action front-loaded and the mechanism following. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the workflow but leaves gaps: it does not describe what is returned (e.g., attachment ID or link) or failure/permission behavior. Since parameters are fully covered by the schema, the remaining shortfall is mainly behavioral and return-value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters (workItemId, filePath, fileName, comment) fully documented in the schema, so the baseline is 3. The description adds no parameter-level detail beyond the schema, such as path format requirements or how fileName defaults are resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload a file and attach it to a work item') and distinguishes itself from the read/delete attachment siblings through the create action. The second sentence clarifies the mechanism, so an agent knows exactly what the tool accomplishes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (attaching a local file to a work item) and notes the file is read from the local filesystem, which is a useful precondition hint. However, it never names alternatives such as get_work_item_attachment or delete_work_item_attachment, nor states when not to use it or what permissions are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_work_item_attachmentA
Delete an attachment from a work item. The attachment ID can be obtained from the work item relations.
| Name | Required | Description | Default |
|---|---|---|---|
| workItemId | Yes | The ID of the work item to delete the attachment from | |
| attachmentId | Yes | The ID (GUID) of the attachment to delete. Can be obtained from the work item relations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Delete' does imply a destructive mutation, but the description says nothing about permissions required, whether the deletion is permanent/irreversible, error behavior for a missing attachment, or any confirmation step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, zero filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive tool with no output schema, the description covers purpose and ID sourcing adequately. The notable gap is any statement about the irreversibility or permission requirements of a delete, which matters more here because no annotations supply that context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description's note about sourcing the attachment ID merely repeats what the schema description for attachmentId already states, adding no new semantic value. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (attachment from a work item), which cleanly separates it from the sibling get_work_item_attachment and create_work_item_attachment tools. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives useful procedural guidance on where the attachmentId comes from ('work item relations'), which is real usage help. However, it offers no when-to-use/when-not framing, no prerequisites, and does not name any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_pipeline_artifactB
Download a file from a pipeline run artifact and return its textual content
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Pipeline run identifier | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| pipelineId | No | Optional guard; validates the run belongs to this pipeline | |
| artifactPath | Yes | Path to the desired file inside the artifact (format: <artifactName>/<path/to/file>) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the return shape (textual content, implying non-text/binary artifacts are not supported), but it omits access requirements, size limits, and failure behavior for missing paths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause earns its place. It is appropriately sized, though it could have spent one more sentence on routing guidance without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read tool with no annotations and no output schema, the description covers the core action and return type but leaves out routing versus siblings and error/limit behavior. It is minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so runId, projectId, pipelineId, and artifactPath are all documented in the schema, including the artifactPath format and the pipelineId guard semantics. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download) plus resource (pipeline run artifact) and clarifies the return is textual content. It distinguishes the artifact source from repo-level fetches, though it does not name the closest sibling (get_file_content) to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to prefer this over get_file_content, get_pipeline_log, or get_pipeline_run, and no prerequisites such as run status or permissions are mentioned. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_repositories_treeB
Displays a hierarchical tree view of files and directories across multiple Azure DevOps repositories within a project, based on their default branches
| Name | Required | Description | Default |
|---|---|---|---|
| depth | Yes | Maximum depth to traverse within each repository (0 = unlimited) | |
| pattern | No | File pattern (wildcard characters allowed) to filter files by within each repository | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the Azure DevOps organization (Default: mycompany) | |
| repositoryPattern | No | Repository name pattern (wildcard characters allowed) to filter which repositories are included |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. It usefully discloses that the tree is built from each repository's default branch, which materially affects the result, but says nothing about permissions, traversal cost of a potentially large multi-repo tree, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is well-sized for the scope it conveys, though it could have used remaining space for sibling routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, read-oriented tree traversal with no output schema and no annotations, the description covers the what and the default-branch semantics but omits return format, size/performance implications, and differentiation from the sibling tree/list tools. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (depth, pattern, projectId, organizationId, repositoryPattern) is already documented. The description adds no syntax, defaults, or format detail beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (displays) and resource (hierarchical tree view of files and directories) with clear scope: across multiple repositories within a project, based on default branches. This distinguishes it implicitly from get_repository_tree (single repo), but it never names the sibling, so the differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternative is named. The 'across multiple repositories' scope implies a contrast with get_repository_tree and list_repositories, but the agent must infer the boundary rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentC
Get content of a file or directory from a repository
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the file or folder | / |
| version | No | The version (branch, tag, or commit) to get content from | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| versionType | No | Type of version specified (branch, commit, or tag) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing: it does not state that this is a read-only operation, how directories differ from files in the response, how binary content is handled, or whether a version defaults to the default branch. Only the file/directory scope is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or repetition. It is efficient, though so terse that it borders on under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and no annotations, a one-line description is inadequate. It omits return shape, directory-vs-file behavior, version resolution defaults, and any safety profile that the agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including the versionType enum and defaults are documented in the schema itself. The description adds no parameter meaning beyond what the schema already provides, which makes the baseline 3 appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (content of a file or directory from a repository), which is clear and actionable. However it offers no differentiation from siblings like search_code or get_repository_tree, so an agent must still infer which read tool fits the situation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus search_code, get_repository_tree, or get_repository. The purpose implies retrieval, but no context, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meA
Get details of the authenticated user (id, displayName, email)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a read-only operation ('Get details') but does not disclose authentication requirements, rate limits, or potential side effects. For a simple read tool, it is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the verb and purpose. Every word serves a purpose with no wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple tool, the description adequately lists the returned fields (id, displayName, email). It could mention possible additional fields or error conditions, but it is complete enough for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and input schema coverage is 100%. Per guidelines, 0 params yields a baseline of 4. The description adds no parameter information, which is appropriate as none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves details of the authenticated user, listing specific fields (id, displayName, email). The verb 'Get' and resource 'authenticated user' are specific and distinct from siblings, which focus on repositories, pull requests, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives, but the purpose is self-evident as there are no other user info tools among siblings. The description does not provide when-not or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipelineC
Get details of a specific pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| pipelineId | Yes | The numeric ID of the pipeline to retrieve | |
| pipelineVersion | No | The version of the pipeline to retrieve (latest if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but says nothing about permissions, whether a version must exist, how default/version resolution behaves, or what is returned—leaving the agent to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and the description does not describe the returned details, so return-shape expectations are left unclear. Given the crowded sibling set of pipeline-related tools, more disambiguation is needed for the agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so projectId, pipelineId, and pipelineVersion are fully documented in the schema (including the 'latest if not specified' default). The description adds nothing beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('pipeline'), so the basic action is clear. However, it does not distinguish this tool from close siblings such as get_pipeline_run, pipeline_timeline, or list_pipelines, nor does it characterize what 'details' means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_pipeline_run, pipeline_timeline, or list_pipelines. Usage is only implied by the name ('get a specific pipeline'), with no prerequisites like required projectId context mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_logC
Retrieve a specific pipeline log using the timeline log identifier
| Name | Required | Description | Default |
|---|---|---|---|
| logId | Yes | Log identifier from the timeline record | |
| runId | Yes | Pipeline run identifier | |
| format | No | Optional format for the log contents (plain or json) | |
| endLine | No | Optional ending line number for the log segment | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| startLine | No | Optional starting line number for the log segment | |
| pipelineId | No | Optional pipeline numeric ID for reference only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only says what is retrieved. It does not disclose that log output can be large or paginated via startLine/endLine, whether ranges are inclusive, permission requirements, or the default format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and identifier mechanism come first. It is efficient, though it is arguably too terse to earn a top score given the tool's 7-parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no annotations, and no output schema, the description should do more work than one sentence. It omits segment/range behavior, format defaults, and the fact that the logId originates from a timeline record, leaving an agent to reconstruct the calling workflow from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all seven parameters are documented in the schema, so the baseline of 3 applies. The description only echoes the logId semantics ('timeline log identifier') and adds no meaning beyond the schema, e.g. how logId relates to runId or how line ranges behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (pipeline log) and identifies the keying mechanism (timeline log identifier). An agent can distinguish it from list_pipelines or get_pipeline_run, but the description never names or contrasts those adjacent siblings for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as pipeline_timeline (which supplies the logId) or get_pipeline_run. Usage is only implied by the tool name and the phrase 'using the timeline log identifier'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_runC
Get details for a specific pipeline run
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Pipeline run identifier | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| pipelineId | No | Optional guard; validates the run belongs to this pipeline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read ('Get details') but never states read-only safety, required permissions, behavior for an unknown runId, or what the 'details' contain. For an unannotated tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste, but it is arguably under-specified rather than truly concise for a tool with three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should be doing more work: it never explains what 'details' are returned or how the optional pipelineId guard behaves on mismatch. The agent has enough to issue the call but not to interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so runId, projectId, and the pipelineId guard are all documented in the schema itself. The description adds nothing beyond that baseline, which is the expected 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (details for a specific pipeline run), and 'specific' implicitly distinguishes it from the sibling list_pipeline_runs. It does not, however, differentiate itself from get_pipeline, pipeline_timeline, or get_pipeline_log, which an agent must disambiguate by name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no named alternatives among the many pipeline siblings (list_pipeline_runs, get_pipeline_log, pipeline_timeline). The agent is left to infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectC
Get details of a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, or potential side effects. The description is too minimal to compensate for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is concise, though could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and presence of a similar sibling tool ('get_project_details'), the description is incomplete as it does not differentiate the two tools. Without an output schema, more details on return values would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions, and schema_description_coverage is 100%. The description adds no additional meaning beyond the schema, achieving the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get details of a specific project' clearly indicates the tool retrieves project information. However, there is a sibling tool 'get_project_details' which may overlap in function, and the description does not distinguish between them, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_project_details' or 'list_projects'. No context on prerequisites or use cases is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_detailsC
Get comprehensive details of a project including process, work item types, and teams
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| includeTeams | Yes | Include associated teams in the project result | |
| includeFields | Yes | Include field information for work item types | |
| includeProcess | Yes | Include process information in the project result | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| expandTeamIdentity | Yes | Expand identity information in the team objects | |
| includeWorkItemTypes | Yes | Include work item types and their structure |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read, but nothing states permission requirements, whether the call is expensive (it fans out across process, work item types, and teams), or how the optional includes affect cost/response. It also omits that five of the include/expand booleans are marked required despite having defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the content categories are listed up front. It is efficient, though minimally informative rather than maximally useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with 5 required flags, no annotations, and no output schema, the description is too thin: it doesn't explain what the returned detail looks like, how the include flags change the payload, or why they must be passed explicitly. Adequate for a trivial read, insufficient for this parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, and a 3 is the baseline. The description adds only a generic restatement of three of the include flags and no syntax for projectId/organizationId resolution beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (project details) plus the content categories returned (process, work item types, teams), which is clear. However, it never distinguishes itself from the sibling tools get_project and list_projects, leaving the agent to guess which project-fetching tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as get_project (lighter fetch) or list_projects. The agent gets a purpose but no selection criteria among four project-scoped siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestA
Get a pull request by ID (no repositoryId required; best for Azure DevOps Server where PR IDs are project-scoped)
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID or name of the project | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only states basic action without disclosing behavior like error handling, permissions, or response format. Minimal transparency beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action, no superfluous information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and description does not mention return value structure. For a retrieval tool, response format is important. However, sibling context helps differentiate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. Description adds context by clarifying pullRequestId is project-scoped, providing meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get a pull request by ID' and distinguishes from siblings by noting no repositoryId required and project-scoped ID, differentiating from list_pull_requests and other pull request tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states usage context: 'no repositoryId required; best for Azure DevOps Server where PR IDs are project-scoped', guiding when to use this tool over alternatives that may require repositoryId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_changesA
Get the files changed in a pull request, their unified diffs, source/target branch names, and the status of policy evaluations
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states the tool 'gets' data, implying a read operation, but does not explicitly confirm it is read-only, mention authorization needs, rate limits, or describe error behavior. This is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that fully conveys the tool's purpose without any extraneous information. It is front-loaded with the core action and details the key outputs, earning its place with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters and no output schema, the description lists the returned data (diffs, branches, policy status) but omits detail on output format, pagination, error handling, or large data scenarios. While helpful, it is not fully complete for an agent to handle all cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters. The description adds no further detail about parameter semantics beyond what the schema provides. Baseline score of 3 is appropriate as no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and clearly identifies the resource ('files changed in a pull request') and the specific data returned (unified diffs, branch names, policy evaluations). It effectively distinguishes this tool from siblings like get_pull_request, which likely returns metadata only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when needing diffs, branches, policy status) but does not explicitly state when not to use it or provide direct comparisons to alternatives. The context from the sibling list helps, but the description itself lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_checksA
Summarize the latest status checks and policy evaluations for a pull request.
Surfaces pipeline and run identifiers so you can jump straight to the blocking validation.
Pair with pipeline tools (e.g., get_pipeline_run, pipeline_timeline) to inspect failures in depth.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the tool summarizes and surfaces identifiers but does not explicitly state that it is read-only or non-destructive. With no annotations, the description carries the full burden, and while the behavior is implied, it lacks explicit safety disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and a bullet point, front-loaded with purpose, and every sentence adds value without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the output is a summary of status checks and surfaces pipeline/run identifiers, which is adequate for a read tool. However, without an output schema, more detail on the returned fields would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% parameter description coverage, so baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides (e.g., what projectId or pullRequestId mean).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'summarize[s] the latest status checks and policy evaluations for a pull request,' using a specific verb and resource. This differentiates it from siblings like get_pull_request (gets the PR itself) and get_pull_request_changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides pairing with pipeline tools (e.g., get_pipeline_run, pipeline_timeline) to inspect failures, indicating when to use this tool as an overview and when to use alternatives for deeper inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_commentsC
Get comments from a specific pull request
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of threads/comments to return | |
| threadId | No | The ID of the specific thread to get comments from | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request | |
| includeDeleted | No | Whether to include deleted comments | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'get comments' without mentioning important behaviors like pagination (top parameter), inclusion of deleted comments, or the ability to filter by threadId. The schema contains these details, but the description does not highlight them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (6 words), but brevity comes at the expense of completeness. While it is not verbose, it could include more detail without becoming excessively long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and the tool has 7 parameters (2 required), the description should explain what the tool returns (e.g., list of comments) and possibly the structure. It does not, nor does it clarify the role of optional parameters like threadId or includeDeleted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the parameters are already documented. The description adds no extra meaning beyond the schema, earning a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get) and resource (comments from a specific pull request). It differentiates from siblings like add_pull_request_comment (write) and get_pull_request (PR details). However, it could be more precise by noting that it can also retrieve comments from a specific thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool over alternatives such as get_pull_request_changes or get_pull_request_checks. The description lacks context on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repositoryB
Get details of a specific repository
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behaviors like authentication requirements, error handling, or scope. It simply states 'get details', offering minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence with no superfluous information. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (3 params, no output schema), the description is minimally sufficient but lacks guidance on usage and behavioral traits, making it incomplete for complex decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra semantic value beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves details for a specific repository. However, it does not differentiate from a nearly identical sibling 'get_repository_details', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_repository_details' or 'list_repositories'. The agent receives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_detailsC
Get detailed information about a repository including statistics and refs
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| refFilter | No | Optional filter for refs (e.g., "heads/" or "tags/") | |
| branchName | No | Name of specific branch to get statistics for (if includeStatistics is true) | |
| includeRefs | Yes | Whether to include repository refs | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| includeStatistics | Yes | Whether to include branch statistics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation via 'Get' and mentions statistics and refs, but does not disclose permissions, side effects, rate limits, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It efficiently communicates the core purpose and the main optional data categories.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with seven parameters, no annotations, and no output schema, the description is too sparse. It does not clarify what 'detailed information' returns beyond statistics and refs, nor does it explain required parameters or access expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a documented meaning in the schema. The description adds only a high-level mention of statistics and refs, which does not provide syntax or filtering detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: retrieving detailed repository information including statistics and refs. It distinguishes itself from list-style siblings implicitly, but does not explicitly distinguish itself from near siblings such as get_repository or get_project_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The inclusion of statistics and refs implies a use case, but the agent must infer that from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_treeB
Displays a hierarchical tree view of files and directories within a single repository starting from an optional path
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path within the repository to start from | / |
| depth | Yes | Maximum depth to traverse (0 = unlimited) | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Displays' signals a read-only operation, but it says nothing about authentication requirements, result size or pagination for large trees, or how depth traversal affects output volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Slightly compressed – it could have used the space to clarify the sibling relationship rather than restating the schema's path concept.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only traversal tool with full schema coverage and no output schema, the description is minimally adequate. It omits how large trees are returned and how this differs from the all-repositories tree tool an agent must choose between.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is documented in the schema, establishing a baseline of 3. The description adds the idea of starting from a path but no syntax, format, or behavioral detail beyond the schema; it also calls the path 'optional' while the schema lists it as required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Displays a hierarchical tree view of files and directories within a single repository'. The 'single repository' scoping implicitly separates it from get_all_repositories_tree, but it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scope ('within a single repository ... starting from an optional path'), which suggests the multi-repo alternative, but there is no explicit when-to-use, when-not-to-use, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_pageB
Get the content of a wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| pagePath | Yes | The path of the page within the wiki | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only retrieval but does not disclose permissions, pagination, error behavior, or return format for a page that may not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is as concise as possible for a simple lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents parameters and there is no output schema, but the description still omits usage context relative to search_wiki and list_wiki_pages. For a simple read tool this is minimally adequate, though not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no parameter-level meaning beyond the schema, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get the content of a wiki page. It is clear what the tool does, but it does not differentiate from siblings such as search_wiki or list_wiki_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no when-not-to-use conditions, and no alternatives named. The agent must infer usage from the tool name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wikisC
Get details of wikis in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it says nothing beyond the name. It does not disclose that it is read-only, whether results are paginated, what the 'details' contain, or how defaults (MyProject/mycompany) resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, but its brevity comes from under-specification rather than tightness. Nothing is front-loaded beyond the bare verb and noun.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and two optional parameters whose defaulting behavior is unexplained. The description does not clarify whether this returns a collection or a single wiki, leaving a meaningful gap for the calling agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both projectId and organizationId are already documented with defaults in the schema. The description adds no additional meaning, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Get') and resource ('wikis'), but 'wikis' plural is ambiguous against siblings like get_wiki_page, list_wiki_pages, and create_wiki. It is not clear whether this returns a list of wikis or a single wiki's details, so an agent cannot distinguish it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the related siblings (get_wiki_page, list_wiki_pages, search_wiki). The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_itemC
Get details of a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | The level of detail to include in the response. Defaults to "all" if not specified. | |
| workItemId | Yes | The ID of the work item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral details. 'Get details' implies a read-only operation, but it lacks specifics on permissions, error handling (e.g., missing ID), or side effects. The minimal description does not compensate for the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy. It is front-loaded and efficient, containing only the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should specify what 'details' includes (e.g., fields, relations). It fails to explain the return value, making it less useful for selection among similar tools like 'get_work_item' vs 'get_pull_request'. The context signals show siblings that return details, but this tool lacks specificity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for both parameters ('workItemId' and 'expand'). The description adds no additional meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and resource 'work item', indicating a retrieval operation for a specific item. It differentiates from sibling tools like 'list_work_items' (multiple items) and 'search_work_items' (search), but does not explicitly distinguish from other 'get' tools like 'get_pull_request'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'search_work_items' or 'list_work_items'). There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_item_attachmentB
Download an attachment from Azure DevOps and save it to the local filesystem. The attachment ID can be obtained from the work item relations.
| Name | Required | Description | Default |
|---|---|---|---|
| outputPath | Yes | The absolute path where the attachment will be saved | |
| attachmentId | Yes | The ID (GUID) of the attachment to download. Can be obtained from the work item relations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the key side effect (writes a file to the local filesystem) and that the ID comes from work item relations, but it says nothing about overwrite behavior, required permissions, or failure modes when the path or ID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the action and destination come first. The second sentence largely restates the attachmentId schema description, which is mild redundancy but not bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filesystem-writing tool with no annotations and no output schema, the description should say more about what happens on success or failure and whether an existing file is overwritten. It covers the essentials of purpose and ID sourcing but leaves meaningful behavioral gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, including the same note about obtaining the ID from work item relations. The description adds no syntax, format, or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download) and resource (attachment) plus the destination (local filesystem), which clearly separates it from create_work_item_attachment and delete_work_item_attachment siblings. It does not explicitly name those siblings, so it falls just short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is where to obtain the attachmentId ('from the work item relations'), which is input sourcing, not usage context. There is no statement of when to use this versus other attachment tools or what prerequisites must be met before downloading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_item_commentsC
Get comments and discussion history for a specific work item
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of comments to return | |
| order | Yes | The order in which to sort the comments (Default: "asc") | asc |
| expand | Yes | The level of detail to include in the comments response (Default: "all") | all |
| projectId | No | The ID or name of the project | |
| workItemId | Yes | The ID of the work item | |
| includeDeleted | No | Include deleted comments | |
| continuationToken | No | Continuation token to retrieve the next page of comments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries full burden. It says 'get comments and discussion history' but doesn't disclose read-only nature, pagination (continuationToken), includeDeleted behavior, or expand's effect on output. For a read operation with 7 params, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence with zero waste. It is front-loaded and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, pagination, and no annotations or output schema, the description is too thin. It omits pagination guidance, expand behavior, and whether deleted comments are included by default. An agent has to consult the schema for every operational detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds no parameter-specific details beyond 'comments and discussion history'. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Get comments and discussion history for a specific work item'. It's specific and distinguishable from sibling tools like get_pull_request_comments, though it doesn't explicitly contrast with them. A solid, unambiguous statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It doesn't mention pagination behavior (continuationToken) or how it relates to work item details. The sibling get_pull_request_comments is for PRs, but no routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commitsB
List recent commits on a branch including file-level diff content for each commit
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of commits to return (Default: 10) | |
| skip | No | Number of commits to skip from the newest | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| branchName | Yes | Branch name to list commits from | |
| repositoryId | Yes | The ID or name of the repository | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that results include file-level diff content, which is useful return behavior, and 'List' implies a read operation. However, it omits permissions, pagination/limit behavior, side effects, and rate context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It efficiently combines the operation, scope, and key return detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations exist, so the description should fill more gaps. It notes diff content but does not describe result structure, pagination, or auth defaults; parameters are covered by schema, but output context remains thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description only echoes branch scope and does not add syntax, defaults, constraints, or meaning beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (recent commits) plus the branch scope and that file-level diff content is included. It is clearly distinct from create_commit by verb, but does not explicitly name alternatives or differentiate from other read/list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. An agent can infer it lists commits, but the description does not say when to choose it over related read tools such as get_pull_request_changes or search_code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organizationsA
List all Azure DevOps organizations accessible to the current authentication
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description merely states it lists organizations. Does not disclose authentication requirements, rate limits, or behavior when no organizations exist. For a read operation, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no superfluous words. Perfectly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers the purpose and scope adequately for a simple list tool. Could mention return format (e.g., array of organization names) or pagination, but not essential given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params), so description does not need to add parameter info. Baseline 4 is appropriate as there are no gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists Azure DevOps organizations, specifies scope 'accessible to the current authentication', and is distinct from sibling tools like 'list_projects'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or alternatives, but the tool is straightforward with no parameters. Usage is implied, but lacks exclusionary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipeline_runsC
List recent runs for a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Maximum number of runs to return (1-100) | |
| state | No | Filter by current run state | |
| branch | No | Branch to filter by (e.g., "main" or "refs/heads/main") | |
| result | No | Filter by final run result | |
| orderBy | Yes | Sort order for run creation date | createdDate desc |
| createdTo | No | Filter runs created at or before this time (ISO 8601) | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| pipelineId | Yes | Pipeline numeric ID | |
| createdFrom | No | Filter runs created at or after this time (ISO 8601) | |
| continuationToken | No | Continuation token for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose that this is a read-only listing operation, nor does it mention pagination via continuationToken, default ordering, or the default limit of 50 runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no annotations and no output schema, the description is too thin. It omits key context such as pagination behavior, default sorting, and how it relates to sibling run-retrieval tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters are already documented in the schema. The description adds no parameter meaning beyond the schema baseline, which is appropriate for a score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list recent runs for a pipeline. It is clear what the tool does, but it does not distinguish itself from siblings like get_pipeline_run or pipeline_timeline, which also deal with pipeline runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of get_pipeline_run, pipeline_timeline, get_pipeline_log, or list_pipelines. The description implies a listing use case but provides no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesB
List pipelines in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of pipelines to return | |
| orderBy | No | Order by field and direction (e.g., "createdDate desc") | |
| projectId | No | The ID or name of the project (Default: MyProject) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'list' without detailing default behavior (e.g., pagination, sorting direction, whether it returns all or a subset). The schema provides some parameter details, but the description adds no behavioral context beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. It communicates the core purpose without waste, though it could be slightly more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and the number of sibling tools, the description does not provide enough context about what the tool returns (e.g., list of pipeline summaries, metadata) or how it relates to other tools. It is incomplete for an AI agent to use confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters have descriptions), so the description adds no additional meaning beyond what the schema provides. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List pipelines in a project' clearly states the verb (list) and resource (pipelines) with a scope (in a project). It distinguishes from siblings like get_pipeline (single pipeline) and list_pipeline_runs (pipeline runs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_pipeline for a single pipeline, list_pipeline_runs for runs). The description gives no context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
List all projects in an organization
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of projects to return | |
| skip | No | Number of projects to skip | |
| stateFilter | No | Filter on team project state (0: all, 1: well-formed, 2: creating, 3: deleting, 4: new) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| continuationToken | No | Gets the projects after the continuation token provided |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral transparency. It only states 'list all projects' but fails to disclose pagination (via top, skip, continuationToken), ordering, authentication needs, or error scenarios. This is a significant gap for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure. It is front-loaded but too minimal to cover all necessary information. Every sentence should earn its place; this one is adequate but not optimized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description is incomplete. It omits key context like pagination, default filtering, and relationship to sibling tools (e.g., list_organizations). An agent would lack sufficient detail to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, with each parameter described. The description adds no additional meaning beyond the schema, achieving the baseline of 3. No extra value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and resource (projects in an organization), effectively distinguishing it from sibling tools like get_project or list_repositories. However, it could be more specific about pagination behavior to avoid ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_project (single project) or search tools. It lacks context for an agent to make an informed choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pull_requestsC
List pull requests in a repository
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Maximum number of pull requests to return (default: 10) | |
| skip | No | Number of pull requests to skip for pagination | |
| status | No | Filter by pull request status | |
| creatorId | No | Filter by creator ID (must be a UUID string) | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| reviewerId | No | Filter by reviewer ID (must be a UUID string) | |
| repositoryId | Yes | The ID or name of the repository | |
| sourceRefName | No | Filter by source branch name | |
| targetRefName | No | Filter by target branch name | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure. It states only the basic operation and omits pagination behavior, default result limits, permission requirements, and return characteristics, adding little beyond the schema's parameter definitions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though arguably under-specified for a 10-parameter listing tool with no usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents parameters, and there is no output schema requiring return-value explanation. However, the description still omits usage context and behavioral details such as pagination and default result sizing, leaving the agent to rely entirely on structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters are already documented in the input schema. The description adds no additional meaning about filters, defaults, or parameter interactions, which is acceptable but not value-adding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List pull requests in a repository.' This clearly distinguishes the tool from mutable siblings like create_pull_request or update_pull_request, though it does not explicitly name alternatives such as get_pull_request for retrieving a single PR.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus siblings, nor does it mention prerequisites, exclusions, or filtering scope. The agent must infer that this is the bulk-listing counterpart to get_pull_request, but that inference is not supported by the description text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesC
List repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | The ID or name of the project (Default: MyProject) | |
| includeLinks | No | Whether to include reference links | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It does not mention read-only nature, pagination, authentication requirements, or any side effects. The description is too minimal to inform the agent about operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It is efficiently structured and front-loaded, though it may be too brief for completeness. It earns its place but could benefit from more detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and three optional parameters, the description lacks information about return values, pagination, or filtering behavior. For a listing tool, more context on what is listed and how results are presented is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so each parameter is already documented. The description adds no additional meaning beyond what the schema provides, meeting the baseline for adequate semantic support.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List repositories in a project' clearly states verb and resource, but it is vague and does not distinguish from sibling tools like 'get_all_repositories_tree' or 'get_repository_details' which also deal with listing repositories. The lack of specificity on scope or filtering reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, when to prefer it over other repository listing tools, or what the tool does not do. The description offers no context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wiki_pagesC
List pages within an Azure DevOps wiki
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether listing is recursive, whether results are paginated, or what permissions are required — all relevant for a wiki-tree listing. Only the read-only nature is weakly implied by 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is terse to the point of under-specification, but structurally clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter list tool with full schema coverage and no output schema, the description is minimally sufficient. It omits behavior an agent would want (recursion, pagination, auth scope), leaving the definition adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all three parameters documented in the schema, including defaults for projectId and organizationId. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (pages within an Azure DevOps wiki), which is clear enough to distinguish it from create_wiki_page or get_wiki_page. However, it does not explicitly differentiate itself from the nearby search_wiki or get_wikis siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no mention of alternatives such as search_wiki for filtered lookups or get_wiki_page for a single page. The agent must infer the routing decision from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_work_itemsC
List work items in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum number of work items to return | |
| skip | No | Number of work items to skip | |
| wiql | No | Work Item Query Language (WIQL) query | |
| fields | No | List of additional fields to include in the response beyond the defaults (System.Id, System.Title, System.State, System.AssignedTo). Use full field reference names, e.g. "Microsoft.VSTS.Scheduling.StoryPoints", "System.IterationPath", "System.AreaPath". | |
| teamId | No | The ID of the team | |
| queryId | No | ID of a saved work item query | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It does not state that this is a read-only operation, does not mention pagination via top/skip, does not explain WIQL behavior or default project/organization handling, and does not describe response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, for an 8-parameter listing tool with no output schema, it is too minimal to be considered appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 8 parameters, the description is not complete enough for correct invocation. It omits pagination semantics, query modes (WIQL vs saved query), default project/organization behavior, and what fields are returned by default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear parameter descriptions for top, skip, wiql, fields, teamId, queryId, projectId, and organizationId. The tool description adds no parameter meaning beyond restating that work items are in a project, so the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('work items') scoped to a project. It does not distinguish itself from sibling tools such as search_work_items, but the basic purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus search_work_items or other work-item tools. The only usage hint is the implicit project scope from the phrase 'in a project'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_work_item_linkC
Add or remove links between work items
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment explaining the link | |
| operation | Yes | The operation to perform on the link | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| relationType | Yes | The reference name of the relation type (e.g., "System.LinkTypes.Hierarchy-Forward") | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| newRelationType | No | The new relation type to use when updating a link | |
| sourceWorkItemId | Yes | The ID of the source work item | |
| targetWorkItemId | Yes | The ID of the target work item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure, but it only states the basic function. It does not mention side effects, permission requirements, or what happens when links already exist, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, but it lacks structure and fails to convey important details. It is not overly verbose, but it could be more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, multiple operations, no output schema), the description is insufficient. It does not explain the nature of links, relation types, or return values, leaving the agent underinformed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full description coverage (100%), so the tool description does not need to elaborate on parameters. It adds no additional meaning beyond the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds or removes links between work items, which aligns with its name and distinguishes it from sibling tools that handle work items directly. However, it omits the 'update' operation that is available in the schema, creating a minor inconsistency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like update_work_item or other link-related operations. The description does not mention prerequisites, context, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_timelineC
Retrieve the timeline of stages and jobs for a pipeline run, to reduce the amount of data returned, you can filter by state and result
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run identifier | |
| state | No | Optional state filter (single value or array) applied to returned timeline records | |
| result | No | Optional result filter (single value or array) applied to returned timeline records | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| pipelineId | No | Optional pipeline numeric ID for reference only | |
| timelineId | No | Optional timeline identifier to select a specific timeline record |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Retrieve' implies a read, and the filtering note hints at payload size, but nothing is said about permissions, pagination, response shape, or whether it is safe/non-mutating. For a 6-parameter tool this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action first. The trailing clause about reducing data is slightly awkwardly joined with a comma splice, but overall it is compact with little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with fully documented parameters and no output schema, the description covers the core purpose and the main filter rationale. It leaves out the routing guidance against sibling pipeline tools and any behavioral detail, so it is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents runId, state, result, projectId, pipelineId, and timelineId. The description restates the state/result filters but adds no format or defaulting detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('timeline of stages and jobs for a pipeline run'), which is distinct from siblings like get_pipeline_run or list_pipeline_runs. However it does not explicitly contrast itself with those siblings, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage hint is that filtering by state and result reduces returned data. There is no guidance on when to prefer this over get_pipeline_run, list_pipeline_runs, or get_pipeline_log, and no prerequisites such as needing a runId from a prior call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeC
Search for code across repositories in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| projectId | No | The ID or name of the project to search in (Default: MyProject). If not provided, the default project will be used. | |
| searchText | Yes | The text to search for | |
| includeContent | Yes | Whether to include full file content in results (default: true) | |
| includeSnippet | Yes | Whether to include code snippets in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, but it only says 'Search for code.' It does not disclose that this is a read-only operation, how pagination works, whether results include content or snippets by default, or any permission or rate-limit context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise and structurally sound, though it may be too terse for an 8-parameter tool with nested filters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with a nested filters object, no output schema, and no annotations, the description is incomplete. It omits return format, pagination behavior, filter capabilities, and default project/organization behavior, leaving the agent without important context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameter meanings are already documented in the input schema. The description adds no parameter-level detail beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), resource ('code'), and scope ('across repositories in a project'), so the agent knows this is a code search tool. It does not explicitly distinguish itself from sibling search tools like search_wiki or search_work_items, but the resource 'code' makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as search_wiki or search_work_items, nor any prerequisites or exclusions. Usage is only implied by the word 'Search'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wikiC
Search for content across wiki pages in a project
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| projectId | No | The ID or name of the project to search in. If omitted, the search runs across the organization when supported. | |
| searchText | Yes | The text to search for in wikis | |
| includeFacets | Yes | Whether to include faceting in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals nothing about pagination behavior (despite top/skip parameters), result ordering, relevance, authentication requirements, or any other operational trait beyond the basic search action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It efficiently conveys the core action and scope without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, nested filters, no output schema, and no annotations, the description is too thin. It does not mention that projectId is optional (allowing organization-wide search) or that pagination and faceting are available, leaving the agent to rely entirely on the schema for critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no parameter-level meaning, which is acceptable given the high coverage, but it does not compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('wiki pages'), and specifies scope ('in a project'), making it clear what the tool does. It implicitly distinguishes from siblings like search_code and search_work_items by specifying 'wiki pages', but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_wiki_pages or get_wiki_page, nor does it mention any prerequisites or conditions. It only states what the tool does, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_work_itemsC
Search for work items across projects in Azure DevOps
| Name | Required | Description | Default |
|---|---|---|---|
| top | Yes | Number of results to return (default: 100, max: 1000) | |
| skip | Yes | Number of results to skip for pagination (default: 0) | |
| filters | No | Optional filters to narrow search results | |
| orderBy | No | Options for sorting search results | |
| projectId | No | The ID or name of the project to search in. If omitted, the search runs across the organization when supported. | |
| searchText | Yes | The text to search for in work items | |
| includeFacets | Yes | Whether to include faceting in results (default: true) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discharges almost none of it. It does not disclose whether search is full-text or field-scoped, pagination behavior, authentication requirements, result limits, or how the facets flag changes output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though for a task with 8 parameters and nested filter objects it is arguably under-specified rather than optimally sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, nested objects, a required field set, and no output schema or annotations, one sentence is insufficient. An agent gets no information about result shape, facets output, pagination interaction, or when this differs from list_work_items.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed per-parameter descriptions (including nested filters, orderBy, and top/skip semantics), so the schema does the heavy lifting. The description adds no parameter meaning beyond 'across projects', which only loosely gestures at projectId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (work items) with a scope qualifier (across projects in Azure DevOps). It is distinguishable from list_work_items by the search framing, though it never explicitly differentiates itself from that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use search_work_items versus list_work_items or search_code. The word 'across projects' hints at scope, but no conditions, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_pipelineC
Trigger a pipeline run
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | The branch to run the pipeline on (e.g., "main", "feature/my-branch"). If left empty, the default branch will be used | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| variables | No | Variables to pass to the pipeline run | |
| pipelineId | Yes | The numeric ID of the pipeline to trigger | |
| stagesToSkip | No | Stages to skip in the pipeline run | |
| templateParameters | No | Parameters for template-based pipelines |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states only the action and discloses nothing about side effects, permissions, asynchronous behavior, output, or effects on existing runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The four-word phrase is front-loaded and free of filler, but it is too small for a six-parameter mutation with nested objects and no annotations. The size does not match the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with six parameters, nested variables/templateParameters, no annotations, and no output schema, the description omits usage criteria and behavioral context. The rich schema covers parameters but not when/why to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters in detail. The description adds no parameter meaning beyond 'pipeline run' and is not expected to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Trigger') and resource ('pipeline run'), so the core operation is clear. It does not differentiate from sibling tools like list_pipelines/get_pipeline or state scope, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, no prerequisites or exclusions. An agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_requestB
Update an existing pull request with new properties, manage reviewers and work items, and add or remove tags
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The updated title of the pull request | |
| status | No | The updated status of the pull request | |
| addTags | No | List of tags to add to the pull request | |
| isDraft | No | Whether the pull request should be marked as a draft (true) or unmarked (false) | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| removeTags | No | List of tags to remove from the pull request | |
| description | No | The updated description of the pull request | |
| addReviewers | No | List of reviewer email addresses or IDs to add | |
| repositoryId | Yes | The ID or name of the repository | |
| pullRequestId | Yes | The ID of the pull request to update | |
| addWorkItemIds | No | List of work item IDs to link to the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) | |
| removeReviewers | No | List of reviewer email addresses or IDs to remove | |
| removeWorkItemIds | No | List of work item IDs to unlink from the pull request | |
| additionalProperties | No | Additional properties to update on the pull request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It reveals that this is a mutation and which categories of fields change, but says nothing about side effects (reviewer notifications), whether omitted fields are preserved, reversibility of status changes, or permission requirements for a 15-parameter mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the core verb and resource front-loaded and no filler. The trailing list is dense but each clause corresponds to actual parameter groups, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation with no annotations and no output schema, the description covers the operation categories but leaves the behavior side thin. It does not need to explain return values (no output schema), yet prerequisites, side effects, and partial-update semantics remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema and the description need only add meaning beyond it. The description groups the parameters into reviewer/work-item/tag operations, which is mild organizational value, but adds no format, default, or constraint detail beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing pull request') and enumerates the three mutation families: properties, reviewers/work items, and tags. It's clear and distinguishable from create_pull_request by 'existing', though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'existing pull request' but there is no explicit when-to-use guidance, no preconditions (e.g. required permissions or repo state), and no reference to the alternative create_pull_request tool for the non-existing case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_request_thread_statusA
Update the status of a comment thread in a pull request (repositoryId optional; derived from pullRequestId when omitted)
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | The status to set on the thread | |
| threadId | Yes | The ID of the thread to update | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| repositoryId | No | The ID or name of the repository (optional; derived from pullRequestId when omitted) | |
| pullRequestId | Yes | The ID of the pull request | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It indicates a mutation action ('Update') but does not disclose effects like notifications, permission requirements, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence of 20 words, front-loading the key action and resource without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description lacks context on status meanings, transition rules, and return values, leaving the agent with incomplete information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds value beyond the schema by explaining that repositoryId is optional and derived from pullRequestId, enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and clearly identifies the resource ('comment thread in a pull request'), distinguishing it from sibling tools such as add_pull_request_comment or update_pull_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by noting that repositoryId is optional and derived from pullRequestId, but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wiki_pageC
Update content of a wiki page
| Name | Required | Description | Default |
|---|---|---|---|
| wikiId | Yes | The ID or name of the wiki | |
| comment | No | Optional comment for the update | |
| content | Yes | The new content for the wiki page in markdown format | |
| pagePath | Yes | Path of the wiki page to update | |
| projectId | No | The ID or name of the project (Default: MyProject) | |
| organizationId | No | The ID or name of the organization (Default: mycompany) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutation tool. It does not disclose whether the page must already exist, what happens on a path collision, whether updates require permissions, or how the optional comment is used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the resource front-loaded. It is efficient, though the brevity is partly a result of under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and no output schema, the description should explain prerequisites, conflict behavior, and the effect of the optional comment. It omits all of this, leaving the agent with insufficient context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (including wikiId, pagePath, content, and the optional comment/projectId/organizationId) are already documented in the schema. The description adds no syntax, format, or defaults beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Update content of a wiki page'), which is clearly distinguishable from read-oriented siblings like get_wiki_page or search_wiki. It does not, however, differentiate itself from create_wiki_page or list_wiki_pages beyond the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus create_wiki_page or get_wiki_page, and no prerequisites or conditions are stated. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_work_itemC
Update an existing work item
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Overwrite/set the complete set of tags | |
| state | No | The updated state of the work item | |
| title | No | The updated title of the work item | |
| areaPath | No | The updated area path for the work item | |
| priority | No | The updated priority of the work item | |
| tagsToAdd | No | List of tags to append to the work item | |
| assignedTo | No | The email or name of the user to assign the work item to | |
| workItemId | Yes | The ID of the work item to update | |
| description | No | Work item description in HTML format. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. | |
| tagsToRemove | No | List of tags to remove from the work item | |
| iterationPath | No | The updated iteration path for the work item | |
| additionalFields | No | Additional Azure DevOps fields to update by reference name (fields not exposed as named parameters). Example for Bug severity: { "Microsoft.VSTS.Common.Severity": "1 - Critical" } (accepted values: "1 - Critical", "2 - High", "3 - Medium", "4 - Low"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it says nothing beyond the name. It does not state that this is a partial update (only provided fields change), what happens to unspecified fields, permission requirements, or how the tags overwrite/append semantics interact across the three tag parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and has no waste, but it is under-specified rather than efficient. Brevity here reflects a lack of content, not disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with nested objects, no annotations, and no output schema, the description is far too thin. It should at minimum state the partial-update semantics and the resulting side effects, which an agent needs to invoke this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters, including the tag overwrite/append/remove distinction and the additionalFields reference-name convention. The description adds no parameter meaning of its own, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear verb (update) and resource (work item), so the basic action is understandable. However, it offers no differentiation from siblings like create_work_item, get_work_item, or manage_work_item_link, and adds nothing about scope or supported field set beyond the bare name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_work_item or get_work_item, nor any prerequisites or exclusions. The purpose is only inferable from the verb in the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
32 tool updates
v1.0.6- Changed
create_pull_request1 field changed- added
Input schema / properties / additionalProperties / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
create_wiki9 fields changed- removed
Input schema / properties / mappedPath / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / mappedPath / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / repositoryId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / repositoryId / typeAdded value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "name" -]New value: +[ + "name", + "type", + "mappedPath" +]
- Changed
create_wiki_page7 fields changed- removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / pagePath / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / pagePath / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "wikiId", - "content" -]New value: +[ + "wikiId", + "pagePath", + "content" +]
- Changed
create_work_item2 fields changed- changed
Input schema / properties / additionalFields / descriptionPrevious value: -"Additional fields to set on the work item. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags."New value: +"Additional Azure DevOps fields to set by reference name (fields not exposed as named parameters). Example for Bug severity: { \"Microsoft.VSTS.Common.Severity\": \"1 - Critical\" } (accepted values: \"1 - Critical\", \"2 - High\", \"3 - Medium\", \"4 - Low\"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags." - added
Input schema / properties / additionalFields / propertyNamesAdded value: +{ + "type": "string" +}
- Added
create_work_item_attachment - Added
delete_work_item_attachment - Changed
download_pipeline_artifact2 fields changed- added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / runId / maximumAdded value: +9007199254740991
- Changed
get_all_repositories_tree1 field changed- added
Input schema / requiredAdded value: +[ + "depth" +]
- Changed
get_file_content1 field changed- changed
Input schema / requiredPrevious value: -[ - "repositoryId" -]New value: +[ + "repositoryId", + "path" +]
- Changed
get_pipeline2 fields changed- added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / pipelineVersion / maximumAdded value: +9007199254740991
- Changed
get_pipeline_log5 fields changed- added
Input schema / properties / endLine / maximumAdded value: +9007199254740991 - added
Input schema / properties / logId / maximumAdded value: +9007199254740991 - added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / runId / maximumAdded value: +9007199254740991 - added
Input schema / properties / startLine / maximumAdded value: +9007199254740991
- Changed
get_pipeline_run2 fields changed- added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / runId / maximumAdded value: +9007199254740991
- Changed
get_project_details1 field changed- added
Input schema / requiredAdded value: +[ + "includeProcess", + "includeWorkItemTypes", + "includeFields", + "includeTeams", + "expandTeamIdentity" +]
- Changed
get_repository_details1 field changed- changed
Input schema / requiredPrevious value: -[ - "repositoryId" -]New value: +[ + "repositoryId", + "includeStatistics", + "includeRefs" +]
- Changed
get_repository_tree1 field changed- changed
Input schema / requiredPrevious value: -[ - "repositoryId" -]New value: +[ + "repositoryId", + "path", + "depth" +]
- Changed
get_wiki_page4 fields changed- removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +]
- Changed
get_wikis4 fields changed- removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +]
- Added
get_work_item_attachment - Changed
get_work_item_comments1 field changed- changed
Input schema / requiredPrevious value: -[ - "workItemId" -]New value: +[ + "workItemId", + "expand", + "order" +]
- Changed
list_commits1 field changed- added
Input schema / properties / skip / maximumAdded value: +9007199254740991
- Changed
list_pipeline_runs4 fields changed- added
Input schema / properties / createdFrom / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" - added
Input schema / properties / createdTo / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" - added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - changed
Input schema / requiredPrevious value: -[ - "pipelineId" -]New value: +[ + "pipelineId", + "top", + "orderBy" +]
- Changed
list_pull_requests1 field changed- changed
Input schema / requiredPrevious value: -[ - "repositoryId" -]New value: +[ + "repositoryId", + "top" +]
- Changed
list_wiki_pages4 fields changed- removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +]
- Changed
list_work_items1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "description": "List of additional fields to include in the response beyond the defaults (System.Id, System.Title, System.State, System.AssignedTo). Use full field reference names, e.g. \"Microsoft.VSTS.Scheduling.StoryPoints\", \"System.IterationPath\", \"System.AreaPath\".", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
pipeline_timeline2 fields changed- added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / runId / maximumAdded value: +9007199254740991
- Changed
search_code2 fields changed- added
Input schema / properties / skip / maximumAdded value: +9007199254740991 - changed
Input schema / requiredPrevious value: -[ - "searchText" -]New value: +[ + "searchText", + "top", + "skip", + "includeSnippet", + "includeContent" +]
- Changed
search_wiki2 fields changed- added
Input schema / properties / skip / maximumAdded value: +9007199254740991 - changed
Input schema / requiredPrevious value: -[ - "searchText" -]New value: +[ + "searchText", + "top", + "skip", + "includeFacets" +]
- Changed
search_work_items2 fields changed- added
Input schema / properties / skip / maximumAdded value: +9007199254740991 - changed
Input schema / requiredPrevious value: -[ - "searchText" -]New value: +[ + "searchText", + "top", + "skip", + "includeFacets" +]
- Changed
trigger_pipeline3 fields changed- added
Input schema / properties / pipelineId / maximumAdded value: +9007199254740991 - added
Input schema / properties / templateParameters / propertyNamesAdded value: +{ + "type": "string" +} - added
Input schema / properties / variables / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
update_pull_request1 field changed- added
Input schema / properties / additionalProperties / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
update_wiki_page6 fields changed- removed
Input schema / properties / comment / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / comment / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / organizationId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / organizationId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "anyOf": [ - { - "not": {} - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +[ + "string", + "null" +]
- Changed
update_work_item2 fields changed- changed
Input schema / properties / additionalFields / descriptionPrevious value: -"Additional fields to update on the work item. Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags."New value: +"Additional Azure DevOps fields to update by reference name (fields not exposed as named parameters). Example for Bug severity: { \"Microsoft.VSTS.Common.Severity\": \"1 - Critical\" } (accepted values: \"1 - Critical\", \"2 - High\", \"3 - Medium\", \"4 - Low\"). Multi-line text fields (i.e., System.History, AcceptanceCriteria, etc.) must use HTML format. Do not use CDATA tags." - added
Input schema / properties / additionalFields / propertyNamesAdded value: +{ + "type": "string" +}
4 tool updates
- Changed
create_work_item1 field changed- added
Input schema / properties / tagsAdded value: +{ + "description": "Tags to add to the work item", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
get_work_item_comments - Added
update_pull_request_thread_status - Changed
update_work_item3 fields changed- added
Input schema / properties / tagsAdded value: +{ + "description": "Overwrite/set the complete set of tags", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / tagsToAddAdded value: +{ + "description": "List of tags to append to the work item", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / tagsToRemoveAdded value: +{ + "description": "List of tags to remove from the work item", + "items": { + "type": "string" + }, + "type": "array" +}
TDQS
Scored across 49 tools
Many tools are distinct by resource and action (repositories, work items, PRs, wikis, pipelines), but several overlapping pairs create ambiguity: get_project_details vs get_project, get_repository_details vs get_repository, get_file_content vs tree tools, and create_wiki_page (which also updates) vs update_wiki_page. Descriptions help clarify, but the boundaries are not consistently sharp.
Most tools follow a predictable snake_case verb_noun pattern (list_repositories, get_work_item, create_pull_request, update_wiki_page). Minor deviations exist, such as pipeline_timeline lacking a verb and get_wikis vs list_wiki_pages, but the overall convention is readable and mostly consistent.
49 tools is excessive for a single MCP server, far beyond the 3-15 well-scoped range and even beyond the 16-25 heavy range. Azure DevOps is broad, but this surface would benefit from consolidation or grouping.
The server covers many core read/write operations across repositories, work items, PRs, wikis, and pipelines. However, notable lifecycle gaps remain: no delete_work_item, no PR merge/abandon/complete operation, no repository create/delete, no wiki page delete, and no pipeline cancel/update.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
A Model Context Protocol server for Wix AI tools
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThis server provides a convenient API for interacting with Azure DevOps services, enabling AI assistants and other tools to manage work items, code repositories, boards, sprints, and more. Built with the Model Context Protocol, it provides a standardized interface for communicating with Azure DevOps44 npm60MIT
- -licenseNot gradedqualityNot gradedmaintenanceA reference server implementation for the Model Context Protocol that enables AI assistants to interact with Azure DevOps resources and perform operations such as project management, work item tracking, repository operations, and code search programmatically.7-
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with Azure DevOps services, allowing users to query work items with plans to support creating/updating items, managing pipelines, handling pull requests, and administering sprints and branch policies.2149 PyPI79MIT
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with Azure DevOps services, providing capabilities for work item management, project management, and team collaboration through natural language.21-