@leilashellroot/jira-data-center-mcp
v1.0.6
Published
MCP server for Jira Server/Data Center — issue management, weblinks, agile, worklogs, and context aggregation
Maintainers
Readme
@leilashellroot/jira-data-center-mcp
MCP server for Jira Server/Data Center. Connects AI assistants to self-hosted Jira instances.
Features
- Issue management — get, create, update, delete, search with JQL
- Comments — add, edit, delete, list
- Transitions — list available transitions, transition issues
- WebLinks / Remote links — read and manage external URLs (GitLab MRs, Confluence pages, docs)
- Issue links — create and remove links between issues (Blocks, Relates, etc.)
- Agile — boards, sprints, sprint issues
- Worklogs — get and add worklog entries
- Changelog — view issue change history
- Attachments — get metadata, add files, delete
- jira_get_issue_context — single call that returns everything: summary, description, comments, attachments, issuelinks, weblinks, changelog, parent, subtasks
Installation
npm install -g @leilashellroot/jira-data-center-mcpConfiguration
The simplest configuration uses the existing environment variables:
export JIRA_BASE_URL=https://jira.example.com
export JIRA_PAT=your-personal-access-tokenThe upstream-compatible names are also supported:
export JIRA_HOST=jira.example.com
export JIRA_API_TOKEN=your-personal-access-tokenJIRA_HOST assumes HTTPS. Use JIRA_API_BASE_PATH for a full URL such as
https://jira.example.com/rest when Jira is hosted below a context path.
Setup CLI
The setup command validates credentials and stores configuration in
~/.atlassian-dc-mcp/jira.env with mode 0600 on POSIX systems:
npx @leilashellroot/jira-data-center-mcp setupIt also supports scripted setup:
npx @leilashellroot/jira-data-center-mcp setup --non-interactive \
--host jira.example.com \
--token "$JIRA_TOKEN"Configuration precedence is process environment, ATLASSIAN_DC_MCP_CONFIG_FILE
or the current directory .env, the home configuration file, then the macOS
Keychain token when available. Process environment variables always win.
JIRA_DEFAULT_PAGE_SIZE defaults to 25. Set
ATLASSIAN_DC_MCP_REQUEST_TIMEOUT_MS to change the default 30-second Jira
request timeout.
Generate a PAT in Jira: Profile → Personal Access Tokens → Create token.
Usage
Direct
npx @leilashellroot/jira-data-center-mcpClaude Desktop
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@leilashellroot/jira-data-center-mcp"],
"env": {
"JIRA_BASE_URL": "https://jira.example.com",
"JIRA_PAT": "your-token"
}
}
}
}OpenCode / Cursor
{
"mcp": {
"jira": {
"type": "local",
"command": ["npx", "-y", "@leilashellroot/jira-data-center-mcp"],
"environment": {
"JIRA_BASE_URL": "https://jira.example.com",
"JIRA_PAT": "your-token"
},
"enabled": true
}
}
}Remote SSE
Start the server with the legacy SSE transport:
MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 MCP_PORT=3000 npx @leilashellroot/jira-data-center-mcpConnect an SSE-compatible MCP client to http://localhost:3000/sse. The client will receive the POST endpoint from the SSE endpoint event.
Remote Streamable HTTP
Start the current MCP remote transport:
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=3000 npx @leilashellroot/jira-data-center-mcpConnect a Streamable HTTP MCP client to http://localhost:3000/mcp.
For OpenCode or Cursor, use a remote server entry instead of a local command:
{
"mcp": {
"jira": {
"type": "remote",
"url": "http://localhost:3000/mcp",
"enabled": true
}
}
}Remote configuration variables:
| Variable | Default | Description |
|---|---|---|
| MCP_TRANSPORT | stdio | stdio, sse, or streamable-http |
| MCP_HOST | 127.0.0.1 | HTTP bind host; use 0.0.0.0 for network access |
| MCP_PORT | 3000 | HTTP port |
| MCP_HTTP_PATH | /mcp | Streamable HTTP endpoint |
| MCP_SSE_PATH | /sse | SSE connection endpoint |
| MCP_MESSAGES_PATH | /messages | SSE message POST endpoint |
| MCP_ALLOWED_HOSTS | unset | Comma-separated Host values for DNS rebinding protection |
| MCP_ALLOWED_ORIGINS | unset | Comma-separated Origin values for DNS rebinding protection |
| MCP_CORS_ORIGIN | unset | Optional Access-Control-Allow-Origin value |
When binding beyond localhost, put the server behind authentication and HTTPS. The Jira PAT is used by the server for every connected client.
Tools
| Tool | Description |
|---|---|
| jira_get_issue | Get issue details with optional field projections and expansions |
| jira_get_issue_context | Get comprehensive context in one call |
| jira_search_issues | Search with JQL, pagination, field projections, and expansions |
| jira_create_issue | Create a new issue |
| jira_update_issue | Update an existing issue |
| jira_delete_issue | Delete an issue |
| jira_add_comment | Add a comment |
| jira_edit_comment | Edit a comment |
| jira_delete_comment | Delete a comment |
| jira_get_comments | List comments with pagination and rendered-body expansion |
| jira_get_projects | List projects |
| jira_get_project | Get project details |
| jira_get_issue_types | Get issue types for a project |
| jira_get_project_versions | Get project versions |
| jira_assign_issue | Assign to a user |
| jira_get_current_user | Get authenticated user |
| jira_search_users | Search users |
| jira_get_transitions | List available transitions |
| jira_transition_issue | Transition to a new status with fields and update operations |
| jira_get_worklogs | Get worklog entries |
| jira_add_worklog | Add a worklog |
| jira_get_changelog | View change history |
| jira_get_attachment | Get attachment metadata |
| jira_add_attachment | Add a file attachment |
| jira_delete_attachment | Delete an attachment |
| jira_get_link_types | List issue link types |
| jira_create_issue_link | Link two issues |
| jira_remove_issue_link | Remove issue link |
| jira_get_remote_links | Get weblinks/remote links |
| jira_create_remote_link | Create a weblink |
| jira_delete_remote_link | Delete a weblink |
| jira_get_agile_boards | List agile boards |
| jira_get_sprints | List sprints |
| jira_get_sprint_issues | Get sprint issues |
| jira_get_board_issues | Get board issues |
| jira_search_fields | Search custom fields |
| jira_get_field_options | Get custom field options |
| jira_get_components | Get project components |
| jira_get_create_meta | Get issue creation metadata |
| jira_get_dev_status | Get development summary or detailed pull requests, repositories, and branches |
| jira_get_filter | Resolve filter ID to JQL, name, view URL |
| jira_get_filter_issues | Get filter metadata + matching issues |
Requirements
- Node.js >= 18
- Jira Server/Data Center 7.0+
Acknowledgements
This project incorporates feature ideas and workflows from the community-maintained Atlassian Data Center MCP project by b1ff. In particular, the upstream-compatible configuration sources and setup CLI, configurable page sizes and field projections, detailed development-status queries, flexible transition payloads, request timeouts, and credential validation were adapted from that project. The upstream project remains independently licensed under the MIT License.
Enhanced tool parameters
jira_search_issues:startAt,maxResults,fields, andexpandare optional.jira_get_issue:fieldsandexpandare optional; compact fields are returned by default to reduce response size.jira_get_comments:startAt,maxResults, andexpandare optional.jira_update_issue: supportsissueTypeIdand Jiraupdateoperations in addition to the existing standard fields.jira_transition_issue: supports transition-screenfieldsand arbitrarycustomFields/updatepayloads.jira_get_dev_status: setdetailtotrueand choosedataType(pullrequest,repository, orbranch) andapplicationType(stash,bitbucket,github, orgithube).
License
MIT
