Yandex Tracker MCP Server
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 MCP Server Show me all issues assigned to me in the TEST 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
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
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: MCP Atlassian
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
TRACKER_CLOUD_ORG_IDorTRACKER_ORG_ID- Your Yandex Cloud (or Yandex 360) organization 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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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 TRACKER_ORG_ID=your_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 TRACKER_ORG_ID=your_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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",
"TRACKER_ORG_ID": "your_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",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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"
},
{
"type": "promptString",
"id": "org-id",
"description": "Yandex Tracker Organization ID (optional)"
}
],
"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}",
"TRACKER_ORG_ID": "${input: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"
},
{
"type": "promptString",
"id": "org-id",
"description": "Yandex Tracker Organization ID (optional)"
}
],
"servers": {
"yandex-tracker": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_ORG_ID",
"ghcr.io/aikts/yandex-tracker-mcp:latest"
],
"env": {
"TRACKER_TOKEN": "${input:tracker-token}",
"TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
"TRACKER_ORG_ID": "${input: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",
"TRACKER_ORG_ID": "your_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",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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",
"TRACKER_ORG_ID": "your_org_id_here"
}
}
}
}Using Docker:
{
"mcpServers": {
"yandex-tracker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRACKER_TOKEN",
"-e", "TRACKER_CLOUD_ORG_ID",
"-e", "TRACKER_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",
"TRACKER_ORG_ID": "your_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:
queues_get_all: List all available Yandex Tracker queuesParameters:
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)
Returns paginated queue information with selective field inclusion
Respects
TRACKER_LIMIT_QUEUESrestrictions
queue_get_tags: Get all tags for a specific queueParameters:
queue_id(string, queue key like "SOMEPROJECT")Returns list of available tags in the specified queue
Respects
TRACKER_LIMIT_QUEUESrestrictions
queue_get_versions: Get all versions for a specific queueParameters:
queue_id(string, queue key like "SOMEPROJECT")Returns list of available versions in the specified queue with details like name, description, dates, and status
Respects
TRACKER_LIMIT_QUEUESrestrictions
queue_create_version: Create a new version in a specific queueParameters:
queue_id(string, required): Queue key like "SOMEPROJECT"name(string, required): Version namedescription(string, optional): Version descriptionstart_date(date, optional): Version start date inYYYY-MM-DDformatdue_date(date, optional): Version due date inYYYY-MM-DDformat
Returns the created version with details like name, description, dates, and status
Respects
TRACKER_LIMIT_QUEUESrestrictions
queue_get_fields: Get fields for a specific queueParameters:
queue_id(string, required): Queue key like "SOMEPROJECT"include_local_fields(boolean, optional, default: true): Whether to include queue-specific local fields
Returns list of global fields and optionally local (queue-specific) fields
Makes parallel requests to fetch both field types when
include_local_fieldsis trueThe
schema.requiredproperty indicates whether a field is mandatoryUse this to find available and required fields before creating an issue with
issue_createtoolRespects
TRACKER_LIMIT_QUEUESrestrictions
queue_get_metadata: Get detailed metadata about a specific queueParameters:
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
Returns queue information including name, description, default type/priority, and optionally expanded data
Use
expand: ["issueTypesConfig"]to get available resolutions for each issue type (needed forissue_closetool)Respects
TRACKER_LIMIT_QUEUESrestrictions
These tools use the unified Yandex Tracker Entities API. The entity_type parameter accepts project, portfolio, or goal.
entity_get: Get an entity byidor numericshortId; optionally request additionalfieldsor expandattachmentsentities_search: Search entities by name substring or arbitrary field filters, with field selection, sorting, root-only filtering, and page-based paginationentity_get_events: Get entity event history with relative cursor navigation (from_idorselected)entity_create: Create an entity;fields.summaryis required, and links can be created in the same requestentity_update: Update entity fields, links, and add an explanatory comment; collection fields support Tracker operators such asset,add, andremoveentity_delete: Delete an entity and optionally its associated boardentities_bulk_update: Start one bulk update for multiple entities of the same type
Common field keys include summary, description, lead, teamUsers, clients, followers, start, end, tags, parentEntity, entityStatus, and teamAccess. Dates must use the format expected by the Tracker API.
Write tools are unavailable when TRACKER_READ_ONLY=true.
boards_list: List all boards available to the current userboard_get: Get board columns and automatic filter settings by board IDboard_get_sprints: List all sprints associated with a boardsprint_get: Get one sprint with status, archive flag, and planned/actual dates
These tools are read-only. Use the returned sprint ID in issues_find to retrieve the sprint's issues.
filter_get: Get a saved issue filter by numeric IDfilter_find_issues: Execute a saved filter with page/per-page and response-field controlsfilter_create: Create a saved filter from either a Tracker query or field-value conditionsfilter_update: Update a saved filter's name, conditions, displayed fields, sorts, grouping, or folder
filter_create and filter_update are unavailable when TRACKER_READ_ONLY=true. issues_find and issues_count also accept filter_id as an alternative to query.
users_get_all: Get information about user accounts registered in the organizationParameters:
per_page(optional): Number of users per page (default: 50)page(optional): Page number to return (default: 1)
Returns paginated list of users with login, email, license status, and organizational details
Includes user metadata such as external status, dismissal status, and notification preferences
user_get: Get information about a specific user by login or UIDParameters:
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 userNo 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%
Prioritizes exact matches for login and email over fuzzy name matches
get_global_fields: Get all global fields available in Yandex TrackerReturns complete list of global fields that can be used in issues
Includes field schema, type information, and configuration
get_statuses: Get all available issue statusesReturns complete list of issue statuses that can be assigned
Includes status IDs, names, and type information
get_issue_types: Get all available issue typesReturns complete list of issue types for creating/updating issues
Includes type IDs, names, and configuration details
get_priorities: Get all available issue prioritiesReturns complete list of priorities that can be assigned to issues
Includes priority keys, names, and order information
get_resolutions: Get all available issue resolutionsReturns complete list of resolutions that can be used when closing issues
Includes resolution keys, names, descriptions, and order information
issue_get: Retrieve detailed issue information by IDParameters:
issue_id(string, format: "QUEUE-123")include_description(boolean, optional, default: true): Whether to include issue description in the result. Can be large, so use only when needed.
Returns complete issue data including status, assignee, description, etc.
issue_get_url: Generate web URL for an issueParameters:
issue_id(string)Returns:
https://tracker.yandex.ru/{issue_id}
issue_get_comments: Fetch all comments for an issueParameters:
issue_id(string)Returns chronological list of comments with metadata
issue_add_comment: Add a comment to an issueParameters:
issue_id(string, required, format: "QUEUE-123")text(string, required): Comment text (markdown supported by Tracker)summonees(array of strings, optional): Users to summon (logins or IDs). This is the API way to mention/call users (notifications are triggered by this field, not by@loginin text).maillist_summonees(array of strings, optional): Mailing lists to summon (emails)markup_type(string, optional): Usemdfor YFM (markdown)is_add_to_followers(boolean, optional, default: true): Add comment author to followers
Returns created comment object
issue_update_comment: Update an existing comment in an issueParameters:
issue_id(string, required, format: "QUEUE-123")comment_id(int, required): Comment IDtext(string, required): New comment text (markdown supported by Tracker)summonees(array of strings, optional): Users to summon (logins or IDs)maillist_summonees(array of strings, optional): Mailing lists to summon (emails)markup_type(string, optional): Usemdfor YFM (markdown)
Returns updated comment object
issue_delete_comment: Delete a comment from an issueParameters:
issue_id(string, required, format: "QUEUE-123")comment_id(int, required): Comment ID
Returns:
null(success)
issue_add_link: Create a link between an issue and another issueParameters:
issue_id(string, required, format: "QUEUE-123"): The current issuerelationship(string, required): Link type describing howissue_idrelates to the linked issue. One of:relates,is dependent by,depends on,is subtask for,is parent task for,duplicates,is duplicated by,is epic of,has epicissue(string, required): ID or key of the issue to link to (e.g. "TEST-123")
Returns created link object
issue_delete_link: Delete a link between an issue and another issueParameters:
issue_id(string, required, format: "QUEUE-123")link_id(int, required): Link ID (as returned byissue_get_links)
Returns:
null(success)
issue_get_links: Get related issue linksParameters:
issue_id(string)Returns links to related, blocked, or duplicate issues
issue_get_worklogs: Retrieve worklog entriesParameters:
issue_ids(array of strings, required)start_date_from(date, optional): Inclusive lower bound for the work start date (YYYY-MM-DD)start_date_to(date, optional): Inclusive upper bound for the work start date (YYYY-MM-DD)timezone(string, optional, defaultUTC): IANA time zone used when comparingstartdates (for example,Europe/Moscow)
Retrieves every relative-pagination page for each issue and filters by the worklog
startfield, not bycreatedAtReturns ISO 8601 durations exactly as supplied by Tracker. Week-based values must keep Tracker semantics:
P6Wis 30 working days, not 42 calendar days
issue_add_worklog: Add a worklog entry (log spent time) to an issueParameters:
issue_id(string, required, format: "QUEUE-123")duration(string, required): ISO-8601 duration (e.g.PT1H30M)comment(string, optional): Worklog commentstart(datetime, optional): Work start datetime (UTC assumed if timezone is not provided)
Returns created worklog entry
issue_update_worklog: Update a worklog entry (spent time record) in an issueParameters:
issue_id(string, required, format: "QUEUE-123")worklog_id(int, required): Worklog entry IDduration(string, optional): ISO-8601 duration (e.g.PT1H30M)comment(string, optional): Worklog commentstart(datetime, optional): Work start datetime (UTC assumed if timezone is not provided)
Returns updated worklog entry
issue_delete_worklog: Delete a worklog entry (spent time record) from an issueParameters:
issue_id(string, required, format: "QUEUE-123")worklog_id(int, required): Worklog entry ID
Returns:
null(success)
issue_get_attachments: Get attachments for an issueParameters:
issue_id(string, format: "QUEUE-123")Returns list of attachments with metadata for the specified issue
issue_download_attachment: Download an attachment as an MCP embedded binary resourceParameters:
issue_id,attachment_id, andfile_namereturned byissue_get_attachmentsEnforces the
TRACKER_MAX_ATTACHMENT_BYTEStransfer limit
issue_upload_attachment: Upload base64-encoded content as an issue attachmentParameters:
issue_id,file_name,content_base64, and optionalmime_typeUnavailable when
TRACKER_READ_ONLY=true
issue_delete_attachment: Delete an issue attachment by IDUnavailable when
TRACKER_READ_ONLY=true
issue_get_checklist: Get checklist items of an issueParameters:
issue_id(string, format: "QUEUE-123")Returns list of checklist items including text, status, assignee, and deadline information
issue_get_transitions: Get possible status transitions for an issueParameters:
issue_id(string, format: "QUEUE-123")Returns list of available transitions that can be performed on the issue
Each transition includes an ID, display name, and target status information
issue_get_changelog: Get the change history (changelog) of an issueParameters:
issue_id(string, required, format: "QUEUE-123"): The issue keyper_page(integer, optional, default: 50): Number of entries per pagecursor(string, optional): Thenext_cursorvalue returned by the previous call; pass it to fetch the next page (cursor pagination)field(string, optional): Filter the changelog by a field key (e.g.status)type(string, optional): Filter by change type (e.g.IssueWorkflowfor status transitions)
Returns an object with
entries(status transitions and field edits — including who changed whatfrom→toand when — plus comment changes and executed triggers) andnext_cursor(pass it back ascursorfor the next page;nullwhen there are no more pages)
issue_execute_transition: Execute a status transition for an issueParameters:
issue_id(string, required, format: "QUEUE-123"): The issue keytransition_id(string, required): The transition ID to execute. IMPORTANT: Must be one of the IDs returned byissue_get_transitionstoolcomment(string, optional): Optional comment to add when executing the transitionfields(object, optional): Dictionary of additional fields to set during the transition. Common fields includeresolution(e.g., 'fixed', 'wontFix') for closing issues,assigneefor reassigning, etc.
Returns list of available transitions for the new status after the transition is executed
Usage note: You MUST first call
issue_get_transitionsto retrieve available transitions, then pass one of the returned transition IDs. Do NOT use arbitrary transition IDs.
issue_close: Close an issue with a resolution (convenience tool)Parameters:
issue_id(string, required, format: "QUEUE-123"): The issue keyresolution_id(string, required): The resolution ID to set when closing (e.g., 'fixed', 'wontFix', 'duplicate')comment(string, optional): Optional comment to add when closing the issue
Automatically finds a transition to a 'done' status and executes it with the specified resolution
Returns list of available transitions for the new (closed) status
Usage note: Before closing, you MUST:
Call
issue_getto retrieve the issue'stypefieldCall
get_queue_metadatawithexpand: ["issueTypesConfig"]to get available resolutionsChoose a resolution from the
issueTypesConfigentry matching the issue's type - each issue type has its own set of valid resolutions
issue_create: Create a new issue in a queueParameters:
queue(string, required): Queue key where to create the issue (e.g., 'MYQUEUE')summary(string, required): Issue title/summarytype(int, optional): Issue type ID (fromget_issue_typestool)description(string, optional): Issue descriptionassignee(string or int, optional): Assignee login or UIDpriority(string, optional): Priority key (fromget_prioritiestool)fields(object, optional): Additional fields to set during issue creation. IMPORTANT: Before creating an issue, you MUST callqueue_get_fieldsto get available fields (it returns both global and local fields by default). Fields withschema.required=trueare mandatory. Use the field'sidproperty as the key in this map (e.g.,{"fieldId": "value"})
Returns the newly created issue object with all standard issue fields
Respects
TRACKER_LIMIT_QUEUESrestrictions
issue_update: Update an existing issueParameters:
issue_id(string, required, format: "QUEUE-123"): The issue key to updatesummary(string, optional): New issue title/summarydescription(string, optional): New issue descriptionmarkup_type(string, optional): Markup type for description text (use 'md' for YFM markup)parent(IssueUpdateParent, optional): Parent issue reference withid(string) and/orkey(string, e.g., 'QUEUE-123')sprint(array of IssueUpdateSprint, optional): Sprint assignments - array of objects withid(int) fieldtype(IssueUpdateType, optional): Issue type withid(string) and/orkey(string, e.g., 'bug', 'task')priority(IssueUpdatePriority, optional): Priority withid(string) and/orkey(string, e.g., 'critical', 'normal')followers(array of IssueUpdateFollower, optional): Followers - array of objects withid(string, user ID or login)project(IssueUpdateProject, optional): Project withprimary(int, main project shortId) and optionalsecondary(array of ints)tags(array of strings, optional): Issue tagsversion(int, optional): Issue version for optimistic locking - changes only made to current versionfields(object, optional): Additional fields to update. Usequeue_get_fieldsto discover available fields.
Returns the updated issue object with all standard issue fields
Only provided fields are updated; omitted fields remain unchanged
Respects
TRACKER_LIMIT_QUEUESrestrictions
issue_move: Move an issue to a different queueParameters:
issue_id(string, required, format: "QUEUE-123"): The issue key to movequeue(string, required): Target queue key (e.g., 'MYQUEUE')notify(boolean, optional, defaulttrue): Notify users referenced in the issue's fieldsnotify_author(boolean, optional, defaultfalse): Notify the issue authormove_all_fields(boolean, optional, defaultfalse): Carry over versions, components and projects when matching ones exist in the target queue; otherwise they are clearedinitial_status(boolean, optional, defaultfalse): Reset the issue status to the initial value (use when the target queue has a different workflow)
Returns the updated issue object with its new key in the target queue (e.g.,
TASKS-1→NEWQUEUE-42)When the MCP client supports elicitation, the user is prompted to confirm the boolean flags before the move is performed; declining or cancelling aborts the move. Clients without elicitation support proceed with the passed-in values
Respects
TRACKER_LIMIT_QUEUESrestrictions
issues_find: Search issues using Yandex Tracker Query LanguageParameters:
query(optional): Query string using Yandex Tracker Query Language syntaxfilter_id(optional): Saved filter ID; mutually exclusive withqueryinclude_description(boolean, optional, default: false): Whether to include issue description in the issues result. Can be large, so use only when needed.fields(list of strings, optional): Fields to include in the response. Helps optimize context window usage by selecting only needed fields. If not specified, returns all available fields.page(optional): Page number for pagination (default: 1)per_page(optional): Number of items per page (default: 100). May be decreased if results exceed context window.
Returns up to specified number of issues per page
issues_count: Count issues matching a query using Yandex Tracker Query LanguageParameters:
query(optional): Query string using Yandex Tracker Query Language syntaxfilter_id(optional): Saved filter ID; mutually exclusive withquery
Returns the total count of issues matching the specified criteria
Supports all query language features: field filtering, date functions, logical operators, and complex expressions
Useful for analytics, reporting, and understanding issue distribution without retrieving full issue data
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 optionalSetting 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 (choose one)
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_MAX_ATTACHMENT_BYTES=10485760 # Default: 10 MiB MCP transfer limit
# Security - Restrict access to specific queues (optional)
TRACKER_LIMIT_QUEUES=PROJ1,PROJ2,DEV # Comma-separated queue keys
# 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 - Limit OAuth to read-only permissionsDocker Deployment
Using Pre-built Image (Recommended)
# Using environment file
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 \
-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:
version: '3.8'
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}Building locally:
version: '3.8'
services:
mcp-tracker:
build: .
ports:
- "8000:8000"
environment:
- TRACKER_TOKEN=${TRACKER_TOKEN}
- TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}Development 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
57 toolsboard_getGet BoardARead-only
Get a Yandex Tracker board with columns and filter settings
Inputs: board_id (required). Returns: A Yandex Tracker issue board.
board_get_sprintsGet Board SprintsARead-only
Get all sprints associated with a Yandex Tracker board
Inputs: board_id (required). Returns: result
boards_listList BoardsARead-only
Get all Yandex Tracker issue boards available to the current user
Inputs: no named parameters. Returns: result
entities_bulk_updateBulk Update EntitiesB
Start a bulk update for Yandex Tracker projects, portfolios, or goals.
Inputs: entity_ids (required), entity_type (required), links, fields, +1 more. Returns: id, self, status, created_at, +4 more
entities_searchSearch EntitiesARead-only
Search Yandex Tracker projects, portfolios, or goals with filters and sorting.
Inputs: entity_type (required), page, input, fields, +5 more. Returns: hits, pages, values
entity_createCreate EntityA
Create a Yandex Tracker project, portfolio, or goal.
Inputs: fields (required), entity_type (required), links, response_fields. Returns: A project, portfolio, or goal returned by the unified Entities API.
entity_deleteDelete EntityADestructive
Delete a Yandex Tracker project, portfolio, or goal.
Inputs: entity_id (required), entity_type (required), with_board. Returns: result
entity_getGet EntityARead-only
Get a Yandex Tracker project, portfolio, or goal by id or shortId.
Inputs: entity_id (required), entity_type (required), expand, fields. Returns: A project, portfolio, or goal returned by the unified Entities API.
entity_get_eventsGet Entity EventsARead-only
Get the event history of a Yandex Tracker project, portfolio, or goal.
Inputs: entity_id (required), entity_type (required), from_id, per_page, +3 more. Returns: events
entity_updateUpdate EntityB
Update a Yandex Tracker project, portfolio, or goal.
Inputs: entity_id (required), entity_type (required), links, expand, +3 more. Returns: A project, portfolio, or goal returned by the unified Entities API.
filter_createCreate Saved FilterA
Create a saved Yandex Tracker issue filter using query or field conditions
Inputs: name (required), query, sorts, fields, +3 more. Returns: A saved Yandex Tracker issue filter.
filter_find_issuesFind Issues by Saved FilterARead-only
Execute a saved Yandex Tracker filter and return matching issues
Inputs: filter_id (required), page, fields, per_page, +1 more. Returns: result
filter_getGet Saved FilterARead-only
Get a saved Yandex Tracker issue filter by id
Inputs: filter_id (required). Returns: A saved Yandex Tracker issue filter.
filter_updateUpdate Saved FilterB
Update a saved Yandex Tracker issue filter
Inputs: filter_id (required), name, query, sorts, +4 more. Returns: A saved Yandex Tracker issue filter.
get_global_fieldsGet Global FieldsARead-only
Get all global fields available in Yandex Tracker that can be used in issues
Inputs: no named parameters. Returns: result
get_issue_typesGet Issue TypesARead-only
Get all issue types available in Yandex Tracker that can be used when creating or updating issues
Inputs: no named parameters. Returns: result
get_prioritiesGet PrioritiesARead-only
Get all priorities available in Yandex Tracker that can be used in issues
Inputs: no named parameters. Returns: result
get_resolutionsGet ResolutionsARead-only
Get all resolutions available in Yandex Tracker that can be used when closing issues
Inputs: no named parameters. Returns: result
get_statusesGet StatusesARead-only
Get all statuses available in Yandex Tracker that can be used in issues
Inputs: no named parameters. Returns: result
issue_add_commentAdd Issue CommentA
Add a comment to a Yandex Tracker issue. IMPORTANT: If you need to mention/call people to the discussion (so they get notifications), do NOT rely on '@login' in the text — use the summonees parameter instead.
Inputs: text (required), issue_id (required), summonees, markup_type, +2 more. Returns: id, text, longId, textHtml, +7 more
issue_add_linkAdd Issue LinkA
Create a link between a Yandex Tracker issue and another issue. The relationship describes how the current issue (issue_id) relates to the linked issue. For example, 'depends on' means issue_id depends on the linked issue, while 'is dependent by' means the linked issue depends on issue_id. Use 'relates' for a simple connection. Returns the created link.
Inputs: issue (required), issue_id (required), relationship (required). Returns: id, type, object, status, +6 more
issue_add_worklogAdd WorklogA
Add a worklog entry (log spent time) to a Yandex Tracker issue
Inputs: duration (required), issue_id (required), start, comment. Returns: id, issue, start, comment, +5 more
issue_closeClose IssueA
Close a Yandex Tracker issue with a resolution. This is a convenience tool that automatically finds a transition to a 'done' status and executes it with the specified resolution. IMPORTANT: Before closing, you MUST: 1) Call issue_get to retrieve the issue's type field. 2) Call queue_get_metadata with expand=['issueTypesConfig'] to get available resolutions. 3) Choose a resolution from the issueTypesConfig entry matching the issue's type - each issue type has its own set of valid resolutions. Returns a list of transitions available for the issue in its new (closed) status.
Inputs: issue_id (required), resolution_id (required), fields, comment. Returns: result
issue_createCreate IssueA
Create a new issue in a Yandex Tracker queue
Inputs: queue (required), summary (required), type, fields, +3 more. Returns: key, epic, tags, type, +21 more
issue_delete_attachmentDelete Issue AttachmentBDestructive
Delete an attachment from a Yandex Tracker issue
Inputs: issue_id (required), attachment_id (required). Returns: result
issue_delete_commentDelete Issue CommentA
Delete a comment from a Yandex Tracker issue
Inputs: issue_id (required), comment_id (required). Returns: result
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.
Inputs: link_id (required), issue_id (required). Returns: result
issue_delete_worklogDelete WorklogA
Delete a worklog entry (spent time record) from a Yandex Tracker issue
Inputs: issue_id (required), worklog_id (required). Returns: result
issue_download_attachmentDownload Issue AttachmentARead-only
Download an attached file as an MCP embedded binary resource
Inputs: issue_id (required), file_name (required), attachment_id (required). Returns: The contents of a resource, embedded into a prompt or tool call result. It is u…
issue_execute_transitionExecute Issue TransitionA
Execute a status transition for a Yandex Tracker issue. IMPORTANT: You MUST first call issue_get_transitions to retrieve available transitions for the issue. Only pass a transition_id that was returned by issue_get_transitions. Do NOT use arbitrary transition IDs - the API will reject invalid transition IDs. Returns a list of new transitions available for the issue in its new status.
Inputs: issue_id (required), transition_id (required), fields, comment. Returns: result
issue_getGet IssueBRead-only
Get a Yandex Tracker issue by its id
Inputs: issue_id (required), include_description. Returns: key, epic, tags, type, +21 more
issue_get_attachmentsGet Issue AttachmentsARead-only
Get attachments of a Yandex Tracker issue by its id
Inputs: issue_id (required). Returns: result
issue_get_changelogGet Issue ChangelogARead-only
Get the change history (changelog) of a Yandex Tracker issue by its id: status transitions, field edits (who changed what from -> to and when), comment changes and executed triggers. Returns a page of entries plus 'next_cursor'. To fetch the next page, pass 'next_cursor' from the previous result as the 'cursor' argument; when 'next_cursor' is null there are no more pages.
Inputs: issue_id (required), type, field, cursor, +1 more. Returns: A page of issue changelog entries plus the cursor to fetch the next page. `next…
issue_get_checklistGet Issue ChecklistARead-only
Get checklist items of a Yandex Tracker issue by its id
Inputs: issue_id (required). Returns: result
issue_get_commentsGet Issue CommentsARead-only
Get comments of a Yandex Tracker issue by its id
Inputs: issue_id (required). Returns: result
issue_get_linksGet Issue LinksBRead-only
Get a Yandex Tracker issue related links to other issues by its id
Inputs: issue_id (required). Returns: result
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.
Inputs: issue_id (required). Returns: result
issue_get_urlGet Issue URLARead-only
Get a Yandex Tracker issue url by its id
Inputs: issue_id (required). Returns: result
issue_get_worklogsGet Issue WorklogsARead-only
Get every paginated worklog for Yandex Tracker issues and optionally filter by the work start date. Duration is returned as Tracker's raw ISO 8601 string; PnW means n five-day work weeks.
Inputs: issue_ids (required), timezone, start_date_to, start_date_from. Returns: object
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.
Inputs: queue (required), issue_id (required), notify, notify_author, +2 more. Returns: key, epic, tags, type, +21 more
issues_countCount IssuesARead-only
Get the count of Yandex Tracker issues matching a query
Inputs: query, filter_id. Returns: result
issues_findFind IssuesBRead-only
Find Yandex Tracker issues by queue and/or created date
Inputs: page, query, fields, per_page, +2 more. Returns: result
issue_updateUpdate IssueA
Update an existing Yandex Tracker issue. Only fields that are provided will be updated; omitted fields remain unchanged. Use queue_get_fields to discover available fields before updating.
Inputs: issue_id (required), tags, type, fields, +9 more. Returns: key, epic, tags, type, +21 more
issue_update_commentUpdate Issue CommentA
Update an existing comment in a Yandex Tracker issue. IMPORTANT: If you need to mention/call people (notifications), use the summonees parameter.
Inputs: text (required), issue_id (required), comment_id (required), summonees, +2 more. Returns: id, text, longId, textHtml, +7 more
issue_update_worklogUpdate WorklogA
Update a worklog entry (spent time record) in a Yandex Tracker issue
Inputs: issue_id (required), worklog_id (required), start, comment, +1 more. Returns: id, issue, start, comment, +5 more
issue_upload_attachmentUpload Issue AttachmentA
Upload a base64-encoded file and attach it to a Yandex Tracker issue
Inputs: issue_id (required), file_name (required), content_base64 (required), mime_type. Returns: id, name, size, content, +4 more
queue_create_versionCreate Queue VersionB
Create a new version in a Yandex Tracker queue.
Inputs: name (required), queue_id (required), due_date, start_date, +1 more. Returns: id, name, dueDate, version, +4 more
queue_get_fieldsGet Queue FieldsARead-only
Get fields for a specific Yandex Tracker queue. Returns list of global fields and optionally local (queue-specific) fields. The schema.required property indicates whether a field is mandatory. Use this to find available and required fields before creating an issue with issue_create tool.
Inputs: queue_id (required), include_local_fields. Returns: result
queue_get_metadataGet Queue MetadataARead-only
Get detailed metadata about a specific Yandex Tracker queue. Returns queue information including name, description, default type/priority, and optionally expanded data like issue types with their resolutions, workflows, team members, etc. Use expand=['issueTypesConfig'] to get available resolutions for issue_close tool.
Inputs: queue_id (required), expand. Returns: id, key, name, defaultType, +3 more
queue_get_tagsGet Queue TagsARead-only
Get all tags for a specific Yandex Tracker queue
Inputs: queue_id (required). Returns: result
queue_get_versionsGet Queue VersionsARead-only
Get all versions for a specific Yandex Tracker queue
Inputs: queue_id (required). Returns: result
queues_get_allGet All QueuesARead-only
Find all Yandex Tracker queues available to the user (queue is a project in some sense)
Inputs: page, fields, per_page. Returns: result
sprint_getGet SprintARead-only
Get a Yandex Tracker sprint with status and date boundaries
Inputs: sprint_id (required). Returns: A sprint associated with a Yandex Tracker board.
user_getGet UserARead-only
Get information about a specific user by login or UID
Inputs: user_id (required). Returns: uid, email, login, display, +4 more
user_get_currentGet Current UserARead-only
Get information about the current authenticated user
Inputs: no named parameters. Returns: uid, email, login, display, +4 more
users_get_allGet All UsersCRead-only
Get information about user accounts registered in the organization
Inputs: page, per_page. Returns: result
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.
Inputs: login_or_email_or_name (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 57 tools
Each tool targets a distinct resource and action, with clear descriptions that prevent confusion. Even the overlapping issue_close and issue_execute_transition are clearly distinguished as convenience vs generic transition.
Naming is inconsistent: many tools use resource_action (issue_create, queue_get_metadata) but several use action_resource (get_priorities, get_statuses). Also pluralization varies (boards_list vs board_get, queues_get_all vs queue_get_metadata).
With 57 tools, this is far beyond the typical well-scoped MCP server. While the domain is broad, the granularity is excessive, making it unwieldy.
The tool surface covers most CRUD operations for issues, comments, worklogs, attachments, links, and entities. Minor gaps include no filter deletion, board/sprint creation/update, and limited issue search options.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Node.js MCP server that enables AI assistants to interact with Yandex Tracker task management system through a standardized protocol, supporting operations like creating, updating, and searching issues.433 npm3ISC
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol server that integrates with Atlassian Confluence and Jira, enabling AI assistants to search, create, and update content in these platforms through natural language interactions.1MIT
- AlicenseNot gradedqualityDmaintenanceMCP 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.63 npm1MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server for YouTrack integration, providing a standardized interface for LLMs to interact with YouTrack's issue tracking, agile management, and knowledge base features.1222 npmMIT