A lightning-fast Model Context Protocol (MCP) server implementation for JetBrains YouTrack, built with FastMCP for optimal performance and proper parameter schema generation. Enables AI assistants to interact with YouTrack issue tracking system with full type safety.
Model Context Protocol (MCP) is an open standard that enables AI models to interact with external tools and services through a unified interface. This project provides an MCP server that exposes YouTrack functionality to AI assistants that support the MCP standard, such as Claude in VS Code, Claude Desktop, GitHub Copilot, and Cursor IDE.
-
Issue Management
get_issue- Get complete issue detailsget_issue_raw- Get raw API response for an issuesearch_issues- Quick search (returns only ID and summary, limit 100)search_issues_detailed- Full search with custom fields filtering (limit 30)create_issue- Create new bug reports, features, or tasksadd_comment- Add comments to issues with markdown supportexecute_command- Batch update issues (assign, change state, priority, etc.)
-
Project Management
get_projects- List all available projectsget_project- Get project configuration and custom fieldsget_project_by_name- Find project by display nameget_project_issues- List issues in a projectget_field_values- Get valid values for a field (states, priorities, etc.)get_custom_fields- List project's custom fields
-
User Management
get_current_user- Get current API userget_user- Fetch user details by IDget_user_by_login- Find user by login namesearch_users- Search users by name or login
-
Advanced Search
advanced_search- Search with sorting capabilitiesfilter_issues- Structured filtering by multiple criteriasearch_with_custom_fields- Search by custom field values
-
Search Help
get_search_syntax_guide- Complete YouTrack query syntax referenceget_common_queries- Common query examples and templates
YouTrack Cloud - Just one environment variable:
export YOUTRACK_API_TOKEN="perm:username.workspace.xxxxx"
uvx youtrack-rocket-mcp # That's it!Self-hosted YouTrack - Two environment variables:
export YOUTRACK_URL="https://youtrack.example.com"
export YOUTRACK_API_TOKEN="perm:xxxxx"
uvx youtrack-rocket-mcpThe server automatically detects your setup - no need to specify cloud vs self-hosted!
See Configuration Guide for advanced options.
# Run with Docker (for YouTrack Cloud instances)
docker run -i --rm \
-e YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx \
ivolnistov/youtrack-rocket-mcp:latest
# Or for self-hosted YouTrack instances
docker run -i --rm \
-e YOUTRACK_URL=https://youtrack.example.com \
-e YOUTRACK_API_TOKEN=perm:xxxxx \
ivolnistov/youtrack-rocket-mcp:latestFor Cursor IDE, add to .cursor/mcp.json:
{
"mcpServers": {
"YouTrack": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx",
"ivolnistov/youtrack-rocket-mcp:latest"
]
}
}
}For Claude Desktop, set as MCP server:
docker run -i --rm -e YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx ivolnistov/youtrack-rocket-mcp:latest
Run it directly without installation using uvx:
# Run directly from PyPI (YouTrack Cloud)
export YOUTRACK_API_TOKEN="perm:username.workspace.xxxxx"
uvx youtrack-rocket-mcp
# Or for self-hosted YouTrack
export YOUTRACK_URL="https://youtrack.example.com"
export YOUTRACK_API_TOKEN="perm:xxxxx"
uvx youtrack-rocket-mcp
# Install persistently with uv tool
uv tool install youtrack-rocket-mcp
youtrack-rocket-mcp # Run after installation-
Clone the repository:
git clone https://github.com/ivolnistov/youtrack-rocket-mcp.git cd youtrack-rocket-mcp -
Install dependencies with UV:
# Install all dependencies including dev group (pytest, ruff, mypy, etc.) uv sync # Note: uv sync includes dev dependencies by default
-
Run the server:
uv run python -m youtrack_rocket_mcp.server # Or with activated virtual environment python -m youtrack_rocket_mcp.server
For development and testing, use the included inspector script:
# Make it executable (first time only)
chmod +x inspector.sh
# Run with MCP Inspector
./inspector.shThis will open a browser with MCP Inspector where you can test all tools with proper parameter names (not args/kwargs).
-
Pull the Docker image:
docker pull ivolnistov/youtrack-rocket-mcp:latest
-
Run the container with your YouTrack credentials:
docker run -i --rm \ -e YOUTRACK_URL=https://your-instance.youtrack.cloud \ -e YOUTRACK_API_TOKEN=perm:your-api-token \ ivolnistov/youtrack-rocket-mcp:latest
If you prefer to build the image yourself:
-
Clone the repository:
git clone https://github.com/youtrack-rocket-mcp.git cd youtrack-rocket-mcp -
Build the Docker image:
docker build -t youtrack-rocket-mcp . -
Run your locally built container:
docker run -i --rm \ -e YOUTRACK_URL=https://your-instance.youtrack.cloud \ -e YOUTRACK_API_TOKEN=your-api-token \ youtrack-rocket-mcp
To build and push multi-architecture images (for both ARM64 and AMD64 platforms):
-
Make sure you have Docker BuildX set up:
docker buildx create --use
-
Build and push for multiple platforms:
docker buildx build --platform linux/amd64,linux/arm64 \ -t ivolnistov/youtrack-rocket-mcp:latest \ --push .
This builds the image for both ARM64 (Apple Silicon) and AMD64 (Intel/AMD) architectures and pushes it with both version-specific and latest tags.
- Treat your mcp.json file as .env
- Rotate your YouTrack API tokens periodically
- Use tokens with the minimum required permissions for your use case
To use your YouTrack MCP server with Cursor IDE:
Create a .cursor/mcp.json file in your project:
{
"mcpServers": {
"YouTrack": {
"type": "stdio",
"command": "uvx",
"args": ["youtrack-rocket-mcp"],
"env": {
"YOUTRACK_API_TOKEN": "perm:username.workspace.xxxxx"
}
}
}
}{
"mcpServers": {
"YouTrack": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx",
"ivolnistov/youtrack-rocket-mcp:latest"
]
}
}
}-
Replace
yourinstance.youtrack.cloudwith your actual YouTrack instance URL andperm:your-tokenwith your actual API token. -
Restart Cursor or reload the project for the changes to take effect.
To use with Claude Desktop:
- Open Claude Desktop preferences
- Navigate to the MCP section
- Click Edit
- Open claude_desktop_config.json
- Add a new MCP server:
{
"mcpServers": {
"YouTrack": {
"type": "stdio",
"command": "uvx",
"args": ["youtrack-rocket-mcp"],
"env": {
"YOUTRACK_API_TOKEN": "perm:username.workspace.xxxxx"
}
}
}
}{
"mcpServers": {
"YouTrack": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx",
"ivolnistov/youtrack-rocket-mcp:latest"
]
}
}
}Replace the URL and token with your actual values.
For Claude Code users, add the MCP server using one of these commands:
Option 1: Using uvx (Recommended)
# Remove old server if exists
claude mcp remove youtrack-rocket-mcp
# Add new server with uvx
claude mcp add youtrack-rocket-mcp \
--env YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx \
--scope user \
-- uvx youtrack-rocket-mcpOption 2: Using Local Installation with Python
# Add new server with Python
claude mcp add youtrack-rocket-mcp \
--env YOUTRACK_URL=https://your-youtrack-instance.com \
--env YOUTRACK_API_TOKEN=your-api-token \
--scope user \
-- uv run --directory /path/to/youtrack-rocket-mcp python -m youtrack_rocket_mcp.serverOption 3: Using Docker
claude mcp add youtrack-rocket-mcp --env YOUTRACK_URL=https://your-youtrack-instance.com --env YOUTRACK_API_TOKEN=your-api-token --scope user -- docker run -i --rm tonyzorin/youtrack-mcp:latestOption 3: Using uv for dependency management
claude mcp add youtrack-rocket-mcp --env YOUTRACK_URL=https://your-youtrack-instance.com --env YOUTRACK_API_TOKEN=your-api-token --scope user -- uv run --directory /path/to/youtrack-rocket-mcp python __main__.pyKey syntax notes:
- Environment variables (
--env) must come before the--separator - The command to run comes after the
--separator - Use
--scope userfor global access across all projects - Replace
/path/to/youtrack-rocket-mcpwith your actual installation path
Replace the URL and API token with your actual YouTrack credentials.
Example with real paths:
# Working example (adjust path to your installation)
claude mcp add youtrack-rocket-mcp --env YOUTRACK_URL=https://youtrack.gaijin.team --env YOUTRACK_API_TOKEN=perm-your-token-here --scope user -- uv run --directory /Users/username/.mcp/youtrack-rocket-mcp python -m youtrack_rocket_mcp.serverTo use the YouTrack MCP server with VS Code:
-
Create a
.vscode/mcp.jsonfile with the following content:{ "servers": { "YouTrack": { "type": "stdio", "command": "docker", "args": ["run", "-i", "--rm", "-e", "YOUTRACK_API_TOKEN=perm:username.workspace.xxxxx", "youtrack-rocket-mcp:latest" ] } } } -
Replace
yourinstance.youtrack.cloudwith your actual YouTrack instance URL andperm:your-tokenwith your actual API token.
The YouTrack MCP server provides the following tools with proper parameter schemas generated by FastMCP:
get_issue- Get details of a specific issue by IDsearch_issues- Search for issues using YouTrack query languagecreate_issue- Create a new issue with custom fields supportadd_comment- Add a comment to an existing issue
get_projects- Get a list of all projectsget_project- Get details of a specific projectget_project_by_name- Get project by its full nameget_project_issues- Get issues for a specific projectget_custom_fields- Get custom fields configuration for a project
get_current_user- Get information about the currently authenticated userget_user- Get information about a specific usersearch_users- Search for usersget_user_by_login- Find a user by login nameget_user_groups- Get groups for a user
advanced_search- Advanced search with sorting optionsfilter_issues- Search with structured filtering (supports date ranges)search_with_custom_fields- Search using custom field valuesget_search_syntax_guide- Get comprehensive guide for YouTrack search query syntaxget_common_queries- Get common search query examples organized by use case
When using the YouTrack MCP tools, it's important to use the correct parameter format to ensure your requests are processed correctly. Here's how to use the most common tools:
To get information about a specific issue, you must provide the issue_id parameter:
# Correct format
get_issue(issue_id="DEMO-123")The issue ID can be either the readable ID (e.g., "DEMO-123") or the internal ID (e.g., "3-14").
To add a comment to an issue, you must provide both the issue_id and text parameters:
# Correct format
add_comment(issue_id="DEMO-123", text="This is a test comment")To create a new issue, you must provide at least the project and summary parameters:
# Correct format
create_issue(project="DEMO", summary="Bug: Login page not working")
# With optional description and custom fields
create_issue(
project="DEMO",
summary="Bug: Login page not working",
description="Users cannot log in after the latest update",
custom_fields={"Priority": "Critical", "Type": "Bug"}
)The project parameter can be either the project's short name (e.g., "DEMO") or its internal ID.
To search for issues using YouTrack query language:
# Simple search
search_issues(query="project: DEMO #Unresolved", limit=10)
# Advanced search with sorting
advanced_search(
query="assignee: me priority: Critical created: {this week}",
limit=20,
sort_by="updated",
sort_order="desc"
)
# Structured filter search
filter_issues(
project="DEMO",
assignee="me",
state="Open",
priority="High",
created_after="2024-01-01",
limit=10
)project: MyProject #Unresolved- All unresolved issues in MyProjectassignee: me state: Open- Open issues assigned to current userpriority: Critical, Major- Critical OR Major priority issuescreated: today- Issues created todayupdated: {this week}- Issues updated this week"exact phrase"- Search for exact phrase in summary/description-state: Resolved- Exclude resolved issuestype: Bug has: attachments- Bugs with attachments
Use get_search_syntax_guide() to get a comprehensive reference of all search attributes and syntax.
YouTrack projects often have required custom fields. Here's how to work with them effectively:
Before creating issues, use get_custom_fields() to see all custom fields:
# Get custom fields for a project
get_custom_fields(project_id="ITSFT")
# or
get_custom_fields(project="ITSFT")This returns:
- All custom fields with their IDs and names
- Whether each field is required or optional
- Possible values for enum/bundle fields
- Sample values from existing issues
# Basic issue creation
create_issue(
project="ITSFT",
summary="Test task for Benderbot",
description="Testing the Benderbot subsystem"
)
# With custom fields (use field names)
create_issue(
project="ITSFT",
summary="Server monitoring issue",
description="Need to monitor server health",
custom_fields={
"Subsystem": "Bender Bot",
"Type": "Task",
"Priority": "Normal"
}
)
# With custom fields (using field IDs for precise control)
create_issue(
project="ITSFT",
summary="Server monitoring issue",
custom_fields={
"93-1507": "Bender Bot", # Subsystem field ID
"93-2069": "Task", # Type field ID
"93-1505": "Normal" # Priority field ID
}
)-
Enum Fields (Type, Priority, Severity):
- Use the exact value name from possible_values
- Case-sensitive matching
-
Bundle Fields (Subsystem, Component):
- Use the name or ID from the bundle values
- Example: "Bender Bot" or "100-561"
-
User Fields (Assignee, Owner):
- Use login name or user ID
- Example: "john.doe" or "1-234"
-
Date Fields (Due Date, Start Date):
- Use timestamp in milliseconds
- Example: 1750420800000
-
Version Fields (Fix Version, Affected Version):
- Use version name or ID
- Example: "2.0" or "99-123"
When using MCP tools through AI assistants, parameters may sometimes be passed in different formats. The YouTrack MCP server is designed to handle various parameter formats, but using the explicit format above is recommended for best results.
If you encounter errors with parameter format, try using the explicit key=value format shown in the examples above.
If you get errors when creating issues:
-
"Field required" error:
- Use
get_project_detailed()to see required fields - Add the missing field to custom_fields
- Use
-
"Project not found" error:
- Use
get_projects()to list all projects - Use the project short name (e.g., "ITSFT") not the full name
- Check if you have access to the project
- Use
-
"Invalid field value" error:
- Check possible_values in get_project_detailed() output
- Field values are often case-sensitive
- For bundle fields, use exact names from the bundle
Here are some examples of using the YouTrack MCP server with AI assistants:
Can you get the details for issue DEMO-1?
Find all open issues assigned to me that are high priority
Create a new bug report in the PROJECT with the summary "Login page is not working" and description "Users are unable to log in after the recent update."
Add a comment to issue PROJECT-456 saying "I've fixed this issue in the latest commit. Please review."
This server is built with FastMCP, which provides:
- Automatic JSON Schema generation from Python type hints
- Proper parameter validation
- Correct parameter names in MCP Inspector (no more args/kwargs)
- Full async support for optimal performance
The server can be configured via environment variables:
| Variable | Description | Default |
|---|---|---|
YOUTRACK_API_TOKEN |
YouTrack API token (required) | - |
YOUTRACK_URL |
YouTrack instance URL (for self-hosted) | - |
YOUTRACK_VERIFY_SSL |
Verify SSL certificates | true |
MCP_SERVER_NAME |
Name of the MCP server | youtrack-rocket-mcp |
MCP_DEBUG |
Enable debug logging | false |
For self-hosted instances with self-signed SSL certificates, you can disable SSL verification:
docker run -i --rm \
-e YOUTRACK_URL=https://youtrack.internal.company.com \
-e YOUTRACK_API_TOKEN=perm:your-permanent-token \
-e YOUTRACK_VERIFY_SSL=false \
ivolnistov/youtrack-rocket-mcp:latestThis option is only recommended for development or in controlled environments where you cannot add the certificate to the trust store.
You can enable debug logging for troubleshooting:
docker run -i --rm \
-e YOUTRACK_URL=https://your-instance.youtrack.cloud \
-e YOUTRACK_API_TOKEN=perm:your-permanent-token \
-e MCP_DEBUG=true \
ivolnistov/youtrack-rocket-mcp:latest