The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Jira MCP listing page.


The most powerful and feature-rich MCP server for Jira integration. Control Jira through AI-powered LLM clients like Cursor, Claude Desktop, Windsurf, and ChatGPT using the Model Context Protocol.
The MCP server uses the jira-cli to execute Jira commands.
Follow the installation instructions for your operating system: https://github.com/ankitpokhrel/jira-cli?tab=readme-ov-file#installation
Depending on your implementation of Jira (Cloud or Self-Hosted), you will need to use a different authentication type.
Get your API token from: https://id.atlassian.com/manage-profile/security/api-tokens
You will need to set the following environment variables:
JIRA_API_TOKEN - Your Jira API tokenJIRA_AUTH_TYPE - Authentication type (bearer for token, basic for Jira
account API token, password for Jira account password)Recommended: Pass these variables in your MCP client configuration using the
env field (shown in the configuration examples below). This is more reliable
than shell environment variables because GUI applications like Cursor and
Windsurf do not inherit variables from .bashrc or .zshrc.
Other ways to add credentials to your environment: https://github.com/ankitpokhrel/jira-cli/discussions/356
This should initialize the Jira CLI by asking for your Jira URL and credentials.
This should return a list of issues in Jira.
Download the latest release for your operating system from the Releases page.
| Operating System | Binary |
|---|---|
| Linux | jira-mcp-linux |
| Windows | jira-mcp-windows.exe |
| macOS (Apple Silicon) | jira-mcp-macos-apple-silicon-arm64 |
| macOS (Intel) | jira-mcp-macos-x64 |
Add to your LLM client configuration:
NOTE: Make sure to replace /usr/local/bin/jira-mcp with the path to the
binary on your machine if you moved it to a different location.
Note: macOS may block the binary on first run. If you see a security warning, go to System Settings > Privacy & Security and click Allow Anyway, or run:
Add to your LLM client configuration:
NOTE: Make sure to replace /usr/local/bin/jira-mcp with the path to the
binary on your machine if you moved it to a different location.
jira-mcp-windows.exe from the Releases
page.C:\Program Files\jira-mcp\).Add to your LLM client configuration:
NOTE: Make sure to replace C:\\Program Files\\jira-mcp\\jira-mcp-windows.exe with the path to the binary on your
machine if you moved it to a different location.
Get repo:
Add MCP server to your choice of LLM client:
NOTE: You will need to look up for your specific client on how to add MCPs.
Usually the JSON file for the LLM client will look like this:
This will tell your LLM client application that there's a tool that can be
called by calling uv --directory /ABSOLUTE/PATH/TO/REPO run python -m src.main.
Install UV: https://docs.astral.sh/uv/getting-started/installation/
Do not use print statements for logging. Use the logging module instead.
Writing to stdout will corrupt the JSON-RPC messages and break your server.
This project uses pre-commit to run ruff linting and formatting checks, and pytest tests before each commit.
To set up pre-commit hooks:
Once installed, ruff and pytest will automatically run when you commit. To run checks manually on all files:
MCP.tools decorator parameters are especially important as this is the human readable text that the LLM has context of. This will be treated as part of the prompt when fed to the LLM and this will decide when to use each tool.
MCP follows a client-server architecture where an MCP host (an AI application like Cursor or ChatGPT desktop) establishes connections to one or more MCP servers. The MCP host accomplishes this by creating one MCP client for each MCP server. Each MCP client maintains a dedicated connection with its corresponding MCP server.
https://modelcontextprotocol.io/docs/learn/architecture
On MacOS:
jira initIf you get a 404 error when using jira init, you may need to edit the jira-cli
config file to point to the correct Jira instance. There are only 3 possible
values for the auth type so try each one. basic, password, or bearer.