mcpField
J
JIRA MCP Server (Async)

JIRA MCP Server (Async)

Local
github.com/judexzhuVersion Control2Updated 12w ago

About JIRA MCP Server (Async)

JIRA MCP Server (Async) is an asynchronous MCP server for managing JIRA issues through stdio. It supports Atlassian Cloud and Server/DC, with tools for issue searches, updates, transitions, and creation.

Key features

  1. 01Search issues with JQL
  2. 02Read issue details and comments
  3. 03Create and update issues
  4. 04Move issues through workflow transitions
  5. 05Support Cloud and Server/DC
  6. 06Throttle requests and retry after rate limits

Use cases

  1. 01Find issues matching JQL criteria
  2. 02Review issue details and linked comments
  3. 03Create or update a JIRA issue
  4. 04Transition an issue through its workflow

MCP support

The server exposes six JIRA issue-management tools and two prompt templates to MCP clients over stdio. It supports Atlassian Cloud and Server/DC instances.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

JIRA MCP Server (Async)

Python 3.13+ MCP Compatible UV

An async Model Context Protocol (MCP) server for JIRA integration via stdio transport. Supports both Atlassian Cloud and Server/DC instances.

MCP Tools

6 tools covering the full issue lifecycle, plus 2 prompt templates:

ToolDescriptionKey Parameters
jira_search_issuesSearch issues using JQL (paginated)jql, max_results, start_at
jira_get_issueGet issue details, comments, links; optionally subtasks and transitionsissue_key, include_subtasks, include_transitions
jira_create_issueCreate a new issueproject_key, summary, description, issue_type_name
jira_update_issueUpdate fields on an existing issue, optionally add a commentissue_key, summary, description, assignee, priority, labels, comment
jira_transition_issueMove an issue through a workflow transitionissue_key, transition_id, comment
jira_get_create_metaGet required fields and allowed values before creating an issueproject_key, issue_type

Features

  • Cloud + Server/DC: Auto-detects deployment type via JIRA_USER_EMAIL env var
  • Token optimization: API responses transformed to 40-60% fewer tokens
  • ADF support: Reads and writes Atlassian Document Format (Cloud v3)
  • Connection pooling: aiohttp with configurable pool size
  • Rate limiting: Built-in throttling with exponential backoff on 429s
  • Testable: Injectable client via _set_client(), session injection for HTTP-level tests, 113 unit tests

Setup

Prerequisites
  • Python 3.13+
  • uv package manager
  • JIRA API token
Installation
git clone https://github.com/judexzhu/mcp-jira.git
cd mcp-jira
uv sync
cp config.env.example .env
# Edit .env with your JIRA credentials
Environment Variables
VariableDescriptionDefaultRequired
JIRA_SERVER_URLYour JIRA instance URL—Yes
JIRA_API_TOKENYour JIRA API token—Yes
JIRA_USER_EMAILEmail for Cloud Basic Auth (enables Cloud mode)—Cloud only
MAX_CONCURRENT_REQUESTSMax concurrent requests & rate limit (req/sec)2No
REQUEST_TIMEOUTHTTP request timeout (seconds)30No
CONNECT_TIMEOUTHTTP connection timeout (seconds)10No
LOG_LEVELLogging levelERRORNo
LOG_TO_STDOUTEnable stdout logging (breaks MCP stdio)falseNo
Claude Desktop

Add to your Claude Desktop MCP config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "jira": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-jira", "python", "jira_mcp_server.py"],
      "env": {
        "JIRA_SERVER_URL": "https://your-company.atlassian.net",
        "JIRA_API_TOKEN": "your_api_token",
        "JIRA_USER_EMAIL": "[email protected]"
      }
    }
  }
}
Claude Code

Add to your Claude Code MCP settings (.claude/settings.json or global ~/.claude/settings.json):

{
  "mcpServers": {
    "jira": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-jira", "python", "jira_mcp_server.py"],
      "env": {
        "JIRA_SERVER_URL": "https://your-company.atlassian.net",
        "JIRA_API_TOKEN": "your_api_token",
        "JIRA_USER_EMAIL": "[email protected]"
      }
    }
  }
}

Or add via CLI:

claude mcp add jira \
  -e JIRA_SERVER_URL=https://your-company.atlassian.net \
  -e JIRA_API_TOKEN=your_api_token \
  -e [email protected] \
  -- uv run --directory /path/to/mcp-jira python jira_mcp_server.py

Alternatively, skip the -e flags and put credentials in a .env file inside the mcp-jira directory — load_dotenv() picks them up automatically.

Testing

# Unit tests (no credentials needed)
uv sync --group dev
uv run pytest tests/ -v

Architecture

Two-file core:

  • jira_mcp_server.py — 6 MCP tool functions + 2 prompt templates, each a thin wrapper delegating to the client
  • jira_client.py — AsyncJiraClient with JiraClientProtocol seam, _CloudFormat/_ServerFormat adapters, auth, connection pooling, rate limiting, retry, and response transformation

Cloud vs Server/DC is detected by the presence of JIRA_USER_EMAIL. See docs/adr/0001-cloud-detection-via-email.md for the rationale.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.