JIRA
STDIOJIRA integration MCP server for issue management and project tracking in editors/applications
JIRA integration MCP server for issue management and project tracking in editors/applications
A powerful Model Context Protocol (MCP) server that brings Atlassian JIRA integration directly to any editor or application that supports MCP
🎯 Complete JIRA Integration Suite
🏗️ Enterprise-Grade Architecture (New in v0.5.0)
🔍 Powerful Search & Discovery
📝 Advanced Issue Management
Add this configuration to your MCP client:
{ "mcpServers": { "JIRA Tools": { "command": "bunx", "args": ["-y", "@dsazz/mcp-jira@latest"], "env": { "JIRA_HOST": "https://your-domain.atlassian.net", "JIRA_USERNAME": "[email protected]", "JIRA_API_TOKEN": "your-jira-api-token" } } } }
For local development and testing:
# Clone the repository git clone https://github.com/Dsazz/mcp-jira.git cd mcp-jira # Install dependencies bun install # Set up environment variables cp .env.example .env # Edit .env with your JIRA credentials # Build the project bun run build # Test with MCP Inspector bun run inspect
Create a .env file with the following variables:
JIRA_HOST=https://your-instance.atlassian.net JIRA_USERNAME=[email protected] JIRA_API_TOKEN=your-jira-api-token-here
🔑 Important Note About JIRA API Tokens
- A JIRA API token can be generated at Atlassian API Tokens
 - Tokens may contain special characters, including the
 =sign- Place the token on a single line in the
 .envfile- Do not add quotes around the token value
 - Paste the token exactly as provided by Atlassian
 
| Tool | Description | Parameters | Returns | 
|---|---|---|---|
jira_get_assigned_issues | Retrieves all issues assigned to you | None | Markdown-formatted list of issues | 
jira_get_issue | Gets detailed information about a specific issue | issueKey: Issue key (e.g., PD-312) | Markdown-formatted issue details | 
jira_get_issue_comments | Retrieves comments for a specific issue with configurable options | See comment parameters below | Markdown-formatted comments | 
jira_create_issue | Create new JIRA issues with comprehensive field support | See issue creation parameters | Markdown-formatted creation result | 
jira_update_issue | Update existing issues with field changes and status transitions | See issue update parameters | Markdown-formatted update result | 
jira_get_projects | Retrieve and browse JIRA projects with filtering options | See project parameters | Markdown-formatted project list | 
jira_get_boards | Get JIRA boards (Scrum/Kanban) with advanced filtering | See board parameters | Markdown-formatted board list | 
jira_get_sprints | Retrieve sprint information for agile project management | See sprint parameters | Markdown-formatted sprint list | 
jira_add_worklog | Add time tracking entries to issues | See worklog parameters below | Markdown-formatted worklog result | 
jira_get_worklogs | Retrieve worklog entries for issues with date filtering | See worklog parameters below | Markdown-formatted worklog list | 
jira_update_worklog | Update existing worklog entries | See worklog parameters below | Markdown-formatted update result | 
jira_delete_worklog | Delete worklog entries from issues | See worklog parameters below | Markdown-formatted deletion result | 
jira_get_current_user | Get current authenticated user information | None | Markdown-formatted user details | 
search_jira_issues | Search JIRA issues with JQL or helper parameters | See search parameters below | Markdown-formatted search results | 
The jira_create_issue tool supports comprehensive issue creation:
Required:
projectKey: String - Project key (e.g., "PROJ")issueType: String - Issue type (e.g., "Task", "Bug", "Story")summary: String - Issue title/summaryOptional Fields:
description: String - Detailed description (supports ADF format)priority: String - Priority level ("Highest", "High", "Medium", "Low", "Lowest")assignee: String - Assignee username or emailreporter: String - Reporter username or emaillabels: Array - Labels to apply to the issuecomponents: Array - Component namesfixVersions: Array - Fix version namesaffectsVersions: Array - Affected version namestimeEstimate: String - Time estimate in JIRA format (e.g., "2h", "1d 4h")dueDate: String - Due date in ISO formatenvironment: String - Environment descriptioncustomFields: Object - Custom field valuesExamples:
# Basic issue creation
jira_create_issue projectKey:"PROJ" issueType:"Task" summary:"Fix login bug"
# Comprehensive issue with all fields
jira_create_issue projectKey:"PROJ" issueType:"Bug" summary:"Critical login issue" description:"Users cannot log in" priority:"High" assignee:"john.doe" labels:["urgent","security"] timeEstimate:"4h"
The jira_update_issue tool supports comprehensive issue updates:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")Field Updates (any combination):
summary: String - Update issue titledescription: String - Update descriptionpriority: String - Change priorityassignee: String - Reassign issuereporter: String - Change reportertimeEstimate: String - Update time estimatetimeSpent: String - Log time spentdueDate: String - Update due dateenvironment: String - Update environmentArray Operations (add/remove/set):
labels: Object - Modify labels ({operation: "add|remove|set", values: ["label1", "label2"]})components: Object - Modify componentsfixVersions: Object - Modify fix versionsaffectsVersions: Object - Modify affected versionsStatus Transitions:
status: String - Transition to new status (e.g., "In Progress", "Done")Worklog:
worklog: Object - Add work log entry ({timeSpent: "2h", comment: "Fixed issue"})Examples:
# Update basic fields
jira_update_issue issueKey:"PROJ-123" summary:"Updated title" priority:"High"
# Add labels and transition status
jira_update_issue issueKey:"PROJ-123" labels:'{operation:"add",values:["urgent"]}' status:"In Progress"
# Log work and add comment
jira_update_issue issueKey:"PROJ-123" worklog:'{timeSpent:"2h",comment:"Completed testing"}'
The jira_get_projects tool supports project discovery:
Optional Parameters:
maxResults: Number (1-100, default: 50) - Limit number of resultsstartAt: Number (default: 0) - Pagination offsetexpand: Array - Additional fields to include (["description", "lead", "issueTypes", "url", "projectKeys"])Examples:
# Get all projects
jira_get_projects
# Get projects with additional details
jira_get_projects expand:["description","lead","issueTypes"] maxResults:20
The jira_get_boards tool supports board management:
Optional Parameters:
maxResults: Number (1-100, default: 50) - Limit number of resultsstartAt: Number (default: 0) - Pagination offsettype: String - Board type ("scrum", "kanban")name: String - Filter by board nameprojectKeyOrId: String - Filter by projectExamples:
# Get all boards
jira_get_boards
# Get Scrum boards for specific project
jira_get_boards type:"scrum" projectKeyOrId:"PROJ"
# Search boards by name
jira_get_boards name:"Sprint Board" maxResults:10
The jira_get_sprints tool supports sprint management:
Required:
boardId: Number - Board ID to get sprints fromOptional Parameters:
maxResults: Number (1-100, default: 50) - Limit number of resultsstartAt: Number (default: 0) - Pagination offsetstate: String - Sprint state ("active", "closed", "future")Examples:
# Get all sprints for a board
jira_get_sprints boardId:123
# Get only active sprints
jira_get_sprints boardId:123 state:"active"
# Get sprints with pagination
jira_get_sprints boardId:123 maxResults:10 startAt:20
The worklog tools support comprehensive time tracking:
jira_add_worklog Parameters:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")timeSpent: String - Time spent in JIRA format (e.g., "2h", "1d 4h", "30m")Optional:
comment: String - Comment describing the work donestarted: String - When work started (ISO date format, defaults to now)visibility: Object - Visibility settings ({type: "group", value: "jira-developers"})jira_get_worklogs Parameters:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")Optional:
startedAfter: String - Filter worklogs started after this date (ISO format)startedBefore: String - Filter worklogs started before this date (ISO format)jira_update_worklog Parameters:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")worklogId: String - Worklog ID to updateOptional (any combination):
timeSpent: String - Update time spentcomment: String - Update commentstarted: String - Update start timejira_delete_worklog Parameters:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")worklogId: String - Worklog ID to deleteExamples:
# Add worklog entry
jira_add_worklog issueKey:"PROJ-123" timeSpent:"2h" comment:"Fixed authentication bug"
# Get all worklogs for an issue
jira_get_worklogs issueKey:"PROJ-123"
# Get worklogs from last week
jira_get_worklogs issueKey:"PROJ-123" startedAfter:"2025-05-29T00:00:00.000Z"
# Update worklog
jira_update_worklog issueKey:"PROJ-123" worklogId:"12345" timeSpent:"3h" comment:"Updated work description"
# Delete worklog
jira_delete_worklog issueKey:"PROJ-123" worklogId:"12345"
The jira_get_issue_comments tool supports progressive disclosure with these parameters:
Required:
issueKey: String - Issue key (e.g., "PROJ-123")Basic Options:
maxComments: Number (1-100, default: 10) - Maximum number of comments to retrieveorderBy: String ("created" or "updated", default: "created") - Sort order for commentsAdvanced Options:
includeInternal: Boolean (default: false) - Include internal/restricted commentsauthorFilter: String - Filter comments by author name or emaildateRange: Object - Filter by date range:
from: String (ISO date) - Start dateto: String (ISO date) - End dateExamples:
# Basic usage - get 10 most recent comments
jira_get_issue_comments PROJ-123
# Get more comments with specific ordering
jira_get_issue_comments PROJ-123 maxComments:25 orderBy:"updated"
# Advanced filtering
jira_get_issue_comments PROJ-123 authorFilter:"john.doe" includeInternal:true
The search_jira_issues tool supports two modes:
Expert Mode (JQL):
jql: Direct JQL query string (e.g., "project = PROJ AND status = Open")Beginner Mode (Helper Parameters):
assignedToMe: Boolean - Show only issues assigned to current userproject: String - Filter by project keystatus: String or Array - Filter by status(es) (e.g., "Open" or ["Open", "In Progress"])text: String - Search in summary and description fieldsCommon Options:
maxResults: Number (1-50, default: 25) - Limit number of resultsfields: Array - Specify which fields to retrieve (optional)The project uses Biome for code formatting and linting, providing:
# Format code bun run format # Check code for issues bun run check # Type check bun run typecheck # Run tests bun test
The MCP Inspector is a powerful tool for testing and debugging your MCP server.
# Run the inspector (no separate build step needed) bun run inspect
The inspector automatically:
.envVisit the inspector at http://localhost:5175?proxyPort=3002
If you encounter port conflicts:
bun run cleanup-ports
The inspector UI allows you to:
For more details, see the MCP Inspector GitHub repository.
Test your MCP server directly with Claude:
Build:
bun run build # You must build the project before running it
Configure Claude Desktop:
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the MCP configuration:
{ "mcpServers": { "JIRA Tools": { "command": "node", "args": ["/absolute/path/to/your/project/dist/index.js"], "env": { "JIRA_USERNAME": "your-jira-username", "JIRA_API_TOKEN": "your-jira-api-token", "JIRA_HOST": "your-jira-host.atlassian.net" } } } }
Restart Claude Desktop and test with:
Show me my assigned JIRA issues.
⚠️ Important: You must build the project with
bun run buildbefore integrating with Cursor IDE or Claude Desktop.
Add this MCP server to your Cursor IDE's MCP configuration:
{ "mcpServers": { "JIRA Tools": { "command": "node", "args": ["/absolute/path/to/your/project/dist/index.js"], "env": { "JIRA_USERNAME": "your-jira-username", "JIRA_API_TOKEN": "your-jira-api-token", "JIRA_HOST": "your-jira-host.atlassian.net" } } } }
src/
├── core/                    # Core functionality and configurations
│   ├── errors/             # Error handling utilities
│   ├── logging/            # Logging infrastructure
│   ├── responses/          # Response formatting
│   ├── server/             # MCP server implementation
│   ├── tools/              # Base tool interfaces
│   └── utils/              # Core utilities
├── features/               # Feature implementations
│   └── jira/              # JIRA API integration
│       ├── api/           # JIRA API client
│       ├── formatters/    # Response formatters
│       ├── tools/         # MCP tool implementations
│       └── utils/         # JIRA-specific utilities
└── test/                  # Test utilities and mocks
    ├── mocks/             # Mock factories
    └── utils/             # Test helpers
| Command | Description | 
|---|---|
bun dev | Run the server in development mode with hot reload | 
bun build | Build the project for production | 
bun start | Start the production server | 
bun format | Format code using Biome | 
bun lint | Lint code using Biome | 
bun check | Run Biome checks on code | 
bun typecheck | Run TypeScript type checking | 
bun test | Run tests | 
bun inspect | Start the MCP Inspector for debugging | 
bun cleanup-ports | Clean up ports used by the development server | 
We welcome contributions! Please see our Contributing Guide for details on:
MIT © Stanislav Stepanenko