A Model Context Protocol (MCP) server for Atlassian Jira (Python).
jira-mcp
A Model Context Protocol (MCP) server for Atlassian Jira (self-hosted Server / Data Center), written in Python. It lets MCP-compatible clients (Claude Desktop, Claude Code, Cursor, etc.) search, read, and manage Jira issues, projects, comments, workflow transitions, worklogs, and agile boards.
Targets the company's self-hosted Jira at (e.g. https://works.digikala.com) over the
REST API v2 with HTTP basic auth — you only supply your PAT and host.
Features
| Tool | Description |
| ------------------ | ----------------------------------------------- |
| get_current_user | Who am I? (connectivity check) |
| search_issues | Search issues with JQL |
| get_issue | Fetch one issue (optionally with comments) |
| get_comments | List an issue's comments |
| list_transitions | Available workflow transitions for an issue |
| list_projects | List accessible projects |
| get_project | Fetch one project |
| search_users | Find users (returns account ids for assignment) |
| list_boards | List agile boards |
| list_sprints | List sprints on a board |
| create_issue | Create an issue |
| update_issue | Update fields on an issue |
| add_comment | Comment on an issue |
| transition_issue | Move an issue through its workflow |
| assign_issue | Assign / unassign an issue |
| add_worklog | Log time against an issue |
| link_issues | Link two issues |
| delete_issue | Delete an issue (guarded) |
Write tools can be disabled entirely with JIRA_READ_ONLY=true.
Installation
Requires Python 3.10+. The package is distributed via GitHub.
Install as a tool (recommended)
Install once into an isolated environment — fast to launch afterwards (no re-download or rebuild per run), which matters when an MCP client spawns the server repeatedly:
uv tool install git+https://github.com/alirezahematidev/jira-mcp
# or:
pipx install git+https://github.com/alirezahematidev/jira-mcp
This puts a jira-mcp executable on your PATH. Find it with which jira-mcp.
To update later: uv tool upgrade jira-mcp (or pipx upgrade jira-mcp).
From source (development)
git clone https://github.com/alirezahematidev/jira-mcp
cd jira-mcp
uv pip install -e ".[dev]" # or: pip install -e ".[dev]"
Tip: avoid
uvx --from git+...jira-mcpin an MCP client config — it re-resolves the package on every launch and is noticeably slow. Install once (above) and point the client at the installed executable instead.
Configuration
Provide your Jira host and a personal access token (PAT) via environment
variables (or a .env file; copy .env.example to .env):
JIRA_HOST=your-jira-host
JIRA_PAT=your-personal-access-token
Generate the PAT from your self-hosted Jira account settings.
Running
jira-mcp # console script (stdio transport)
python -m jira_mcp # equivalent
The server speaks MCP over stdio, so it's normally launched by an MCP client rather than run by hand.
Claude Desktop / Claude Code
Add to your MCP config (e.g. .mcp.json):
{
"mcpServers": {
"jira": {
"command": "jira-mcp",
"env": {
"JIRA_HOST": "your-jira-host",
"JIRA_PAT": "your-personal-access-token"
}
}
}
}
If the client can't find jira-mcp on its PATH, use the absolute path from
which jira-mcp (e.g. /Users/you/.local/bin/jira-mcp) as "command".
Usage notes
- JQL is the most powerful entry point, e.g.
project = PROJ AND assignee = currentUser() AND status != Done ORDER BY updated DESC. - Assigning users:
assigneeis a username — callsearch_usersfirst to find it. - Transitions: status names aren't passed directly. Call
list_transitionsto get a validtransition_id, thentransition_issue. - Rich text: descriptions and comments are plain text (Jira wiki markup is accepted).
Development
uv pip install -e ".[dev]"
pytest # run the test suite
ruff check . # lint
The tests mock the Jira HTTP API with respx, so no live Jira instance is
needed.
Building & publishing
uv build # produces dist/*.whl and dist/*.tar.gz
uvx twine check dist/* # validate package metadata
git tag v0.1.0 && git push origin v0.1.0
License
MIT