Seamless Jira integration for Cursor IDE via Model Context Protocol (MCP)
Project description
Jira MCP for Cursor
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.
Setup
Prerequisites
- Python 3.11+ โ check with
python3 --version - Cursor IDE
- Jira API token โ generate one at https://id.atlassian.com/manage-profile/security/api-tokens
Step 1: Install
pip install jira-mcp-cursor
That'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 .
Step 2: Configure Cursor MCP
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": "you@example.com",
"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 |
Step 3: Reload Cursor
- Press
Ctrl+Shift+P(orCmd+Shift+Pon Mac) and run "Reload Window" - Or restart Cursor entirely
Step 4: Verify
- 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)
Usage
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
๐ Available Tools
1. list_my_tickets
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)
2. get_ticket
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)
3. get_highest_priority_ticket
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
4. analyze_ticket
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
5. update_ticket_status
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
6. update_ticket_description
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)
7. add_ticket_comment
Add a comment to a ticket.
Usage: "Add comment to PROJ-123: Implementation complete"
Parameters:
ticket_key(required) - Jira ticket keycomment(required) - Comment text
8. create_issue
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
9. create_subtask
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
10. get_subtasks
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
11. assign_issue
Assign an issue to a user.
Usage: "Assign SWI-500 to john@example.com" or "Unassign PROJ-123"
Parameters:
issue_key(required) - Issue keyassignee(required) - Account ID or email (use "null" for unassigned, "-1" for automatic)
12. list_users
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)
13. list_tickets_by_creator
List tickets created by a specific user.
Usage: "Show me tickets created by john@example.com" 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)
14. delete_issue
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)
โ ๏ธ Warning: This action cannot be undone!
๐ Security
- 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
๐ ๏ธ Configuration
Using the Wizard (Recommended)
jira-mcp configure
Manual Configuration
Create .env file or set environment variables:
# Required
JIRA_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
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
Configuration Commands
# Show current config (sanitized)
jira-mcp config show
# Test connection
jira-mcp config test
# Reset configuration
jira-mcp config reset
๐ฆ CLI Commands
# 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
๐ง Troubleshooting
"Authentication failed"
- 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
"Ticket not found"
- 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
"Cannot transition ticket"
- Use
get_transitions()to see available transitions - Check workflow allows this status change
- Verify you have permission for this transition
"Rate limit exceeded"
- 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
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 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 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Workflow Example
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!
๐ป Development
Setup Development Environment
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
Running Tests
# 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
Code Quality
# Format code
black src/jira_mcp_cursor tests/
# Lint
ruff check src/jira_mcp_cursor tests/
# Type check
mypy src/jira_mcp_cursor/
๐ Documentation
Getting Started
- MCP Setup Guide - โญ Complete MCP integration setup
- How It Works - ๐ Architecture and flow explained
- User Guide - Detailed setup and usage
Reference
- API Reference - Complete tool documentation
- Troubleshooting - Common issues and solutions
Contributing
- Contributing - How to contribute
- Changelog - Version history
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
๐ License
MIT License - see LICENSE file for details.
๐ Acknowledgments
- Built with Model Context Protocol
- Powered by Cursor IDE
- Integrates with Jira Cloud
๐ Links
- 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jira_mcp_cursor-0.1.0.tar.gz.
File metadata
- Download URL: jira_mcp_cursor-0.1.0.tar.gz
- Upload date:
- Size: 48.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94c6eb726583de36ec00ec16d81bfe2ee0699199566483d3467bbcca42e9b115
|
|
| MD5 |
1347b9c01446e61e25549c112ceccd94
|
|
| BLAKE2b-256 |
028e5f2ad6562cb3cb0be0bddde07b8ed773edeedc895e2f5b15002d8a2e6b8e
|
File details
Details for the file jira_mcp_cursor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jira_mcp_cursor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe3688a5685d998d8b0cb16e45a4067adca475ebc820dad27bb4b4a79e4a992f
|
|
| MD5 |
001f013ad349930375cb1016e409ddc1
|
|
| BLAKE2b-256 |
afcd127e53253113054b266ec9bdfe77a79df9013ce6444b461f997cc6e90904
|