A Model Context Protocol (MCP) server that gives Cursor IDE full read/write access to Jira. Create, search, update, and delete tickets directly from the AI chat β 14 tools in total.
- Python 3.11+ β check with
python3 --version - Cursor IDE
- Jira API token β generate one at https://id.atlassian.com/manage-profile/security/api-tokens
pip install jira-mcp-cursorThat's it. This installs the jira-mcp command globally.
Prefer isolation? Use
pipx install jira-mcp-cursoror install in a venv.
Alternative: install from source
git clone https://github.com/Fintama/Jira_extension_for_cursor.git
cd Jira_extension_for_cursor
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .Add the Jira MCP server to your Cursor config. Open (or create) the file:
- Global (all projects):
~/.cursor/mcp.json - Per-project:
<project-root>/.cursor/mcp.json
Paste this, replacing the placeholder values with your own:
{
"mcpServers": {
"jira": {
"command": "jira-mcp",
"args": ["serve"],
"env": {
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "your-api-token",
"JIRA_PROJECT_KEY": "PROJ"
}
}
}
}Installed from source? Use the full path to the venv Python instead:
"command": "/absolute/path/to/Jira_extension_for_cursor/venv/bin/python", "args": ["-m", "jira_mcp_cursor.cli", "serve"],Get the path with:
echo "$(pwd)/venv/bin/python"from the repo root.
What each env variable does:
| Variable | Required | Description |
|---|---|---|
JIRA_URL |
Yes | Your Jira instance (e.g. https://acme.atlassian.net) |
JIRA_EMAIL |
Yes | Email of your Jira account |
JIRA_API_TOKEN |
Yes | API token (not your password) |
JIRA_PROJECT_KEY |
No | Default project key (e.g. SP, SWI). Scopes list/create operations so you don't have to specify the project every time |
- Press
Ctrl+Shift+P(orCmd+Shift+Pon Mac) and run "Reload Window" - Or restart Cursor entirely
- Open Cursor Settings > Tools & MCP
- You should see "jira" listed with a green toggle and 14 tools
If the toggle is red, click it to see the error. Common issues:
jira-mcpcommand not found (checkpip install jira-mcp-cursorsucceeded and the install location is on your PATH)- Bad API token (expired or copy-paste error)
Once configured, open Cursor chat (Agent or Composer) and try:
Show me my assigned Jira tickets
Get details for ticket PROJ-123
What's my highest priority ticket?
Create a story: Implement user authentication
Break down PROJ-500 into 3 subtasks
Move PROJ-123 to In Progress
Add a comment to PROJ-789: Implementation completed
List all tickets assigned to you with optional filters.
Usage: "Show me my Jira tickets" or "List my tickets in project PROJ"
Parameters:
status(optional) - Filter by status (e.g., "In Progress", "To Do")project(optional) - Filter by project keymax_results(optional) - Maximum number of results (default: 50)
Get detailed information about a specific ticket.
Usage: "Get details for ticket PROJ-123" or "Show me PROJ-456"
Parameters:
ticket_key(required) - Jira ticket key (e.g., "PROJ-123")include_comments(optional) - Include comments (default: true)
Find your highest priority ticket.
Usage: "What's my highest priority ticket?" or "Show me the most important work"
Parameters:
exclude_status(optional) - Statuses to exclude (default: ["Closed", "Done"])project(optional) - Filter by project key
Analyze ticket and extract structured implementation details.
Usage: "Analyze ticket PROJ-123" or "Extract requirements from PROJ-456"
Parameters:
ticket_key(required) - Jira ticket key
Returns:
- Requirements list
- Acceptance criteria
- Technical notes
- Dependencies
- Complexity estimate
Transition ticket to a new status.
Usage: "Move PROJ-123 to In Progress" or "Mark PROJ-456 as Done"
Parameters:
ticket_key(required) - Jira ticket keystatus(required) - Target status namecomment(optional) - Add comment with status change
Update ticket description.
Usage: "Update PROJ-123 description to..." or "Append notes to PROJ-456"
Parameters:
ticket_key(required) - Jira ticket keydescription(required) - New description textappend(optional) - Append instead of replace (default: false)
Add a comment to a ticket.
Usage: "Add comment to PROJ-123: Implementation complete"
Parameters:
ticket_key(required) - Jira ticket keycomment(required) - Comment text
Create a new Jira issue (Story, Task, Bug, etc.).
Usage: "Create a story in project SWI: Implement authentication" or "Create a task in PROJ for bug fixes"
Parameters:
project_key(required) - Project key (e.g., "SWI", "PROJ")summary(required) - Issue title/summarydescription(required) - Detailed descriptionissue_type(optional) - Type: Task, Story, Bug, Epic (default: Task)priority(optional) - Priority: Highest, High, Medium, Low, Lowestassignee(optional) - Account ID or email of assigneelabels(optional) - List of labelsparent_key(optional) - Parent issue key for stories under epics
Create a subtask under a parent issue.
Usage: "Break down SWI-500 into subtasks" or "Create subtask under PROJ-123 for database schema"
Parameters:
parent_key(required) - Parent issue key (e.g., "SWI-501")summary(required) - Subtask titledescription(required) - Detailed descriptionassignee(optional) - Account ID or email of assigneepriority(optional) - Priority
Get all subtasks of a parent issue.
Usage: "Show me subtasks of SWI-500" or "List all subtasks for PROJ-123"
Parameters:
issue_key(required) - Parent issue key
Assign an issue to a user.
Usage: "Assign SWI-500 to [email protected]" or "Unassign PROJ-123"
Parameters:
issue_key(required) - Issue keyassignee(required) - Account ID or email (use "null" for unassigned, "-1" for automatic)
List and search for Jira users.
Usage: "Show me all Jira users" or "Find user named John"
Parameters:
query(optional) - Search by name, email, or usernamemax_results(optional) - Maximum number of results (default: 50)
List tickets created by a specific user.
Usage: "Show me tickets created by [email protected]" or "List all tickets I created"
Parameters:
creator(required) - Creator email, username, or "currentUser()"project(optional) - Filter by project (uses default if not specified)status(optional) - Filter by statusmax_results(optional) - Maximum number of results (default: 50)
Delete a Jira issue permanently.
Usage: "Delete ticket SWI-123" or "Remove SWI-456 and all its subtasks"
Parameters:
issue_key(required) - Issue key to deletedelete_subtasks(optional) - Whether to delete subtasks (default: false)
- Encrypted Storage - Credentials encrypted with Fernet (AES-128)
- File Permissions - Config files set to 600 (owner-only access)
- No Plaintext - API tokens never stored in plaintext
- Machine-Bound - Encryption keys are machine-specific
- Secure Transport - All Jira communication over HTTPS
jira-mcp configureCreate .env file or set environment variables:
# Required
JIRA_URL=https://your-domain.atlassian.net
[email protected]
JIRA_API_TOKEN=your-api-token
# Optional
JIRA_PROJECT_KEY=PROJ
JIRA_MAX_RESULTS=50
JIRA_TIMEOUT=30
JIRA_MAX_RETRIES=3
LOG_LEVEL=INFO# Show current config (sanitized)
jira-mcp config show
# Test connection
jira-mcp config test
# Reset configuration
jira-mcp config reset# Configuration
jira-mcp configure # Launch setup wizard
jira-mcp config show # Display current config
jira-mcp config test # Test Jira connection
jira-mcp config reset # Delete configuration
# Installation
jira-mcp install # Add to Cursor
jira-mcp uninstall # Remove from Cursor
# Server
jira-mcp serve # Start MCP server (used by Cursor)
# Help
jira-mcp --help # Show all commands
jira-mcp --version # Show version- Verify API token is correct and not expired
- Check email address matches your Jira account
- Generate new token at https://id.atlassian.com/manage-profile/security/api-tokens
- Verify ticket key format (e.g., PROJ-123)
- Check you have permission to view the ticket
- Ensure you're connected to the correct Jira instance
- Use
get_transitions()to see available transitions - Check workflow allows this status change
- Verify you have permission for this transition
- Wait a few seconds and retry (automatic with backoff)
- Reduce request frequency
- Consider caching frequently accessed data
For more detailed troubleshooting, see docs/TROUBLESHOOTING.md
βββββββββββββββββββββββββββββββββββββββββββ
β AI Assistant (Cursor) β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β MCP Protocol (stdio/JSON-RPC)
ββββββββββββββββΌβββββββββββββββββββββββββββ
β Jira MCP Server β
β βββββββββββββββββββββββββββββββββββββ β
β β 14 MCP Tools β β
β β - Read: List, Get, Users β β
β β - Create: Issues, Subtasks β β
β β - Update: Status, Desc, Assign β β
β β - Delete: Remove Issues β β
β β - Analyze: Requirements β β
β βββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββββββββββββββββββββββ β
β β Jira API Client β β
β β - Retry Logic (exponential) β β
β β - Error Handling β β
β β - Connection Pooling β β
β βββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β HTTPS/REST
ββββββββββββββββΌβββββββββββββββββββββββββββ
β Jira Cloud/Server β
βββββββββββββββββββββββββββββββββββββββββββ
Feature Development Flow:
1. PO creates Feature β "SWI-500: User Authentication"
2. AI breaks down feature:
You: "Break down SWI-500 into implementation stories"
AI: Creates 3 stories:
- SWI-501: Backend Auth Service
- SWI-502: Frontend Login UI
- SWI-503: Integration Testing
3. Work on a story:
You: "Let's work on SWI-501"
You: "Break it into subtasks"
AI: Creates:
- SWI-501-1: Database schema
- SWI-501-2: API endpoints
- SWI-501-3: Unit tests
4. Implementation:
You: "Start with SWI-501-1"
AI: Updates status to "In Progress"
AI: Adds comments as work progresses
AI: Marks complete when done
All tracked in Jira - no separate markdown files needed!
git clone https://github.com/Fintama/Jira_extension_for_cursor.git
cd Jira_extension_for_cursor
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install with dev dependencies
pip install -e ".[dev]"
# Copy environment template and fill in your credentials
cp .env.example .env# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=src/jira_mcp_cursor
# Run specific test file
pytest tests/test_tools.py -v
# Run CI-critical tests only
pytest tests/ -v -m ci_critical# Format code
black src/jira_mcp_cursor tests/
# Lint
ruff check src/jira_mcp_cursor tests/
# Type check
mypy src/jira_mcp_cursor/- Setup Guide - Step-by-step install for Windows, WSL, and Mac/Linux
- MCP Setup Guide - MCP integration details
- How It Works - Architecture and flow explained
- User Guide - Detailed usage
- API Reference - Complete tool documentation
- Troubleshooting - Common issues and solutions
- Contributing - How to contribute
- Changelog - Version history
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
- Built with Model Context Protocol
- Powered by Cursor IDE
- Integrates with Jira Cloud
- Repository: https://github.com/Fintama/Jira_extension_for_cursor
- Issues: https://github.com/Fintama/Jira_extension_for_cursor/issues
- PyPI: https://pypi.org/project/jira-mcp-cursor/
- Jira API Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/
Made with β€οΈ for developers who want to stay in their flow