Jira MCP Server
A Model Context Protocol server that gives AI clients full read/write access to a self-hosted Jira instance (PAT auth), with smart field/value resolution and workflow-aware helpers.
Read issues: fetch a single issue by key, or run JQL searches with field selection and paging.
Create issues: basic or advanced creation (components, fix/affects versions, reporter, labels, assignee, priority, custom fields), with
dryRunpreview and duplicate-safe retry.Update issues: edit basic fields or any editable/custom field, matched against the issue's real edit metadata.
Transitions: list available transitions and move issues by name/id, resolving required screen fields (resolution, assignee, comment).
Comments: read and add comments on issues.
Projects: list projects, get project details, versions and components.
Discovery/metadata: create metadata, edit metadata, field options, fields, priorities, statuses and issue link types — so valid values are known before writing.
Users: search users and identify the authenticated user.
Assignment, links and watchers: assign/unassign, link two issues, add watchers.
Destructive ops: delete an issue, with confirmation elicitation where supported.
Smart value handling: fuzzy-matches case/spacing/partial option names, never guesses ambiguous values, and asks the user via elicitation or returns valid options in errors.
MCP extras: resources and templates (e.g.
jira://issue/{key},jira://project/{key}), prompts (create-ticket,close-ticket,my-work-summary) with argument completion, cache hints, progress notifications, cancellation, and redacted GitHub bug-report drafting.
Provides comprehensive tools for managing Jira issues, including creating, updating, searching, and deleting issues, managing comments, transitions, watchers, issue links, and accessing project metadata through both tools and resources for self-hosted Jira instances using Personal Access Token authentication.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jira MCP Server search for open bugs assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Jira MCP Server
A Model Context Protocol (MCP) server for self-hosted Jira instances using Personal Access Token (PAT) authentication.
✨ Features
Smart field handling: values are matched against each field's real selectable options (dropdowns, multi-selects, cascading selects, versions, components, priorities) before anything is sent to Jira. Harmless differences (case, spacing, unique partial names) are fixed; ambiguous or invalid values are never guessed.
Asks instead of failing: on clients that support MCP elicitation, ambiguous values, unknown projects and missing required fields are put to the user as choices. Other clients get the valid options in the error so the model can ask.
Project discovery: a project key that does not exist (renamed, split or retired) returns the closest live projects instead of a blind failure.
Duplicate-safe create: timeouts and dropped connections are not retried blindly; the server looks for the ticket it may have created. The response reports the real key/project (Jira automation can move tickets).
Workflow-aware transitions: transitions by name, with required transition-screen fields (resolution, assignee, comment) resolved against their real options.
Works across Jira versions: create metadata falls back from the paged endpoint to the legacy endpoint to edit metadata.
Current MCP: built on the v2 TypeScript SDK. One server serves both the 2025 and the 2026-07-28 protocol revisions (see MCP features).
Issues, JQL search, comments, projects, users, watchers and links.
Related MCP server: Jira MCP Server
📋 Prerequisites
Node.js 20+
Self-hosted Jira Server / Data Center (tested with 9.x and 10.x)
Personal Access Token (PAT) for authentication
🚀 Installation
npm install
npm run build⚙️ Configuration
Create a .env file in the project root:
JIRA_BASE_URL=https://your-jira-instance.com/
PAT=your-personal-access-tokenGetting a Personal Access Token
Log in to your Jira instance
Go to Profile → Personal Access Tokens
Create a new token with appropriate permissions
Copy the token to your
.envfile
📖 Usage
Running the Server
npm startDevelopment Mode
npm run devUsing with npx (Recommended)
No installation required! Add the following to your MCP configuration:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "jira-mcp-server-pro"],
"env": {
"JIRA_BASE_URL": "https://your-jira-instance.com/",
"PAT": "your-personal-access-token"
}
}
}
}Global Installation
npm install -g jira-mcp-server-proThen add to your MCP configuration:
{
"mcpServers": {
"jira": {
"command": "jira-mcp-server-pro",
"env": {
"JIRA_BASE_URL": "https://your-jira-instance.com/",
"PAT": "your-personal-access-token"
}
}
}
}Local Development
If running from source, add the following to your MCP configuration:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/path/to/jiraMCP/dist/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-jira-instance.com/",
"PAT": "your-personal-access-token"
}
}
}
}🛠️ Available Tools (29)
All tools carry MCP annotations (read-only / destructive / idempotent hints) and a human-readable title.
Smart create, update and transition
Tool | Description |
| Create an issue; issue type, priority and other options are validated against real options. Supports |
| Adds components, versions, reporter and |
| Update basic fields with option matching against the issue's editable fields |
| Update any editable field, including custom fields |
| Transition by name or id; required transition-screen fields (resolution, assignee, comment) are resolved or asked for |
Discovery
Tool | Description |
| Fuzzy project lookup by key or name |
| Selectable options of a field (by id or name), optionally ranked against a query |
| Fields, required flags and options for a project and issue type |
| Editable fields and options for an existing issue |
| Transitions with the fields each requires |
| Project data |
| Instance metadata |
| Users |
Issues and comments
Tool | Description |
| Read and JQL search |
| Assign, link, watch |
| Comments |
| Destructive; asks for confirmation when supported |
| Builds a redacted GitHub issue draft; nothing is filed automatically |
🔌 MCP features
Feature | How it is used |
Tools with | Every tool; read-only, destructive and idempotent hints; typed results for create/update/transition |
Elicitation (multi-round-trip | Ambiguous values, unknown projects, missing required fields, delete confirmation. Answers are carried in signed |
Resource links | Create/update/search results link to |
Resources and resource templates with completion | Projects, issues, create-fields; project keys and issue types autocomplete |
Prompts with argument completion |
|
Cache hints ( | Tool/prompt lists cached for a day; Jira reference data (priorities, statuses, fields) for five minutes |
Progress notifications | Reported while creating an issue when the client sends a progress token |
Cancellation | The request's abort signal reaches the Jira HTTP call |
Server | Tells the model how to handle ambiguous values, lost responses and repeated failures |
Registry metadata |
|
Deliberately not used: MCP logging, sampling and roots are deprecated in the 2026-07-28 revision (diagnostics go to stderr instead). Tasks and HTTP transports are not needed for a local stdio server where every operation is short; adding an HTTP transport would expose a token-backed server on the network, so it is intentionally left out.
🧠 How value resolution works
For every field you pass, the server reads Jira's metadata for that project/issue type (or the issue, when updating) and:
finds the field by id or display name,
matches the value to the field's options by id, exact label, normalized label, then unique prefix/substring,
shapes it correctly (
{id}for selects, arrays for multi-selects,{id, child:{id}}for cascading selects,{name}for users),for anything ambiguous or invalid, asks the user (elicitation) or returns the closest valid options,
asks for required fields that were not provided.
Cascading selects accept "Parent > Child". Use dryRun: true to preview the exact payload.
📝 Workflow: creating issues
jira_create_issue_advanced(
projectKey: "PROJ",
issueType: "bug", // matched to "Bug"
summary: "Login fails",
priority: "high", // matched to the real priority name
customFields: { "Environment": "staging" },
dryRun: true
)Review the returned payload, then call again without dryRun.
💬 Prompts
Prompt | Purpose |
| Guided creation: find project, dry run, confirm, create |
| Close with the resolution/comment the workflow requires |
| Summarize your open issues by priority |
Prompt arguments such as project support autocompletion.
📚 Resources
Resource URI | Description |
| Authenticated user |
| Priorities and statuses |
| System and custom fields |
| Issue link types |
| Projects (key, name, type) |
| Open issues assigned to you |
| Versions, components and issue types (key autocompletes) |
| An issue |
| Fields, required flags and options for creating that issue type |
🔍 Example JQL Queries
# Issues assigned to me
assignee = currentUser()
# Open bugs in a project
project = PROJ AND issuetype = Bug AND status != Done
# Issues created in the last 7 days
created >= -7d
# High priority issues
priority in (Highest, High)🤝 Contributing
Contributions are welcome! Here's how you can help:
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
Development Setup
# Clone your fork
git clone https://github.com/yogeshhrathod/jiraMCP.git
cd jiraMCP
# Install dependencies
npm install
# Run in development mode
npm run devReporting Issues
Use the GitHub Issues to report bugs
Include your Node.js version, Jira version, and steps to reproduce
Check existing issues before creating a new one
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
Model Context Protocol for the MCP specification
Atlassian for Jira REST API documentation
🐞 Repeated failures and bug reports
If a tool fails twice with the same error, or fails with an unexpected server error, the response tells the AI to stop retrying and suggest a GitHub issue. jira_report_issue then prepares a draft with the tool name, redacted error, and versions, plus a prefilled link. Tokens, hostnames, emails, ticket keys and quoted values are stripped, and nothing is submitted until the user opens the link.
🔒 Security
Credentials are read only from the JIRA_BASE_URL and PAT environment variables (or a local .env, which is git-ignored). Nothing is logged or returned that contains the token. Keep tokens out of committed MCP client configs, and rotate any token that was ever committed or shared.
Optional: JIRA_REQUEST_TIMEOUT_MS (default 120000).
🧪 Tests
npm testUnit tests cover option matching and redaction. Integration tests start the real server over stdio against a fake Jira and run each scenario on both protocol eras, including multi-round elicitation.
📦 MCP Registry
The repository ships server.json and mcpName so the package can be listed in the official MCP Registry (mcp-publisher login github && mcp-publisher publish, after the npm release).
Available Tools
27 toolsjira_add_commentC
Add a comment to a Jira issue
Inputs: issueKey (required), body (required).
jira_add_watcherC
Add a watcher to a Jira issue
Inputs: issueKey (required), username (required).
jira_assign_issueC
Assign or unassign a Jira issue
Inputs: issueKey (required), assignee (required).
jira_create_issueC
Create a new Jira issue
Inputs: projectKey (required), summary (required), issueType (required), description, +3 more.
jira_create_issue_advancedA
Create a new Jira issue with full field support including fixVersions, components, and custom fields. Use jira_get_create_meta first to discover required fields and allowed values.
Inputs: projectKey (required), summary (required), issueType (required), description, +8 more.
jira_delete_issueC
Delete a Jira issue
Inputs: issueKey (required).
jira_get_commentsC
Get comments on a Jira issue
Inputs: issueKey (required).
jira_get_create_metaA
Get metadata for creating issues - shows required fields and allowed values (dropdown options) for a project and issue type. IMPORTANT: Call this before creating an issue to know what fields are required and what values are allowed.
Inputs: projectKey (required), issueType.
jira_get_current_userB
Get the current authenticated user
Inputs: no named parameters.
jira_get_edit_metaB
Get metadata for editing an issue - shows editable fields and allowed values for an existing issue
Inputs: issueKey (required).
jira_get_field_optionsB
Get allowed values/options for a specific field in a project and issue type context
Inputs: projectKey (required), issueType (required), fieldKey (required).
jira_get_fieldsB
Get all available fields including custom fields - shows field IDs, names, and types
Inputs: no named parameters.
jira_get_issueC
Get details of a Jira issue by its key
Inputs: issueKey (required), expand.
jira_get_issue_link_typesB
Get all available issue link types
Inputs: no named parameters.
jira_get_prioritiesB
Get all available priorities
Inputs: no named parameters.
jira_get_projectA
Get details of a specific Jira project
Inputs: projectKey (required).
jira_get_project_componentsA
Get all components for a project - use this to find valid values for the components field
Inputs: projectKey (required).
jira_get_projectsB
Get all Jira projects
Inputs: no named parameters.
jira_get_project_versionsA
Get all versions for a project - use this to find valid values for fixVersions and affectsVersions fields
Inputs: projectKey (required).
jira_get_statusesB
Get all available statuses
Inputs: no named parameters.
jira_get_transitionsC
Get available transitions for a Jira issue
Inputs: issueKey (required).
jira_link_issuesC
Link two Jira issues
Inputs: inwardIssue (required), outwardIssue (required), linkType (required).
jira_search_issuesC
Search for Jira issues using JQL
Inputs: jql (required), startAt, maxResults, fields.
jira_search_usersC
Search for Jira users
Inputs: query (required).
jira_transition_issueC
Transition a Jira issue to a new status
Inputs: issueKey (required), transitionId (required), comment.
jira_update_issueC
Update an existing Jira issue
Inputs: issueKey (required), summary, description, priority, +2 more.
jira_update_issue_advancedA
Update a Jira issue with full field support including fixVersions, components, and custom fields. Use jira_get_edit_meta first to discover editable fields and allowed values.
Inputs: issueKey (required), summary, description, priority, +6 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 27 tools
Most tools have distinct purposes targeting specific Jira resources and actions, but there is some overlap between jira_create_issue/jira_create_issue_advanced and jira_update_issue/jira_update_issue_advanced, which could cause confusion about when to use the advanced versions. The descriptions help clarify that advanced versions support more fields, but the distinction might not be immediately obvious to an agent.
All tools follow a consistent jira_verb_noun pattern with snake_case, making them predictable and easy to parse. The naming convention is uniform across all 27 tools, with no deviations in style or structure.
With 27 tools, the count is on the high side for a typical MCP server, bordering on heavy. While Jira is a complex system with many operations, some tools like jira_get_priorities or jira_get_statuses might be considered auxiliary, potentially making the set feel bloated compared to more streamlined servers.
The tool set provides comprehensive coverage for Jira operations, including full CRUD for issues (create, get, update, delete), metadata discovery (get_create_meta, get_edit_meta), search capabilities, user and project management, and workflow actions like transitions and linking. There are no obvious gaps, and the advanced tools ensure support for custom fields and complex scenarios.
Maintenance
Related MCP Connectors
Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Jira Cloud instances for comprehensive issue management including creating, updating, searching issues, managing comments, workflow transitions, and project metadata discovery. Supports JQL queries, user search, and custom field operations with secure API token authentication.122,052 npm8MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with self-hosted Jira instances for issue management, search, comments, and workflow transitions.19MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Atlassian Jira via API token authentication, with 46 optimized tools across modular architecture for CRUD, agile, dashboard, and search operations.52 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with self-hosted Jira instances via Personal Access Token, supporting issue management and project operations through natural language.1,667 npmApache 2.0