Atlassian (Jira + Confluence)
Read + write Jira issues + Confluence pages — work-tracker and wiki access in one server.
6,114 stars 1,453 forks Last commit 2d ago Language TypeScript License Apache-2.0
Install
uvx mcp-atlassian Maintain this server? Add the badge
Show your README readers it's in a curated directory — and give them a one-click path to install docs and config.
Markdown
[](https://prismix.dev/mcp/atlassian) Theme-aware version (auto dark/light on GitHub) →
<a href="https://prismix.dev/mcp/atlassian"><picture><source media="(prefers-color-scheme: dark)" srcset="https://prismix.dev/api/badge/mcp/atlassian.svg?theme=dark"><img alt="Listed on Prismix" src="https://prismix.dev/api/badge/mcp/atlassian.svg"></picture></a> About
Atlassian's official MCP server. Jira issue CRUD + JQL search, Confluence page reads + edits, attachment handling, user lookups across both products. OAuth or API-token auth.
Recent releases (5)
All releases →- v0.24.1 Latest Nov 8, 2026
## 🔒 Security This release fixes security issues reported privately. Details are in each advisory. Upgrade if you run the HTTP transports (`sse`, `streamable-http`), use `JIRA_PROJECTS_FILTER` / `CONFLUENCE_SPACES_FILTER`, or let tools read and write files on the server. **Project and space filters** - GHSA-xv8h-26ch-vfh9: the project and space filters now apply to every tool, including writes and header-PAT requests. - GHSA-7vjf-5wh5-87q7: user JQL and CQL can no longer step outside the filter. **Server-side requests and credentials** - GHSA-rh5v-38gg-q3jj, GHSA-jpxv-989p-f3pf: URLs supplied in request headers are no longer trusted like the operator's URLs. - GHSA-3c6h-qwx8-hjcm, GHSA-3qhx-3fh4-8w9v: credentials, custom headers and the operator proxy go only to the exact configured origin. - GHSA-pwx2-x8g8-prvm: Forms API calls use the hardened session. - GHSA-85p8-f4j5-j5jp: IPv6 transition addresses are judged by their embedded IPv4. **Files and attachments** - GHSA-qh7q-jmc7-rc7j, GHSA-823g-2jmv-9gmc: tool file paths stay inside an explicit directory. - GHSA-cf68-pxw7-c8fr: Confluence attachment ids are validated. - GHSA-8ffx-6c2g-75cc: `remove_issue_link` takes only a numeric `link_id`. **Authentication and logs** - GHSA-2w5r-h8v2-c9cx: every method on the MCP transport paths is authenticated. - GHSA-5w8q-mmhc-55fp, GHSA-rwqj-c54w-32jr, GHSA-7876-w4xp-76fv: the OAuth setup callback binds to loopback, rejects a mismatched state, escapes its output and keeps secrets out of logs. - GHSA-cffg-pgvw-r443: debug header logs redact every non-standard header. ## ⚠️ Upgrade notes - **File directory.** On `sse` and `streamable-http`, tools that read or write server files use `MCP_ATLASSIAN_FILES_DIR`, or `~/.mcp-atlassian/files` when it is unset. They no longer use the working directory. The server refuses to start if that directory is `/` or your home directory. stdio is unchanged. - **Filters apply everywhere.** With `JIRA_PROJECTS_FILTER` or `CONFLUENCE_SPACES_FILTER` set, each tool looks up the target's project or space before running and refuses if it can't confirm it. JQL and CQL must be one balanced expression. Issue output drops parent, subtask, link and epic references outside the filter. Boards without a project location are allowed only when all their projects are allowed. - **Exact origin for credentials.** Credentials go only to the scheme, host and port in `JIRA_URL` / `CONFLUENCE_URL`. If your Jira or Confluence base URL differs from that value (for example `http://` or `:8080`), attachment downloads can return 401. Add that host to `MCP_ALLOWED_URL_DOMAINS`. - **Transport auth.** All methods under `/mcp`, `/sse` and `/messages/` are authenticated, including `OPTIONS`. Handle CORS preflight in your reverse proxy. - **Warnings.** HTTP transports warn at startup when `MCP_ALLOWED_URL_DOMAINS` is unset; it becomes required in v0.25. Passing secrets as command-line options (`--jira-token` and similar) now warns; use environment variables or `--env-file`. - **OAuth setup.** `--oauth-setup` listens on 127.0.0.1 only. Use SSH port forwarding if your browser runs on another machine. - **Forms.** `form_id` must be a UUID. ## Contributors Thanks to everyone who reported these issues privately. Reporters are credited on each advisory. **Full Changelog**: https://github.com/sooperset/mcp-atlassian/compare/v0.24.0...v0.24.1
View on GitHub ↗ - v0.24.0 Nov 8, 2026
This release adds an HTTPS listener with private-CA support, lazy `*_COMMAND` credential resolution, a one-call `jira_update_issue` that can also transition, comment, and log work, epic summaries on `jira_get_issue`, and complete threaded inline-comment reads in Confluence, plus a large batch of Jira and Confluence content-conversion fixes. A few defaults changed. Please read **Behaviour changes** before upgrading. ## ⚠️ Behaviour changes - **`jira_add_comment(public=false)` now keeps JSM notes internal.** An explicit `public=false` used to be rewritten to "omitted" for projects outside `JIRA_INTERNAL_ONLY_PROJECTS`, so an intended internal JSM note was posted as a **customer-visible** comment. On a JSM customer request, `public` now always goes through the ServiceDesk API, and a failed call is reported instead of being downgraded to an ordinary comment. On an issue that is definitely not a JSM request, `public` is ignored and an ordinary comment is posted, as before. `public=false` together with a `visibility` restriction is still treated as omitted (#1748, #1820, fixes #1726) - **`REQUESTS_CA_BUNDLE` / `CURL_CA_BUNDLE` are now honoured by the Jira and Confluence clients.** atlassian-python-api passed its own `verify` value on every request, which overrode these variables. If one of them is already set in your environment, PAT and OAuth sessions now trust **only** that bundle. A bundle without public roots will reject Atlassian Cloud, and a path that does not exist makes the Jira or Confluence client fail on its first tool call with `CA bundle configuration is invalid; see server logs.` (#1586) - **Cloud-only Jira tools are hidden on Server/Data Center.** `jira_batch_get_changelogs` and `jira_move_issue` are no longer listed when the active Jira deployment is Server/DC, whether it comes from startup config or per-request URL headers. Direct calls fail the same way as an unknown tool. If the deployment type cannot be determined, the tools stay listed. Other Cloud-only features (Confluence permissions and page views, ProForma forms) are still listed on Server/DC and return an error when called (#1603, fixes #1082) - **Bounded retries replace the library's unbounded `Retry-After` loop.** atlassian-python-api's built-in header retry was unbounded and could loop on `Retry-After: 0`, which showed up as spurious 401s. It is now disabled. Instead, GET/HEAD/OPTIONS requests are retried up to 3 times by default on 429/502/503/504, honouring `Retry-After` up to 60 s (`ATLASSIAN_RETRY_MAX_RETRY_AFTER`) and never faster than exponential backoff. 401/403 are never retried. Set `ATLASSIAN_RETRY_TOTAL=0` to disable (#1544, #1821, fixes #1543) - **Clearing an issue's parent:** on Cloud, `parent: null` (or `""`) now really clears the parent instead of returning the unchanged issue. On Server/DC the same request now fails early with an error that tells you to clear the Epic Link field instead (#1518, fixes #1500) - **`confluence_update_page` reports page-property failures.** If an emoji or page-width update fails (permission, lock, throttling), the call now raises an error instead of returning a refreshed page as if it had succeeded. Only a 404 on property delete counts as already removed (#1591, fixes #1557) ## ✨ Features ### Server/Transport - Built-in HTTPS listener for the `sse` and `streamable-http` transports: set `MCP_SSL_CERTFILE` and `MCP_SSL_KEYFILE` (both required, unencrypted PEM key) to terminate TLS at the server with modern ciphers. Startup checks the pair before serving and aborts on a half-configured or truststore-incompatible setup. The HTTP transport docs cover the private-CA setup that goes with it (`REQUESTS_CA_BUNDLE` + `SSL_CERT_FILE`, with `MCP_ATLASSIAN_USE_SYSTEM_TRUSTSTORE=false`) (#1586, originally #1536) - Lazy credential resolution through `JIRA_API_TOKEN_COMMAND`, `JIRA_PERSONAL_TOKEN_COMMAND`, `CONFLUENCE_API_TOKEN_COMMAND`, and `CONFLUENCE_PERSONAL_TOKEN_COMMAND`. The command (for example `gopass show -o …`
View on GitHub ↗ - v0.23.1 Aug 19, 2026
Maintenance release cut from `v0.23.0`. It contains exactly two fixes — a security patch and a dependency compatibility pin — and none of the ongoing `v0.24.0` development on `main`. ## 🔒 Security - **SSE transport authentication boundary** (GHSA-5j8j-256g-vvp5): the `/sse` and `/messages` endpoints of `--transport sse` now enforce the same per-request authentication as the streamable-HTTP transport. Full details in the security advisory published alongside this release. Upgrading is strongly recommended for anyone running the SSE transport. ## 🐛 Fixed ### Confluence - **Pin `atlassian-python-api` below v5** ([#1585](https://github.com/sooperset/mcp-atlassian/issues/1585), [#1589](https://github.com/sooperset/mcp-atlassian/pull/1589)): `atlassian-python-api` 5.0 removed core Confluence Cloud methods (`get_page_by_id`, `create_page`, `update_page`), so fresh installs that resolved the new major failed with `AttributeError` on basic page operations. The dependency is now bounded to `>=4.0.0,<5.0.0` and a regression test guards the contract. Thanks @breezeFur for the fix and @mihnatova for the detailed report. ## Contributors Thanks to @breezeFur for the dependency fix and @mihnatova for the report that pinpointed #1585. **Full Changelog**: https://github.com/sooperset/mcp-atlassian/compare/v0.23.0...v0.23.1
View on GitHub ↗ - v0.23.0 Jul 18, 2026
This release adds JSM customer-request and internal-comment support, epic hierarchy and dependency tools, PAC/WPAD and mTLS connectivity, external auth passthrough, and Live Docs page creation, plus a broad batch of Jira/Confluence content fixes and security updates to Starlette and FastMCP. ## ✨ Features ### Jira - New JSM customer request tools — `jira_get_request_types`, `jira_get_request_type_fields`, and `jira_create_customer_request` — let clients list request types, inspect their visible fields, and raise customer requests with participants, base64 attachments, and on-behalf-of support (#1241) - New `jira_get_project_epic_hierarchy` groups a project's epics under their cross-project parent issues with direction-aware link classification, and `jira_get_cross_project_dependencies` maps issue links by target project and link type (#1286) - `jira_get_issue` and `jira_search` accept `use_display_names` to return human-readable custom field keys such as `Story Points` instead of opaque IDs like `customfield_10243`; conflicting names safely fall back to the raw ID (#1156) - Jira issue and search results now include a `browse_url` pointing at the issue's `/browse/` page, for quick open-ticket-in-browser workflows (#1471) - `jira_update_issue` accepts `return_fields` to trim the post-update re-fetch and cut response tokens; the full-issue default is unchanged (#1466) - Markdown `{expand:Title}` blocks in issue descriptions convert to native collapsible sections on Cloud, including nested headings, lists, and code blocks (#1309) - Development information queries discover case-sensitive application types from the dev-status summary endpoint when `application_type` is omitted, so custom connectors are found without guessing exact casing (#1329) ### Confluence - GFM task lists (`- [ ]` / `- [x]`) convert to native Confluence task macros instead of literal checkbox text, and new page template tools let you list Cloud templates, fetch them, and create pages from them (#1180) - Page creation accepts a `subtype` — including `live` for Live Docs — on Cloud, and page responses expose the subtype (#1479) ### Server/Transport - Opt-in external authentication passthrough: forward an operator-allowlisted set of incoming MCP headers to Jira and Confluence per request, supporting external proxy-managed auth without local Atlassian credentials. Dynamic per-request destinations require `MCP_ALLOWED_URL_DOMAINS` to prevent credential exfiltration (#1457) - Opt-in PAC/WPAD proxy auto-configuration for environments where the outbound route is selected by a PAC file. WPAD stays disabled by default, explicit proxy settings take precedence, and the SSRF/DNS-pinning defenses are preserved when PAC routing is enabled (#1367, #1461) - New `cert` auth type for Server/DC deployments that use mutual TLS: a client certificate/key pair alone now authenticates — previously setting `JIRA_CLIENT_CERT` / `CONFLUENCE_CLIENT_CERT` without a username or token left the service silently disabled (#1196) ## 🐛 Fixed ### Jira - `jira_get_issue_comments` no longer crashes with a `TypeError` on Cloud, where REST v3 returns comment bodies as ADF — bodies are converted to text the same way the add/edit comment paths already do (#1489) - Transition comments are routed through the correct API version: Cloud uses REST v3 with ADF in one atomic request (so workflows whose transition screen requires a comment now work), while Server/DC keep wiki-markup via v2 (#1355) - `jira_download_attachments` returns non-image attachments as `TextContent` with a JSON envelope (base64 payload, filename, MIME type) instead of an `EmbeddedResource` blob that some MCP clients reject; images keep the embedded form (#1469) - Bare Jira issue keys in Cloud markdown are autolinked to the configured `/browse/` URL when converted to ADF (#1468) - `jira_add_comment` accepts `comment` as a compatibility alias for the `body` parameter, so clients sending the older shape no longer fail argument validaView on GitHub ↗ - v0.22.1 Jul 11, 2026
## 🔒 Security ### Jira - Prevented caller-supplied `projects_filter` values from injecting JQL operators that could escape the configured project allowlist. Filter values with JQL syntax are now quoted as literals, and generated project clauses are explicitly grouped. (#1450) ### Transport - Kept caller-controlled destinations on the direct DNS-pinned connection path when deployment proxies are configured, so proxy-side DNS resolution cannot bypass the SSRF rebinding defense. Operator-configured Jira, Confluence, OAuth gateway, and allowlisted hosts continue to support proxies. (#1450) - Resolved relative and scheme-relative redirect locations against the response URL before SSRF validation, restoring safe same-host redirects while continuing to block unsafe destinations. (#1450) **Full Changelog**: https://github.com/sooperset/mcp-atlassian/compare/v0.22.0...v0.22.1
View on GitHub ↗
Discussion (0)
Sign in to comment →No comments yet. Sign in to start the discussion.