A Model Context Protocol (MCP) server that integrates with Atlassian Jira to search issues, retrieve details, access comments, create new issues, and update issues.
- 🔍 Search Issues: Use JQL (Jira Query Language) to find issues
- 📋 Get Issue Details: Retrieve complete issue information including acceptance criteria
- 💬 Access Comments: Get all comments for any issue
- ➕ Create Issues: Create new issues with custom fields, labels, and assignments
- ✏️ Update Issues: Change status, assignee, summary, description, and priority
- 🔄 Status Transitions: View available status transitions and change issue status
- 🔧 Configurable: Works with any Jira Cloud instance
# Clone the repository
git clone https://github.com/fajarmf/jira-mcp.git
cd jira-mcp
# Install dependencies
npm install
# Build the project
npm run buildSet the following environment variables:
export JIRA_BASE_URL="https://your-domain.atlassian.net"
export JIRA_EMAIL="your-email@example.com"
export JIRA_API_TOKEN="your-api-token"- Go to Atlassian Account Settings
- Click "Create API token"
- Give it a label and copy the token
- Use this token as your
JIRA_API_TOKEN
Add the server to your MCP configuration file (~/.mcp.json):
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/absolute/path/to/jira-mcp/build/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}Once configured, the following tools are available:
Get detailed information about a specific Jira issue.
Parameters:
issueKey(required): The Jira issue key (e.g., "PROJECT-123")
Example:
{
"tool": "jira_get_issue",
"arguments": {
"issueKey": "PROJECT-123"
}
}Search for issues using JQL (Jira Query Language).
Parameters:
jql(required): JQL query stringmaxResults(optional): Maximum number of results (default: 50)
Example:
{
"tool": "jira_search_issues",
"arguments": {
"jql": "project = PROJECT AND status = \"In Progress\"",
"maxResults": 10
}
}Get all comments for a specific issue.
Parameters:
issueKey(required): The Jira issue key (e.g., "PROJECT-123")
Example:
{
"tool": "jira_get_issue_comments",
"arguments": {
"issueKey": "PROJECT-123"
}
}Get available status transitions for a specific issue.
Parameters:
issueKey(required): The Jira issue key (e.g., "PROJECT-123")
Example:
{
"tool": "jira_get_transitions",
"arguments": {
"issueKey": "PROJECT-123"
}
}Create a new Jira issue.
Parameters:
projectKey(required): The project key where the issue will be created (e.g., "PROJ")summary(required): Issue summary/titledescription(optional): Issue descriptionissueType(optional): Issue type (e.g., "Bug", "Story", "Task") - defaults to "Task"priority(optional): Priority name (e.g., "High", "Medium", "Low")assignee(optional): Assignee email address or account IDlabels(optional): Array of labels to add to the issue
Example - Basic issue:
{
"tool": "jira_create_issue",
"arguments": {
"projectKey": "PROJ",
"summary": "Fix login bug",
"description": "Users cannot login when using special characters in password",
"issueType": "Bug",
"priority": "High"
}
}Example - Full featured issue:
{
"tool": "jira_create_issue",
"arguments": {
"projectKey": "PROJ",
"summary": "Implement user dashboard",
"description": "Create a comprehensive user dashboard with analytics and quick actions",
"issueType": "Story",
"priority": "Medium",
"assignee": "developer@example.com",
"labels": ["frontend", "dashboard", "user-experience"]
}
}Update a Jira issue's status, assignee, summary, description, or priority.
Parameters:
issueKey(required): The Jira issue key (e.g., "PROJECT-123")transition(optional): Status transition name or IDassignee(optional): Assignee email address or account IDsummary(optional): Updated issue summarydescription(optional): Updated issue descriptionpriority(optional): Priority name (e.g., "High", "Medium", "Low")
Example - Change status:
{
"tool": "jira_update_issue",
"arguments": {
"issueKey": "PROJECT-123",
"transition": "In Review"
}
}Example - Update multiple fields:
{
"tool": "jira_update_issue",
"arguments": {
"issueKey": "PROJECT-123",
"transition": "Done",
"assignee": "developer@example.com",
"priority": "Low"
}
}Here are some useful JQL queries you can use with the search tool:
# Find open issues assigned to you
assignee = currentUser() AND resolution = Unresolved
# Find high priority bugs
priority = High AND type = Bug
# Find recently updated issues
updated >= -7d
# Find issues in specific status
status in ("To Do", "In Progress")
# Find issues by project and component
project = MYPROJECT AND component = "Backend"
# Find overdue issues
due < now() AND resolution = Unresolved
The server automatically extracts acceptance criteria from issue descriptions using common patterns:
- "Acceptance Criteria:" sections
- "AC:" sections
- Given/When/Then scenarios
- Checkbox lists
- Bullet points
- Comprehensive error handling for API failures
- Clear error messages for authentication issues
- Graceful handling of missing issues or invalid queries
jira-mcp/
├── src/
│ └── index.ts # Main MCP server implementation
├── build/ # Compiled JavaScript files
├── package.json
├── tsconfig.json
└── README.md
npm run buildnpm start- Node.js 16+
- TypeScript 5.0+
- Valid Jira Cloud instance with API access
- Jira API token with appropriate permissions
Your Jira API token needs the following permissions:
- Read access to projects and issues
- Read access to comments
- Browse projects permission
- Create issues permission (for creating new issues)
- Write access to issues (for updating status, assignee, etc.)
- Transition issues permission
- Verify your email and API token are correct
- Check that your API token has the necessary permissions
- Ensure your Jira base URL is correct (should not include
/rest/api/3)
- Verify the Jira base URL format:
https://your-domain.atlassian.net - Check your internet connection
- Ensure Jira Cloud is accessible from your network
- Validate your JQL syntax in Jira's issue navigator first
- Check that field names and values exist in your Jira instance
- Remember JQL is case-sensitive for some operators
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details
For issues or questions:
- Create an issue on GitHub
- Check Jira's REST API documentation
- Review the MCP protocol documentation