Simple Jira MCP
Provides integration with Jira Cloud, enabling AI agents to search for issues using JQL, retrieve detailed issue information including comments and attachments, create new issues, and download attachments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Simple Jira MCPsearch for all open bugs assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Simple Jira MCP
A Model Context Protocol (MCP) server that provides Jira Cloud integration for AI agents.
Features
Search issues using JQL (Jira Query Language)
Retrieve issue details with comments and attachments
Create new issues
List available transitions and transition issues with screen fields
Add comments, including comments posted with a transition
Download attachments
Support for multiple Jira configurations
Related MCP server: Jira MCP Server
Why not the official Atlassian MCP server?
Atlassian ships an official remote server (atlassian/atlassian-mcp-server). It covers far more ground — Confluence, JSM, Bitbucket, Compass, and issue updates and transitions — with per-user OAuth scoping (API tokens optional) and nothing for you to host. If you need that breadth, use it.
This server is worth choosing when:
You work across separate Jira instances.
JIRA_CONFIG_JSONtakes a list and every tool that reaches Jira acceptsconfig_id. The official server authorizes one Atlassian identity per connection.You need attachment files on disk. The official server has no attachment operations.
No org admin available. The official server needs one — either to enable Rovo on a verified business domain (OAuth) or to explicitly enable its API-token authentication. This one needs only your own API token.
Tool-surface size matters. Eight tools instead of ~16 Jira tools plus four other products, a
fieldsallowlist on search, and ADF flattened to plain text — less context spent per request.You want a small blast radius. Search, read, create, transition, comment, and download. No delete, no bulk mutation, no cross-product writes.
Trade-offs, stated plainly: no Confluence or other Atlassian products, no general issue editing tool, a shared API token rather than per-user OAuth, and you maintain it yourself.
Requirements
Python 3.11+
Jira Cloud account with API token
Installation
git clone https://github.com/timohaa/simple-jira-mcp.git
cd simple-jira-mcp
python -m venv venv
# Linux/macOS
source venv/bin/activate
# Windows
# venv\Scripts\activate
pip install -e ".[dev]"Configuration
Set the JIRA_CONFIG_JSON environment variable with your Jira credentials:
export JIRA_CONFIG_JSON='[
{
"id": "work",
"url": "https://your-domain.atlassian.net",
"email": "your-email@example.com",
"token": "your-api-token",
"timeout": 60
}
]'Generate an API token at: https://id.atlassian.com/manage-profile/security/api-tokens
timeout is optional and per-instance: seconds to allow for each HTTP phase,
defaulting to 30. Raise it for a slow instance or large attachments. It must be
a positive number — the server refuses to start otherwise. See
API_REFERENCE.md for exactly what the budget covers.
AI Tool Integration
In every snippet below, replace /path/to/simple-jira-mcp with your checkout
path. The command must be the venv interpreter created during installation —
a bare python only works if the ambient interpreter already has mcp and
httpx installed.
cwd is not needed to start the server (since 0.3.0 python -m src resolves
from the installed package regardless of directory), but it sets where
download_attachment saves files when output_dir is omitted. Without it,
downloads land in whatever directory the client launched the server from.
Claude Desktop
Platform | Config Path |
macOS |
|
Linux |
|
Windows |
|
{
"mcpServers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Claude Code (CLI)
Edit ~/.claude.json:
{
"mcpServers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Verify with claude mcp list.
Gemini CLI
Config file: ~/.gemini/settings.json
{
"mcpServers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Verify with /mcp command in Gemini CLI.
OpenAI Codex CLI
Config file: ~/.codex/config.toml
[mcp_servers.jira]
command = "/path/to/simple-jira-mcp/venv/bin/python"
args = ["-m", "src"]
cwd = "/path/to/simple-jira-mcp"
[mcp_servers.jira.env]
JIRA_CONFIG_JSON = '[{"id": "work", "url": "https://your-domain.atlassian.net", "email": "your-email@example.com", "token": "your-api-token"}]'Cursor
Scope | Config Path |
Global |
|
Project |
|
{
"mcpServers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Access via Cursor Settings > MCP.
Windsurf (Codeium)
Platform | Config Path |
macOS/Linux |
|
Windows |
|
{
"mcpServers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Access via Windsurf Settings > Cascade > Plugins (MCP servers).
VS Code with GitHub Copilot
Config file: .vscode/mcp.json (project-level)
{
"servers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"cwd": "/path/to/simple-jira-mcp",
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Requires VS Code 1.102+ with GitHub Copilot. Use Agent Mode in Copilot Chat.
Zed
Add to Zed settings.json:
{
"context_servers": {
"jira": {
"command": "/path/to/simple-jira-mcp/venv/bin/python",
"args": ["-m", "src"],
"env": {
"JIRA_CONFIG_JSON": "[{\"id\": \"work\", \"url\": \"https://your-domain.atlassian.net\", \"email\": \"your-email@example.com\", \"token\": \"your-api-token\"}]"
}
}
}
}Note: Zed does not document a cwd key, so this snippet omits it. The server
still starts fine, but pass output_dir explicitly to download_attachment —
otherwise files land in whatever directory Zed launched the server from.
Windows Notes
On Windows, use full paths with backslashes:
{
"command": "C:\\path\\to\\simple-jira-mcp\\venv\\Scripts\\python.exe",
"cwd": "C:\\path\\to\\simple-jira-mcp"
}Available Tools
Tool | Description |
| List available Jira configurations |
| Search issues using JQL |
| Get detailed issue information |
| Create a new issue |
| List transitions and screen fields |
| Transition an issue by ID or name |
| Add a plain-text comment |
| Download an attachment from an issue |
Usage Notes
list_configs: Returns configs withdefaulttrue for the first entry inJIRA_CONFIG_JSON, plus each config's effectivetimeout. It never returns an error — with no configs loaded it reports{"configs": []}rather thanCONFIG_NOT_FOUND. The server exits at startup whenJIRA_CONFIG_JSONis unset or empty, so a running server always has at least one config.search_issues: JQL must include at least one bounding filter (project, status, assignee, reporter, priority, type/issuetype, key, id, or a created/updated/resolved clause) — any one of them satisfies the check, so a query need not be scoped to a project. Quote values that are JQL reserved words:project = "ON", notproject = ON. Semicolons and newlines are rejected. Supports cursor pagination withnext_page_tokenandis_last(the Jira/search/jqlendpoint returns no total count). The optionalfieldsallowlist is forwarded to Jira and drives the response shape: each issue containskey,url, and only the requested fields. Default fields are summary, status, assignee, priority, updated, created, labels, issuetype.get_issue:include_commentsandinclude_attachmentstoggle those sections. Descriptions and comments are plain text; attachments includesize_kbandmime_type.create_issue: Summary max 255 characters; description is converted to ADF; optionalpriority,labels, andassignee_account_id.get_transitions: Returns transition IDs, names, target statuses, and screen field metadata with required flags and allowed values.transition_issue: Accepts an ID or case-insensitive transition/target-status name. Ambiguous names return valid options. Optionalresolutionandfieldsmust be accepted by the screen; an optional plain-textcommentis posted in the same request. Returns status, resolution, andresolutiondatefrom Jira. Jira setsresolutiondateitself; the API cannot edit it. Record the actual completion date in the comment.add_comment: Converts plain text to ADF and returns the comment ID and creation time.download_attachment:output_dirmust exist when provided (defaults to the current working directory); files are saved to<output_dir>/<issue_key>/with sanitized filenames.
Reference
See API_REFERENCE.md for tool inputs/outputs, error codes, and JQL patterns.
Development
# Run all checks (lint, type check, tests)
./check.sh
# Run specific checks
./check.sh -l # Linting only
./check.sh -m # Type checking only
./check.sh -t # Tests only
./check.sh -c # Tests with coverage
./check.sh -f # Auto-fix linting issues
./check.sh -a # Explicitly run all checks
./check.sh -h # Show helpLicense
MIT License - see LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Build and run agents and automations across hundreds of apps using natural language.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Jira Cloud instances for comprehensive issue management including creating, updating, searching issues, managing comments, workflow transitions, and project metadata discovery. Supports JQL queries, user search, and custom field operations with secure API token authentication.122,853 npm8MIT
- FlicenseAqualityDmaintenanceIntegrates with Jira Cloud to enable comprehensive issue management, project tracking, and team collaboration through natural language, including creating/updating tickets, searching with JQL, managing workflows, and adding comments.8-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Jira Cloud through the REST API, supporting project management, issue operations (create, read, update, delete), JQL search, task assignments, and status transitions.-
- AlicenseAqualityCmaintenanceEnables AI agents to interact with Jira Cloud, including listing boards and issues, adding comments, and searching users.732 npm2MIT