Yandex Tracker MCP
The Yandex Tracker MCP Server enables AI assistants to interact with Yandex Tracker APIs for comprehensive project management:
Queue Management: Access queues and their local fields, tags, and versions
User Management: Retrieve user account information and organizational details
Issue Operations: Get detailed issue information, comments, links, worklogs, and attachments
Search Capabilities: Use Yandex Tracker Query Language for advanced filtering and counting
Field Management: Access global fields, statuses, and issue types
Performance Optimization: Optional Redis caching for improved response times
Security Features: Configurable queue access restrictions and secure token handling
Integration Support: Compatible with various AI clients, Yandex Cloud and Yandex 360 organizations
Allows GitHub Copilot to connect to Yandex Tracker via VS Code integration, with support for both workspace and global configurations.
Optional integration with Redis for performance caching, improving response times when retrieving Yandex Tracker data.
Provides comprehensive access to Yandex Tracker APIs, enabling management of issues, queues, comments, worklogs, and search functionality. Supports both Yandex Cloud and Yandex 360 organizations with features for queue management, user information retrieval, issue operations, field management, and advanced query language capabilities.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Yandex Tracker MCPshow me open issues in the backend queue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Yandex Tracker MCP Server
mcp-name: io.github.aikts/yandex-tracker-mcp
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with Yandex Tracker APIs. This server provides secure, authenticated access to Yandex Tracker issues, queues, comments, worklogs, and search functionality with optional Redis caching for improved performance.
Documentation in Russian is available here / Документация на русском языке доступна здесь.
Features
Complete Queue Management: List and access all available Yandex Tracker queues with pagination support, tag retrieval, and detailed metadata
Projects, Portfolios and Goals: Dedicated read and write tools with explicit schemas for each entity type in the Tracker "entities" API (opt-in via
TRACKER_ENTITIES_ENABLED)User Management: Retrieve user account information, including login details, email addresses, license status, and organizational data
Full Issue Lifecycle: Create, read, update, and manage issues with support for custom fields, attachments, and workflow transitions
Status Workflow Management: Execute status transitions, close issues with resolutions, and navigate complex workflows
Field Management: Access global fields, queue-specific local fields, statuses, issue types, priorities, and resolutions
Boards and Sprints: List agile boards and their sprints to find sprint IDs for issue planning
Advanced Query Language: Full Yandex Tracker Query Language support with complex filtering, sorting, and date functions
Performance Caching: Optional Redis caching layer for improved response times
Security Controls: Configurable queue access restrictions and secure token handling
Multiple Transport Options: Support for stdio, SSE (deprecated), and HTTP transports for flexible integration
OAuth 2.0 Authentication: Dynamic token-based authentication with automatic refresh support as an alternative to static API tokens
Organization Support: Compatible with both standard and cloud organization IDs
Organization ID Configuration
Choose one of the following based on your Yandex organization type:
Yandex Cloud Organization: Use
TRACKER_CLOUD_ORG_IDenv var later for Yandex Cloud-managed organizationsYandex 360 Organization: Use
TRACKER_ORG_IDenv var later for Yandex 360 organizations
You can find your organization ID in the Yandex Tracker URL or organization settings.
Related MCP server: YaTracker Connector
MCP Client Configuration
Installing extension in Claude Desktop
Yandex Tracker MCP Server can be one-click installed in Claude Desktop as and extension.
Installation
Download the
*.mcpbfile from GitHub Releases.Double-click the downloaded file to install it in Claude Desktop.

Provide your Yandex Tracker OAuth token when prompted.

Make sure extension is enabled - now you may use this MCP Server.
Manual installation
Prerequisites
uv installed globally
Valid Yandex Tracker API token with appropriate permissions
The following sections show how to configure the MCP server for different AI clients. You can use either uvx yandex-tracker-mcp@latest or the Docker image ghcr.io/aikts/yandex-tracker-mcp:latest. Both require these environment variables:
Authentication (one of the following):
TRACKER_TOKEN- Your Yandex Tracker OAuth tokenTRACKER_IAM_TOKEN- Your IAM tokenTRACKER_SA_KEY_ID,TRACKER_SA_SERVICE_ACCOUNT_ID,TRACKER_SA_PRIVATE_KEY- Service account credentials
Organization - exactly one of the following:
TRACKER_CLOUD_ORG_ID- Your Yandex Cloud organization IDTRACKER_ORG_ID- Your Yandex 360 organization ID
Set one of the two. Setting both makes every Tracker call fail with
Only one of org_id or cloud_org_id should be provided.The examples below useTRACKER_CLOUD_ORG_ID; on Yandex 360, replace that key withTRACKER_ORG_ID.
Configuration file path:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Using uvx:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using uvx:
claude mcp add yandex-tracker uvx yandex-tracker-mcp@latest \
-e TRACKER_TOKEN=your_tracker_token_here \
-e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here \
-e TRANSPORT=stdioUsing Docker:
claude mcp add yandex-tracker docker "run --rm -i -e TRACKER_TOKEN=your_tracker_token_here -e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here -e TRANSPORT=stdio ghcr.io/aikts/yandex-tracker-mcp:latest"Configuration file path:
Project-specific:
.cursor/mcp.jsonin your project directoryGlobal:
~/.cursor/mcp.json
Using uvx:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Configuration file path:
~/.codeium/windsurf/mcp_config.json
Access via: Windsurf Settings → Cascade tab → Model Context Protocol (MCP) Servers → "View raw config"
Using uvx:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Configuration file path:
~/.config/zed/settings.json
Access via: Cmd+, (macOS) or Ctrl+, (Linux/Windows) or command palette: "zed: open settings"
Note: Requires Zed Preview version for MCP support.
Using uvx:
{
"context_servers": {
"yandex-tracker": {
"source": "custom",
"command": {
"path": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
}Using Docker:
{
"context_servers": {
"yandex-tracker": {
"source": "custom",
"command": {
"path": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}
}Configuration file path:
Workspace:
.vscode/mcp.jsonin your project directoryGlobal: VS Code
settings.json
Option 1: Workspace Configuration (Recommended for security)
Create .vscode/mcp.json:
Using uvx:
{
"inputs": [
{
"type": "promptString",
"id": "tracker-token",
"description": "Yandex Tracker Token",
"password": true
},
{
"type": "promptString",
"id": "cloud-org-id",
"description": "Yandex Cloud Organization ID"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRANSPORT": "stdio"
}
}
}
}Using Docker:
{
"inputs": [
{
"type": "promptString",
"id": "tracker-token",
"description": "Yandex Tracker Token",
"password": true
},
{
"type": "promptString",
"id": "cloud-org-id",
"description": "Yandex Cloud Organization ID"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRANSPORT": "stdio"
}
}
}
}Option 2: Global Configuration
Add to VS Code settings.json:
Using uvx:
{
"github.copilot.chat.mcp.servers": {
"yandex-tracker": {
"type": "stdio",
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using Docker:
{
"github.copilot.chat.mcp.servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}For other MCP-compatible clients, use the standard MCP server configuration format:
Using uvx:
{
"mcpServers": {
"yandex-tracker": {
"command": "uvx",
"args": ["yandex-tracker-mcp@latest"],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "your_tracker_token_here",
"TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here"
}
}
}
}Important Notes:
Replace placeholder values with your actual credentials
Restart your AI client after configuration changes
Ensure
uvxis installed and available in your system PATHFor production use, consider using environment variables instead of hardcoding tokens
Available MCP Tools
The server exposes the following tools through the MCP protocol:
Tool | What it does | Key arguments |
| Every queue the token may see; returns |
|
| The tags defined in the queue |
|
| The queue's versions, with dates and status |
|
| The queue's components as full objects, with lead, auto-assign flag and |
|
| Create a version in the queue |
|
| The fields configured on the queue, local ones included; |
|
| Name, description, default type and priority, plus whatever |
|
Read
queue_get_fieldsbeforeissue_create, but it is not the whole registry: system fields such asparentorestimationare settable without appearing there, andget_global_fieldslists every field the organization has.queue_get_metadatawithexpand: ["issueTypesConfig"]is where the resolutions valid for each issue type come from -issue_closeneeds one of them.All of these respect
TRACKER_LIMIT_QUEUES.hits/pagesfromqueues_get_allare reported only for an explicit single page on a server without the allow-list, since the totals count queues the allow-list then hides.
A component is a label grouping a queue's issues by product, process or owner. Its numeric id is what issue_create / issue_update take in components.
Tool | What it does | Key arguments |
| One component with |
|
| Create a component in a queue |
|
| Change name, description, lead or auto-assign flag; omitted fields keep their value, |
|
| Delete a component |
|
TRACKER_LIMIT_QUEUESandTRACKER_READ_ONLY_QUEUESapply through the component's queue:component_updateandcomponent_deleteread the component first to learn it, and a component in a queue outsideTRACKER_LIMIT_QUEUESis reported as not found.
Projects, portfolios and goals are separate Yandex Tracker entities (distinct from queues), exposed through the Tracker "entities" API. Custom (organization-defined) attributes are not modeled and are not returned.
These tools are opt-in. They are registered only when
TRACKER_ENTITIES_ENABLED=true(defaultfalse), because they add a large tool manifest and are not covered by the queue restrictions — see Queue Access Control.
The three entity types share one tool set, so it is listed once - the row says what the tool does, the columns which name to call:
What it does | Projects | Portfolios | Goals |
One entity by id or shortId |
|
|
|
Search by name substring and/or field filters; returns |
|
|
|
A page of comments; returns |
|
|
|
Create, returning the entity |
|
|
|
Change any field creation takes |
|
|
|
Delete it, and with |
|
|
|
Add a comment |
|
|
|
Edit a comment |
|
|
|
Delete a comment |
|
|
|
Append one checklist item |
|
| - |
Edit one checklist item, leaving the fields you omit as they are |
|
| - |
Move a checklist item before another one |
|
| - |
Delete one checklist item |
|
| - |
Edit several existing items by id |
|
| - |
Delete the whole checklist |
|
| - |
Arguments. Reads take
entity_idandfields; the*_findtools takeinput,filter,order_by,order_asc,root_only,page,per_page. Create and update takesummary(required on create),description,lead,team_users,clients,followers,start(goals have none),end,tags,entity_status,parent_entity,team_accessandlinks, and update alsocommentandversion(optimistic locking). Every tool takes the samefieldsselector and returns the entity.linksare added, never replaced, and the API never returns them: an existing link cannot be read back or removed through this server, and a links-only update is rejected rather than reported as a success Tracker silently ignores.Not in the default field set:
checklistItems(the checklist tools return the whole entity, so ask for them to see the result),metricItems, and a goal'skeyResultItems- the last two are read-only. Goals use their ownentityStatusvalues (draft,according_to_plan,at_risk,blocked,achieved,partially_achieved,not_achieved,exceeded,cancelled). Bulk changes are not supported.
Tool | What it does | Key arguments |
| A page of the organization's users; returns |
|
| One user by login or uid |
|
| The user the current token belongs to | - |
| Find users by login, email or real name |
|
users_searchmatches login and email exactly first and falls back to fuzzy name matching (80% similarity, at most the three best matches).The page from
users_get_allis the last one whenpageequalspages.
Tool | What it does | Key arguments |
| Every global field of the organization, with its schema and type | - |
Queue-local fields are not here - queue_get_fields returns them together with the global ones.
Tool | What it does | Key arguments |
| Every issue status the organization defines | - |
| Every issue type, for the | - |
| Every priority, with | - |
| Every resolution, for the | - |
These four are organization-wide. A queue may accept only some of the values they list, and Tracker answers 422 for one it does not accept - queue_get_metadata with expand: ["issueTypesConfig"] says which resolutions each issue type takes.
Tool | What it does | Key arguments |
| The issue templates, with the |
|
| One issue template by id |
|
| The comment templates, with the |
|
| One comment template by id |
|
Templates are read-only helpers. The API cannot create an issue or a comment from a template, so
issue_createandissue_add_commenttake notemplate_id: read the template and pass its values as the write tool's own arguments. Macros such as{{today}}arrive literally.The issue body a template prefills is in
fieldTemplates.description; the template's owndescriptiondescribes the template.queuereturns that queue's templates plus the ones bound to no queue, which are usable everywhere.TRACKER_LIMIT_QUEUESapplies: templates of a restricted queue are omitted from the listings and rejected on direct access, while templates without a queue stay visible.
Tool | What it does | Key arguments |
| The organization's agile boards; returns |
|
| One board with |
|
| The board's columns with the issue statuses that land in each |
|
| The board's sprints with status ( |
|
A board has no queue of its own, so
queueis matched against the board's own filter and misses the boards that filter by something else - a personal board filtering by assignee, for one. To catch those, read a few issues of the queue withissues_findand look at theirboardsfield.Boards belong to the organization, not to a queue, so
TRACKER_LIMIT_QUEUESdoes not filter them: only thequeueargument ofboards_get_allis checked, and what these tools return can name restricted queues.A non-scrum board has no sprints and
board_get_sprintsis rejected for it. The sprintidit returns is whatissue_create/issue_updatetake.
Tool | What it does | Key arguments |
| One issue by key: the full record, the current |
|
| The web URL of an issue |
|
| A page of comments, oldest first; returns |
|
| Add a comment; |
|
| Edit a comment |
|
| Delete a comment |
|
| Links to related, blocking and duplicate issues |
|
| Link two issues |
|
| Remove a link |
|
| The time logged on one or more issues |
|
| Log spent time |
|
| Edit a worklog entry |
|
| Delete a worklog entry |
|
| Attachment metadata |
|
| The checklist, with the item ids the write tools need |
|
| Append items in order, creating the checklist if there is none |
|
| Change one item; the fields you omit keep their value |
|
| Delete one item |
|
| The status transitions available right now, with their ids |
|
| Run a transition, returning the transitions available afterwards |
|
| Find a transition to a done status and run it with a resolution |
|
| Field edits, status transitions, comment changes and fired triggers; returns |
|
| Create an issue, returning it |
|
| Change any of those fields; the ones you omit stay as they are |
|
| Move an issue to another queue, which changes its key ( |
|
versiongoes stale on its own. Queue triggers and automation run right afterissue_createand bump it, so the version it returns is routinely already old. Re-read it withissue_getimmediately beforeissue_update, or omit it to update the latest version unconditionally; a stale one fails with an editing conflict.Reference fields take the same values on create and on update: an object with
idand/orkey, or - fortype,priorityandparent- the bare key or id.componentstake{"id": ...}or{"name": ...}, andcomponents/followersreplace the current list rather than adding to it. Anything without a dedicated argument goes into thefieldsmap, keyed by the fieldidfromqueue_get_fields; an entry there overrides the dedicated argument, and an explicitnullclears the field.Transitions are not guessed.
issue_execute_transitiononly takes ids fromissue_get_transitions, and beforeissue_closeread the issue'stypewithissue_getand the resolutions valid for that type fromqueue_get_metadatawithexpand: ["issueTypesConfig"]- each type has its own set. Where the client supports elicitation,issue_moveasks the user to confirm its flags first, and declining aborts the move.
Every tool here respects TRACKER_LIMIT_QUEUES and TRACKER_READ_ONLY_QUEUES; the ones that write are registered only when TRACKER_READ_ONLY is off.
Tool | What it does | Key arguments |
| Search issues with Yandex Tracker Query Language; returns |
|
| How many issues match a query; returns |
|
fieldsuses Tracker's own spelling (storyPoints, notstory_points) and accepts any field name, a queue's local and the organization's custom fields included - pass the fieldidfromqueue_get_fields. A name Tracker does not know is dropped silently.include_descriptionis ignored whendescriptionis listed infields: naming it there is an explicit request for it.per_pagedefaults to 100 and can be lowered when a page does not fit the context window.
http Transport
The MCP server can also be run in streamable-http mode for web-based integrations or when stdio transport is not suitable.
streamable-http Mode Environment Variables
# Required - Set transport to streamable-http mode
TRANSPORT=streamable-http
# Server Configuration
HOST=0.0.0.0 # Default: 0.0.0.0 (all interfaces)
PORT=8000 # Default: 8000Starting the streamable-http Server
# Basic streamable-http server startup
TRANSPORT=streamable-http uvx yandex-tracker-mcp@latest
# With custom host and port
TRANSPORT=streamable-http \
HOST=localhost \
PORT=9000 \
uvx yandex-tracker-mcp@latest
# With all environment variables
TRANSPORT=streamable-http \
HOST=0.0.0.0 \
PORT=8000 \
TRACKER_TOKEN=your_token \
TRACKER_CLOUD_ORG_ID=your_org_id \
uvx yandex-tracker-mcp@latestYou may skip configuring TRACKER_CLOUD_ORG_ID or TRACKER_ORG_ID if you are using the following format when connecting to MCP Server (example for Claude Code):
claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?cloudOrgId=your_cloud_org_id&"or
claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?orgId=org_id&"You may also skip configuring global TRACKER_TOKEN environment variable if you choose to use OAuth 2.0 authentication (see below).
OAuth 2.0 Authentication
The Yandex Tracker MCP Server supports OAuth 2.0 authentication as a secure alternative to static API tokens. When configured, the server acts as an OAuth provider, facilitating authentication between your MCP client and Yandex OAuth services.
How OAuth Works
The MCP server implements a standard OAuth 2.0 authorization code flow:
Client Registration: Your MCP client registers with the server to obtain client credentials
Authorization: Users are redirected to Yandex OAuth to authenticate
Token Exchange: The server exchanges authorization codes for access tokens
API Access: Clients use bearer tokens for all API requests
Token Refresh: Expired tokens can be refreshed without re-authentication
MCP Client → MCP Server → Yandex OAuth → User Authentication
↑ ↓
└────────── Access Token ←─────────────────┘OAuth Configuration
To enable OAuth authentication, set the following environment variables:
# Enable OAuth mode
OAUTH_ENABLED=true
# Yandex OAuth Application Credentials (required for OAuth)
OAUTH_CLIENT_ID=your_yandex_oauth_app_id
OAUTH_CLIENT_SECRET=your_yandex_oauth_app_secret
# Public URL of your MCP server (required for OAuth callbacks)
MCP_SERVER_PUBLIC_URL=https://your-mcp-server.example.com
# Optional OAuth settings
OAUTH_SERVER_URL=https://oauth.yandex.ru # Default Yandex OAuth server
# When OAuth is enabled, TRACKER_TOKEN becomes optionalOAuth Scopes
With OAUTH_USE_SCOPES=true (the default) the server requests, advertises and requires the Yandex
Tracker scopes tracker:read and tracker:write - or tracker:read alone when
TRACKER_READ_ONLY=true, so a read-only instance never asks the user for write access. Setting
OAUTH_USE_SCOPES=false drops scopes from the flow entirely, which is what Yandex Cloud federation
requires.
Setting Up Yandex OAuth Application
Go to Yandex OAuth and create a new application
Set the callback URL to:
{MCP_SERVER_PUBLIC_URL}/oauth/yandex/callbackRequest the following permissions:
tracker:read- Read permissions for Trackertracker:write- Write permissions for Tracker
Save your Client ID and Client Secret
OAuth vs Static Token Authentication
Feature | OAuth | Static Token |
Security | Dynamic tokens with expiration | Long-lived static tokens |
User Experience | Interactive login flow | One-time configuration |
Token Management | Automatic refresh | Manual rotation |
Access Control | Per-user authentication | Shared token |
Setup Complexity | Requires OAuth app setup | Simple token configuration |
OAuth Mode Limitations
Currently, the OAuth mode requires the MCP server to be publicly accessible for callback URLs
OAuth mode is best suited for interactive clients that support web-based authentication flows
Using OAuth with MCP Clients
When OAuth is enabled, MCP clients will need to:
Support OAuth 2.0 authorization code flow
Handle token refresh when access tokens expire
Store refresh tokens securely for persistent authentication
Note: Not all MCP clients currently support OAuth authentication. Check your client's documentation for OAuth compatibility.
Example configuration for Claude Code:
claude mcp add --transport http yandex-tracker https://your-mcp-server.example.com/mcp/ -s userOAuth Data Storage
The MCP server supports two different storage backends for OAuth data (client registrations, access tokens, refresh tokens, and authorization states):
InMemory Store (Default)
The in-memory store keeps all OAuth data in server memory. This is the default option and requires no additional configuration.
Characteristics:
Persistence: Data is lost when the server restarts
Performance: Very fast access since data is stored in memory
Scalability: Limited to single server instance
Setup: No additional dependencies required
Best for: Development, testing, or single-instance deployments where losing OAuth sessions on restart is acceptable
Configuration:
OAUTH_STORE=memory # Default value, can be omittedRedis Store
The Redis store provides persistent storage for OAuth data using a Redis database. This ensures OAuth sessions survive server restarts and enables multi-instance deployments.
Characteristics:
Persistence: Data persists across server restarts
Performance: Fast access with network overhead
Scalability: Supports multiple server instances sharing the same Redis database
Setup: Requires Redis server installation and configuration
Best for: Production deployments, high availability setups, or when OAuth sessions must persist
Configuration:
# Enable Redis store for OAuth data
OAUTH_STORE=redis
# Redis connection settings (same as used for tools caching)
REDIS_ENDPOINT=localhost # Default: localhost
REDIS_PORT=6379 # Default: 6379
REDIS_DB=0 # Default: 0
REDIS_PASSWORD=your_redis_password # Optional: Redis password
REDIS_POOL_MAX_SIZE=10 # Default: 10Storage Behavior:
Client Information: Stored persistently
OAuth States: Stored with TTL (time-to-live) for security
Authorization Codes: Stored with TTL and automatically cleaned up after use
Access Tokens: Stored with automatic expiration based on token lifetime
Refresh Tokens: Stored persistently until revoked
Key Namespacing: Uses
oauth:*prefixes to avoid conflicts with other Redis data
Token Encryption (Required for Redis Store)
When using Redis store, you must configure encryption to protect OAuth tokens at rest. Token values are encrypted using Fernet (AES-128) and Redis keys use SHA-256 hashes instead of raw tokens, preventing token exposure if Redis is compromised.
Generate an encryption key:
python3 -c "import base64, os; print(base64.b64encode(os.urandom(32)).decode())"Configuration:
# Single encryption key
OAUTH_ENCRYPTION_KEYS=<base64-encoded-32-byte-key>
# Multiple keys for rotation (first encrypts, all decrypt)
OAUTH_ENCRYPTION_KEYS=<new-key>,<old-key>Key rotation allows seamless key updates: add the new key first, wait for old tokens to expire, then remove the old key.
Important Notes:
Both stores use the same Redis connection settings as the tools caching system
When using Redis store, ensure your Redis instance is properly secured and accessible
The
OAUTH_STOREsetting only affects OAuth data storage; tools caching usesTOOLS_CACHE_ENABLEDRedis store uses JSON serialization for better cross-language compatibility and debugging
Authentication
Yandex Tracker MCP Server supports multiple authentication methods with a clear priority order. The server will use the first available authentication method based on this hierarchy:
Authentication Priority Order
Dynamic OAuth Token (highest priority)
When OAuth is enabled and a user authenticates via OAuth flow
Tokens are dynamically obtained and refreshed per user session
Supports both standard Yandex OAuth and Yandex Cloud federative OAuth
Required env vars:
OAUTH_ENABLED=true,OAUTH_CLIENT_ID,OAUTH_CLIENT_SECRET,MCP_SERVER_PUBLIC_URLAdditional vars for federative OAuth:
OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth,OAUTH_TOKEN_TYPE=Bearer,OAUTH_USE_SCOPES=false
Passthrough Bearer OAuth Token
When MCP OAuth middleware does not provide a token, the server can read a Yandex OAuth token from the incoming
Authorization: Bearer <token>headerUseful behind a trusted reverse proxy or gateway that authenticates users, resolves their stored Yandex OAuth token, and injects it per request
The token from MCP OAuth still has priority when OAuth mode is enabled and active
Static OAuth Token
Traditional OAuth token provided via environment variable
Single token used for all requests
Required env var:
TRACKER_TOKEN(your OAuth token)
Static IAM Token
IAM (Identity and Access Management) token for service-to-service authentication
Suitable for automated systems and CI/CD pipelines
Required env var:
TRACKER_IAM_TOKEN(your IAM token)
Dynamic IAM Token (lowest priority)
Automatically retrieved using service account credentials
Token is fetched and refreshed automatically
Required env vars:
TRACKER_SA_KEY_ID,TRACKER_SA_SERVICE_ACCOUNT_ID,TRACKER_SA_PRIVATE_KEY
Authentication Scenarios
Scenario 1: OAuth with Dynamic Tokens (Recommended for Interactive Use)
# Enable OAuth mode
OAUTH_ENABLED=true
OAUTH_CLIENT_ID=your_oauth_app_id
OAUTH_CLIENT_SECRET=your_oauth_app_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDScenario 2: Static OAuth Token (Simple Setup)
# OAuth token
TRACKER_TOKEN=your_oauth_token
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDScenario 3: Passthrough Bearer Token Behind a Reverse Proxy
Use this mode when a trusted gateway handles user authentication, looks up the user's Yandex OAuth token, and forwards the request to the MCP server with that token in the request header:
Authorization: Bearer <user_yandex_oauth_token># Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDThis passthrough token is used only when MCP OAuth middleware has not provided an access token for the request. In OAuth-enabled deployments with an active MCP OAuth session, the MCP OAuth token takes priority.
Scenario 4: Static IAM Token
# IAM token
TRACKER_IAM_TOKEN=your_iam_token
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDScenario 5: Dynamic IAM Token with Service Account
# Service account credentials
TRACKER_SA_KEY_ID=your_key_id
TRACKER_SA_SERVICE_ACCOUNT_ID=your_service_account_id
TRACKER_SA_PRIVATE_KEY=your_private_key
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDScenario 6: Federative OAuth for OIDC Applications (Advanced)
# Enable OAuth with Yandex Cloud federation
OAUTH_ENABLED=true
OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth
OAUTH_TOKEN_TYPE=Bearer
OAUTH_USE_SCOPES=false
OAUTH_CLIENT_ID=your_oidc_client_id
OAUTH_CLIENT_SECRET=your_oidc_client_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # or TRACKER_ORG_IDThis configuration enables authentication through Yandex Cloud OIDC applications, which is required for federated accounts in Yandex Cloud. Federated users authenticate through their organization's identity provider (IdP) and use this OAuth flow to access Yandex Tracker APIs.
Important Notes
The server checks authentication methods in the order listed above
Only one authentication method will be used at a time
For production use, dynamic tokens (OAuth or IAM) are recommended for better security
IAM tokens have a shorter lifetime than OAuth tokens and may need more frequent renewal
When using service accounts, ensure the account has appropriate permissions for Yandex Tracker
Configuration
Environment Variables
# Authentication (use one of the following methods)
# Method 1: OAuth Token
TRACKER_TOKEN=your_yandex_tracker_oauth_token
# Method 2: IAM Token
TRACKER_IAM_TOKEN=your_iam_token
# Method 3: Service Account (for dynamic IAM token)
TRACKER_SA_KEY_ID=your_key_id # Service account key ID
TRACKER_SA_SERVICE_ACCOUNT_ID=your_sa_id # Service account ID
TRACKER_SA_PRIVATE_KEY=your_private_key # Service account private key
# Organization Configuration (set exactly one - setting both is an error)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id # For Yandex Cloud organizations
TRACKER_ORG_ID=your_org_id # For Yandex 360 organizations
# API Configuration (optional)
TRACKER_API_BASE_URL=https://api.tracker.yandex.net # Default: https://api.tracker.yandex.net
TRACKER_API_TIMEOUT=10 # Default: 10 - Per-request timeout in seconds for Tracker API calls
# Security - Restrict access to specific queues (optional)
TRACKER_LIMIT_QUEUES=PROJ1,PROJ2,DEV # Comma-separated queue keys - allow-list of accessible queues
TRACKER_READ_ONLY_QUEUES=PROJ2 # Comma-separated queue keys - allowed for reads but reject writes (per-queue read-only)
TRACKER_ENTITIES_ENABLED=true # Default: false - Register project/portfolio/goal tools (NOT covered by the queue restrictions above)
# Server Configuration
HOST=0.0.0.0 # Default: 0.0.0.0
PORT=8000 # Default: 8000
TRANSPORT=stdio # Options: stdio, streamable-http, sse
# Redis connection settings (used for caching and OAuth store)
REDIS_ENDPOINT=localhost # Default: localhost
REDIS_PORT=6379 # Default: 6379
REDIS_DB=0 # Default: 0
REDIS_PASSWORD=your_redis_password # Optional: Redis password
REDIS_POOL_MAX_SIZE=10 # Default: 10
# Tools caching configuration (optional)
TOOLS_CACHE_ENABLED=true # Default: false
TOOLS_CACHE_REDIS_TTL=3600 # Default: 3600 seconds (1 hour)
# OAuth 2.0 Authentication (optional)
OAUTH_ENABLED=true # Default: false
OAUTH_STORE=redis # Options: memory, redis (default: memory)
OAUTH_SERVER_URL=https://oauth.yandex.ru # Default: https://oauth.yandex.ru (use https://auth.yandex.cloud/oauth for federation)
OAUTH_TOKEN_TYPE=<Bearer|OAuth|<empty>> # Default: <empty> (required to be Bearer for Yandex Cloud federation)
OAUTH_USE_SCOPES=true # Default: true (set to false for Yandex Cloud federation)
OAUTH_CLIENT_ID=your_oauth_client_id # Required when OAuth enabled
OAUTH_CLIENT_SECRET=your_oauth_secret # Required when OAuth enabled
MCP_SERVER_PUBLIC_URL=https://your.server.com # Required when OAuth enabled
TRACKER_READ_ONLY=true # Default: false - Disable all write tools for the whole instanceQueue Access Control
Access to queues can be scoped at three levels, from coarse to fine-grained:
TRACKER_LIMIT_QUEUES— allow-list of queue keys. Queues outside the list are treated as not found / not allowed for both reads and writes. Keys are matched ignoring case, here and inTRACKER_READ_ONLY_QUEUES, sodevandDEVname the same queue. The one exception is the board tools: a board belongs to the organization rather than to a queue, so they are not filtered and can name a restricted queue in a board's settings.TRACKER_READ_ONLY— whentrue, all write tools are unregistered, so the whole instance is read-only.TRACKER_READ_ONLY_QUEUES— per-queue read-only allow-list. Write tools stay registered, but any mutating call (create/update/move/comment/worklog/link, queue version creation) targeting a listed queue is rejected, while reads keep working. Queues not listed here remain read-write.
Project/portfolio/goal tools are outside this model. A project, portfolio or goal isn't reliably mappable to a single queue, so none of the three settings above constrain them — neither the read tools (
project_get,project_find,*_get_comments, …) nor the write tools (including comment and checklist tools). Enabling them grants org-wide access to those entities for anyone who can reach the server. For this reason they are opt-in: they are registered only whenTRACKER_ENTITIES_ENABLED=true(defaultfalse), which also keeps the tool manifest small for deployments that don't need them.TRACKER_READ_ONLYstill applies: it unregisters entity write tools along with all other write tools.
This lets a single instance be read-write on some queues and read-only on
others at the same time — e.g. TRACKER_LIMIT_QUEUES=DEV,MGMT together with
TRACKER_READ_ONLY_QUEUES=MGMT gives full access to DEV and read-only
visibility into MGMT. This is especially useful for a shared MCP gateway where
end users reach Tracker only through the server and never hold the raw token
themselves.
These checks are in-process guardrails. For clients that hold the raw Tracker token directly, real limits should additionally be enforced on the token itself.
Docker Deployment
Using Pre-built Image (Recommended)
The image defaults to TRANSPORT=stdio, which talks over the container's stdin/stdout and
opens no port. Set TRANSPORT=streamable-http for the examples below, where the server is
reached over HTTP; for a stdio client, run the container with -i and no -p instead (see
the MCP Client Configuration examples).
# Using environment file (it must set TRANSPORT=streamable-http)
docker run --env-file .env -p 8000:8000 ghcr.io/aikts/yandex-tracker-mcp:latest
# With inline environment variables
docker run -e TRACKER_TOKEN=your_token \
-e TRACKER_CLOUD_ORG_ID=your_org_id \
-e TRANSPORT=streamable-http \
-p 8000:8000 \
ghcr.io/aikts/yandex-tracker-mcp:latestBuilding the Image Locally
docker build -t yandex-tracker-mcp .Docker Compose
Using pre-built image:
services:
mcp-tracker:
image: ghcr.io/aikts/yandex-tracker-mcp:latest
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}
- TRANSPORT=streamable-httpBuilding locally:
services:
mcp-tracker:
build: .
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}
- TRANSPORT=streamable-httpDevelopment Setup
# Clone and setup
git clone https://github.com/aikts/yandex-tracker-mcp
cd yandex-tracker-mcp
# Install development dependencies
uv sync --dev
# Formatting and static checking
taskLicense
This project is licensed under the terms specified in the LICENSE file.
Support
For issues and questions:
Review Yandex Tracker API documentation
Submit issues at https://github.com/aikts/yandex-tracker-mcp/issues
Available Tools
55 toolsboard_getGet BoardARead-only
Get a single Yandex Tracker agile board (in russian - 'доска') with its settings, columns, the field issues are estimated by and the working calendar. autoFilterSettings is the board's own filter and tells which issues it collects - read it to learn which queue a board is about.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to include in the response; omit to get all. id and name are usually enough while searching - read the one board you need in full with `board_get`. | |
| board_id | Yes | Agile board identifier, as returned by the `boards_get_all` tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Board identifier |
| name | No | |
| columns | No | |
| country | No | Country whose working calendar the board uses |
| version | No | |
| calendar | No | Working calendar used to count working days in a sprint |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| estimateBy | No | Field the board estimates issues by, e.g. 'storyPoints' |
| useRanking | No | Whether issues are ordered by manual ranking |
| autoFilterSettings | No | Which issues the board picks up automatically. This is the board's filter - read it to learn which queue the board is about. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety; the description adds useful behavioral context by explaining that autoFilterSettings is the board's own filter that shows which issues the board collects. It also discloses the board subcomponents returned, which helps set expectations without contradicting the annotation.
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 dense sentences with no filler; the core action and scope are front-loaded, and the second sentence adds value by explaining a non-obvious field. The parenthetical Russian term is a small, purposeful addition for localization.
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 a read-only annotation, an output schema, fully described parameters, and a clear purpose, the description is mostly sufficient. It could be more complete by explicitly routing to boards_get_all or board_get_columns when only IDs or columns are needed, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters already have meaningful descriptions, so the tool description adds little beyond schema. The description's focus on board contents does not explain the fields/board_id parameters further, keeping this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Get a single Yandex Tracker agile board') and enumerates what is included: settings, columns, estimation field, and working calendar. It also defines autoFilterSettings, which differentiates this tool from listing tools like boards_get_all and narrower tools like board_get_columns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case: read autoFilterSettings to learn which queue a board is about, and it implies single-board retrieval rather than listing. It does not explicitly name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_get_columnsGet Board ColumnsARead-only
Get the columns of a Yandex Tracker agile board with the issue statuses mapped onto each - use it to see which status an issue needs to show up in a given column. Richer than the columns in boards_get_all / board_get, which carry no statuses.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | Agile board identifier, as returned by the `boards_get_all` tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnlyHint annotation by clarifying that results include status mappings and are richer than simpler board column endpoints. It does not mention auth or rate limits, but for a simple read-only lookup with a readOnlyHint, the safety profile is already clear.
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 dense sentences with no filler: the action is first, then the use case, then the comparison to sibling tools. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one fully documented parameter, a readOnlyHint annotation, and an output schema, so the description does not need to explain return values. The provided use case and sibling differentiation make the description complete for an agent to select and call the tool 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%: the only parameter, `board_id`, is described as an agile board identifier returned by `boards_get_all`. The tool description adds the Yandex Tracker context but does not need to compensate for missing parameter documentation because the schema already covers it.
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: getting the columns of a Yandex Tracker agile board, including the statuses mapped to each column. It also explicitly distinguishes this tool from `boards_get_all` and `board_get`, so an agent can tell them apart without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case: see which status an issue needs to show up in a given column. It also names alternatives and explains why this tool is preferable when status mappings matter, since sibling board endpoints carry columns without statuses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_get_sprintsGet Board SprintsARead-only
Get all sprints (in russian - 'спринты') of a specific Yandex Tracker agile board. The currently running sprint is the one with status 'in_progress'. Use the returned sprint id to put an issue into a sprint with the issue_create or issue_update tools.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to include in the response; omit to get all. id, name and status are usually enough. | |
| board_id | Yes | Agile board identifier, as returned by the `boards_get_all` tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds valuable behavioral context beyond that: it explains how to identify the currently running sprint ('status in_progress') and how the returned sprint id should be used downstream. This helps the agent understand the data semantics without contradicting the read-only annotation.
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 with no filler. The core action is front-loaded, followed by a useful status clarification and a concrete downstream instruction. 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 read-only list operation with a complete input schema and an output schema present, the description covers what an agent needs: how to find the board, what the status field means, which fields are typically sufficient, and how to use the result. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds meaningful context beyond the schema by explaining the status semantics for the returned sprints and clarifying the practical use of the id field, which is more useful than the bare field names.
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 identifies a precise action and resource: 'Get all sprints' of 'a specific Yandex Tracker agile board.' It also clarifies that the running sprint is identifiable by status 'in_progress', which further distinguishes the tool's purpose from board-level tools like board_get or boards_get_all.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool—when sprint data for a specific board is needed—and explicitly connects the output to downstream issue creation/update tools: 'Use the returned sprint id to put an issue into a sprint with the issue_create or issue_update tools.' It does not explicitly discuss exclusions or alternatives, but no direct alternative for retrieving sprints appears among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
boards_get_allGet All BoardsARead-only
Get the agile boards (in russian - 'доски') of the organization; pass queue for the boards collecting issues of that queue. Matching is done on the board's own filter, so boards filtering by something else are missed - read a few issues with issues_find and look at their boards field for those.
| Name | Required | Description | Default |
|---|---|---|---|
| queue | No | Optional queue key (Project ID) to scope the boards to, like 'SOMEPROJECT'. A board has no queue field - it is matched by the queue in its own auto-filter, so boards whose filter names no queue are left out when this is set. | |
| cursor | No | Cursor for the next page: the `next_cursor` value returned by the previous call, which is the id of the last board it returned. Leave empty for the first page. | |
| fields | No | Fields to include in the response; omit to get all. id and name are usually enough while searching - read the one board you need in full with `board_get`. | |
| per_page | No | The number of items per page for cursor-paginated endpoints. May be decreased if results exceed the context window. |
Output Schema
| Name | Required | Description |
|---|---|---|
| boards | Yes | |
| next_cursor | No | Id of the last board on this page, to be passed back as `cursor` for the next one. Null when this was the last page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral nuance: matching relies on each board's own filter, so boards filtering by other criteria will be missed. This goes beyond the schema and helps set expectations.
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 with no filler. The main action comes first, followed by the key parameter guidance, then an important limitation and workaround. Every clause 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 read-only listing tool with a rich schema and output schema, the description covers purpose, usage, a key behavioral caveat, and an alternative route. Pagination and field selection are already documented in the input schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining the queue parameter's behavior (matching against the board's filter) and by suggesting `issues_find` plus the `boards` field as a fallback when queue-based lookup is incomplete.
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 operation: retrieving all agile boards of the organization, with an optional queue filter. It also distinguishes itself from related tools by pointing to `board_get` for reading a single board in full and to `issues_find` for discovering boards via issues.
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?
It explicitly explains when to use this tool (get organization boards, optionally scoped by queue) and provides a practical alternative when a board's own filter does not match. The caveat about queue matching and the recommendation to inspect issues' `boards` field gives concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_template_getGet Comment TemplateARead-only
Get a single Yandex Tracker comment template by its id, including the comment text it inserts. Use comment_templates_get_all first to find the template id.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Comment template identifier, as returned by the `comment_templates_get_all` tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Unique template identifier |
| name | No | Displayed template name |
| queue | No | Queue the template belongs to, if it is queue-specific |
| version | No | Template version |
| template | No | Comment text inserted by the template |
| summonees | No | Users summoned by a comment created from the template |
| description | No | What the template itself is for. Not the issue body: an issue template prefills that through `fieldTemplates.description` |
| maillistSummonees | No | Mailing lists summoned by a comment created from the template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates the non-mutating nature; the description adds that the returned template includes the inserted comment text, which is useful behavioral context. It does not mention not-found or error behavior, but the output schema and simple read-only nature reduce that need.
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 concise sentences carry the full message: first the core function, then the dependency workflow. There is no filler or redundant restating of the title.
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 one-parameter, read-only tool with an output schema, the description gives enough context to invoke correctly and understand the primary return content. Minor gaps around error cases exist but are acceptable for this tool's simplicity.
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 both the schema and description point to comment_templates_get_all as the source of template_id. The description adds no new meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the exact resource ('single Yandex Tracker comment template by its id'), and clarifies that the returned object includes the comment text. This clearly distinguishes it from list-style tools like comment_templates_get_all and other template 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?
It explicitly instructs the agent to call comment_templates_get_all first to obtain the template id, giving the tool a clear prerequisite and placement in a workflow. Since this is a simple single-item fetch, this is sufficient usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_templates_get_allGet Comment TemplatesARead-only
Get the comment templates configured in Yandex Tracker - the wording a team reuses when replying, with the users and mailing lists such a comment summons. Read one before adding a comment. Pass queue for the templates of that queue plus those bound to no queue. All pages are fetched by default; pass page for a single one.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, default is None which means to retrieve all pages. Specify page number to retrieve a specific page when context limit is reached. | |
| queue | No | Optional queue (Project ID) to scope the result to, like 'SOMEPROJECT'. Templates that are not bound to any queue are usable everywhere and are returned as well. | |
| per_page | No | The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty. |
| pages | No | Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`. |
| values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral detail: all pages are fetched by default, passing page returns a single page, and templates bound to no queue are included when queue is provided. This goes beyond the annotation without contradicting it.
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?
Three short sentences with no filler: purpose first, usage context second, pagination behavior third. Every sentence contributes new, actionable 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?
The definition is complete for a read-only listing tool. It covers purpose, usage timing, queue scoping, and pagination; the output schema handles return-value documentation, and the annotation covers safety. No critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the queue fallback behavior and reinforcing the default all-pages behavior for the page parameter, which helps an agent choose parameters correctly even when skimming 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 identifies the resource: comment templates configured in Yandex Tracker, including their content and associated users/mailing lists. It is a specific verb+resource statement, though it does not explicitly differentiate itself from the sibling comment_template_get beyond the plural 'get_all' framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical context: 'Read one before adding a comment' tells the agent when this tool matters, and the queue guidance clarifies scoping. It stops short of explicitly naming alternatives or exclusion criteria, so it does not earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_createCreate ComponentA
Create a component (in russian - 'компонент') in a Yandex Tracker queue - a label grouping the queue's issues by product, process or owner; lead is a user login.
| Name | Required | Description | Default |
|---|---|---|---|
| lead | No | Login or uid of the user responsible for the component, e.g. 'i.ivanov' or the `id` a component read returns in `lead`. Omitting it leaves it unset or, on update, unchanged; on update, `clear_lead` removes the current one. | |
| name | Yes | Component name, e.g. 'Backend' or 'Billing'. | |
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' | |
| assign_auto | No | Whether new issues with this component get its lead as assignee automatically. Defaults to false on create; omitting it on update leaves it unchanged. | |
| description | No | Component description. Omitting it leaves it unset or, on update, unchanged; on update, an empty string clears it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| lead | No | |
| name | Yes | |
| queue | No | |
| version | Yes | |
| assignAuto | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=false already signals a mutation, and the description is consistent with that, so there is no contradiction. However, the description discloses no behavioral traits beyond the act of creation — no note on duplicate-name handling, permissions, or side effects on the queue's component 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 sentence that front-loads the verb and resource and keeps the domain definition tight. The Russian parenthetical ('компонент') and the trailing lead note are marginal additions but do not bloat the description.
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 5 parameters all documented in the schema, an output schema present, and a readOnlyHint annotation, the structured context is strong, so a short description is acceptable. The clear gaps are the absence of sibling routing (when to use component_update instead) and any disclosure of creation constraints such as duplicate names.
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 each parameter individually explained (e.g., lead's login/uid format, assign_auto's create default, description clearing behavior), so the schema carries the load. The description's only parameter note, '`lead` is a user login', merely restates what the lead schema description already 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+resource: 'Create a component ... in a Yandex Tracker queue' and defines the domain concept ('a label grouping the queue's issues by product, process or owner'), which separates it from sibling operations like component_update, component_delete, and component_get. The verb 'Create' plus the container context leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'Create' and the component definition; there is no explicit statement of when to prefer this over component_update or component_delete, and no exclusions. The parameter descriptions hint at update semantics ('on update, unchanged', 'clear_lead'), which subtly distinguishes create from update, but the description itself gives no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_deleteDelete ComponentADestructive
Delete a Yandex Tracker queue component (in russian - 'компонент') by its numeric id. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| component_id | Yes | Component identifier (numeric), as returned by `queue_get_components` or in an issue's `components` field |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive, and the description adds the important behavioral detail that the action 'Cannot be undone.' This goes beyond the annotation by emphasizing irreversibility, which is valuable for an agent deciding whether to call this 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 two short sentences with no wasted words. The action and target are front-loaded, and the irreversibility warning is concise but essential.
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 single-parameter destructive operation with annotations and an output schema present, the description covers the necessary details: what is deleted, how the target is identified, and that the operation is permanent.
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 already provides 100% coverage for component_id, including its type and how it is obtained. The tool description adds little beyond restating 'by its numeric id,' so the schema carries the parameter semantics.
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 ('Delete') and resource ('Yandex Tracker queue component'), and explicitly states the identifying key (numeric id). It clearly distinguishes this tool from sibling tools like component_update or component_create.
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 clearly indicates this tool is for deleting a component by its numeric id and notes irreversibility. It does not explicitly name alternatives or when not to use it, but the context is clear enough for an agent to select it for deletion tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_getGet ComponentARead-only
Get one Yandex Tracker queue component (in russian - 'компонент') by its numeric id, with queue, lead, assignAuto and the version that component_update takes. Ids come from queue_get_components or an issue's components field.
| Name | Required | Description | Default |
|---|---|---|---|
| component_id | Yes | Component identifier (numeric), as returned by `queue_get_components` or in an issue's `components` field |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| lead | No | |
| name | Yes | |
| queue | No | |
| version | Yes | |
| assignAuto | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already communicates safety; the description adds value by naming the returned fields (queue, lead, assignAuto, version) and noting the version is the one component_update consumes. It does not cover missing-id error behavior, but for a simple read with annotations this is a useful and non-redundant 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?
A single dense sentence front-loads the action and resource, then packs the id source, returned fields, and compatibility with component_update. Every clause contributes useful information with no 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?
For a one-parameter, read-only getter with an output schema and sibling context, the description is complete: it explains what is returned, where the id comes from, and how the result relates to component_update. Nothing essential is missing.
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?
With 100% schema description coverage, the schema already documents component_id as numeric and from queue_get_components or an issue's components field. The description repeats this rather than adding new parameter semantics, 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 uses a specific verb (Get), identifies the resource (one Yandex Tracker queue component) and gives the exact identifier type. It distinguishes itself from queue_get_components by emphasizing 'one' component by numeric id, and the sibling list/create/update/delete tools are clearly different operations.
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?
It clearly states the input required (numeric component id) and where ids come from (queue_get_components or an issue's components field), which tells an agent how to obtain a valid input. It does not explicitly state 'use queue_get_components for listing' or list exclusion cases, so it stops short of a full when-to-use/when-not-to-use guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_updateUpdate ComponentA
Change the name, description, lead or auto-assign flag of a Yandex Tracker queue component (in russian - 'компонент'); omitted fields keep their value, clear_lead removes the lead.
| Name | Required | Description | Default |
|---|---|---|---|
| lead | No | Login or uid of the user responsible for the component, e.g. 'i.ivanov' or the `id` a component read returns in `lead`. Omitting it leaves it unset or, on update, unchanged; on update, `clear_lead` removes the current one. | |
| name | No | Component name, e.g. 'Backend' or 'Billing'. Omit to leave it unchanged. | |
| version | No | Component version for optimistic locking, as read by `component_get` / `queue_get_components`: the change lands only if this is still the current version, otherwise the call fails with an editing conflict. Omit to update the current version. | |
| clear_lead | No | Remove the component's lead. Cannot be combined with `lead`. Example: true | |
| assign_auto | No | Whether new issues with this component get its lead as assignee automatically. Defaults to false on create; omitting it on update leaves it unchanged. | |
| description | No | Component description. Omitting it leaves it unset or, on update, unchanged; on update, an empty string clears it. | |
| component_id | Yes | Component identifier (numeric), as returned by `queue_get_components` or in an issue's `components` field |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| lead | No | |
| name | Yes | |
| queue | No | |
| version | Yes | |
| assignAuto | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false annotation, the description discloses important partial-update semantics and the special behavior of `clear_lead`. It does not discuss version-conflict failure behavior, but that is fully covered by the well-described `version` parameter in the 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?
The description is a single front-loaded sentence that states the action, resource, editable fields, and the most important update semantics. The parenthetical Russian term adds a useful domain cue, and there is no redundant wording.
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 all seven parameters have rich schema-level descriptions and an output schema exists, the description does not need to repeat parameter details. It provides the high-level behavioral context an agent needs to understand that this is a partial-update operation on an existing component.
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 adds value by summarizing the cross-cutting rule that omitted fields retain their values and that `clear_lead` is the explicit removal mechanism, complementing the per-parameter schema documentation without repeating it.
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 verb ('Change'), a precise resource ('Yandex Tracker queue component'), and enumerates the exact fields that can be modified. This clearly distinguishes it from sibling tools like component_create, component_get, and component_delete.
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 clearly frames this as an update to an existing component and states the central usage rule that omitted fields keep their value, with `clear_lead` as an explicit removal mechanism. It does not explicitly name alternatives, but the mutation semantics make it clear this is for updating rather than creating, reading, or deleting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_fieldsGet Global FieldsARead-only
Get all global fields available in Yandex Tracker that can be used in issues
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the read-only nature. The description adds context that the returned fields are global and usable in issues, which is useful. However, it does not describe pagination, ordering, or other behavioral details, though these are less critical for a simple list endpoint.
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 without any fluff. Every word contributes to conveying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter, read-only nature and the presence of an output schema, the description fully covers the tool's purpose. It clearly explains what the tool returns and its scope, with no missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema is fully covered. The description adds no parameter-specific semantics, but none are needed. The tool has no input requirements, so the baseline of 4 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 'Get all global fields available in Yandex Tracker that can be used in issues' with a specific verb, resource, and scope. It clearly distinguishes from sibling tools like queue_get_fields by emphasizing 'global' and 'can be used in issues'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives. The word 'global' implies a distinction from queue-specific fields, but no direct comparison or exclusion is provided. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_typesGet Issue TypesARead-only
Get all issue types available in Yandex Tracker that can be used when creating or updating issues
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe read operation. The description adds that the tool retrieves all issue types for create/update operations, but it does not disclose return format, sorting, or edge cases. Since the schema and output schema provide structural details, the description offers modest additional 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 immediately states the action and resource, with no filler or repetition. It is front-loaded and efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, a readOnly annotation, and an output schema, the description fully covers what the tool does and when it is relevant. It explains the data's usage context, making it complete for an agent to decide when to call 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?
The tool has zero parameters and the schema coverage is 100% for an empty properties object. Per rubric, zero-parameter tools receive a baseline of 4. The description adds context about the returned data's purpose but there are no parameter semantics to elaborate on.
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 the specific verb 'Get' and clearly identifies the resource as 'all issue types available in Yandex Tracker'. It further explains the purpose ('can be used when creating or updating issues'), which distinguishes it from sibling tools like get_statuses or get_priorities.
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 states the context for use ('when creating or updating issues'), which implies when to call this tool. However, it does not explicitly name alternative tools or specify when not to use it, so it lacks full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prioritiesGet PrioritiesARead-only
Get the issue priority levels of Yandex Tracker - trivial, minor, normal, critical, blocker and whatever else the organization configured - with the id and key that issue_create and issue_update accept in priority. The list is organization-wide: a queue may still reject a priority it does not use.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already marks this as safe, and the description adds useful non-obvious behavior: the result is organization-wide and a queue may still reject a priority it does not use. It does not overstate mutation or introduce contradictions.
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 with no filler: the first states the resource and purpose, the second adds a critical scope caveat. Every sentence earns its place and the main action is front-loaded.
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 parameters and an output schema available, the description fully covers what an agent needs: what is returned, the accepted field compatibility, and the organization-wide scope. No missing prerequisite or postcondition is apparent.
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 zero parameters and 100% schema description coverage, so there are no parameter semantics for the description to add; the baseline for zero-parameter tools is 4. The description instead clarifies useful output semantics (id/key compatibility with issue_create/issue_update).
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+resource ('Get the issue priority levels of Yandex Tracker') and enumerates example values, making it clearly distinct from sibling lookup tools like get_statuses and get_resolutions. The tie to the priority field accepted by issue_create/issue_update further pins down its 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?
It provides clear usage context by stating the returned id/key are what issue_create and issue_update accept in priority, which tells an agent when to call this tool. It does not explicitly name alternatives or exclusion cases, but the lookup is self-contained and the sibling list contains no competing priority tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resolutionsGet ResolutionsARead-only
Get all resolutions available in Yandex Tracker that can be used when closing issues
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the scope ('all resolutions') and the context ('when closing issues') but does not disclose additional behaviors like ordering, filtering, or response format. This is acceptable for a simple list retrieval with annotations present.
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, focused sentence that immediately states the action and resource. It is front-loaded with the tool's purpose and contains no unnecessary words or repetition.
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 parameters and the output schema exists, the description is sufficient for an agent to understand the tool's role. The context 'when closing issues' and the scope 'all resolutions' provide complete guidance for this low-complexity read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers the input space (100% coverage). Per the rubric, a no-parameter tool gets a baseline of 4. The description does not need to add parameter details, as none exist.
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 identifies the tool's purpose: retrieving all resolutions in Yandex Tracker used when closing issues. It uses a specific verb ('Get') and resource ('resolutions'), and the context 'when closing issues' distinguishes it from sibling tools like get_statuses or get_issue_types.
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 the intended use case ('when closing issues'), which helps the agent select it for issue closure scenarios. However, it does not explicitly mention alternatives or exclusions, though the context is reasonably clear among the many sibling getter tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusesGet StatusesARead-only
Get all statuses available in Yandex Tracker that can be used in issues
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile. The description adds a contextual detail that only statuses usable in issues are returned, which is mildly informative. It does not describe pagination, return format, or other behavioral traits, but the output schema fills some 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 that front-loads the action ('Get all statuses') and provides necessary qualifying context without any fluff. Every word 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, parameterless, read-only tool with an output schema, the description adequately explains what the tool returns. The context of 'available in Yandex Tracker' and 'usable in issues' is sufficient for the agent to use it correctly, and the output schema covers return structure.
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?
With zero parameters, the schema is empty and schema description coverage is trivially 100%. The baseline for 0 params is 4, and the description does not need to explain any parameters. It appropriately focuses on the tool's purpose.
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 it gets all statuses available in Yandex Tracker that are usable in issues, with a specific verb and resource. It distinguishes itself from sibling reference-data tools by naming the exact entity (statuses) and scoping to issue-usable statuses.
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 explicit guidance on when to use this tool versus alternatives such as get_issue_types or get_resolutions. It only states what it does, leaving the agent to infer usage from the name. There is no mention of exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_add_checklist_itemsAdd Issue Checklist ItemsA
Add one or more items to the checklist of a Yandex Tracker issue. The checklist is created if the issue does not have one yet, and items are appended in the order given. Returns the issue's checklist after the items were added.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Checklist items to append, in order. Example: [{'text': 'Get sign-off from legal'}, {'text': 'Deploy', 'checked': false}]. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false annotation, the description discloses important behavioral details: the checklist is created if it does not exist, items are appended in the given order, and the response contains the checklist after addition. This gives the agent a clear model of the operation's side effects and return semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core action, and every sentence adds meaningful information: action, creation behavior, ordering, and return value. There is no redundant or filler content.
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 two required parameters, a full input schema, an output schema, and readOnlyHint=false, the description is complete enough. It explains the mutation behavior, the ordering guarantee, the auto-creation behavior, and what the caller should expect in the response, so an agent can invoke it correctly without missing key 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%, and the schema already documents issue_id format and items as an array with an example. The description adds minor behavioral context ('items are appended in the order given'), but the schema already conveys the same ordering intent in the items description, so the description adds limited value beyond the structured 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 uses a specific verb ('add') with a clear resource ('items to the checklist of a Yandex Tracker issue') and clarifies that multiple items can be added. It also specifies the 'one or more items' semantics and the append behavior, making it easy to distinguish from sibling tools like issue_update_checklist_item or issue_delete_checklist_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its verb and behavior but does not explicitly state when to prefer this tool over alternatives such as issue_update_checklist_item or issue_delete_checklist_item. It does clarify that the checklist is created on demand, which helps an agent understand the tool's effect, but no explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_add_commentAdd Issue CommentA
Add a comment to a Yandex Tracker issue. There is no template_id parameter: check comment_templates_get_all (with queue set) first and copy the template's template text into text and its summonees into the parameters below. To mention or call people so they get notified, use summonees - '@login' in the text notifies nobody.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Comment text (markdown supported by Tracker). | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| summonees | No | Users to summon (logins or IDs): they are invited to the discussion and notified. This is the API way to 'mention/call' someone in a Yandex Tracker comment. | |
| markup_type | No | Optional markup type for comment text. Use 'md' for YFM (markdown). | |
| maillist_summonees | No | Optional list of mailing lists to summon (emails). Example: ['team@example.com']. | |
| is_add_to_followers | No | Whether to add the comment author to issue followers. Default: true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| text | No | |
| longId | No | |
| textHtml | No | |
| createdAt | No | |
| createdBy | No | |
| summonees | No | |
| transport | No | |
| updatedAt | No | |
| updatedBy | No | |
| maillistSummonees | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotation readOnlyHint=false, the description discloses meaningful behavioral details: comments are created via this call, '@login' in text does not produce notifications, and notification requires the `summonees` parameter. This gives the agent important side-effect knowledge about who gets notified and how template content should be transferred. It does not state every consequence, but it covers the key non-obvious 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 compact and front-loaded with the core action, followed by two targeted caveats. Every sentence contributes either primary purpose, a template-workflow correction, or a mention-behavior warning. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, but all are fully described in the schema and the required ones are obvious. The description adds the critical contextual guidance about templates and mention semantics, and the presence of an output schema means return-value details are not the description's responsibility. An agent has enough information to call this tool correctly and avoid the most likely errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that there is no `template_id` parameter and that template text should be copied into `text` while template summonees go into the summon parameters. It also clarifies the real-world meaning of `summonees` for mentions, reinforcing and extending the schema's explanation.
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 opens with an unambiguous action: 'Add a comment to a Yandex Tracker issue.' This names the exact verb and resource and clearly separates it from sibling operations like issue_update_comment, issue_get_comments, and issue_delete_comment. It also clarifies what the tool is not for by stating there is no `template_id` parameter, preventing confusion with template-related helpers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete when-to-use guidance: add comments to issues, and if using a saved template, first call `comment_templates_get_all` with `queue` set, then copy values into `text` and the summon parameters. It also explicitly warns against the common mistake of putting '@login' in the text, directing users to the `summonees` parameter instead, which is a clear exclusion and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_add_linkAdd Issue LinkA
Create a link between a Yandex Tracker issue and another issue. relationship reads from the current issue: 'depends on' means issue_id depends on the linked issue, 'is dependent by' is the reverse, 'relates' is a plain connection.
| Name | Required | Description | Default |
|---|---|---|---|
| issue | Yes | ID or key of the issue to link to, e.g. 'TEST-123'. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| relationship | Yes | Link type describing how the current issue (issue_id) relates to the linked issue. 'is epic of'/'has epic' apply only to Epic-type issues. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | No | |
| object | No | |
| status | No | |
| assignee | No | |
| createdAt | No | |
| createdBy | No | |
| direction | No | |
| updatedAt | No | |
| updatedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation set is minimal (only readOnlyHint=false), so the description carries most of the disclosure burden. It correctly discloses the mutating nature ('Create a link') and adds valuable directional semantics with examples, but it does not address edge cases such as duplicate links, self-links, or side effects. The description is consistent with readOnlyHint=false, so no contradiction.
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 with zero filler: the action is front-loaded in the first sentence, and the relationship-semantics clarification occupies the second. The examples earn their place because the enum contains genuinely confusing direction pairs.
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?
An output schema exists, so return values need no explanation, and all three parameters are documented in the schema. The description covers the one subtly tricky aspect (link directionality), which is the main source of agent error here. The only real omission is explicit routing to issue_delete_link/issue_get_links, which is more of a usage-guidance concern.
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%, which sets the baseline at 3. The description adds genuine value by concretely disambiguating the trickiest direction pairs ('depends on' vs 'is dependent by') and defining 'relates' as a plain connection, reducing the risk of reversing link direction. Only three of nine enum values are exemplified, leaving some gap, but the directional principle generalizes.
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 ('Create') and a precise resource ('a link between a Yandex Tracker issue and another issue'), making the operation unambiguous. It is easily distinguished from the sibling issue_delete_link (removal) and issue_get_links (retrieval) without needing to inspect schemas.
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 (whenever two issues need to be linked) and clarifies how the relationship parameter should be read, but it never explicitly names alternatives such as issue_delete_link or issue_get_links or states when not to use this tool. Usage context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_add_worklogAdd WorklogA
Add a worklog entry (log spent time) to a Yandex Tracker issue
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Optional start datetime for the worklog. If timezone is not provided, UTC is assumed. | |
| comment | No | Optional comment to add to the worklog entry. | |
| duration | Yes | Time spent in ISO-8601 duration format (e.g., 'PT1H30M'). | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| issue | No | |
| start | No | |
| comment | No | |
| duration | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the description's mention of 'Add' aligns. However, no additional behavioral traits are disclosed (e.g., permissions needed, side effects like triggering notifications, or rate limits). The description adds minimal value beyond 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?
A single, direct sentence with no wasted words. It is appropriately front-loaded and provides essential information efficiently.
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 100% schema coverage and existence of an output schema, the description is fairly complete. It lacks mention of error conditions or prerequisites (e.g., issue must exist), but for a straightforward add operation, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are described in the input schema (100% coverage). The description does not add new meaning beyond the schema; it merely restates the tool's purpose. Baseline of 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a worklog entry'), the resource ('worklog entry'), and the context ('to a Yandex Tracker issue'). It effectively distinguishes from sibling tools like issue_delete_worklog, issue_update_worklog, and issue_get_worklogs.
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 explicit guidance on when to use this tool versus alternatives (e.g., issue_add_comment). It only describes the function without usage context or prerequisites, leaving the agent to infer based on the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_closeClose IssueA
Close a Yandex Tracker issue with a resolution: finds a transition to a 'done' status and executes it. The resolution has to be one the issue's type allows - read the type with issue_get, then call queue_get_metadata with expand=['issueTypesConfig'] for the resolutions of that type. Returns the transitions available in the new (closed) status.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional dictionary of additional fields to set during the transition (e.g. 'assignee' for reassigning). Do NOT set 'resolution' here - use the dedicated resolution_id parameter instead. | |
| comment | No | Optional comment to add when closing the issue. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| resolution_id | Yes | The resolution ID to set when closing the issue. Must be one of the IDs returned by get_resolutions tool (e.g., 'fixed', 'wontFix', 'duplicate'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false, so the description carries the behavioral burden. It discloses that the tool mutates state by executing a transition, that it targets 'done' status, that resolution must be valid for the issue type, and that it returns the transitions available in the closed status. This is meaningful behavioral context beyond the annotation.
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 compact: two sentences that lead with the core action and resolution constraint, then state the return value. Every sentence carries needed information 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 definition covers the operation, resolution-selection process, and return value, which is strong for a focused tool with a full schema and output schema. It could be slightly more complete by mentioning what happens if no 'done' transition is available, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds important semantic value for resolution_id by explaining it must be allowed by the issue's type and how to discover the allowed values via issue_get and queue_get_metadata. It does not add detail for fields or comment, but the schema already describes those clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific action: closing a Yandex Tracker issue by finding and executing a transition to a 'done' status. It names the exact resource and operation, and the 'finds a transition' detail helps distinguish it from a generic transition tool like issue_execute_transition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit procedural guidance: read the issue type, call queue_get_metadata, then provide a resolution allowed by that type. It does not explicitly name alternative tools like issue_execute_transition or state when not to use this tool, but the context and specialized purpose make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_createCreate IssueA
Create an issue (in russian - 'задача') in a Yandex Tracker queue. There is no template argument: read a template with issue_templates_get_all and copy its fieldTemplates values into these arguments field by field. The returned version goes stale at once, as queue triggers bump it - re-read it with issue_get.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Issue tags as array of strings. | |
| type | No | Issue type: an object with 'id' (type ID) and/or 'key' (e.g., 'bug', 'task'), or the bare key/ID (from get_issue_types tool). | |
| queue | Yes | Queue key where to create the issue (e.g., 'MYQUEUE') | |
| fields | No | Additional fields to set, for those without a dedicated parameter above. Field ids come from `queue_get_fields` (schema.required=true marks the mandatory ones) or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name. | |
| parent | No | Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key. | |
| sprint | No | Sprint assignments. Array of objects, each with 'id' field containing the sprint ID (integer). | |
| project | No | Project assignment. Object with 'primary' (int, main project shortId) and optional 'secondary' (list of ints, additional project shortIds). | |
| summary | Yes | Issue title/summary | |
| assignee | No | Assignee login or UID | |
| priority | No | Issue priority: an object with 'id' (priority ID) and/or 'key' (e.g., 'critical', 'normal'), or the bare key/ID (from get_priorities tool). | |
| followers | No | Issue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login. | |
| components | No | Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. | |
| description | No | Issue description (use markdown formatting) | |
| markup_type | No | Markup type for description text. Use 'md' for YFM (markdown) markup. | md |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| epic | No | |
| tags | No | |
| type | No | |
| spent | No | |
| start | No | |
| votes | No | |
| boards | No | Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`. |
| parent | No | |
| sprint | No | Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them. |
| status | No | |
| unique | No | |
| summary | No | |
| version | No | |
| assignee | No | |
| deadline | No | |
| priority | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No | |
| components | No | |
| estimation | No | |
| description | No | |
| storyPoints | No | |
| previousStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=false already marks this as a write operation, and the description adds genuinely new behavioral context: the returned version goes stale at once because queue triggers bump it, plus a concrete mitigation (re-read with issue_get). This goes beyond what the schema or annotations convey. It could additionally disclose permission requirements or side effects like notifications, which keeps it at a 4 rather than a 5.
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?
Three sentences, zero filler: the first states purpose, the second covers the template workflow, the third warns about version staleness. The core purpose is front-loaded ahead of the caveats, and 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 14-parameter create tool, the schema documents parameters, the output schema covers return values, and the description covers the workflow gotchas an agent would otherwise trip on. The template-argument absence and stale-version behavior are the critical non-obvious pieces, and both are addressed; no blocking information is missing.
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 14 parameters, putting the baseline at 3. The description adds value by warning that no template parameter exists and instructing the agent to copy fieldTemplates values into the regular arguments field by field — preventing an invocation that passes a nonexistent argument.
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 an issue ... in a Yandex Tracker queue,' with the Russian synonym 'задача' added to remove ambiguity for a term that has multiple meanings. The verb clearly separates it from read/update/close siblings like issue_get, issue_update, and issue_close without needing to open any 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 description gives explicit guidance for the genuinely non-obvious workflow: there is no template argument, so the agent must read a template via issue_templates_get_all and copy its fieldTemplates values into these arguments field by field. It also routes post-create follow-up to issue_get when the version needs re-reading. It does not enumerate when-not-to-use conditions against mutation siblings, but the template case is the one that would actually cause a failed call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_delete_checklist_itemDelete Issue Checklist ItemADestructive
Delete a single item from the checklist of a Yandex Tracker issue. Use issue_get_checklist to get the item IDs. Returns the issue's checklist after the deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| checklist_item_id | Yes | Checklist item ID, as returned in the `id` field of an item by issue_get_checklist. Example: '5f8b2c1e4c3a2d001a7e9b1c'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds useful behavioral detail beyond that: it confirms the operation deletes a single item and states the return behavior, "Returns the issue's checklist after the deletion." This helps the agent set expectations about the side effect and response.
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?
Three short sentences carry all the essential information: the action, the prerequisite lookup step, and the return behavior. No filler or redundant repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity with two fully documented required parameters, a destructive annotation, and an output schema. The description adds the only practical missing piece—how to find the checklist item ID—and states the return value. Nothing else an agent needs is absent.
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 already covers both parameters thoroughly at 100% coverage. The description adds value by telling the agent exactly how to obtain checklist_item_id via issue_get_checklist, which supplements the schema's static field description with a practical source for the value.
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 uses a precise verb-resource combination: "Delete a single item from the checklist of a Yandex Tracker issue." It clearly distinguishes this from sibling tools like issue_delete_link or issue_delete_comment by naming the specific checklist-item resource.
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?
Description provides clear context and a concrete prerequisite: "Use issue_get_checklist to get the item IDs." It does not explicitly mention when not to use this tool or contrast it with checklist update/add alternatives, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_delete_commentDelete Issue CommentA
Delete a comment from a Yandex Tracker issue
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| comment_id | Yes | Comment ID (integer). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation (false) already indicates a write operation, and the description's 'Delete' aligns. However, it adds no extra behavioral context such as permanence, permissions, or side effects, which is a gap for a destructive 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, concise sentence that immediately states the action and resource. No superfluous 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 the low complexity, complete schema, and presence of annotation and output schema, the description is sufficient for the agent to understand the tool's purpose and usage. It lacks some deeper behavioral context, but the overall package is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both issue_id and comment_id. The description adds no parameter detail, but this is acceptable because the schema fully documents the parameters.
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 'Delete a comment from a Yandex Tracker issue' uses a specific verb and resource, clearly distinguishing this tool from siblings like issue_add_comment and issue_update_comment.
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 clearly states the tool's action and context, making it obvious when to use it. However, it does not explicitly mention alternatives or exclusions, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_delete_linkDelete Issue LinkA
Delete a link between a Yandex Tracker issue and another issue. Use issue_get_links to retrieve the link IDs for an issue.
| Name | Required | Description | Default |
|---|---|---|---|
| link_id | Yes | Link ID (integer) as returned by issue_get_links. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false, so the description must add behavioral context. It adds the workflow hint about using issue_get_links, but does not disclose whether deletion is permanent, requires special permissions, or has side effects. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, directly front-loaded with the purpose, followed by a useful usage hint. No wasted words or redundant 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?
For a simple delete operation with two well-documented parameters and an output schema, the description covers the essential workflow. Including the prerequisite for retrieving link IDs makes it reasonably self-contained, though a note on irreversibility would add 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?
Schema coverage is 100% with clear descriptions for both parameters (link_id 'as returned by issue_get_links' and issue_id format). The description's mention of issue_get_links adds little beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Delete a link between a Yandex Tracker issue and another issue', combining a specific verb (delete) with a clear resource (issue link). This distinguishes it from sibling tools like issue_add_link (which adds) and issue_get_links (which retrieves).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a direct usage prerequisite: 'Use issue_get_links to retrieve the link IDs for an issue.' This tells the agent where to obtain the required link_id and implies this tool is used after retrieval. It doesn't explicitly list exclusions, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_delete_worklogDelete WorklogA
Delete a worklog entry (spent time record) from a Yandex Tracker issue
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| worklog_id | Yes | Worklog entry ID (integer). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, signaling a write operation. The description's 'Delete' verb aligns with this. However, it adds no further behavioral details such as permanence, required permissions, or side effects. Given that annotations cover the basic safety profile and the description is consistent, it provides minimal additional 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 with no unnecessary words. It is front-loaded with the verb 'Delete' and the resource, making it easy to scan and understand immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple delete operation with an output schema and annotations, and the schema fully documents parameters. The description provides enough context for an agent to know what the tool does. It lacks explicit mention of irreversibility or permission dependencies, but for a basic deletion action, the information is sufficiently 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 both parameters (issue_id and worklog_id) are fully documented in the schema itself. The description does not add any extra parameter semantics. Per the rubric, with high schema coverage, the baseline is 3, and the description contributes nothing 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 uses the specific verb 'Delete' and identifies the resource as 'worklog entry (spent time record)' within a Yandex Tracker issue. This clearly distinguishes it from sibling worklog tools like issue_add_worklog and issue_update_worklog, which perform different operations.
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 makes the usage context clear: it is for removing spent time records from an issue. However, it does not explicitly mention when to use this tool over alternatives or state exclusions, such as permission limitations or inability to delete certain worklogs. Still, the context is unambiguous for a straightforward delete operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_execute_transitionExecute Issue TransitionA
Execute a status transition for a Yandex Tracker issue. Call issue_get_transitions first and pass one of the ids it returned - the API rejects anything else. Returns the transitions available in the new status.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional dictionary of additional fields to set during the transition. Common fields include 'resolution' (e.g., 'fixed', 'wontFix') for closing issues, 'assignee' for reassigning, etc. | |
| comment | No | Optional comment to add when executing the transition. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| transition_id | Yes | The transition ID to execute. Must be one of the IDs returned by issue_get_transitions tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint: false, so the description carries the burden of behavioral context. It adds that invalid transition IDs are rejected and that the tool returns the transitions available in the new status, giving the agent useful post-invocation expectations.
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 concise, front-loaded sentences communicate the action, prerequisite, constraint, and return behavior without extraneous detail. 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?
The description covers the core prerequisite, the API constraint, and the result of a successful call. Since an output schema exists, detailed return-value documentation is unnecessary. A small gap is not distinguishing this tool from sibling issue_close, but the core invocation context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds meaningful value by emphasizing that transition_id must come from issue_get_transitions and by explaining the consequence of using an invalid ID, which is not fully captured 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 executes a status transition for a Yandex Tracker issue, using a specific verb and resource. It also distinguishes itself from the read-only sibling issue_get_transitions by describing an action that changes state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: call issue_get_transitions first and pass one of the returned IDs, warning that the API rejects anything else. It does not mention alternatives like issue_close or when to prefer this tool over other transition-related tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_getGet IssueARead-only
Read one Yandex Tracker issue (task, ticket, bug; in russian - 'задача') by its key and return its full record, the current version included. To search instead, use issues_find. Comments, links, attachments, worklogs, checklist, changelog and transitions each have their own issue_get_* tool.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| include_description | No | Whether to include issue description in the issues result. It can be large, so use only when needed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| epic | No | |
| tags | No | |
| type | No | |
| spent | No | |
| start | No | |
| votes | No | |
| boards | No | Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`. |
| parent | No | |
| sprint | No | Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them. |
| status | No | |
| unique | No | |
| summary | No | |
| version | No | |
| assignee | No | |
| deadline | No | |
| priority | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No | |
| components | No | |
| estimation | No | |
| description | No | |
| storyPoints | No | |
| previousStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description consistently describes a read operation. It adds useful behavioral context by stating that the tool returns the full issue record including the current version, which goes beyond the schema's parameter documentation.
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 concise sentences with no filler. The core purpose is front-loaded, and the routing to alternatives is packed efficiently into the second sentence.
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 tool with a readOnlyHint annotation, an output schema, fully described parameters, and explicit sibling differentiation, nothing essential is missing. The description covers purpose, scope, and alternatives without redundancy.
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 both parameters (issue_id and include_description) are fully documented with formats and fine print about size. The tool description does not add meaning 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?
Description clearly states a specific verb ('Read') and resource ('one Yandex Tracker issue') and notes it returns the full record including version. It also distinguishes itself from issues_find and the issue_get_* subresource tools, so an agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs users to issues_find when searching instead and lists which related resources (comments, links, attachments, worklogs, etc.) have their own issue_get_* tools. This gives clear when-to-use and when-not-to-use guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_attachmentsGet Issue AttachmentsARead-only
Get attachments of a Yandex Tracker issue by its id
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to include in each attachment; omit to get all. The 'content' field can be large, so select only what you need. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, so the description does not need to restate read-only behavior. The description adds no behavioral context beyond 'by its id' and does not discuss pagination, size limits, or potential for large content, though the schema's fields parameter does warn about the content field.
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 short sentence with no filler, front-loads the action and resource, and is easily parsable. Every word contributes 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?
For a simple read-only attachment-listing tool, the description combined with the rich input schema, readOnlyHint, and output schema is sufficient. The required input is clear, the optional fields behavior is documented in the schema, and no critical invocation information is missing.
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 issue_id and fields are already documented in the input schema. The description reinforces that issue_id identifies the target issue but adds no new semantic value beyond the parameter 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 states a specific verb ('Get'), a clear resource ('attachments'), and the required identifier ('by its id'). This distinguishes it from sibling issue_get_* tools such as issue_get_comments, issue_get_worklogs, and issue_get, since 'attachments' is an unambiguous resource.
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 the tool is used when a caller needs attachments for a specific Yandex Tracker issue, and the issue ID requirement is clear. However, it does not explicitly state when to prefer this over alternatives or mention any exclusions, leaving differentiation to inference from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_changelogGet Issue ChangelogARead-only
Get the change history (changelog) of a Yandex Tracker issue: status transitions, field edits (who changed what from -> to and when), comment changes and executed triggers. Returns a page of entries plus next_cursor - pass it back as cursor until it is null.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional change type to filter by (e.g. 'IssueWorkflow' for status transitions). | |
| field | No | Optional field key to filter the changelog by (e.g. 'status' to only see status changes). | |
| cursor | No | Cursor for the next page: the 'next_cursor' value returned by the previous call. Leave empty for the first page. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| per_page | No | The number of items per page for cursor-paginated endpoints. May be decreased if results exceed the context window. |
Output Schema
| Name | Required | Description |
|---|---|---|
| entries | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation and adds valuable behavioral detail beyond it: results are paginated, the response contains a next_cursor, and that cursor must be passed back as the cursor parameter until it becomes null. It also discloses the breadth of events included, such as triggered triggers.
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 compact and front-loaded with the core action and expected contents, followed by the pagination contract. It contains no filler, though the first sentence is slightly dense with enumerated content.
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 output schema exists, all parameters are documented, and the tool is read-only, the description sufficiently covers scope and pagination behavior. It does not discuss alternative tools or edge cases, but those are not required for correct invocation here.
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 five parameters are already documented with types, defaults, and examples. The description adds only the pagination loop concept ('next_cursor' passed back as 'cursor' until null), which is a modest enhancement rather than a necessary compensation.
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 opens with a specific verb and resource ('Get the change history of a Yandex Tracker issue') and enumerates exactly what the changelog contains: status transitions, field edits, comment changes, and executed triggers. This clearly distinguishes it from sibling read tools like issue_get_comments or issue_get.
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 intended use is clear: this is the tool for retrieving an issue's full change history, including who changed what and when. It does not explicitly name alternatives or say when not to use it, but the described scope gives agents enough context to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_checklistGet Issue ChecklistARead-only
Get checklist items of a Yandex Tracker issue by its id
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the readOnlyHint annotation. It does not mention pagination, return format, or error behavior. Since annotations already declare the operation safe, the description provides minimal additional 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 front-loads the action and resource, with no extraneous words. It is 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?
For a simple read-only tool with one parameter and an output schema, the description is adequate to convey the tool's purpose. It doesn't cover edge cases like absent checklist items, but the output schema and annotations cover most operational context, so this is acceptable.
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 already fully documents the single parameter with a clear format example ('SOMEPROJECT-1'). The description's 'by its id' adds no new meaning, so the description does not enhance parameter understanding 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 uses the specific verb 'Get' followed by the resource 'checklist items of a Yandex Tracker issue' and identifies the input by 'its id'. This clearly states the tool's function and distinguishes it from sibling issue_get_* tools such as issue_get_comments and issue_get_links.
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 when checklist items for a specific issue are needed, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusions. Given the sibling tools for various issue aspects, more explicit guidance would improve this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_commentsGet Issue CommentsARead-only
Get a page of comments of a Yandex Tracker issue by its id. Returns the comments plus next_cursor - pass it back as cursor until it is null.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for the next page of comments: the 'next_cursor' value returned by the previous call. Leave empty for the first page. | |
| fields | No | Fields to include in each comment; omit to get all. text/text_html can be large, so select only what you need. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| per_page | No | The number of items per page for cursor-paginated endpoints. May be decreased if results exceed the context window. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true. The description adds meaningful behavioral context: results are paginated, the response includes next_cursor, and callers must loop by passing next_cursor back as cursor until null. This goes beyond the static annotation and clarifies the expected interaction pattern.
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 with no redundancy. The core purpose is front-loaded, and the pagination instruction is the only additional sentence, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with a fully described input schema, an output schema, and readOnlyHint annotation, the description provides everything needed to correctly invoke and paginate through comments. No critical behavioral or usage detail is missing.
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 detailed parameter descriptions, so the baseline is 3. The description adds value by connecting 'next_cursor' from the response to the 'cursor' parameter, explaining the pagination workflow that ties parameters together across calls.
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 action ('Get a page of comments') on a specific resource ('a Yandex Tracker issue by its id'). Clearly distinguishes from sibling tools like issue_get_worklogs or issue_get_attachments by naming the exact resource.
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?
Clear context: this is the tool for fetching issue comments, identified by issue_id. It does not explicitly name alternatives or exclusions, but the resource specificity makes the intended use unambiguous. The pagination instruction ('pass it back as cursor until it is null') also guides multi-page usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_linksGet Issue LinksBRead-only
Get a Yandex Tracker issue related links to other issues by its id
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals this is a safe read operation, so the description adds no new behavioral context. It does not clarify whether 'related links' includes incoming and outgoing links or whether link types are returned. The description adds no value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is slightly awkwardly phrased ('issue related links'). It is front-loaded with the main action, so it remains concise and readable.
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 read-only tool with one parameter and an existing output schema, the description is adequate. However, it lacks any clarification on what types of links are returned or whether both directions are included. Given the output schema exists, the agent can infer structure, but some behavioral details are missing.
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 with a clear description for the required issue_id parameter. The description only says 'by its id', which adds no new meaning beyond the schema. Baseline 3 applies because the schema carries the full parameter documentation.
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 it retrieves related links to other issues for a specific issue by its ID. The verb 'Get' and resource 'related links to other issues' are specific, and the resource is distinct from sibling tools like issue_get or issue_get_comments, though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It gives no context about use cases, prerequisites, or exclusions. The usage is merely implied by the function name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_transitionsGet Issue TransitionsARead-only
Get possible status transitions for a Yandex Tracker issue. Returns list of available transitions that can be performed on the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that it returns a list of available transitions, which is mildly informative but does not disclose additional behavior such as whether the list depends on user permissions or includes all possible transitions.
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 short sentences with no redundant information. It front-loads the purpose and includes the key detail about returning a list of available transitions.
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 read-only lookup tool with one well-documented parameter and an output schema, the description fully covers the context needed to select and invoke the tool. No further behavioral or return-value details are necessary.
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 single parameter 'issue_id' is fully described in the schema with format examples, so the description does not need to add parameter details. The description does not go beyond the schema but the schema is sufficient, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets possible status transitions for a Yandex Tracker issue, using a specific verb and resource. It distinguishes itself from the sibling tool 'issue_execute_transition' by focusing on retrieval rather than execution.
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 the tool is useful for discovering available transitions before performing one, but it does not explicitly state when to use it versus alternatives like issue_execute_transition. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_urlGet Issue URLARead-only
Get a Yandex Tracker issue url by its id
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates this is a safe read operation. The description adds no further behavioral context, such as behavior when the issue ID does not exist, whether the URL is absolute, or if any special permissions are required. The description is essentially a restatement of the tool's name, providing no extra transparency value.
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, front-loaded with the verb and resource, and contains no superfluous words. It is appropriately concise for the tool's simplicity.
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 one-parameter tool with an output schema and a readOnlyHint annotation, the description is sufficiently complete. It clearly states what the tool does, and the schema documents the parameter. The presence of the output schema covers return value details, so no further elaboration is necessary.
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 100% coverage of the single parameter, including its description with format example ('SOMEPROJECT-1'). The tool description does not add additional meaning beyond what the schema already provides, 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 uses a specific verb (Get), names the resource (Yandex Tracker issue url), and specifies the input method (by its id). This clearly distinguishes it from siblings like issue_get (which likely returns full issue details) and other getter 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?
The description implies usage when an issue URL is needed, but it does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool names are provided, so the guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_get_worklogsGet Issue WorklogsARead-only
Get worklogs of a Yandex Tracker issue by its id
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to include in each worklog entry; omit to get all. Select only what you need. | |
| issue_ids | Yes | Multiple Issue IDs. Each issue id is in the format '<project>-<id>', like 'SOMEPROJECT-1' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read operation, and the description's 'Get' is consistent with it. The description adds no further behavioral context such as return shape, pagination, or multi-issue support; it even uses singular 'by its id', slightly understating the capability. No contradiction with 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, front-loaded sentence with no filler. It states the action and resource immediately, and every word is informative. It is appropriately sized for a straightforward retrieval 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?
Given the rich input schema (which documents both parameters and the multi-issue format), the presence of an output schema, and the readOnlyHint annotation, the minimal description is mostly sufficient. The only notable omission is that the description itself does not mention that multiple issue IDs can be queried in one call, though the schema covers that 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%: issue_ids documents the '<project>-<id>' format and 'Multiple Issue IDs', and fields explains what to include and to omit to get all. The tool description itself adds no parameter detail and its singular 'by its id' is less accurate than the schema's plural description, so it provides no added value beyond the structured field 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 operation ('Get') and resource ('worklogs') for Yandex Tracker issues, distinguishing it from sibling tools that handle comments, attachments, changelogs, or that add/update/delete worklogs. The phrase 'by its id' identifies the key input, though it underrepresents that multiple issue IDs are supported.
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 choose this tool over alternatives, nor does it mention exclusions, prerequisites, or related tools like issue_get_comments or issue_get_changelog. The only clues are the tool name and the word 'worklogs', so usage is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_moveMove Issue to Another QueueA
Move a Yandex Tracker issue to a different queue. The issue will receive a new key in the target queue (e.g., TASKS-1 → NEWQUEUE-42). Returns the updated issue with its new key and queue.
| Name | Required | Description | Default |
|---|---|---|---|
| queue | Yes | Target queue key (e.g., 'MYQUEUE') | |
| notify | No | Whether users referenced in the issue's fields are notified of the change. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| notify_author | No | Whether the issue author is notified of the change. | |
| initial_status | No | Whether to reset the issue status to the initial value. Set this to true when moving to a queue with a different workflow. | |
| move_all_fields | No | Whether to carry over the issue's versions, components and projects when matching ones exist in the target queue. When false, those fields are cleared. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| epic | No | |
| tags | No | |
| type | No | |
| spent | No | |
| start | No | |
| votes | No | |
| boards | No | Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`. |
| parent | No | |
| sprint | No | Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them. |
| status | No | |
| unique | No | |
| summary | No | |
| version | No | |
| assignee | No | |
| deadline | No | |
| priority | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No | |
| components | No | |
| estimation | No | |
| description | No | |
| storyPoints | No | |
| previousStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key side effect that the issue receives a new key in the target queue, which is critical and not inferable from annotations alone. It also states that the updated issue is returned. While it doesn't mention potential field clearing or irreversibility, those are partly covered by parameter descriptions, so the added value is solid.
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 contain the core action, a concrete example of the key change, and the return value. Nothing is wasted and the most important consequence is front-loaded.
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 captures the essential consequence (new key) and return shape, and the schema covers the six parameters including nuanced toggles like initial_status and move_all_fields. It is slightly thin on caveats such as old key invalidation or field-clearing defaults, but these are sufficiently implied or documented elsewhere.
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 already describes all six parameters with 100% coverage, so the description does not need to repeat them. The description adds no parameter-level detail beyond the schema, 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?
States the specific action 'Move a Yandex Tracker issue to a different queue' with a concrete example of the resulting key change. This clearly distinguishes it from sibling tools like issue_update or issue_execute_transition, which operate within the same queue or on status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when an issue must be relocated to another queue rather than merely updated or transitioned. It does not explicitly name alternatives or state when not to use it, which prevents a 5, but the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issues_countCount IssuesARead-only
Get the count of Yandex Tracker issues matching a query.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to filter issues using Yandex Tracker Query. # General instructions 1. To search by a specific field use the following syntax: `Description: "some issue description"` 2. Multiple fields should be separated by space: `Description: "some issue description" Created: today()` 3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: "vpupkin","iivanov"` 4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: "<value_1>" AND <param_2>: "<value_2>"` 5. You may use brackets for complex logical expressions 6. To find issues with exact string matching in the field use this syntax: `Summary: #"Version 2.0"`. If you need to pass special characters - you must escape them using `\` symbol 7. To find issues that don't contain the specified text use this syntax: `Summary: !"Version 2.0"`. If you need to pass special characters - you must escape them using `\` symbol 8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: "<value>", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_fields` tool result (call it with `include_local_fields=true`). 9. For dates use the format YYYY-MM-DD. 10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`. 11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `"Sort By": Created ASC`. 12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name. # Functions These functions may be used, for example: `Created: week()` - return issues created on the current week" * `empty()` - empty value * `notEmpty()` - not empty value * `now()` - current time * `today()` - current date * `week()` - current week * `month()` - current month * `quarter()` - current quarter * `year()` - current year * `unresolved()` - there is no resolution * `me()` - currently logged in user # Examples Find issues in a specific queue: `"Queue": "PROJ"` Find issues by an assignee: `"Assignee": "i.ivanov"` Find not resolved (open, in progress) issues: `"Resolution": unresolved()` Find issues in specific status: `"Status": "Открыт", "В работе"` Find issues created in a specific range: `"Created": "2017-01-01".."2017-01-30"` Find issues created by currently logged in user: `"Author": me()"` Find issues assigned to currently logged in user: `"Assignee": me()"` Find issues created no earlier than 1 week and 1 day before today: `Created: > today() - "1w 1d"` Complete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of issues matching the query - a count, not an HTTP status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, which already indicates the tool does not mutate state. The description adds no further behavioral details beyond this. It doesn't mention performance implications, return format (though output schema exists), or any constraints. Given the read-only annotation, a score of 3 is baseline; the description doesn't contradict 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 sentence, which is concise and to the point. It is front-loaded with the action and resource. No waste. However, it could arguably be expanded with a note about performance or alternative tools, but as is, it is clean 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 tool has a single parameter with comprehensive schema documentation, a simple output schema, and a read-only annotation, the description is adequate. The context signals indicate high schema coverage and no nested objects. The description suffices for understanding the tool's basic function, and the schema covers the query syntax. It doesn't need to explain return values since output schema exists.
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 schema description coverage is 100% per context signals, and the query parameter's description in the schema is extremely detailed, covering syntax, operators, functions, and examples. The tool description itself does not add content beyond 'matching a query,' but the schema already carries the burden. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the count of Yandex Tracker issues matching a query.' It specifies the verb (get), resource (issues), and the scope (count, matching a query). It is distinct from sibling tools like 'issues_find' (which likely returns issues) and 'issue_get' (single issue), though it doesn't 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 implies usage: it is used to get a count of issues based on a query. However, it does not explicitly state when to use this tool over alternatives like 'issues_find' (e.g., when only a count is needed, not a list). The query parameter has extensive guidance, but the tool-level description lacks explicit context on when to prefer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issues_findFind IssuesARead-only
Find Yandex Tracker issues matching a Yandex Tracker Query (YQL) - not limited to queue/date, any indexed field can be used (assignee, status, tags, etc., see the query parameter for the full syntax).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, default is 1 | |
| query | Yes | Search query to filter issues using Yandex Tracker Query. # General instructions 1. To search by a specific field use the following syntax: `Description: "some issue description"` 2. Multiple fields should be separated by space: `Description: "some issue description" Created: today()` 3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: "vpupkin","iivanov"` 4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: "<value_1>" AND <param_2>: "<value_2>"` 5. You may use brackets for complex logical expressions 6. To find issues with exact string matching in the field use this syntax: `Summary: #"Version 2.0"`. If you need to pass special characters - you must escape them using `\` symbol 7. To find issues that don't contain the specified text use this syntax: `Summary: !"Version 2.0"`. If you need to pass special characters - you must escape them using `\` symbol 8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: "<value>", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_fields` tool result (call it with `include_local_fields=true`). 9. For dates use the format YYYY-MM-DD. 10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`. 11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `"Sort By": Created ASC`. 12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name. # Functions These functions may be used, for example: `Created: week()` - return issues created on the current week" * `empty()` - empty value * `notEmpty()` - not empty value * `now()` - current time * `today()` - current date * `week()` - current week * `month()` - current month * `quarter()` - current quarter * `year()` - current year * `unresolved()` - there is no resolution * `me()` - currently logged in user # Examples Find issues in a specific queue: `"Queue": "PROJ"` Find issues by an assignee: `"Assignee": "i.ivanov"` Find not resolved (open, in progress) issues: `"Resolution": unresolved()` Find issues in specific status: `"Status": "Открыт", "В работе"` Find issues created in a specific range: `"Created": "2017-01-01".."2017-01-30"` Find issues created by currently logged in user: `"Author": me()"` Find issues assigned to currently logged in user: `"Assignee": me()"` Find issues created no earlier than 1 week and 1 day before today: `Created: > today() - "1w 1d"` Complete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter | |
| fields | No | Fields to return, in Tracker's own spelling (`storyPoints`, not `story_points`); the standard ones are in this tool's output schema. For a queue's local or the organization's custom fields, pass the field `id` from `queue_get_fields`. An unknown name is dropped silently, so check there if a field comes back missing. Omitting this returns ALL fields. | |
| per_page | No | The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed. | |
| include_description | No | Whether to include the issue description; it can be large. Ignored when `description` is listed in `fields`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty. |
| pages | No | Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`. |
| values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description is consistent with that. The main description adds scope context but does not disclose behavioral details such as pagination resets, silent dropping of unknown fields, or return-size implications; those live in parameter descriptions rather than the tool description itself.
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 that states what the tool does, narrows the scope ('not limited to queue/date'), gives concrete examples of supported fields, and points to the authoritative syntax source. Every clause earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich input schema covering all parameters, an output schema for return values, and a readOnlyHint annotation. The main description supplies the missing high-level framing of YQL-based search scope, and the query parameter description provides the full syntax and examples. Nothing essential for correctly selecting and invoking the tool is missing.
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, including the full YQL syntax in the query parameter. The main description merely points to the query parameter and mentions indexed field categories, adding little semantic value beyond the schema itself.
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-resource pair ('Find Yandex Tracker issues') and immediately distinguishes this tool from other issue tools by framing it as a YQL search that is 'not limited to queue/date' and can target 'any indexed field.' This clearly separates it from issue_get, issues_count, and queue-scoped 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?
The description gives clear context for when to use the tool: whenever issues need to be found by YQL across indexed fields rather than by a known ID. It does not explicitly name alternative tools such as issue_get or issues_count, nor does it state when not to use this tool, so it stops short of the fullest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_template_getGet Issue TemplateARead-only
Get a single Yandex Tracker issue template by its id, with the field values it prefills; find the id with issue_templates_get_all. The issue body is in fieldTemplates.description, not the template's own description.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Issue template identifier, as returned by the `issue_templates_get_all` tool |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Unique template identifier |
| name | No | Displayed template name |
| queue | No | Queue the template belongs to, if it is queue-specific |
| version | No | Template version |
| description | No | What the template itself is for. Not the issue body: an issue template prefills that through `fieldTemplates.description` |
| fieldTemplates | No | Issue field values prefilled by the template, keyed by field id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds meaningful behavioral nuance beyond the annotation by pointing out that the prefilled issue body lives in `fieldTemplates.description` rather than the template's own `description` field. This prevents a likely misinterpretation of the response structure.
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 tightly written sentences with no filler. The main action is front-loaded, the id-lookup step is immediately given, and the critical field-location caveat is stated at the end. 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 single-parameter read tool with an output schema, readOnlyHint, and a clear id-discoverability pointer, the description is complete. It also resolves the likely confusion around `fieldTemplates.description`, which is exactly the kind of contextual detail an agent needs before invoking 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 description coverage is 100%, so the schema already fully documents `template_id` and states it comes from `issue_templates_get_all`. The description's mention of finding the id via that tool adds no new parameter semantics; it reinforces, but does not expand upon, the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action ('Get a single Yandex Tracker issue template'), the resource, and the lookup key ('by its id'). It also clarifies the distinction from the listing tool by naming `issue_templates_get_all` for id discovery. This is unambiguous and well differentiated from 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 gives clear usage context: use this tool to fetch a single template by id, and use `issue_templates_get_all` to find the id. It does not explicitly enumerate when-not-to-use scenarios or mention the equally similar `comment_template_get` sibling, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_templates_get_allGet Issue TemplatesARead-only
Get the issue templates (in russian - 'шаблоны задач') configured in Yandex Tracker, optionally scoped to a queue - read one before issue_create instead of inventing a structure. The issue body is in fieldTemplates.description; the template's own description describes the template.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, default is None which means to retrieve all pages. Specify page number to retrieve a specific page when context limit is reached. | |
| queue | No | Optional queue (Project ID) to scope the result to, like 'SOMEPROJECT'. Templates that are not bound to any queue are usable everywhere and are returned as well. | |
| per_page | No | The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty. |
| pages | No | Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`. |
| values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the issue body lives in fieldTemplates.description and clarifies that the template's own description describes the template. This provides meaningful behavioral context not present in annotations or 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?
The description is compact, front-loaded with the primary action, and every clause adds value: scope, usage intent, and field guidance. The Russian translation is a minor but harmless addition.
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 list tool with full schema documentation, annotations, and an output schema, the description covers why and when to use it, how to handle queue scoping, and what the key output field means. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds context about queue scoping and the relationship between templates and issue creation, but it does not significantly elaborate on parameter details 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 clearly states the tool retrieves issue templates configured in Yandex Tracker, supports optional queue scoping, and explains its purpose as a precursor to issue_create. This distinguishes it from the singular sibling issue_template_get and from comment templates.
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?
It explicitly tells the agent to read templates before calling issue_create instead of inventing a structure, giving strong usage context. It does not explicitly list exclusions or compare against the singular template tool, but the guidance is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_updateUpdate IssueA
Update an existing Yandex Tracker issue. Only the parameters you pass change; the rest stay as they are. Use queue_get_fields to discover the queue's fields. version is optional optimistic locking - pass one read moments earlier with issue_get, never the one issue_create returned, since triggers bump it right after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Issue tags as array of strings. | |
| type | No | Issue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'), or the bare key/ID. Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue. | |
| fields | No | Additional fields to update, for those without a dedicated parameter above. Field ids come from `queue_get_fields` or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null}), since a dedicated parameter left unset is simply not sent. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name. | |
| parent | No | Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key. | |
| sprint | No | Sprint assignments. Array of objects, each with 'id' field containing the sprint ID (integer). | |
| project | No | Project assignment. Object with 'primary' (int, main project shortId) and optional 'secondary' (list of ints, additional project shortIds). | |
| summary | No | New issue title/summary | |
| version | No | Issue version for optimistic locking: the change lands only if this is the issue's current version, otherwise the call fails with an editing conflict. Read it with `issue_get` right before updating, or omit it to update whatever the latest version is. The version `issue_create` returned is not safe here - triggers bump it right after creation. | |
| assignee | No | New assignee login or UID | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| priority | No | Issue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'), or the bare key/ID. Use get_priorities to find available priorities. | |
| followers | No | Issue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login. Replaces the current follower list. | |
| components | No | Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list. | |
| description | No | New issue description (use markdown formatting) | |
| markup_type | No | Markup type for description text. Use 'md' for YFM (markdown) markup. | md |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| epic | No | |
| tags | No | |
| type | No | |
| spent | No | |
| start | No | |
| votes | No | |
| boards | No | Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`. |
| parent | No | |
| sprint | No | Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them. |
| status | No | |
| unique | No | |
| summary | No | |
| version | No | |
| assignee | No | |
| deadline | No | |
| priority | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No | |
| components | No | |
| estimation | No | |
| description | No | |
| storyPoints | No | |
| previousStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false in annotations, the description adds meaningful behavioral detail: only passed parameters change, and version is an optional optimistic-locking mechanism with a caution about using the version from issue_create due to triggers. This goes beyond the minimal mutation signal provided by 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 three concise sentences with the core purpose front-loaded first, followed by the partial-update semantics and the most important operational caveats. Every sentence adds value and there is no redundant or filler content.
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 update tool, the description covers the critical behavioral semantics: partial update, field discovery, and optimistic locking. The output schema exists, so return-value details are not needed, though a bit more explicit guidance on when to prefer sibling tools would make it fully 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 all parameters thoroughly. The description reinforces the version guidance and points to queue_get_fields, but it does not add substantial new parameter meaning beyond what the schema already provides, 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 states a clear verb and resource: 'Update an existing Yandex Tracker issue,' and the partial-update sentence clarifies the operation's semantics. It does not explicitly name or contrast sibling tools like issue_create or issue_execute_transition, so it stops short of full sibling 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?
The description gives useful operational guidance such as using queue_get_fields to discover fields and reading the version with issue_get before updating. It does not explicitly state when this tool should be preferred over alternatives or when it should not be used, leaving usage context mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_update_checklist_itemUpdate Issue Checklist ItemA
Update one checklist item of a Yandex Tracker issue - to check it off, rename it, or set an assignee or a deadline. Only the fields you pass change, and null leaves a field as it is: use clear_assignee / clear_deadline to remove a value. Item ids come from issue_get_checklist. Returns the whole checklist.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | New checklist item text (Markdown/YFM supported). Omit to leave the current text unchanged. Example: 'Get sign-off from legal.' | |
| checked | No | Whether the checklist item is checked off. Omit to leave unchanged. Example: true | |
| assignee | No | User login or ID (uid) to assign the checklist item to. Omit to leave unchanged; pass `clear_assignee` to remove the current one. Example: 'i.ivanov' | |
| deadline | No | Deadline for the checklist item. Omit to leave unchanged; pass `clear_deadline` to remove the current one. `deadline_type` (or `deadlineType`) is 'date' or 'quarter'. Example: {'date': '2026-08-20T00:00:00', 'deadline_type': 'date'}. | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| clear_assignee | No | Remove the checklist item's assignee. Cannot be combined with `assignee`. Example: true | |
| clear_deadline | No | Remove the checklist item's deadline. Cannot be combined with `deadline`. Example: true | |
| checklist_item_id | Yes | Checklist item ID, as returned in the `id` field of an item by issue_get_checklist. Example: '5f8b2c1e4c3a2d001a7e9b1c'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false annotation, the description discloses the patch-like behavior ('Only the fields you pass change'), the null semantics, the clearing behavior, and the return value ('Returns the whole checklist'). This gives an agent a solid mental model of the mutation without relying solely on the 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?
Three sentences with no filler. The first sentence says what the tool does and its main use cases; the second explains key behavioral semantics; the third points to the ID source and return value. Every sentence earns its place and the most important information is front-loaded.
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 update tool with a rich schema and output schema, the description covers all essential operational context: partial-update semantics, null handling, clearing values, ID sourcing, and the return value. Required parameters and field-level constraints are already in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by synthesizing the optional-parameter behavior: null leaves fields unchanged, clear flags remove values, and checklist_item_id is sourced from issue_get_checklist. This clarifies how the parameters relate beyond their individual 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 names a specific action ('Update one checklist item'), the resource ('of a Yandex Tracker issue'), and concrete use cases ('check it off, rename it, or set an assignee or a deadline'). This clearly differentiates it from sibling tools like issue_add_checklist_items, issue_delete_checklist_item, and issue_get_checklist.
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?
It clearly states when to use the tool: to update an existing checklist item rather than add or delete one. It also tells the user where item ids come from ('issue_get_checklist') and explains when to use clear_assignee/clear_deadline. It does not explicitly name the alternative add/delete siblings, but the update-focused context makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_update_commentUpdate Issue CommentA
Update an existing comment in a Yandex Tracker issue. To mention or call people, use summonees, not '@login' in the text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | New comment text (markdown supported by Tracker). | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| summonees | No | Users to summon (logins or IDs): they are invited to the discussion and notified. This is the API way to 'mention/call' someone in a Yandex Tracker comment. | |
| comment_id | Yes | Comment ID (integer). | |
| markup_type | No | Optional markup type for comment text. Use 'md' for YFM (markdown). | |
| maillist_summonees | No | Optional list of mailing lists to summon (emails). Example: ['team@example.com']. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| text | No | |
| longId | No | |
| textHtml | No | |
| createdAt | No | |
| createdBy | No | |
| summonees | No | |
| transport | No | |
| updatedAt | No | |
| updatedBy | No | |
| maillistSummonees | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only mark readOnlyHint as false, so the description carries some burden for behavioral context. It adds a useful API-specific behavior: mentions/calls should use summonees rather than @login in the text. However, it does not disclose details like whether the update overwrites the entire comment, permission requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence clearly states the operation, and the second adds a high-value usage caveat that prevents a common mistake.
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 six parameters, three required, 100% schema coverage, and an output schema present, the description does not need to repeat parameter details. It covers the core purpose and a key behavioral nuance, making it sufficient for an agent to call the tool correctly. It could be more explicit about alternative tools, but that is already addressed in usage guidelines.
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 goes beyond the schema by clarifying that the text field should not contain '@login' for mentions/calls and that summonees is the intended mechanism, adding meaningful semantic guidance for the text and summonees parameters.
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 an existing comment in a Yandex Tracker issue.' It clearly differentiates from sibling tools like issue_add_comment and issue_delete_comment by emphasizing 'existing comment.'
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 the tool is for editing existing comments rather than creating or deleting them, giving clear context. It also provides a concrete usage rule for mentioning people ('use summonees, not @login'), but it does not explicitly name alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_update_worklogUpdate WorklogB
Update a worklog entry (spent time record) in a Yandex Tracker issue
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | New start datetime for the worklog. If timezone is not provided, UTC is assumed. | |
| comment | No | New comment for the worklog entry. | |
| duration | No | New time spent in ISO-8601 duration format (e.g., 'PT1H30M'). | |
| issue_id | Yes | Issue ID in the format '<project>-<id>', like 'SOMEPROJECT-1' | |
| worklog_id | Yes | Worklog entry ID (integer). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| issue | No | |
| start | No | |
| comment | No | |
| duration | No | |
| createdAt | No | |
| createdBy | No | |
| updatedAt | No | |
| updatedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint to false, confirming this is a write operation. The description adds no further behavioral context, such as whether fields are overwritten or merged, or any side effects. With annotations covering the read/write nature, the description provides minimal additional 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 short sentence with no wasted words. It is appropriately concise for its purpose, though it could be slightly more informative without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and an output schema (not shown), the description lacks information about return values, partial updates, or error conditions. It is minimally adequate for a simple update tool but leaves room for more 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 each parameter is already documented. The description adds 'spent time record' context but no parameter-specific details beyond the schema. 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 'Update' and the resource 'worklog entry (spent time record)' in Yandex Tracker. It distinguishes from siblings by specifying 'update' rather than 'add' or 'delete', but does not explicitly differentiate from other update tools like issue_update.
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 issue_add_worklog or issue_delete_worklog. An agent would need to 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.
queue_create_versionCreate Queue VersionB
Create a new version in a Yandex Tracker queue.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Version name | |
| due_date | No | Optional version due date in YYYY-MM-DD format | |
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' | |
| start_date | No | Optional version start date in YYYY-MM-DD format | |
| description | No | Optional version description |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| dueDate | No | |
| version | Yes | |
| archived | Yes | |
| released | Yes | |
| startDate | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description simply restates the write nature already indicated by annotations (readOnlyHint=false). It adds nothing about side effects, error behavior, idempotency, or confirmation of creation. Given the annotation, the bar is lower, but the description still fails to provide any additional behavioral context beyond what is already known.
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 that conveys the essential action and target. There is no redundancy, filler, or unnecessary detail. It is appropriately sized for the tool's straightforward purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema covers all parameters, annotations indicate a write operation, and an output schema exists, so the basic usage is fully documented. However, the description lacks broader context such as how creating a version interacts with other queue data, whether duplicate names are allowed, or when to use this over other version-related tools. It is minimally adequate but not complete in a holistic sense.
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 parameters are already documented with meaningful descriptions. The tool description adds no additional parameter-level insight, but the schema does the heavy lifting. This matches the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Create') and resource ('a new version in a Yandex Tracker queue'), which distinguishes it from sibling tools like queue_get_versions. It is unambiguous and directly conveys the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as using queue_get_versions to list existing versions or other mutation tools. There is no mention of prerequisites, whether the queue must exist, or when this operation should be preferred over updating an existing version. The description is silent on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_get_componentsGet Queue ComponentsARead-only
Get the components (in russian - 'компоненты') of a Yandex Tracker queue with lead, auto-assign flag and version. queue_get_metadata with expand=['components'] names them only (id and name); the id is what issue_create / issue_update take in components.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds useful content details about returned fields, but it does not describe pagination, error behavior, or other runtime traits. This is acceptable for a simple read-only call, but the description itself adds only modest behavioral context beyond the 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 two dense, purposeful sentences: the first states what is returned, and the second distinguishes a sibling tool and explains the practical use of the id. There is no filler or redundancy.
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 single-parameter, read-only list tool with an output schema, the description covers what is returned, the alternative tool, and the downstream use of the id. Nothing an agent needs to invoke it correctly is missing.
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 single parameter queue_id is fully documented in the schema, including a format example ('SOMEPROJECT'), so the schema carries the parameter-meaning burden. The description does not add further queue_id semantics, 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?
The description states a specific verb and resource: it gets queue components and explicitly lists the included fields (lead, auto-assign flag, version). It also distinguishes this tool from queue_get_metadata, which only returns names and ids, so an agent can tell them apart.
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?
It explicitly names queue_get_metadata with expand=['components'] as the lighter alternative that 'names them only', implying this tool is for when richer component data is needed. It also explains that the returned id is what issue_create and issue_update expect, giving clear downstream context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_get_fieldsGet Queue FieldsARead-only
Get the fields configured on a Yandex Tracker queue (in russian - 'поля очереди'), its local ones included; schema.required marks the mandatory ones. Not the whole registry: system fields such as parent or estimation are settable without appearing here, and get_global_fields lists every organization field.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' | |
| include_local_fields | No | Whether to include queue-specific local fields in the response. When True, makes parallel requests to get both global and local fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description adds meaningful scope limitations: it is not the whole registry, system fields may be missing, and schema.required indicates mandatory fields. This gives an agent an accurate mental model of what the result will and will not contain beyond the annotation's basic safety signal.
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 compact and front-loaded: it states what is retrieved, clarifies local-field inclusion, explains a key response attribute, and then distinguishes the tool from its closest alternative. Every sentence earns its place without redundancy.
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 read-only annotation, the output schema, and the simple two-parameter input schema, the description covers all essential aspects: what is returned, what is excluded, how mandatory fields are indicated, and which sibling tool should be used for the broader scope. No critical behavioral information is missing for an agent to call this tool 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 the input schema already documents queue_id and include_local_fields thoroughly. The description adds the useful note that schema.required marks mandatory fields, but this refers to the response schema rather than input parameter semantics. With full schema coverage, a 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 clearly states the tool gets the fields configured on a Yandex Tracker queue, including local fields. It further distinguishes itself from get_global_fields by explicitly noting this is not the whole registry. An agent can understand exactly what resource and operation this tool covers.
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 a clear alternative, get_global_fields, and explains when that alternative is more appropriate (when all organization fields are needed). It also notes that system fields may be settable without appearing here, which prevents incorrect usage. It does not explicitly address other queue-related siblings like queue_get_tags or queue_get_components, but those are clearly different resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_get_metadataGet Queue MetadataARead-only
Get detailed metadata about a specific Yandex Tracker queue: name, description, default type and priority, plus the sections named in expand (issue types with their resolutions, workflows, team, ...). Use expand=['issueTypesConfig'] for the resolutions issue_close needs.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Optional list of fields to expand in the response. Available options: 'all', 'projects', 'components', 'versions', 'types', 'team', 'workflows', 'fields', 'issueTypesConfig'. Use 'issueTypesConfig' to get available resolutions for each issue type. A requested section that the queue has nothing in comes back as an empty list. | |
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| key | No | |
| name | No | |
| defaultType | No | |
| description | No | |
| defaultPriority | No | |
| issueTypesConfig | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation. The description adds context about the kind of metadata returned and the expand behavior, but it does not disclose deeper behavioral details such as response size limits or failure modes. This is acceptable given the annotation and output 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?
The description is two concise sentences with no filler. The core purpose is front-loaded, followed by a practical parameter tip. Every clause 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 read-only metadata tool with only two parameters, full schema coverage, and an output schema, the description covers everything needed to select and invoke it correctly. It explains the main purpose, the expand parameter's role, and the relevant integration with issue_close.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that `expand` controls which metadata sections come back and explicitly ties `issueTypesConfig` to what `issue_close` needs, which is more than the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets detailed metadata for a specific Yandex Tracker queue and lists what is included (name, description, default type/priority, expandable sections). It distinguishes itself from sibling tools like queues_get_all by emphasizing 'specific queue' and 'detailed metadata', though it does not explicitly name sibling 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 concrete usage context and even cross-tool guidance: 'Use expand=[\'issueTypesConfig\'] for the resolutions issue_close needs.' It does not explicitly state when not to use this tool or compare directly to sibling queue tools, but the intended use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_get_tagsGet Queue TagsARead-only
Get all tags for a specific Yandex Tracker queue
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates a safe read operation. The description adds that it returns 'all tags', which specifies the full scope of the resource. However, it does not disclose additional behaviors such as pagination, filtering, or error conditions. The addition is modest, so a score of 3 is appropriate.
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 that directly states the action and resource. No redundant information, ideal in length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read operation with one parameter and an output schema available, so the description is sufficient for an agent to invoke it correctly. It could optionally note that it returns all tags without filtering, but the phrase 'all tags' already implies completeness. No significant 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?
The input schema already provides a complete description of queue_id with an example format. The description only rephrases it as 'specific Yandex Tracker queue', adding no extra meaning. With 100% schema coverage, baseline 3 is warranted.
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 the specific verb 'Get' with the resource 'all tags for a specific Yandex Tracker queue', clearly distinguishing it from sibling tools like queue_get_metadata or queue_get_versions. It leaves no ambiguity about what the tool returns.
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. It does not mention exclusions, prerequisites, or related tools. The only inference is from the name and description that tags are the resource, but no explicit usage context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_get_versionsGet Queue VersionsARead-only
Get all versions for a specific Yandex Tracker queue
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | Queue (Project ID) to search in, like 'SOMEPROJECT' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds the 'all versions' scope, but does not disclose other behavioral aspects such as pagination, ordering, or error cases. No contradiction with 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?
A single, front-loaded sentence with no unnecessary words. It communicates the tool's purpose immediately and efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one required parameter, read-only annotations, and an output schema present. The description, combined with the schema and annotations, is sufficiently complete for accurate 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 schema fully covers the one parameter queue_id with a descriptive example ('like SOMEPROJECT'). The description merely restates the parameter's purpose without adding further semantic detail.
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 resource ('all versions for a specific queue'), clearly distinguishing it from siblings like queue_get_metadata or queue_get_tags. The scope is precise (versions, not other queue properties).
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 when retrieving queue versions, but does not explicitly mention when to use this tool over alternatives like queue_create_version or queue_get_metadata. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queues_get_allGet All QueuesARead-only
Find all Yandex Tracker queues available to the user (a queue is a project in some sense). page defaults to None and fetches ALL pages; pass a page number only when the result does not fit the context window.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, default is None which means to retrieve all pages. Specify page number to retrieve a specific page when context limit is reached. | |
| fields | No | Fields to include in the response; omitting returns ALL of them (unlike project_find/portfolio_find/goal_find, which default to a small subset). key and name are usually enough. | |
| per_page | No | The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty. |
| pages | No | Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`. |
| values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context beyond that: the default behavior of fetching ALL pages, the context-window consideration, and that the result is scoped to queues available to the user. This is valuable because page semantics can otherwise be surprising.
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 short sentences with the purpose front-loaded and pagination guidance immediately after. Every sentence earns its place, and the parenthetical about queues being projects adds useful domain context without bloating the text.
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 readOnlyHint annotation, the extensive schema descriptions, and the presence of an output schema, the description covers the essential operational guidance: what the tool returns, its scope, and how to handle pagination when context limits are hit. Nothing critical is missing for an 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%, and the schema already thoroughly documents page, fields, and per_page, including defaults and the restart-on-per_page-change caveat. The tool description repeats the page default but adds little 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?
The description states a specific action and resource: 'Find all Yandex Tracker queues available to the user.' It clearly distinguishes this list-all operation from sibling tools like queue_get_metadata or queue_get_components by emphasizing scope ('all queues available to the user') and the pagination behavior tied to fetching all 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?
The description gives clear context for when to use the page parameter: only pass a page number when the result does not fit the context window; otherwise fetch all pages. It does not explicitly name alternatives or when-not-to-use the tool versus siblings, but the pagination guidance is actionable and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_getGet UserARead-only
Get information about a specific user by login or UID
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | User identifier - can be user login (e.g., 'john.doe') or user UID (e.g., '12345') |
Output Schema
| Name | Required | Description |
|---|---|---|
| uid | Yes | |
| No | ||
| login | Yes | |
| display | No | |
| external | No | |
| lastName | No | |
| dismissed | No | |
| firstName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'Get information' aligns with that. The description adds the scope of lookup by login or UID, but this is more about parameter semantics than additional behavioral disclosure. No extra context about return format, errors, or permissions is provided, but the read-only annotation covers the safety profile.
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 directly communicates the tool's function and scope. Every word earns its place, with no redundancy 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?
For a simple single-parameter getter with readOnly annotation and an output schema available, the description is sufficient. It clearly identifies what the tool does, and the schema handles parameter details, so no additional context 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 already provides 100% coverage, including a clear description of user_id as accepting either a login or UID with examples. The tool description adds no new parameter information, so it neither enhances nor detracts from the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Get') and resource ('information about a specific user') with clear identifier scope ('by login or UID'). It distinguishes from sibling tools like users_get_all, users_search, and user_get_current by emphasizing a single specific user lookup.
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 clearly implies usage when a specific user identifier (login or UID) is known, which guides selection away from search/list tools. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of full guideline clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_get_currentGet Current UserARead-only
Get information about the current authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| uid | Yes | |
| No | ||
| login | Yes | |
| display | No | |
| external | No | |
| lastName | No | |
| dismissed | No | |
| firstName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint:true already discloses the read-only nature, and the description 'Get information' aligns with that. However, the description adds no further behavioral context such as authentication requirements or potential error cases. It is consistent with annotations but does not enrich the agent's understanding beyond 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 a single sentence, front-loaded with the action and resource. There is no wasted wording, and it conveys the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, output schema present), the description is sufficient. It does not need to explain return values because the output schema covers that. The only minor gap is not explicitly stating that the user is determined by the authentication context, but 'current authenticated user' already implies this.
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, so there is nothing to document. The baseline is 4 per the rubric since no parameter information is needed. The description correctly implies that no user-specific input is required, as it targets the current authenticated user.
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 'Get information about the current authenticated user', identifying the specific action (get) and resource (current user). This distinguishes it from siblings like user_get (which fetches a specific user by ID) and users_get_all (which lists users). The verb and resource are precise and 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?
The description implies usage context: it is for retrieving the currently authenticated user's info. It does not explicitly mention alternatives or exclusions, but the phrase 'current authenticated user' makes it clear when this tool is appropriate compared to user_get or users_search. A slight gap is the lack of explicit 'use this when...' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_get_allGet All UsersCRead-only
Get information about user accounts registered in the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to return, default is 1 | |
| fields | No | Fields to include in each user; omit to get all. Select only what you need. | |
| per_page | No | The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty. |
| pages | No | Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`. |
| values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a read-only operation, and the description adds little beyond restating that. It does not disclose pagination behavior, result limits, or any other operational traits, aside from the nominal scoping to organization-registered accounts.
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 wasted words and is easy to parse. However, it is somewhat generic ('Get information') and could have used the space to add scope or sibling differentiation 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?
The presence of an output schema and well-described parameters covers much of what an agent needs to make a valid call. Still, the description fails to guide selection among closely related user tools, and the pagination reset behavior is only visible in the schema rather than highlighted as a usage consideration.
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 description does not need to explain parameters. The schema already documents page, fields, and per_page with meaningful guidance, including the context-window note. The description adds no parameter-level meaning, but the baseline of 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb and resource: getting information about user accounts. However, it does not differentiate from sibling tools like users_search, user_get, or user_get_current, so the agent must rely on the tool name to infer it is a list-all operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not state when to use this tool over users_search or user_get, nor does it mention pagination as a reason to use this tool versus alternatives. The agent is left to infer context from the name and parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_searchSearch UsersARead-only
Search user based on login, email or real name (first or last name, or both). Returns either single user or multiple users if several match the query or an empty list if no users matched.
| Name | Required | Description | Default |
|---|---|---|---|
| login_or_email_or_name | Yes | User login, email or real name to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering safety. The description adds behavioral detail about return format (single/multiple/empty list), which is useful beyond the annotation.
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 concise sentences front-load the purpose and include return behavior. No redundant text, every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool with read-only annotation and output schema, the description covers purpose, search fields, and return outcomes. It could specify match semantics (exact vs partial), but overall it is adequately 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?
The input schema fully describes the only parameter (coverage 100%). The description repeats similar wording without adding extra semantic meaning, so it meets the baseline but does not go 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 clearly states 'Search user based on login, email or real name' with a specific verb and resource. It also explains return behavior (single, multiple, empty), distinguishing it from siblings like users_get_all and user_get.
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 specifies the search criteria (login, email, name), making it clear when to use this tool. It does not explicitly mention alternatives or exclusions, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.10.0- Added
board_get - Added
board_get_columns - Added
board_get_sprints - Added
boards_get_all - Added
component_create - Added
component_delete - Added
component_get - Added
component_update - Added
issue_add_checklist_items - Changed
issue_add_comment1 field changed- changed
Input schema / properties / summonees / descriptionPrevious value: -"Optional list of summoned users (logins or IDs). These users will be invited to the discussion and receive notifications (this is the API way to 'mention/call' someone in Yandex Tracker comments)."New value: +"Users to summon (logins or IDs): they are invited to the discussion and notified. This is the API way to 'mention/call' someone in a Yandex Tracker comment."
- Changed
issue_create6 fields changed- changed
Input schema / $defs / IssueComponentRef / properties / id / descriptionPrevious value: -"Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number."New value: +"Component ID (numeric, as returned by queue_get_components or queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number." - changed
Input schema / properties / components / descriptionPrevious value: -"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name."New value: +"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name." - changed
Input schema / properties / fields / descriptionPrevious value: -"Additional fields to set during issue creation, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue (schema.required=true marks the mandatory ones) and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name."New value: +"Additional fields to set, for those without a dedicated parameter above. Field ids come from `queue_get_fields` (schema.required=true marks the mandatory ones) or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name." - added
Output schema / $defs / IssueBoardReferenceAdded value: +{ + "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board name", + "title": "Name" + } + }, + "title": "IssueBoardReference", + "type": "object" +} - added
Output schema / properties / boardsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueBoardReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.", + "title": "Boards" +} - added
Output schema / properties / sprint / descriptionAdded value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them."
- Added
issue_delete_checklist_item - Changed
issue_get3 fields changed- added
Output schema / $defs / IssueBoardReferenceAdded value: +{ + "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board name", + "title": "Name" + } + }, + "title": "IssueBoardReference", + "type": "object" +} - added
Output schema / properties / boardsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueBoardReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.", + "title": "Boards" +} - added
Output schema / properties / sprint / descriptionAdded value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them."
- Changed
issue_get_attachments1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in each attachment. In order to not pollute the context window - select only the fields you need (the 'content' field can be large). Not specifying this returns all available fields."New value: +"Fields to include in each attachment; omit to get all. The 'content' field can be large, so select only what you need."
- Changed
issue_get_comments1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in each comment. In order to not pollute the context window - select only the fields you need (comment text/text_html can be large). Not specifying this returns all available fields."New value: +"Fields to include in each comment; omit to get all. text/text_html can be large, so select only what you need."
- Changed
issue_get_worklogs1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in each worklog entry. In order to not pollute the context window - select only the fields you need. Not specifying this returns all available fields."New value: +"Fields to include in each worklog entry; omit to get all. Select only what you need."
- Changed
issue_move3 fields changed- added
Output schema / $defs / IssueBoardReferenceAdded value: +{ + "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board name", + "title": "Name" + } + }, + "title": "IssueBoardReference", + "type": "object" +} - added
Output schema / properties / boardsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueBoardReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.", + "title": "Boards" +} - added
Output schema / properties / sprint / descriptionAdded value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them."
- Changed
issue_update7 fields changed- changed
Input schema / $defs / IssueComponentRef / properties / id / descriptionPrevious value: -"Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number."New value: +"Component ID (numeric, as returned by queue_get_components or queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number." - changed
Input schema / properties / components / descriptionPrevious value: -"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list."New value: +"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list." - changed
Input schema / properties / fields / descriptionPrevious value: -"Additional fields to update, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null, 'parent': null}), since a dedicated parameter left unset simply is not sent. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name."New value: +"Additional fields to update, for those without a dedicated parameter above. Field ids come from `queue_get_fields` or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null}), since a dedicated parameter left unset is simply not sent. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name." - changed
Input schema / properties / version / descriptionPrevious value: -"Issue version for optimistic locking; changes are only applied when it is the issue's current version, otherwise the call fails with an editing conflict. Read it with issue_get immediately before updating, and omit it when you just want the update to land on whatever the latest version is. The version returned by issue_create is not safe to use here: queue triggers and automation bump it right after creation."New value: +"Issue version for optimistic locking: the change lands only if this is the issue's current version, otherwise the call fails with an editing conflict. Read it with `issue_get` right before updating, or omit it to update whatever the latest version is. The version `issue_create` returned is not safe here - triggers bump it right after creation." - added
Output schema / $defs / IssueBoardReferenceAdded value: +{ + "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board name", + "title": "Name" + } + }, + "title": "IssueBoardReference", + "type": "object" +} - added
Output schema / properties / boardsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueBoardReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.", + "title": "Boards" +} - added
Output schema / properties / sprint / descriptionAdded value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them."
- Added
issue_update_checklist_item - Changed
issue_update_comment1 field changed- changed
Input schema / properties / summonees / descriptionPrevious value: -"Optional list of summoned users (logins or IDs). These users will be invited to the discussion and receive notifications."New value: +"Users to summon (logins or IDs): they are invited to the discussion and notified. This is the API way to 'mention/call' someone in a Yandex Tracker comment."
- Changed
issues_find4 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to return, in Tracker's own spelling (`storyPoints`, not `story_points`); the standard ones are those of this tool's output schema. For a queue's local or the organization's custom fields, pass the field `id` from `queue_get_fields`. A name Tracker does not know is dropped silently rather than reported, so check that tool if a field comes back missing. Omitting this returns ALL fields, including the queue's local ones."New value: +"Fields to return, in Tracker's own spelling (`storyPoints`, not `story_points`); the standard ones are in this tool's output schema. For a queue's local or the organization's custom fields, pass the field `id` from `queue_get_fields`. An unknown name is dropped silently, so check there if a field comes back missing. Omitting this returns ALL fields." - added
Output schema / $defs / Issue / properties / boardsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueBoardReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.", + "title": "Boards" +} - added
Output schema / $defs / Issue / properties / sprint / descriptionAdded value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them." - added
Output schema / $defs / IssueBoardReferenceAdded value: +{ + "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Board name", + "title": "Name" + } + }, + "title": "IssueBoardReference", + "type": "object" +}
- Added
queue_get_components - Changed
queues_get_all1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in the response. In order to not pollute context window - select appropriate fields beforehand. Not specifying fields returns ALL available fields (unlike project_find/portfolio_find/goal_find, which default to a small field subset). Most of the time one needs key and name only."New value: +"Fields to include in the response; omitting returns ALL of them (unlike project_find/portfolio_find/goal_find, which default to a small subset). key and name are usually enough."
- Changed
users_get_all1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in each user. In order to not pollute the context window - select only the fields you need. Not specifying this returns all available fields."New value: +"Fields to include in each user; omit to get all. Select only what you need."
16 tool updates
v0.8.0- Added
comment_template_get - Added
comment_templates_get_all - Changed
get_priorities3 fields changed- added
Output schema / $defs / Priority / properties / descriptionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Priority description", + "title": "Description" +} - added
Output schema / $defs / Priority / properties / idAdded value: +{ + "description": "Priority ID", + "title": "Id", + "type": "integer" +} - changed
Output schema / $defs / Priority / requiredPrevious value: -[ - "version", - "key", - "name", - "order" -]New value: +[ + "id", + "version", + "key", + "name", + "order" +]
- Changed
issue_close1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Optional dictionary of additional fields to set during the transition. Common fields include 'resolution' (e.g., 'fixed', 'wontFix') for closing issues, 'assignee' for reassigning, etc."New value: +"Optional dictionary of additional fields to set during the transition (e.g. 'assignee' for reassigning). Do NOT set 'resolution' here - use the dedicated resolution_id parameter instead."
- Changed
issue_create14 fields changed- added
Input schema / $defsAdded value: +{ + "IssueComponentRef": { + "description": "Queue component reference.\n\nExactly one of `id` / `name` must be set: Tracker treats numbers as\ncomponent ids and strings as component names, so `\"694\"` is a *name*.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number.", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Component name, used only when the ID is unknown", + "title": "Name" + } + }, + "title": "IssueComponentRef", + "type": "object" + }, + "IssueFollowerRef": { + "description": "Follower reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "User ID (uid, e.g. 8000000000000034) or login (e.g. 'jdoe')", + "title": "Id" + } + }, + "required": [ + "id" + ], + "title": "IssueFollowerRef", + "type": "object" + }, + "IssueParentRef": { + "description": "Parent issue reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Parent issue ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Parent issue key (e.g., 'QUEUE-123')", + "title": "Key" + } + }, + "title": "IssueParentRef", + "type": "object" + }, + "IssuePriorityRef": { + "description": "Priority reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Priority ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Priority key (e.g., 'critical', 'normal')", + "title": "Key" + } + }, + "title": "IssuePriorityRef", + "type": "object" + }, + "IssueProjectRef": { + "description": "Project configuration for an issue.", + "properties": { + "primary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Primary project ID (shortId of the project)", + "title": "Primary" + }, + "secondary": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Secondary project IDs (shortId of additional projects)", + "title": "Secondary" + } + }, + "title": "IssueProjectRef", + "type": "object" + }, + "IssueSprintRef": { + "description": "Sprint reference.", + "properties": { + "id": { + "description": "Sprint ID", + "title": "Id", + "type": "integer" + } + }, + "required": [ + "id" + ], + "title": "IssueSprintRef", + "type": "object" + }, + "IssueTypeRef": { + "description": "Issue type reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue type ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue type key (e.g., 'bug', 'task')", + "title": "Key" + } + }, + "title": "IssueTypeRef", + "type": "object" + } +} - added
Input schema / properties / componentsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueComponentRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name.", + "title": "Components" +} - changed
Input schema / properties / description / descriptionPrevious value: -"Issue description"New value: +"Issue description (use markdown formatting)" - changed
Input schema / properties / fields / descriptionPrevious value: -"Additional fields to set during issue creation. IMPORTANT: Before creating an issue, you MUST call `queue_get_fields` to get available fields (it returns both global and local fields by default). Fields with schema.required=true are mandatory and must be provided. Use the field's `id` property as the key in this map (e.g., {'fieldId': 'value'})."New value: +"Additional fields to set during issue creation, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue (schema.required=true marks the mandatory ones) and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name." - added
Input schema / properties / followersAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueFollowerRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login.", + "title": "Followers" +} - added
Input schema / properties / markup_typeAdded value: +{ + "default": "md", + "description": "Markup type for description text. Use 'md' for YFM (markdown) markup.", + "title": "Markup Type", + "type": "string" +} - added
Input schema / properties / parentAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/IssueParentRef" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key.", + "title": "Parent" +} - changed
Input schema / properties / priority / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssuePriorityRef" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority key (from get_priorities tool,)"New value: +"Issue priority: an object with 'id' (priority ID) and/or 'key' (e.g., 'critical', 'normal'), or the bare key/ID (from get_priorities tool)." - added
Input schema / properties / projectAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/IssueProjectRef" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Project assignment. Object with 'primary' (int, main project shortId) and optional 'secondary' (list of ints, additional project shortIds)." +} - added
Input schema / properties / sprintAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueSprintRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sprint assignments. Array of objects, each with 'id' field containing the sprint ID (integer).", + "title": "Sprint" +} - added
Input schema / properties / tagsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue tags as array of strings.", + "title": "Tags" +} - changed
Input schema / properties / type / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssueTypeRef" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / type / descriptionPrevious value: -"Issue type id (from get_issue_types tool)"New value: +"Issue type: an object with 'id' (type ID) and/or 'key' (e.g., 'bug', 'task'), or the bare key/ID (from get_issue_types tool)."
- Changed
issue_get_attachments2 fields changed- added
Input schema / $defsAdded value: +{ + "AttachmentFieldsEnum": { + "enum": [ + "created_at", + "created_by", + "id", + "name", + "content", + "size", + "mimetype", + "metadata" + ], + "title": "AttachmentFieldsEnum", + "type": "string" + } +} - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/AttachmentFieldsEnum" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields to include in each attachment. In order to not pollute the context window - select only the fields you need (the 'content' field can be large). Not specifying this returns all available fields.", + "title": "Fields" +}
- Changed
issue_get_comments10 fields changed- added
Input schema / $defsAdded value: +{ + "CommentFieldsEnum": { + "enum": [ + "created_at", + "updated_at", + "created_by", + "updated_by", + "id", + "long_id", + "text", + "transport", + "text_html", + "summonees", + "maillist_summonees" + ], + "title": "CommentFieldsEnum", + "type": "string" + } +} - added
Input schema / properties / cursorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Cursor for the next page of comments: the 'next_cursor' value returned by the previous call. Leave empty for the first page.", + "title": "Cursor" +} - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/CommentFieldsEnum" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields to include in each comment. In order to not pollute the context window - select only the fields you need (comment text/text_html can be large). Not specifying this returns all available fields.", + "title": "Fields" +} - added
Input schema / properties / per_pageAdded value: +{ + "default": 50, + "description": "The number of items per page for cursor-paginated endpoints. May be decreased if results exceed the context window.", + "minimum": 1, + "title": "Per Page", + "type": "integer" +} - added
Output schema / descriptionAdded value: +"A page of comments plus the cursor to fetch the next page.\n\n`next_cursor` is the cursor for the next page, or `None` when there are no more\npages; how it is obtained depends on the endpoint. Pass it back as the `cursor`\nargument to continue." - added
Output schema / properties / commentsAdded value: +{ + "items": { + "$ref": "#/$defs/IssueComment" + }, + "title": "Comments", + "type": "array" +} - added
Output schema / properties / next_cursorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Cursor" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "$ref": "#/$defs/IssueComment" - }, - "title": "Result", - "type": "array" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "comments" +] - changed
Output schema / titlePrevious value: -"issue_get_commentsOutput"New value: +"CommentsPage"
- Changed
issue_get_worklogs2 fields changed- added
Input schema / $defsAdded value: +{ + "WorklogFieldsEnum": { + "enum": [ + "created_at", + "updated_at", + "created_by", + "updated_by", + "id", + "start", + "duration", + "issue", + "comment" + ], + "title": "WorklogFieldsEnum", + "type": "string" + } +} - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/WorklogFieldsEnum" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields to include in each worklog entry. In order to not pollute the context window - select only the fields you need. Not specifying this returns all available fields.", + "title": "Fields" +}
- Added
issue_template_get - Added
issue_templates_get_all - Changed
issue_update30 fields changed- added
Input schema / $defs / IssueComponentRefAdded value: +{ + "description": "Queue component reference.\n\nExactly one of `id` / `name` must be set: Tracker treats numbers as\ncomponent ids and strings as component names, so `\"694\"` is a *name*.", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number.", + "title": "Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Component name, used only when the ID is unknown", + "title": "Name" + } + }, + "title": "IssueComponentRef", + "type": "object" +} - added
Input schema / $defs / IssueFollowerRefAdded value: +{ + "description": "Follower reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "User ID (uid, e.g. 8000000000000034) or login (e.g. 'jdoe')", + "title": "Id" + } + }, + "required": [ + "id" + ], + "title": "IssueFollowerRef", + "type": "object" +} - added
Input schema / $defs / IssueParentRefAdded value: +{ + "description": "Parent issue reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Parent issue ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Parent issue key (e.g., 'QUEUE-123')", + "title": "Key" + } + }, + "title": "IssueParentRef", + "type": "object" +} - added
Input schema / $defs / IssuePriorityRefAdded value: +{ + "description": "Priority reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Priority ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Priority key (e.g., 'critical', 'normal')", + "title": "Key" + } + }, + "title": "IssuePriorityRef", + "type": "object" +} - added
Input schema / $defs / IssueProjectRefAdded value: +{ + "description": "Project configuration for an issue.", + "properties": { + "primary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Primary project ID (shortId of the project)", + "title": "Primary" + }, + "secondary": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Secondary project IDs (shortId of additional projects)", + "title": "Secondary" + } + }, + "title": "IssueProjectRef", + "type": "object" +} - added
Input schema / $defs / IssueSprintRefAdded value: +{ + "description": "Sprint reference.", + "properties": { + "id": { + "description": "Sprint ID", + "title": "Id", + "type": "integer" + } + }, + "required": [ + "id" + ], + "title": "IssueSprintRef", + "type": "object" +} - added
Input schema / $defs / IssueTypeRefAdded value: +{ + "description": "Issue type reference.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue type ID", + "title": "Id" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue type key (e.g., 'bug', 'task')", + "title": "Key" + } + }, + "title": "IssueTypeRef", + "type": "object" +} - removed
Input schema / $defs / IssueUpdateFollowerRemoved value: -{ - "description": "Follower reference for issue update.", - "properties": { - "id": { - "description": "User ID or login", - "title": "Id", - "type": "string" - } - }, - "required": [ - "id" - ], - "title": "IssueUpdateFollower", - "type": "object" -} - removed
Input schema / $defs / IssueUpdateParentRemoved value: -{ - "description": "Parent issue reference for issue update.", - "properties": { - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Parent issue ID", - "title": "Id" - }, - "key": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Parent issue key (e.g., 'QUEUE-123')", - "title": "Key" - } - }, - "title": "IssueUpdateParent", - "type": "object" -} - removed
Input schema / $defs / IssueUpdatePriorityRemoved value: -{ - "description": "Priority reference for issue update.", - "properties": { - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Priority ID", - "title": "Id" - }, - "key": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Priority key (e.g., 'critical', 'normal')", - "title": "Key" - } - }, - "title": "IssueUpdatePriority", - "type": "object" -} - removed
Input schema / $defs / IssueUpdateProjectRemoved value: -{ - "description": "Project configuration for issue update.", - "properties": { - "primary": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Primary project ID (shortId of the project)", - "title": "Primary" - }, - "secondary": { - "anyOf": [ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Secondary project IDs (shortId of additional projects)", - "title": "Secondary" - } - }, - "title": "IssueUpdateProject", - "type": "object" -} - removed
Input schema / $defs / IssueUpdateSprintRemoved value: -{ - "description": "Sprint reference for issue update.", - "properties": { - "id": { - "description": "Sprint ID", - "title": "Id", - "type": "integer" - } - }, - "required": [ - "id" - ], - "title": "IssueUpdateSprint", - "type": "object" -} - removed
Input schema / $defs / IssueUpdateTypeRemoved value: -{ - "description": "Issue type reference for issue update.", - "properties": { - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Issue type ID", - "title": "Id" - }, - "key": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Issue type key (e.g., 'bug', 'task')", - "title": "Key" - } - }, - "title": "IssueUpdateType", - "type": "object" -} - added
Input schema / properties / assigneeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "New assignee login or UID", + "title": "Assignee" +} - added
Input schema / properties / componentsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/IssueComponentRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list.", + "title": "Components" +} - changed
Input schema / properties / fields / descriptionPrevious value: -"Additional fields to update. Use queue_get_fields to discover available fields. Use the field's 'id' property as the key (e.g., {'fieldId': 'value'})."New value: +"Additional fields to update, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null, 'parent': null}), since a dedicated parameter left unset simply is not sent. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name." - changed
Input schema / properties / followers / anyOfPrevious value: -[ - { - "items": { - "$ref": "#/$defs/IssueUpdateFollower" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "$ref": "#/$defs/IssueFollowerRef" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / followers / descriptionPrevious value: -"Issue followers/watchers. Array of objects, each with 'id' field containing the user ID or login."New value: +"Issue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login. Replaces the current follower list." - changed
Input schema / properties / parent / anyOfPrevious value: -[ - { - "$ref": "#/$defs/IssueUpdateParent" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssueParentRef" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / parent / descriptionPrevious value: -"Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123')."New value: +"Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key." - added
Input schema / properties / parent / titleAdded value: +"Parent" - changed
Input schema / properties / priority / anyOfPrevious value: -[ - { - "$ref": "#/$defs/IssueUpdatePriority" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssuePriorityRef" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / priority / descriptionPrevious value: -"Issue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'). Use get_priorities to find available priorities."New value: +"Issue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'), or the bare key/ID. Use get_priorities to find available priorities." - added
Input schema / properties / priority / titleAdded value: +"Priority" - changed
Input schema / properties / project / anyOfPrevious value: -[ - { - "$ref": "#/$defs/IssueUpdateProject" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssueProjectRef" + }, + { + "type": "null" + } +] - changed
Input schema / properties / sprint / anyOfPrevious value: -[ - { - "items": { - "$ref": "#/$defs/IssueUpdateSprint" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "$ref": "#/$defs/IssueSprintRef" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / type / anyOfPrevious value: -[ - { - "$ref": "#/$defs/IssueUpdateType" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/IssueTypeRef" + }, + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / type / descriptionPrevious value: -"Issue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'). Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue."New value: +"Issue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'), or the bare key/ID. Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue." - added
Input schema / properties / type / titleAdded value: +"Type" - changed
Input schema / properties / version / descriptionPrevious value: -"Issue version for optimistic locking. Changes are only made to the current version of the issue. Always try to receive issue's version using issue_get tool first."New value: +"Issue version for optimistic locking; changes are only applied when it is the issue's current version, otherwise the call fails with an editing conflict. Read it with issue_get immediately before updating, and omit it when you just want the update to land on whatever the latest version is. The version returned by issue_create is not safe to use here: queue triggers and automation bump it right after creation."
- Changed
issues_count6 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n"New value: +"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_fields` tool result (call it with `include_local_fields=true`).\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n" - added
Output schema / descriptionAdded value: +"The number of issues matching a query." - added
Output schema / properties / countAdded value: +{ + "description": "Number of issues matching the query - a count, not an HTTP status.", + "title": "Count", + "type": "integer" +} - removed
Output schema / properties / resultRemoved value: -{ - "title": "Result", - "type": "integer" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "count" +] - changed
Output schema / titlePrevious value: -"issues_countOutput"New value: +"IssuesCount"
- Changed
issues_find11 fields changed- removed
Input schema / $defsRemoved value: -{ - "IssueFieldsEnum": { - "enum": [ - "created_at", - "updated_at", - "created_by", - "updated_by", - "version", - "unique", - "key", - "summary", - "description", - "type", - "priority", - "assignee", - "status", - "previous_status", - "deadline", - "components", - "start", - "story_points", - "tags", - "votes", - "sprint", - "epic", - "parent", - "estimation", - "spent" - ], - "title": "IssueFieldsEnum", - "type": "string" - } -} - changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "$ref": "#/$defs/IssueFieldsEnum" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in the response. In order to not pollute context window - select appropriate fields beforehand. Not specifying fields will return all available."New value: +"Fields to return, in Tracker's own spelling (`storyPoints`, not `story_points`); the standard ones are those of this tool's output schema. For a queue's local or the organization's custom fields, pass the field `id` from `queue_get_fields`. A name Tracker does not know is dropped silently rather than reported, so check that tool if a field comes back missing. Omitting this returns ALL fields, including the queue's local ones." - changed
Input schema / properties / include_description / descriptionPrevious value: -"Whether to include issue description in the issues result. It can be large, so use only when needed."New value: +"Whether to include the issue description; it can be large. Ignored when `description` is listed in `fields`." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n"New value: +"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_fields` tool result (call it with `include_local_fields=true`).\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n" - added
Output schema / properties / hitsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty.", + "title": "Hits" +} - added
Output schema / properties / pagesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`.", + "title": "Pages" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "$ref": "#/$defs/Issue" - }, - "title": "Result", - "type": "array" -} - added
Output schema / properties / valuesAdded value: +{ + "items": { + "$ref": "#/$defs/Issue" + }, + "title": "Values", + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"issues_findOutput"New value: +"PaginatedResult[Issue]"
- Changed
queue_get_metadata2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Optional list of fields to expand in the response. Available options: 'all', 'projects', 'components', 'versions', 'types', 'team', 'workflows', 'fields', 'issueTypesConfig'. Use 'issueTypesConfig' to get available resolutions for each issue type."New value: +"Optional list of fields to expand in the response. Available options: 'all', 'projects', 'components', 'versions', 'types', 'team', 'workflows', 'fields', 'issueTypesConfig'. Use 'issueTypesConfig' to get available resolutions for each issue type. A requested section that the queue has nothing in comes back as an empty list." - added
Output schema / additionalPropertiesAdded value: +true
- Changed
queues_get_all9 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Fields to include in the response. In order to not pollute context window - select appropriate fields beforehand. Not specifying fields will return all available. Most of the time one needs key and name only."New value: +"Fields to include in the response. In order to not pollute context window - select appropriate fields beforehand. Not specifying fields returns ALL available fields (unlike project_find/portfolio_find/goal_find, which default to a small field subset). Most of the time one needs key and name only." - changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - added
Output schema / $defs / Queue / additionalPropertiesAdded value: +true - added
Output schema / properties / hitsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty.", + "title": "Hits" +} - added
Output schema / properties / pagesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`.", + "title": "Pages" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "$ref": "#/$defs/Queue" - }, - "title": "Result", - "type": "array" -} - added
Output schema / properties / valuesAdded value: +{ + "items": { + "$ref": "#/$defs/Queue" + }, + "title": "Values", + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"queues_get_allOutput"New value: +"PaginatedResult[Queue]"
- Changed
users_get_all8 fields changed- added
Input schema / $defsAdded value: +{ + "UserFieldsEnum": { + "enum": [ + "uid", + "login", + "first_name", + "last_name", + "display", + "email", + "external", + "dismissed" + ], + "title": "UserFieldsEnum", + "type": "string" + } +} - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/UserFieldsEnum" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields to include in each user. In order to not pollute the context window - select only the fields you need. Not specifying this returns all available fields.", + "title": "Fields" +} - added
Output schema / properties / hitsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total items matching the request, across all pages. Null if unknown or filtered - then page on until a page comes back empty.", + "title": "Hits" +} - added
Output schema / properties / pagesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Total pages at the requested `per_page`; this is the last page when it equals `page`. Null together with `hits`.", + "title": "Pages" +} - removed
Output schema / properties / resultRemoved value: -{ - "items": { - "$ref": "#/$defs/User" - }, - "title": "Result", - "type": "array" -} - added
Output schema / properties / valuesAdded value: +{ + "items": { + "$ref": "#/$defs/User" + }, + "title": "Values", + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"users_get_allOutput"New value: +"PaginatedResult[User]"
1 tool update
v0.7.2- Added
issue_get_changelog
4 tool updates
v0.7.1- Added
issue_add_link - Added
issue_delete_link - Added
issue_move - Added
queue_create_version
23 tool updates
v0.6.3- Changed
get_global_fields3 fields changed- added
Output schema / $defs / OptionsProvider / additionalPropertiesAdded value: +true - added
Output schema / $defs / QueryProvider / additionalPropertiesAdded value: +true - added
Output schema / $defs / SuggestProvider / additionalPropertiesAdded value: +true
- Added
get_resolutions - Changed
get_statuses5 fields changed- added
Output schema / $defs / Status / properties / type / anyOfAdded value: +[ + { + "enum": [ + "new", + "inProgress", + "paused", + "done", + "cancelled" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / $defs / Status / properties / type / defaultAdded value: +null - removed
Output schema / $defs / Status / properties / type / enumRemoved value: -[ - "new", - "inProgress", - "paused", - "done", - "cancelled" -] - removed
Output schema / $defs / Status / properties / type / typeRemoved value: -"string" - changed
Output schema / $defs / Status / requiredPrevious value: -[ - "version", - "key", - "name", - "order", - "type" -]New value: +[ + "version", + "key", + "name", + "order" +]
- Added
issue_add_comment - Added
issue_add_worklog - Added
issue_close - Added
issue_create - Added
issue_delete_comment - Added
issue_delete_worklog - Added
issue_execute_transition - Changed
issue_get4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - added
Output schema / properties / estimationAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Estimation" +} - added
Output schema / properties / spentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spent" +} - added
Output schema / properties / versionAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Version" +}
- Changed
issue_get_comments3 fields changed- added
Output schema / $defs / IssueComment / properties / maillistSummoneesAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MaillistReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Maillistsummonees" +} - added
Output schema / $defs / IssueComment / properties / summoneesAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/UserReference" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Summonees" +} - added
Output schema / $defs / MaillistReferenceAdded value: +{ + "properties": { + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "id": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "title": "MaillistReference", + "type": "object" +}
- Added
issue_get_transitions - Added
issue_update - Added
issue_update_comment - Added
issue_update_worklog - Changed
issues_count1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"Иван Иванов\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n"New value: +"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n"
- Changed
issues_find6 fields changed- changed
Input schema / $defs / IssueFieldsEnum / enumPrevious value: -[ - "created_at", - "updated_at", - "created_by", - "updated_by", - "unique", - "key", - "summary", - "description", - "type", - "priority", - "assignee", - "status", - "previous_status", - "deadline", - "components", - "start", - "story_points", - "tags", - "votes", - "sprint", - "epic", - "parent" -]New value: +[ + "created_at", + "updated_at", + "created_by", + "updated_by", + "version", + "unique", + "key", + "summary", + "description", + "type", + "priority", + "assignee", + "status", + "previous_status", + "deadline", + "components", + "start", + "story_points", + "tags", + "votes", + "sprint", + "epic", + "parent", + "estimation", + "spent" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"Иван Иванов\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n"New value: +"Search query to filter issues using Yandex Tracker Query.\n# General instructions\n1. To search by a specific field use the following syntax: `Description: \"some issue description\"`\n2. Multiple fields should be separated by space: `Description: \"some issue description\" Created: today()`\n3. If you need to specify multiple values for the same field - provide them using comma (,), e.g.: `author: \"vpupkin\",\"iivanov\"`\n4. You may specify multiple conditions and combine them using `AND` and `OR` statements, e.g. `<param_1>: \"<value_1>\" AND <param_2>: \"<value_2>\"`\n5. You may use brackets for complex logical expressions\n6. To find issues with exact string matching in the field use this syntax: `Summary: #\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n7. To find issues that don't contain the specified text use this syntax: `Summary: !\"Version 2.0\"`. If you need to pass special characters - you must escape them using `\\` symbol\n8. If you need to search by local queue field use the following syntax: `<QUEUE>.<LOCAL_FIELD_KEY>: \"<value>\", where <QUEUE> is a queue key, <LOCAL_FIELD_KEY> is a local field's key from the `queue_get_local_fields` tool result.\n9. For dates use the format YYYY-MM-DD.\n10. For numerical values you may use comparison operators (>, <, >=, <=): `<param>: ><value>`.\n11. To sort the result specify the `Sort By` directive (you may provide ASC or DESC for the sort order): `\"Sort By\": Created ASC`.\n12. For Assignee field and any other field representing a user (such as Author and others) always use username and not name.\n# Functions\nThese functions may be used, for example: `Created: week()` - return issues created on the current week\"\n* `empty()` - empty value\n* `notEmpty()` - not empty value\n* `now()` - current time\n* `today()` - current date\n* `week()` - current week\n* `month()` - current month\n* `quarter()` - current quarter\n* `year()` - current year\n* `unresolved()` - there is no resolution\n* `me()` - currently logged in user\n# Examples\nFind issues in a specific queue: `\"Queue\": \"PROJ\"`\nFind issues by an assignee: `\"Assignee\": \"i.ivanov\"`\nFind not resolved (open, in progress) issues: `\"Resolution\": unresolved()`\nFind issues in specific status: `\"Status\": \"Открыт\", \"В работе\"`\nFind issues created in a specific range: `\"Created\": \"2017-01-01\"..\"2017-01-30\"`\nFind issues created by currently logged in user: `\"Author\": me()\"`\nFind issues assigned to currently logged in user: `\"Assignee\": me()\"`\nFind issues created no earlier than 1 week and 1 day before today: `Created: > today() - \"1w 1d\"`\nComplete instructions page is available here: https://yandex.ru/support/tracker/ru/user/query-filter\n" - added
Output schema / $defs / Issue / additionalPropertiesAdded value: +true - added
Output schema / $defs / Issue / properties / estimationAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Estimation" +} - added
Output schema / $defs / Issue / properties / spentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spent" +} - added
Output schema / $defs / Issue / properties / versionAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Version" +}
- Added
queue_get_fields - Removed
queue_get_local_fields - Added
queue_get_metadata - Changed
queues_get_all11 fields changed- added
Input schema / $defsAdded value: +{ + "QueueFieldsEnum": { + "enum": [ + "id", + "key", + "name", + "description", + "defaultType", + "defaultPriority", + "issueTypesConfig" + ], + "title": "QueueFieldsEnum", + "type": "string" + } +} - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/QueueFieldsEnum" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Fields to include in the response. In order to not pollute context window - select appropriate fields beforehand. Not specifying fields will return all available. Most of the time one needs key and name only.", + "title": "Fields" +} - added
Input schema / properties / pageAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Page number to return, default is None which means to retrieve all pages. Specify page number to retrieve a specific page when context limit is reached.", + "title": "Page" +} - added
Input schema / properties / per_pageAdded value: +{ + "default": 100, + "description": "The number of items per page. May be decreased if results exceed context window. If there is a change in per_page argument - retrieval must be started over with page = 1, as the paging could have changed.", + "minimum": 1, + "title": "Per Page", + "type": "integer" +} - added
Output schema / $defs / Queue / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - added
Output schema / $defs / Queue / properties / id / defaultAdded value: +null - removed
Output schema / $defs / Queue / properties / id / typeRemoved value: -"integer" - added
Output schema / $defs / Queue / properties / issueTypesConfigAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/QueueIssueTypeConfig" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Issuetypesconfig" +} - removed
Output schema / $defs / Queue / requiredRemoved value: -[ - "id" -] - added
Output schema / $defs / QueueIssueTypeConfigAdded value: +{ + "description": "Issue type configuration within a queue, including available resolutions.", + "properties": { + "issueType": { + "anyOf": [ + { + "$ref": "#/$defs/IssueTypeReference" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Issue type reference" + }, + "resolutions": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Resolution" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Available resolutions for this issue type", + "title": "Resolutions" + } + }, + "title": "QueueIssueTypeConfig", + "type": "object" +} - added
Output schema / $defs / ResolutionAdded value: +{ + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Resolution description", + "title": "Description" + }, + "id": { + "description": "Unique resolution identifier", + "title": "Id", + "type": "integer" + }, + "key": { + "description": "Resolution key", + "title": "Key", + "type": "string" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Displayed resolution name", + "title": "Name" + }, + "order": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Display weight for ordering resolutions", + "title": "Order" + }, + "version": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Resolution version", + "title": "Version" + } + }, + "required": [ + "id", + "key" + ], + "title": "Resolution", + "type": "object" +}
- Added
users_search
20 tool updates
v1.0.0- First observed
get_global_fields - First observed
get_issue_types - First observed
get_priorities - First observed
get_statuses - First observed
issue_get - First observed
issue_get_attachments - First observed
issue_get_checklist - First observed
issue_get_comments - First observed
issue_get_links - First observed
issue_get_url - First observed
issue_get_worklogs - First observed
issues_count - First observed
issues_find - First observed
queue_get_local_fields - First observed
queue_get_tags - First observed
queue_get_versions - First observed
queues_get_all - First observed
user_get - First observed
user_get_current - First observed
users_get_all
TDQS
Scored across 55 tools
Most tools are clearly separated by resource and action (queues, boards, issues, components, users, templates). Some potential confusion exists between queue_get_components and component_get, or between issue_get and issues_find, but descriptions clarify the distinction well.
The naming mostly follows a consistent resource_action pattern (e.g., issue_get, issue_create, issue_update, queue_get_components). Minor deviations exist: issues_find vs issue_get, issues_count, get_priorities, get_statuses, get_issue_types, get_global_fields, get_resolutions, users_get_all vs user_get, and board_get_sprints vs boards_get_all.
55 tools is on the heavy side, but the server covers a broad domain (queues, boards, issues, components, users, templates, worklogs, checklists, links, transitions). The count is justified by the breadth, though it approaches the upper limit of what an agent can comfortably navigate.
The tool surface is remarkably complete: full CRUD for issues, comments, worklogs, checklist items, components, links, and versions; plus metadata discovery (fields, statuses, resolutions, priorities, templates, transitions). No obvious dead ends—every returned ID has a corresponding tool that consumes it.
Maintenance
Related MCP Connectors
An MCP server that provides access to Testiny projects, test cases and test runs
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
- TimequipOAuthcom.timequip
Manage Timequip projects, tasks, comments, members, and dashboards through MCP.
MCP server for Linear project management and issue tracking
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Yandex.Tracker task management system through MCP protocol. Supports creating and managing issues, searching tasks, handling comments, managing projects and queues, and generating analytics reports.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Yandex Tracker through its API for managing tasks, comments, and attachments. It supports issue searching, status transitions, and metadata retrieval for automated project management.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Yandex Tracker API, enabling AI assistants to search, read, create, and edit issues, as well as manage comments, attachments, and links in Yandex Tracker.481MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for interacting with YouTrack, enabling issue management, project operations, and search via natural language.7195MIT