MCP Connector

Integrate YouTrack with AI Assistants

YouTrack MCP gives Claude full issue, project, and Apex-free custom-field management for YouTrack via Docker or npm.

Works with youtrack

91
Spark score
out of 100
Updated 5 months ago
Version 1.17.3
Models
universal

Add to Favorites

Why it matters

Seamlessly connect AI assistants to your JetBrains YouTrack instance. Manage issues, projects, users, and custom fields programmatically to automate development and project management tasks.

Outcomes

What it gets done

01

Create, update, and manage YouTrack issues programmatically.

02

Search and retrieve YouTrack issues based on custom queries.

03

Automate issue assignment, state changes, and estimations.

04

Integrate with AI assistants for intelligent task management.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-youtrack | bash

Capabilities

Tools your agent gets

update_issue_state

Update issue status/state using simple string values

update_issue_priority

Update issue priority (Critical, Major, Normal, etc.)

update_issue_assignee

Assign issue to a user using their login

update_issue_type

Update issue type (Bug, Feature, Task, etc.)

update_issue_estimation

Set time estimate for an issue using time strings (4h, 2d, 30m, 1w)

update_custom_fields

Update multiple custom fields at once using batch operations

search_issues

Search issues by text queries

get_project_issues

Get all issues for a specific project

+6 tools

Overview

YouTrack MCP Server

YouTrack MCP exposes issue creation, search, custom-field updates, attachment handling, and linking as MCP tools, documenting the simple-string field formats that work reliably over complex object shapes that fail. Use it to triage, update, and report on YouTrack issues conversationally, following the documented proven-working formats for state, priority, and assignee updates.

What it does

YouTrack MCP is a Model Context Protocol server providing access to YouTrack issue-tracking functionality, enabling seamless integration with Claude Desktop and other MCP clients. It covers issue management (create, read, update, delete), project information and custom fields, advanced search with filters, user information and permissions, attachment handling (download, process, delete, up to 10MB), and comprehensive custom-field management including validation against a project's own schema.

When to use - and when NOT to

Use this when you want to triage, update, or report on YouTrack issues conversationally - transitioning an issue's state, reassigning it, adjusting priority or estimation, linking related issues, or running complete multi-step workflows like triage or feature-development handoff - instead of clicking through the YouTrack UI. The project's own documentation is explicit about one gotcha: state, priority, assignee, and type updates must use simple string values through dedicated tools (update_issue_state, update_issue_priority, update_issue_assignee, update_issue_type) or the equivalent flat string form of update_custom_fields - passing complex objects like {"State": {"name": "In Progress"}} to update_custom_fields is documented to fail.

Inputs and outputs

Core field-update tools take an issue ID and a plain value: update_issue_state(issue_id, state), update_issue_priority(issue_id, priority), update_issue_assignee(issue_id, login), update_issue_type(issue_id, type), and update_issue_estimation(issue_id, duration) (simple time strings like 4h, 2d, 1w, or 3d 5h - not ISO durations). Other tools include search_issues(query), get_project_issues(project), get_issue(id), create_issue(project_id, summary, description), add_dependency/add_relates_link for issue links, add_comment/get_issue_comments, and get_issue_raw/get_attachment_content/delete_attachment for attachments. update_custom_fields(issue_id, {field: value, ...}) supports multiple fields (Priority, Assignee, Estimation, Type, and others) in one call using simple string values per field.

Integrations

Available as a Docker image (Docker Hub or GitHub Container Registry, latest/versioned/_wip/pr-<number> tags, ARM64 and AMD64 support) run with YOUTRACK_URL and YOUTRACK_API_TOKEN environment variables, or as an npm package (youtrack-mcp-tonyzorin on npmjs.org, or @tonyzorin/youtrack-mcp via GitHub Packages) runnable with npx. Additional environment variables include YOUTRACK_VERIFY_SSL and tool-filtering controls DISABLED_TOOLS (denylist) or ENABLED_TOOLS (allowlist, which takes precedence if both are set) to reduce context usage; tool names are case-insensitive and treat hyphens and underscores as equivalent.

Who it's for

Teams running YouTrack who want an AI assistant to triage, update, link, and report on issues conversationally, using the project's documented proven-working field formats rather than the complex object shapes that are known to fail.

The project documents full multi-step workflows built from these tools - a triage workflow that classifies an issue as a bug, sets Critical priority, assigns it, estimates it, moves it to In Progress, and comments on the change - showing how the individual field-update tools are meant to be chained together for a complete task rather than used one at a time in isolation.

docker run --rm \
  -e YOUTRACK_URL="https://your-instance.youtrack.cloud" \
  -e YOUTRACK_API_TOKEN="your-token" \
  tonyzorin/youtrack-mcp:latest
Source README

MseeP.ai Security Assessment Badge

YouTrack MCP

A Model Context Protocol (MCP) server that provides access to YouTrack functionality.

๐Ÿš€ Quick Reference - Common Operations

๐ŸŽฏ State Transitions (Most Common)

# โœ… PROVEN WORKING FORMAT - Use simple strings
update_issue_state("DEMO-123", "In Progress")
update_issue_state("PROJECT-456", "Fixed")
update_issue_state("TASK-789", "Closed")

# โŒ DON'T USE - Complex objects fail
# update_custom_fields(issue_id, {"State": {"name": "In Progress"}})  # FAILS
# update_custom_fields(issue_id, {"State": {"id": "154-2"}})         # FAILS

๐Ÿšจ Priority Updates (Very Common)

# โœ… PROVEN WORKING FORMAT - Use simple strings
update_issue_priority("DEMO-123", "Critical")
update_issue_priority("PROJECT-456", "Major") 
update_issue_priority("TASK-789", "Normal")

# โŒ DON'T USE - Complex objects fail
# update_custom_fields(issue_id, {"Priority": {"name": "Critical"}})  # FAILS
# update_custom_fields(issue_id, {"Priority": {"id": "152-1"}})       # FAILS

๐Ÿ‘ค Assignment Updates (Common)

# โœ… PROVEN WORKING FORMAT - Use login names
update_issue_assignee("DEMO-123", "admin")
update_issue_assignee("PROJECT-456", "john.doe")
update_issue_assignee("TASK-789", "jane.smith")

# โŒ DON'T USE - Complex objects fail
# update_custom_fields(issue_id, {"Assignee": {"login": "admin"}})    # FAILS

๐Ÿท๏ธ Type Updates (Common)

# โœ… PROVEN WORKING FORMAT - Use simple strings
update_issue_type("DEMO-123", "Bug")
update_issue_type("PROJECT-456", "Feature")
update_issue_type("TASK-789", "Task")

# โŒ DON'T USE - Complex objects fail
# update_custom_fields(issue_id, {"Type": {"name": "Bug"}})          # FAILS

โฑ๏ธ Time Estimation (Common)

# โœ… PROVEN WORKING FORMAT - Use simple time strings
update_issue_estimation("DEMO-123", "4h")     # 4 hours
update_issue_estimation("PROJECT-456", "2d")  # 2 days
update_issue_estimation("TASK-789", "30m")    # 30 minutes
update_issue_estimation("TASK-790", "1w")     # 1 week
update_issue_estimation("TASK-791", "3d 5h")  # 3 days 5 hours

# โŒ DON'T USE - ISO duration or complex formats fail
# update_custom_fields(issue_id, {"Estimation": "PT4H"})             # FAILS

โšก Complete Issue Workflows

# ๐ŸŽฏ Complete Triage Workflow
update_issue_type("DEMO-123", "Bug")           # Classify as bug
update_issue_priority("DEMO-123", "Critical")  # Set priority  
update_issue_assignee("DEMO-123", "admin")     # Assign to admin
update_issue_estimation("DEMO-123", "4h")      # Estimate 4 hours
update_issue_state("DEMO-123", "In Progress")  # Start work
add_comment("DEMO-123", "Critical bug triaged and assigned")

# ๐Ÿš€ Feature Development Workflow  
update_issue_type("PROJ-456", "Feature")       # Classify as feature
update_issue_priority("PROJ-456", "Normal")    # Standard priority
update_issue_assignee("PROJ-456", "jane.doe")  # Assign to developer
update_issue_estimation("PROJ-456", "2d")      # Estimate 2 days
add_comment("PROJ-456", "Feature ready for development")

# โœ… Task Completion Workflow
update_issue_state("TASK-789", "Fixed")        # Mark as fixed
add_comment("TASK-789", "Implementation completed and tested")

# ๐Ÿ“Š Quick Updates (Most Common)
update_issue_state("DEMO-123", "In Progress")       # Start work
update_issue_priority("DEMO-123", "Critical")       # Escalate
update_issue_assignee("DEMO-123", "admin")          # Reassign
update_issue_type("DEMO-123", "Bug")                # Reclassify
update_issue_estimation("DEMO-123", "6h")           # Re-estimate

๐Ÿ“ Other Custom Fields

# โœ… Working formats for different field types:

# Priority (enum field)
update_custom_fields("DEMO-123", {"Priority": "Critical"})

# Assignee (user field) 
update_custom_fields("DEMO-123", {"Assignee": "admin"})

# Estimation (period field)
update_custom_fields("DEMO-123", {"Estimation": "4h"})

# Type (enum field)
update_custom_fields("DEMO-123", {"Type": "Bug"})

# Multiple fields at once
update_custom_fields("DEMO-123", {
    "Priority": "Critical",
    "Assignee": "admin", 
    "Type": "Bug"
})

๐Ÿ” Finding Issues

# Search by text
search_issues("bug in login")

# Search by project
get_project_issues("DEMO")

# Get specific issue
get_issue("DEMO-123")

๐Ÿ“‹ Creating Issues

create_issue(
    project_id="DEMO",
    summary="Bug in login system",
    description="Users cannot log in with special characters"
)

๐Ÿ”— Linking Issues

# Create dependency
add_dependency("DEMO-123", "DEMO-124")

# Create relates link
add_relates_link("DEMO-123", "DEMO-125")

๐Ÿ’ฌ Comments

add_comment("DEMO-123", "Fixed the login bug")
get_issue_comments("DEMO-123")

๐Ÿ“Ž Attachments

# Get raw issue data with attachments
get_issue_raw("DEMO-123")

# Download attachment content as base64
get_attachment_content("DEMO-123", "1-456")

# Delete an attachment (requires permissions)
delete_attachment("DEMO-123", "1-456")

Installation

Docker Build and Push

This project provides a Model Context Protocol (MCP) server for YouTrack, enabling seamless integration with Claude Desktop and other MCP clients.

Quick Start

Using Docker (Recommended)

Choose from multiple registries:

Docker Hub (Primary)
# Use the latest stable release
docker run --rm \
  -e YOUTRACK_URL="https://your-instance.youtrack.cloud" \
  -e YOUTRACK_API_TOKEN="your-token" \
  tonyzorin/youtrack-mcp:latest

# Or use the latest development build
docker run --rm \
  -e YOUTRACK_URL="https://your-instance.youtrack.cloud" \
  -e YOUTRACK_API_TOKEN="your-token" \
  tonyzorin/youtrack-mcp:1.1.2_wip
GitHub Container Registry (New)
# Use the latest stable release
docker run --rm \
  -e YOUTRACK_URL="https://your-instance.youtrack.cloud" \
  -e YOUTRACK_API_TOKEN="your-token" \
  ghcr.io/tonyzorin/youtrack-mcp:latest

# Or use the latest development build
docker run --rm \
  -e YOUTRACK_URL="https://your-instance.youtrack.cloud" \
  -e YOUTRACK_API_TOKEN="your-token" \
  ghcr.io/tonyzorin/youtrack-mcp:1.1.2_wip

Available Docker Tags

Both registries provide identical tags:

  • latest - Latest stable release (currently 1.1.2)
  • 1.1.2 - Specific version tags
  • 1.1.2_wip - Work-in-progress builds from main branch
  • pr-<number> - Pull request builds for testing

Note: Images are now published to both Docker Hub and GitHub Container Registry simultaneously.

Using npm Package

Choose from multiple registries:

npmjs.org (Primary)
# Install globally
npm install -g youtrack-mcp-tonyzorin

# Or use with npx (no installation required)
npx youtrack-mcp-tonyzorin
GitHub Packages (New)
# Configure GitHub registry
npm config set @tonyzorin:registry https://npm.pkg.github.com

# Install globally
npm install -g @tonyzorin/youtrack-mcp

# Or use with npx
npx @tonyzorin/youtrack-mcp

Features

  • Issue Management: Create, read, update, and delete YouTrack issues
  • Project Management: Access project information and custom fields
  • Search Capabilities: Advanced search with filters and custom fields
  • User Management: Retrieve user information and permissions
  • Attachment Support: Download, process, and delete issue attachments (up to 10MB)
  • Multi-Platform Support: ARM64/Apple Silicon and AMD64 architecture support
  • Comprehensive API: Full YouTrack REST API integration

Development

This project maintains high code quality with comprehensive testing:

  • Test Coverage: 41% (continuously improving)
  • CI/CD Pipeline: Automated testing and Docker builds
  • Quality Assurance: Automated testing on every commit

For development instructions, see the Automation Scripts Guide and Release Process.

Configuration

Environment Variables

  • YOUTRACK_URL: Your YouTrack instance URL
  • YOUTRACK_API_TOKEN: Your YouTrack API token
  • YOUTRACK_VERIFY_SSL: SSL verification (default: true)
  • DISABLED_TOOLS: Comma-separated list of tools to disable (denylist mode)
  • ENABLED_TOOLS: Comma-separated list of tools to enable (allowlist mode)

Tool Filtering

You can reduce context pollution and token usage by filtering which tools are available:

Denylist Mode - Disable specific tools:

export DISABLED_TOOLS="create_issue,update_issue,delete_page"

Allowlist Mode - Enable only specific tools (disables all others):

export ENABLED_TOOLS="get_issue,search_issues,get_projects"

Notes:

  • Tool names are case-insensitive (Get_Issue = get_issue)
  • Hyphens and underscores are equivalent (get-issue = get_issue)
  • If ENABLED_TOOLS is set, it takes precedence over DISABLED_TOOLS
  • Invalid tool names generate warnings but don't cause errors
  • Filtering happens at startup for maximum efficiency

Example Configuration

export YOUTRACK_URL="https://prodcamp.youtrack.cloud/"
export YOUTRACK_API_TOKEN="perm-YWRtaW4=.NDMtMg==.JgbpvnDbEu7RSWwAJT6Ab3iXgQyPwu"
export YOUTRACK_VERIFY_SSL="true"

Documentation

Version 1.11.1 Released

๐ŸŽ‰ MAJOR FEATURE - Custom Fields Management Support

  • โœ… Complete custom fields CRUD operations (create, read, update, delete)
  • โœ… Field validation against project schema (all field types supported)
  • โœ… Batch update capabilities for performance
  • โœ… Comprehensive error handling with detailed messages
  • โœ… 567 tests (+68 new tests) with extensive coverage
  • โœ… Clean project organization with automations/ directory

FAQ

Common questions

Discussion

Questions & comments ยท 0

Sign In Sign in to leave a comment.