eh24905-wiz/jira-mcp
If you are the rightful owner of jira-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Jira MCP Server is a Model Context Protocol server designed for seamless integration with Jira, allowing AI assistants to interact with Jira issues, comments, and custom fields through a standardized interface.
Jira MCP Server
A Model Context Protocol (MCP) server for Jira integration, enabling AI assistants to interact with Jira issues, comments, and custom fields through a standardized interface.
Features
This MCP server provides the following tools:
| Tool | Description |
|---|---|
get_my_issues | Get all issues currently assigned to you |
get_issue_details | Get full details of a specific Jira issue |
add_comment | Add a comment to a specified Jira issue |
get_my_work_summary | Get a summary of issues you've worked on within a date range |
get_team_activity | Get recent issue updates from configured team members |
get_project_components | Get all available components for a Jira project |
update_issue_field | Update supported custom fields on a Jira issue |
update_progress | Update the Progress Update field with template-aware behavior |
create_issue | Create a new issue in Jira with support for custom fields |
get_sprint_tasks | Retrieve sprint tasks for the current week or next week |
Prerequisites
- Node.js: v18.0.0 or higher
- npm: v8.0.0 or higher
- Jira Cloud Account: With API access enabled
- Jira API Token: Generated from your Atlassian account
Installation
-
Clone the repository:
git clone <repository-url> cd jira-mcp -
Install dependencies:
npm install -
Build the project:
npm run build
Configuration
Environment Variables
The server requires the following environment variables:
| Variable | Description | Example |
|---|---|---|
JIRA_BASE_URL | Your Jira instance base URL | https://your-org.atlassian.net |
JIRA_USER_EMAIL | Your Jira account email | user@example.com |
JIRA_API_TOKEN | Jira API token (Generate here) | ATATT3xFfGF0... |
JIRA_CURRENT_USER | (Optional) Override current user for queries | currentuser() |
JIRA_TEAM_MEMBERS | (Optional) Comma-separated list of team member emails | user1@example.com,user2@example.com |
Usage
Starting the Server
# Production
npm start
# Development (with hot reload)
npm run dev
MCP Client Configuration
Add the server to your MCP client configuration:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/path/to/jira-mcp/dist/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-org.atlassian.net",
"JIRA_USER_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token",
"JIRA_TEAM_MEMBERS": "teammate1@example.com,teammate2@example.com"
}
}
}
}
Supported Custom Fields
The following custom fields can be updated using update_issue_field:
| Field Name | Field ID | Type | Description |
|---|---|---|---|
| Decision Needed | customfield_15111 | Rich text (ADF) | Flag if a decision is required |
| Progress Update | customfield_15112 | Rich text (ADF) | Weekly progress status |
| Decision Maker(s) | customfield_15113 | User picker | Person responsible for decisions |
| Risks/Blockers | customfield_15115 | Rich text (ADF) | Current risks or blockers |
| Completion Percentage | customfield_15116 | Number | Progress percentage (0-100) |
| Health Status | customfield_15117 | Select | Project health (On Track, At Risk, etc.) |
API Reference
get_my_issues
Returns all unresolved issues assigned to the current user.
Parameters: None
Returns: Array of issues with key, summary, status, priority, updated
get_issue_details
Get full details of a specific issue.
Parameters:
issueKey(string, required): The issue key (e.g., "PROJ-123")
Returns: Issue object with key, summary, description, status, priority, assignee, reporter, created, updated, comments
add_comment
Add a comment to an issue.
Parameters:
issueKey(string, required): The issue keycommentBody(string, required): The comment text
Returns: { success: boolean, commentId: string, created: string }
get_my_work_summary
Get issues you've worked on within a date range.
Parameters:
startDate(string, required): Start date in YYYY-MM-DD formatendDate(string, required): End date in YYYY-MM-DD format
Returns: Array of issues with activity type
get_team_activity
Get recent updates from team members.
Parameters:
timeframeDays(number, optional): Days to look back (default: 7)
Returns: Array of activity items with issueKey, teamMember, activityType, timestamp, summary
update_issue_field
Update a custom field on an issue.
Parameters:
issueKey(string, required): The issue keyfieldNameOrId(string, required): Field name or IDvalue(string | number | object, required): Value to set
Returns: { success: boolean, fieldId: string, fieldName: string }
update_progress
Update the Progress Update field with template awareness.
Parameters:
issueKey(string, required): The issue keyrefreshDate(boolean, optional): Update date only, preserve contentweeklyUpdate(string, optional): Weekly update textdelivered(string, optional): What was deliveredwhatsNext(string, optional): Upcoming work
Returns: { success: boolean, updatedSections: string[], parsedExisting: object }
The Progress Update field uses a structured template:
- ℹ️ Update for week of [date]: - Weekly status
- ✅ What we've delivered so far: - Accomplishments
- ❓ What's next: - Upcoming work
get_project_components
Get all available components for a Jira project.
Parameters:
projectKey(string, required): The project key (e.g., "TSSE")
Returns: { components: [{ id: string, name: string, description?: string }] }
create_issue
Create a new issue in Jira with support for standard and custom fields.
Parameters:
projectKey(string, required): The project key (e.g., "TSSE")issueType(string, required): The issue type (e.g., "Epic", "Story", "Task", "Bug")summary(string, required): Issue summary/titledescription(string, optional): Issue description (plain text)assignee(string, optional): Assignee accountId or "currentuser()" for current userpriority(string, optional): Priority name (e.g., "High", "Medium", "Low")labels(string[], optional): Array of labels to applyduedate(string, optional): Due date in YYYY-MM-DD formatcomponents(string[], optional): Array of component nameshealthStatus(string, optional): Health Status value (e.g., "On Track", "At Risk", "Off Track")completionPercentage(number, optional): Completion percentage (0-100)decisionNeeded(string, optional): Decision Needed field contentrisksBlockers(string, optional): Risks/Blockers field contentprogressUpdate(object, optional): Progress Update withweeklyUpdate,delivered,whatsNextcustomFields(object, optional): Additional custom fields as key-value pairs
Returns: { success: boolean, key: string, id: string, self: string }
get_sprint_tasks
Retrieve sprint tasks for the current week or next week. Sprint tasks are tagged with labels in the format MonDD-DD (e.g., Dec15-19 for December 15-19).
Parameters:
week(enum, required): Which week to retrieve -"this_week"or"next_week"scope(enum, required): Scope of tasks -"my_tasks"for current user only,"team_tasks"for all team tasks
Returns:
{
"sprintLabel": "Dec15-19",
"weekRange": { "monday": "2024-12-15", "friday": "2024-12-19" },
"tasks": [{ "key": "PROJ-123", "summary": "...", "status": "...", "priority": "...", "assignee": "...", "updated": "..." }]
}
Development
Building
npm run build
Project Structure
jira-mcp/
├── src/
│ ├── index.ts # MCP server entry point and tool definitions
│ └── jira-client.ts # Jira API client wrapper
├── dist/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the file for details.