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, andjira_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_hierarchygroups a project's epics under their cross-project parent issues with direction-aware link classification, andjira_get_cross_project_dependenciesmaps issue links by target project and link type (#1286) jira_get_issueandjira_searchacceptuse_display_namesto return human-readable custom field keys such asStory Pointsinstead of opaque IDs likecustomfield_10243; conflicting names safely fall back to the raw ID (#1156)- Jira issue and search results now include a
browse_urlpointing at the issue's/browse/page, for quick open-ticket-in-browser workflows (#1471) jira_update_issueacceptsreturn_fieldsto 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_typeis 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— includinglivefor 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_DOMAINSto 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
certauth type for Server/DC deployments that use mutual TLS: a client certificate/key pair alone now authenticates — previously settingJIRA_CLIENT_CERT/CONFLUENCE_CLIENT_CERTwithout a username or token left the service silently disabled (#1196)
🐛 Fixed
Jira
jira_get_issue_commentsno longer crashes with aTypeErroron 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_attachmentsreturns non-image attachments asTextContentwith a JSON envelope (base64 payload, filename, MIME type) instead of anEmbeddedResourceblob 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_commentacceptscommentas a compatibility alias for thebodyparameter, so clients sending the older shape no longer fail argument validation (#1467)- Segmented hyphenated issue keys such as
B7-214-68901(Server/DC) pass validation and are preserved by smart-link extraction (#1476) - Blocking fetcher calls for
jira_get_issueandjira_searchare offloaded from the MCP event loop and bounded byJIRA_FETCHER_MAX_WORKERS(default 8), keeping the server responsive under concurrent issue reads (#1459) - Issue creation prefers an exact
Epicissue type match, so custom types likeProgram Epicare no longer selected by accident (#1370) - Legacy 24-character hexadecimal Cloud account IDs are recognized regardless of their first character; malformed IDs, emails, and display names still go through normal user lookup (#1164)
- Issue
created/updatedtimestamps are routed throughformat_timestamp, returning localized timestamps instead of raw ISO strings (#1236)
Confluence
- CQL searches like
type=spacereturn results instead of an empty list — space-type result items are now mapped and matched for excerpts (#1119, closes #907) - CQL search results include
created/updated/authormetadata again by expanding nested content history and version fields (#1480) - Comment replies preserve their bodies across API paths: v1 replies use the owning page as container with the parent in
ancestors, and Cloud OAuth/PAT route through v2 with a storage-body fallback (#1485) - Legacy Server/DC timestamps that overflow the platform datetime range no longer crash page and comment formatting — the raw timestamp is returned instead of failing the whole tool response (#1483)
- Updated to
markdown-to-confluence0.6 while preserving attachment handling, code-language normalization, table-layout conversion, and task-list behavior (#1486) confluence_set_page_restrictionslist parameters now declare anitemsschema, unblocking VS Code Agent mode, which rejected the generated tool schema entirely (#1487, closes #1455)- Date lozenges stored as
<time datetime="...">elements survive storage-to-Markdown conversion (#1107)
Server/Transport
- Header-based PAT requests honour
*_SSL_VERIFYand proxy settings instead of hardcoding SSL verification on and disabling proxies (#1211) - Hosts listed in
NO_PROXYbypass the proxy even when proxies are explicitly configured on the session (#1191) - Unexpected tool failures surface detailed
ToolErrors instead of generic masked errors, and Confluence search helpers no longer return empty success results for API/network failures (#1316, closes #1315) - Multi-user token validation results are cached across requests for a configurable TTL (
MCP_ATLASSIAN_VALIDATION_CACHE_TTL, default 300s;0disables), cutting a validation round-trip from every request. Cache keys are SHA-256 material scoped by service and credential, so raw tokens are never stored (#1481, closes #1405) - MCP tool annotations align with actual behavior: additive write tools are marked non-destructive, while watcher removal and sprint reassignment keep their destructive annotations (#1458)
🔒 Security
Server/Transport
- Upgraded the Starlette dependency to a patched release (
>=1.0.1) for GHSA-86qp-5c8j-p5mr, with a malformedHostheader regression test covering the path-based middleware gates (#1470) - Upgraded the bundled FastMCP framework from 2.x to 3.x, clearing known vulnerabilities in the 2.x line (#1234, #1348). The migration preserves the tool-visibility security boundary end to end: tools hidden by read-only mode,
ENABLED_TOOLS, or toolset filtering remain both unlisted and uncallable, and denials are indistinguishable from unknown tools (#1442, supersedes #1388) - Follow-up hardening of the filter and SSRF defenses: caller-supplied
projects_filtervalues are quoted as JQL literals and grouped so they cannot escape the configured allowlist, caller-controlled destinations stay on the direct DNS-pinned connection path when deployment proxies are configured, and relative redirect locations are resolved before SSRF validation (#1450)
Jira
- New server-side internal-only comment guard for JSM projects: with
JIRA_INTERNAL_ONLY_PROJECTSconfigured, comments created through the add, edit, transition, and issue-link paths in those projects are enforced as internal, so AI-authored comments cannot leak to service-desk customers. The guard fails closed unless Jira explicitly reports the comment as non-public (#1478) - Hardened
JIRA_INTERNAL_ONLY_PROJECTShandling against invisible characters — zero-width characters or a BOM in configured project keys or incoming issue keys could previously make the guard fail open. Keys are now normalized, and entries that cannot match a valid project-key shape produce a warning (#1491)
🧰 Also in this release
Expanded regression coverage for Jira REST API v3 (#1110, closes #338), web and Confluence remote links (#1108), dynamic Epic Link fields (#1113), JSM queue request contracts (#1115), custom field option values (#1464, closes #673), and jira issues/epics (#1497); a deterministic rate-limit throttle test (#1449); a TruffleHog secret-scanning CI workflow (#1265); and setup docs for Autohand Code (#1472).
Contributors
Thanks to @trentzeigler (#1442, #1388), @sanjibani (#1489, #1487), @saidelike (#1367, #1459), @keithxm23 (#1196), @WZHBEDZ (#1316), @Troubladore (#1119, #1107), and @cblacknygc (#1497)!
Additional thanks to the contributors whose original work was carried into this release: @faizbawa, @kbichave, @deniszagitov, @slinkardbrandon, @cedrickcom, @trevorh, @jcbportela, @NickLoeza, @abhinavgaba, @tony-davis, @Niicolaa, @timwinders, and @balcsida.
Full Changelog: v0.22.1...v0.23.0