Jira Enterprise MCP
This server connects to a Jira Enterprise instance via a Personal Access Token (PAT) and exposes a comprehensive set of tools for read and write operations on projects, issues, attachments, comments, worklogs, and more.
Test connectivity – Verify your PAT and retrieve the current user profile.
List projects – View all Jira projects accessible to your token.
Fetch issues – Look up an issue by key, including common fields and rendered metadata; optionally retrieve screenshot/image attachments as MCP image content.
Fetch attachments – Get attachment metadata and optionally download raw file bytes as base64; image attachments also include MCP image preview content.
Inspect creation metadata – View issue creation metadata for a project and issue type, with a fallback when
createmetais unavailable.Search issues – Run JQL queries to find issues, with configurable result limits.
Create issues – Create new issues with a summary, description, issue type, and project.
Update issues – Modify fields such as summary, description, assignee, and priority on existing issues.
List comments – Retrieve all comments on an issue in a simplified format.
Add comments – Post a new comment to an existing issue.
Manage transitions – List available workflow transitions for an issue or execute a specific transition by ID, optionally with a comment.
Upload attachments – Attach base64-encoded files to an issue, or upload a file and simultaneously post a comment referencing it (with optional inline image markup).
View linked issues – Fetch all issues linked to a given issue.
View & add worklogs – Retrieve worklog entries for an issue or log time spent with an optional comment and start timestamp.
Provides tools for interacting with Jira, enabling AI agents to manage issues, projects, comments, attachments, worklogs, and perform JQL searches programmatically.
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 Enterprise MCPfind issues assigned to me with priority High"
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 Enterprise MCP
Small MCP server for Codex that connects to enterprise Jira with a Jira personal access token.
What it does
Tests connectivity to Jira
Lists accessible Jira projects
Looks up a Jira issue by key
Looks up a Jira issue by key, including derived acceptance criteria when present in a custom field
Looks up a Jira issue by key and can return screenshot/image attachments as MCP image content, including derived acceptance criteria when present in a custom field
Fetches individual attachments and can return raw attachment bytes as base64, with image attachments also exposed as MCP image content
Inspects issue creation metadata for a project and issue type, with a fallback for tenants that do not expose
createmetaRuns JQL searches
Creates a Jira issue
Updates an existing issue
Lists issue comments
Lists or performs issue transitions
Uploads attachments to an issue
Uploads an attachment and posts a comment that references it, with optional inline image markup
Lists linked issues
Fetches and creates worklog entries
Adds a comment to an existing issue
Related MCP server: Jira MCP Server
Requirements
Node.js 18+
A Jira PAT that works against your Jira instance
Network access to your Jira base URL
Setup
Install dependencies:
npm installCopy
.env.exampleto.envand fill in your values if you want a local template file:
cp .env.example .envExport the variables before launching the MCP server, or let your MCP host pass them in:
export JIRA_BASE_URL=https://your-jira.example.com
export JIRA_PAT=your-token
export JIRA_DEFAULT_PROJECT=YOURPROJECT
export JIRA_REQUEST_TIMEOUT_MS=30000
export JIRA_MAX_ATTACHMENT_BYTES=26214400Run locally
npm startNote: this server reads JIRA_BASE_URL, JIRA_PAT, and JIRA_DEFAULT_PROJECT from process.env. It does not load .env automatically, so .env.example is a template, not a runtime loader.
Project structure
src/index.jsstarts the stdio transport only.src/server.jsbuilds the MCP server and wires tool listing/call handlers.src/jira-client.jsowns Jira HTTP requests, auth headers, timeouts, attachment downloads, and uploads.src/tools/*-tools.jsco-locates each feature area's MCP tool schemas with its handlers.src/tools/registry.jscombines feature modules into the MCP tool list and dispatch table.src/config.js,src/validation.js,src/jira-formatters.js, andsrc/mcp-content.jskeep shared config, validation, serialization, and MCP response helpers isolated.
Recommended validation flow
Use this order when validating a new PAT against your Jira instance:
jira_test_connectionjira_list_projectsjira_get_create_metajira_get_issuejira_get_issue_with_imagesjira_get_attachmentjira_list_issue_commentsjira_transition_issuejira_update_issuejira_searchjira_create_issuejira_add_attachmentjira_add_comment_with_attachmentjira_get_issue_linksjira_get_worklogjira_add_worklogjira_add_comment
This matters because enterprise Jira tenants often allow reads before creates, and issue creation may require project-specific issue types or custom fields.
MCP host wiring
Codex
If you are using Codex locally, point an MCP entry at this server command:
{
"mcpServers": {
"jira-enterprise": {
"command": "node",
"args": ["/absolute/path/to/src/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-jira.example.com",
"JIRA_PAT": "YOUR_PAT",
"JIRA_DEFAULT_PROJECT": "YOURPROJECT"
}
}
}
}If you prefer the Codex CLI helper, the shape should be equivalent to:
codex mcp add jira-enterprise --env JIRA_BASE_URL=https://your-jira.example.com --env JIRA_PAT=YOUR_PAT --env JIRA_DEFAULT_PROJECT=YOURPROJECT -- node /absolute/path/to/src/index.jsThe exact config location can vary by Codex app version, so use whichever local MCP configuration flow your Codex build exposes.
Claude
For Claude clients that support local MCP servers, use the equivalent mcpServers entry and pass the same environment variables:
{
"mcpServers": {
"jira-enterprise": {
"command": "node",
"args": ["/absolute/path/to/src/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-jira.example.com",
"JIRA_PAT": "YOUR_PAT",
"JIRA_DEFAULT_PROJECT": "YOURPROJECT"
}
}
}
}If your Claude app exposes an MCP configuration file or settings UI, add the server there. The important part is that Claude launches node /absolute/path/to/src/index.js with those three env vars present.
Notes
This server uses
Authorization: Bearer <PAT>.JIRA_REQUEST_TIMEOUT_MSandJIRA_MAX_ATTACHMENT_BYTESare optional safety limits. Defaults are 30 seconds and 25 MiB.If your Jira instance accepts UI logins but rejects API calls, the PAT may not be enabled for your tenant or may require a different auth scheme.
If your Jira admins require custom CA certificates, you may need to trust that certificate at the OS or Node runtime level before this server can connect cleanly.
On some Jira tenants,
createmetamay return404 "Issue Does Not Exist". The MCP falls back to project issue types and workflow statuses so you can still discover valid issue types even when field-level create metadata is unavailable.
Tools
jira_test_connectionjira_list_projectsjira_get_issuejira_get_issue_with_imagesjira_get_attachmentjira_list_issue_commentsjira_transition_issuejira_update_issuejira_get_create_metajira_searchjira_create_issuejira_add_attachmentjira_add_comment_with_attachmentjira_get_issue_linksjira_get_worklogjira_add_worklogjira_add_comment
Attachment content behavior
jira_get_attachmentwithincludeContent: falsereturns attachment metadata only.jira_get_attachmentwithincludeContent: truereturns raw file bytes incontentBase64withcontentEncoding: "base64".For image attachments such as PNGs, the tool also includes MCP image preview content, but the downloadable bytes are always in
contentBase64.
Available Tools
17 toolsjira_add_attachmentC
Upload a file attachment to a Jira issue using base64-encoded content.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename to store in Jira | |
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| mimeType | No | Optional MIME type, for example image/png | |
| contentBase64 | Yes | Base64-encoded file content |
jira_add_commentB
Add a comment to an existing Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | Comment body | |
| issueKey | Yes | Jira issue key, for example ABC-123 |
jira_add_comment_with_attachmentA
Upload an attachment to a Jira issue and then post a comment that references it, with optional inline image markup.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Comment body to post after the attachment upload | |
| filename | Yes | Filename to store in Jira | |
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| mimeType | No | Optional MIME type, for example image/png | |
| embedInline | No | When true, add Jira wiki-style inline image markup for image attachments. Defaults to true. | |
| contentBase64 | Yes | Base64-encoded file content |
jira_add_worklogC
Add a worklog entry to a Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional worklog comment | |
| started | No | Optional start timestamp in Jira format, for example 2026-04-09T09:00:00.000-0400 | |
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| timeSpent | Yes | Time spent string, for example 1h 30m |
jira_create_issueB
Create a Jira issue in the given project.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Short issue summary | |
| issueType | Yes | Issue type name, for example Task, Story, or Bug. | |
| projectKey | No | Project key. Falls back to JIRA_DEFAULT_PROJECT if omitted. | |
| description | No | Issue description |
jira_get_attachmentA
Fetch Jira attachment metadata and optionally include attachment content. When includeContent is true, raw attachment bytes are returned as base64 in the JSON payload; image attachments also include MCP image preview content.
| Name | Required | Description | Default |
|---|---|---|---|
| attachmentId | Yes | Jira attachment id | |
| includeContent | No | When true, download the attachment content and return raw bytes as base64 in contentBase64. Defaults to false. |
jira_get_create_metaA
Inspect issue creation metadata for a project, optionally filtered to a specific issue type. Falls back to project issue types and statuses when this Jira tenant does not expose createmeta.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | No | Project key. Falls back to JIRA_DEFAULT_PROJECT if omitted. | |
| issueTypeName | No | Optional issue type name, for example Task, Story, or Bug. |
jira_get_issueA
Fetch a Jira issue by key, including common fields and rendered metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, for example ABC-123 |
jira_get_issue_linksB
Fetch linked issues for a Jira issue in a simplified shape.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, for example ABC-123 |
jira_get_issue_with_imagesA
Fetch a Jira issue with attachment metadata and include screenshot/image attachments as MCP image content.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| maxImages | No | Maximum number of image attachments to include. Defaults to 5, max 10. | |
| includeImageData | No | When true, download image attachments and return them as MCP image content. Defaults to true. |
jira_get_worklogA
Fetch worklogs for a Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, for example ABC-123 |
jira_list_issue_commentsC
List comments for a Jira issue in a simplified shape.
| Name | Required | Description | Default |
|---|---|---|---|
| issueKey | Yes | Jira issue key, for example ABC-123 |
jira_list_projectsA
List Jira projects visible to the PAT. Useful for validating access and choosing a default project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
jira_searchC
Run a JQL search in Jira.
| Name | Required | Description | Default |
|---|---|---|---|
| jql | Yes | JQL query string | |
| maxResults | No | Maximum number of issues to return. Default is 10. |
jira_test_connectionA
Verify that the Jira PAT works and return the current user profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
jira_transition_issueA
List available transitions for an issue or perform a transition by id.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment to add while transitioning the issue. | |
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| transitionId | No | Transition id to execute. If omitted, the tool lists available transitions. |
jira_update_issueC
Update selected common fields on an existing Jira issue.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | No | Updated issue summary | |
| issueKey | Yes | Jira issue key, for example ABC-123 | |
| description | No | Updated issue description | |
| assigneeName | No | Assignee username or account identifier supported by the tenant | |
| priorityName | No | Priority name, for example High |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
jira_add_attachment - First observed
jira_add_comment - First observed
jira_add_comment_with_attachment - First observed
jira_add_worklog - First observed
jira_create_issue - First observed
jira_get_attachment - First observed
jira_get_create_meta - First observed
jira_get_issue - First observed
jira_get_issue_links - First observed
jira_get_issue_with_images - First observed
jira_get_worklog - First observed
jira_list_issue_comments - First observed
jira_list_projects - First observed
jira_search - First observed
jira_test_connection - First observed
jira_transition_issue - First observed
jira_update_issue
TDQS
Scored across 17 tools
Most tools have distinct purposes, but `jira_add_attachment` and `jira_add_comment_with_attachment` overlap in attachment functionality, potentially causing misselection. Descriptions help clarify, so ambiguity is minimal.
All tools follow the `jira_verb_noun` pattern consistently. Naming is predictable and clear, with only minor exceptions like `search` (no noun) which is still unambiguous.
17 tools is slightly above the typical well-scoped range but reasonable for a complex system like Jira. The set covers many aspects without being excessive.
Core issue operations (create, read, update, transition) are covered, but a delete issue tool is missing. Other gaps like project management and user operations are acceptable for a focused MCP server.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server to run your Atako AI agents: chat, projects, files, integrations and channels.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server for interacting with self-hosted Jira instances using Personal Access Token (PAT) authentication. It enables users to perform CRUD operations on issues, search with JQL, manage comments, and list projects through the Jira REST API.12481 npm15MIT
- AlicenseNot gradedqualityDmaintenanceCustom MCP server for interacting with Jira, supporting issue management, search, and project operations.1,082 npm2MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that wraps the Jira REST API v3, enabling issue management, searching, commenting, and transitions for openmrs.atlassian.net via Basic Auth.1-
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP server that exposes Jira issue operations (get, search, create) as tools for AI clients like Claude.1,383 npmISC