Yandex Tracker
About
Interact with Yandex Tracker APIs for issue management and search.
Details
- Author
- aikts
- Categories
- Productivity, Project Management, API
Jump to
Setup
Install Yandex Tracker in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/aikts/yandex-tracker-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
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 availablehere/ Документация на русском языке доступназдесь.
- 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 viaTRACKER_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
- 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
Choose one of the following based on your Yandex organization type:
- Yandex Cloud Organization: UseTRACKER_CLOUD_ORG_IDenv var later for Yandex Cloud-managed organizations
- Yandex 360 Organization: UseTRACKER_ORG_IDenv var later for Yandex 360 organizations
You can find your organization ID in the Yandex Tracker URL or organization settings.
Yandex Tracker MCP Server can be one-click installed in Claude Desktop as andextension.
- Download the.mcpbfile fromGitHub 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.
- uvinstalled 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 eitheruvx yandex-tracker-mcp@latestor the Docker imageghcr.io/aikts/yandex-tracker-mcp:latest. Both require these environment variables:
- Authentication (one of the following):
- TRACKER_TOKEN- Your Yandex Tracker OAuth token
- TRACKER_IAM_TOKEN- Your IAM token
- TRACKER_SA_KEY_ID,TRACKER_SA_SERVICE_ACCOUNT_ID,TRACKER_SA_PRIVATE_KEY- Service account credentials
- TRACKER_CLOUD_ORG_ID- Your Yandex Cloud organization ID
- TRACKER_ORG_ID- Your Yandex 360 organization ID
Setoneof the two. Setting both makes every Tracker call fail withOnly 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.
- macOS:~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:%APPDATA%\Claude\claude_desktop_config.json
{ "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" } } } }
{ "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" } } } }
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=stdio
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"
- Project-specific:.cursor/mcp.jsonin your project directory
- Global:~/.cursor/mcp.json
{ "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" } } } }
{ "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" } } } }
Access via: Windsurf Settings → Cascade tab → Model Context Protocol (MCP) Servers → "View raw config"
{ "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" } } } }
{ "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" } } } }
Access via:Cmd+,(macOS) orCtrl+,(Linux/Windows) or command palette: "zed: open settings"
Note:Requires Zed Preview version for MCP support.
{ "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" } } } } }
{ "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" } } } } }
- Workspace:.vscode/mcp.jsonin your project directory
- Global: VS Codesettings.json
Option 1: Workspace Configuration (Recommended for security)
{ "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" } } } }
{ "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" } } } }
{ "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" } } } }
{ "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:
{ "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" } } } }
{ "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" } } } }
- Replace placeholder values with your actual credentials
- Restart your AI client after configuration changes
- Ensureuvxis installed and available in your system PATH
- For production use, consider using environment variables instead of hardcoding tokens
The server exposes the following tools through the MCP protocol:
-
queues_get_all: List all available Yandex Tracker queues
- Parameters:
- fields(optional): Fields to include in the response (e.g., ["key", "name"]). Helps optimize context window usage by selecting only needed fields. If not specified, returns all available fields.
- page(optional): Page number to return. If not specified, retrieves all pages automatically.
- per_page(optional): Number of items per page (default: 100)
queue_get_tags: Get all tags for a specific queue
- Parameters:queue_id(string, queue key like "SOMEPROJECT")
- Returns list of available tags in the specified queue
- RespectsTRACKER_LIMIT_QUEUESrestrictions
queue_get_versions: Get all versions for a specific queue
- Parameters:queue_id(string, queue key like "SOMEPROJECT")
- Returns list of available versions in the specified queue with details like name, description, dates, and status
- RespectsTRACKER_LIMIT_QUEUESrestrictions
queue_create_version: Create a new version in a specific queue
- Parameters:
- queue_id(string, required): Queue key like "SOMEPROJECT"
- name(string, required): Version name
- description(string, optional): Version description
- start_date(date, optional): Version start date inYYYY-MM-DDformat
- due_date(date, optional): Version due date inYYYY-MM-DDformat
queue_get_fields: Get fields for a specific queue
- Parameters:
- queue_id(string, required): Queue key like "SOMEPROJECT"
- include_local_fields(boolean, optional, default: true): Whether to include queue-specific local fields
queue_get_metadata: Get detailed metadata about a specific queue
- Parameters:
- queue_id(string, required): Queue key like "SOMEPROJECT"
- expand(array of strings, optional): Fields to expand in the response. Available options:all,projects,components,versions,types,team,workflows,fields,issueTypesConfig
Projects, portfolios and goals are separate Yandex Tracker entities (distinct from queues) exposed through the Tracker "entities" API. Each entity type has its own dedicated tool and explicit schema; custom (organization-defined) attributes are not modeled and are not returned.
These tools are opt-in.They are registered only whenTRACKER_ENTITIES_ENABLED=true(defaultfalse), because they add a large tool manifest and are not covered by the queue restrictions — seeQueue Access Control.
-
project_get: Get a project by its id or shortId
- Parameters:
- entity_id(string, required): Project id or shortId
- fields(array of strings, optional): Entity fields to include, constrained to the allowed values for this entity type. Defaults to a base field set (summary,description,entityStatus,start,end,lead,author,tags; goals omitstart, which the API does not define for them)
project_find: Search projects by name substring and/or field filters
- Parameters (all optional):input(substring match),filter(field criteria map),order_by,order_asc,root_only(exclude nested entities),page,per_page,fields
- Returns a paginated search result (hits,pages,values)
portfolio_get/portfolio_find: Same shape asproject_get/project_find, for portfolios (a portfolio groups projects and/or other portfolios)
goal_get/goal_find: Same shape asproject_get/project_find, for goals. Goals use a differententityStatusvalue set (draft,according_to_plan,at_risk,blocked,achieved,partially_achieved,not_achieved,exceeded,cancelled)
project_get_comments: Get a page of comments of a project by its id or shortId
- Parameters:entity_id(required);per_page(optional, default 50);cursor(optional, thenext_cursorfrom the previous call);fields(optional, array of comment field names — text/text_html can be large, so select only what you need; omit to get all fields)
- Returns{comments, next_cursor}(comments have the same shape as issue comments). Cursor-paginated: keep passingnext_cursorback ascursoruntil it is null
portfolio_get_comments/goal_get_comments: Same shape asproject_get_comments, for portfolios and goals
Write tools (project_create/project_update/project_deleteand the equivalentportfolio_/goal_*tools) are also available and are only registered whenTRACKER_ENTITIES_ENABLEDis set andTRACKER_READ_ONLYis not:
- project_create: Create a project. Requiressummary. Acceptsdescription,lead,team_users,clients,followers,start,end,tags,entity_status,parent_entity,team_access, andlinks
- project_update: Update any of the above fields on an existing project. Accepts an optionalcommentandversion(for optimistic-concurrency conflict detection). Passinglinksaddslinks, it does not replace them — re-sending an existing link fails. Links are write-only in the Tracker API (linksis not a validfieldsvalue and is not returned by get/update), so the current set cannot be read back and links cannot be removed through the server. Tracker also ignores a links-only update, solinksmust accompany a field change or acomment; the server rejects a links-only call instead of reporting a no-op as success (all verified against the live API)
- project_delete: Delete a project. Accepts an optionalwith_boardflag to also delete the associated board
- portfolio_create/portfolio_update/portfolio_delete: Same shape as the project write tools
- goal_create/goal_update/goal_delete: Same shape as the portfolio write tools, withoutstart, and using the goalentityStatusand link-relationship value sets.goal_deletehas nowith_boardflag, since goals have no board
All create/update tools accept the samefieldsselector as the read tools and return the created/updated entity with those fields populated.
- project_add_comment: Add a comment to a project. Requiresentity_idandtext(Markdown/YFM supported). Accepts optionalsummonees(user logins/IDs to notify — use this instead of@loginin the text) andmaillist_summonees(mailing list emails)
- project_update_comment: Update an existing comment. Requiresentity_id,comment_id, andtext. Accepts the same optionalsummonees/maillist_summonees
- project_delete_comment: Delete a comment. Requiresentity_idandcomment_id
- portfolio_add_comment/portfolio_update_comment/portfolio_delete_commentandgoal_add_comment/goal_update_comment/goal_delete_comment: Same shape as the project comment write tools, for portfolios and goals
Projects and portfolios (not goals — the Yandex Tracker API does not support checklists on goals) also expose checklist write tools. All of them return the full updated entity (requestchecklistItemsviafieldsto see the current items):
- project_add_checklist_item: Add a checklist item. Requiresentity_idandtext. Accepts optionalchecked,assignee(user ID/login), anddeadline(e.g.{'date': '2026-08-20T00:00:00.000+0000', 'deadlineType': 'date'})
- project_update_checklist_item: Partially update a checklist item. Requiresentity_idandchecklist_item_id; all other fields (text,checked,assignee,deadline) are optional and only change what's passed
- project_move_checklist_item: Reorder a checklist item. Requiresentity_id,checklist_item_id, andbefore(the id of the item to insert immediately above)
- project_delete_checklist_item: Delete a single checklist item. Requiresentity_idandchecklist_item_id
- project_update_checklist: Edit one or more existing checklist items by id. Requiresentity_idanditems({id, text, checked?, assignee?, deadline?}objects). Only the listed items change — the server fetches the current checklist and resends it unmodified for every item you don't mention, working around the API rejecting a partial item list with a 500 (verified against the live API). Use the add/delete item tools to change the set
- project_delete_checklist: Delete the entire checklist. Requiresentity_id
- portfolio_add_checklist_item/portfolio_update_checklist_item/portfolio_move_checklist_item/portfolio_delete_checklist_item/portfolio_update_checklist/portfolio_delete_checklist: Same shape as the project checklist write tools, for portfolios
Metrics (metricItems, on all three entity types) and a goal's key results (keyResultItems) are readable through thefieldsselector — request them explicitly, they are not in the default field set. Writing them is not supported: the API reference doesn't define whether an update replaces or merges these collections.
Not yet supported: writing metrics/key results, and bulk changes — these are tracked for a future iteration.
-
users_get_all: Get information about user accounts registered in the organization
- Parameters:
- per_page(optional): Number of users per page (default: 50)
- page(optional): Page number to return (default: 1)
- fields(array of strings, optional): Fields to include per user. Not specifying this returns all available fields
user_get: Get information about a specific user by login or UID
- Parameters:user_id(string, user login like "john.doe" or UID like "12345")
- Returns detailed user information including login, email, license status, and organizational details
- Supports both user login names and numeric user IDs for flexible identification
user_get_current: Get information about the current authenticated user
- No parameters required
- Returns detailed information about the user associated with the current authentication token
- Includes login, email, display name, and organizational details for the authenticated user
users_search: Search user based on login, email or real name (first or last name, or both)
- Parameters:login_or_email_or_name(string, user login, email or real name to search for)
- Returns either single user or multiple users if several match the query or an empty list if no users matched
- Uses fuzzy matching for real names with a similarity threshold of 80%, returning at most the 3 best matches
- Prioritizes exact matches for login and email over fuzzy name matches
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



