JIRA Integration
STDIOA powerful MCP server that brings JIRA integration directly to any editor or application.
A powerful MCP server that brings JIRA integration directly to any editor or application.
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
.env
file- 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:
.env
Visit 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 build
before 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