Skip to content

Releases

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 20:53
ae4ca9b

datacenter-mcp-core

Patch Changes

  • #9 d70cf2a Thanks @MrRefactoring! - Escape reserved characters in URL path parameters.

    route, the tagged template every client builds its paths with, encoded interpolated values with encodeURI. That leaves #, ?, &, =, +, ,, :, ; and @ untouched, so anything named with one of them produced a URL that meant something else: a repository file called design #draft?.md became /browse/docs/design%20#draft?.md, where the # opens a fragment and the rest of the path never reaches the server. Every endpoint that interpolates a path was affected, across all three products.

    Values are now escaped one /-separated segment at a time, which keeps separators in file-path parameters like browse/{path} while escaping everything else. Callers pass the same values as before.

jira-datacenter-mcp

Minor Changes

  • #11 e9aa5f6 Thanks @MrRefactoring! - Add jira_update_application_role, the one write that was missing from the application role surface.

    Until now the application roles could only be read (jira_get_application_roles, jira_get_application_role), so granting a group access to Jira Software through the tools was impossible.

    Like Bitbucket's update endpoints, PUT /applicationrole/{key} replaces the role with the body it receives. Probing a live Jira DC 10.3 instance confirmed it: a body of {key, selectedByDefault} empties groups and defaultGroups, which revokes the application from every user holding it — userCount dropped from 1 to 0. The tool therefore reads the role and sends it back with only the fields you passed overridden, serializes concurrent updates to the same role, and fails an unknown role key on that read instead of writing anything.

    numberOfSeats is deliberately not exposed: the server accepts it and silently keeps the licensed value.

Patch Changes

  • #9 d70cf2a Thanks @MrRefactoring! - Escape reserved characters in URL path parameters.

    route, the tagged template every client builds its paths with, encoded interpolated values with encodeURI. That leaves #, ?, &, =, +, ,, :, ; and @ untouched, so anything named with one of them produced a URL that meant something else: a repository file called design #draft?.md became /browse/docs/design%20#draft?.md, where the # opens a fragment and the rest of the path never reaches the server. Every endpoint that interpolates a path was affected, across all three products.

    Values are now escaped one /-separated segment at a time, which keeps separators in file-path parameters like browse/{path} while escaping everything else. Callers pass the same values as before.

  • Updated dependencies [d70cf2a]:

    • datacenter-mcp-core@0.6.0

confluence-datacenter-mcp

Patch Changes

  • #9 d70cf2a Thanks @MrRefactoring! - Escape reserved characters in URL path parameters.

    route, the tagged template every client builds its paths with, encoded interpolated values with encodeURI. That leaves #, ?, &, =, +, ,, :, ; and @ untouched, so anything named with one of them produced a URL that meant something else: a repository file called design #draft?.md became /browse/docs/design%20#draft?.md, where the # opens a fragment and the rest of the path never reaches the server. Every endpoint that interpolates a path was affected, across all three products.

    Values are now escaped one /-separated segment at a time, which keeps separators in file-path parameters like browse/{path} while escaping everything else. Callers pass the same values as before.

  • Updated dependencies [d70cf2a]:

    • datacenter-mcp-core@0.6.0

bitbucket-datacenter-mcp

Minor Changes

  • #8 506f588 Thanks @MrRefactoring! - Paginate bitbucket_browse_repository with start and limit.

    /browse returns both a directory's children and a file's lines as a page, with isLastPage and nextPageStart to continue from. The tool sent neither start nor limit, so whatever the server chose as its default page was all you ever got: a directory with more entries than that was silently cut off, and nothing in the tool could reach the rest. For files the gap was survivable, since bitbucket_get_file_content reads the whole file raw, but a large directory had no way out at all.

    Both parameters are optional. limit defaults to the package page size, matching the other paginated tools; start takes the nextPageStart of the previous response, which sits under children for a directory and at the response root for a file.

  • c42b935 Thanks @MrRefactoring! - Stop dropping reviewers when a pull request is updated.

    PUT /pull-requests/{id} in Bitbucket Data Center replaces the pull request with the body it receives instead of patching it, so a body of {version, description} tells the server that the pull request should have no reviewers at all. Editing a description through bitbucket_update_pull_request removed every reviewer from the pull request. Atlassian closed this as expected behaviour in BSERV-19139 and pointed at reading the pull request before writing it.

    bitbucket_update_pull_request now does exactly that: it reads the pull request and sends back its title, description, draft flag and reviewers, overriding only the fields the caller passed. Passing reviewers still replaces the whole list, and an empty array now clears it.

    version became optional as a result. Pass it to keep the optimistic locking that fails the call when someone else changed the pull request in the meantime; omit it to use the version read during the update.

  • 37c8862 Thanks @MrRefactoring! - Stop dropping the webhook secret and the required-builds exemption on update, and send build payloads as JSON.

    Bitbucket Data Center treats a PUT body as the entity's new state, not as a patch, so every field left out of the body is cleared. Probing a live 9.6.5 instance confirmed three of them:

    • bitbucket_update_webhook removed the stored HMAC secret whenever it was called without one, so changing a webhook's url silently unsigned every future delivery. The tool now reads the webhook and keeps its name, url, events, active state, SSL setting and secret unless you pass a replacement. An empty secret removes the stored one.
    • bitbucket_update_required_builds_merge_check removed the exempt ref matcher the same way. It now reads the existing check and keeps the build keys, ref matcher and exemption you leave out, and reports an unknown check id instead of writing. A matcher needs both its type and its value: passing one half now fails the call instead of silently keeping the stored matcher, and exemptRefMatcherType: 'NONE' removes the exemption.
    • bitbucket_add_build_status and both required-builds merge check tools sent their JSON body under Content-Type: */*, which Bitbucket answers with 415 Unsupported Media Type. They now send application/json.

    Updating a project or a repository was probed as well and needs no change: Bitbucket keeps the fields those endpoints do not receive.

Patch Changes

  • #9 d70cf2a Thanks @MrRefactoring! - Escape reserved characters in URL path parameters.

    route, the tagged template every client builds its paths with, encoded interpolated values with encodeURI. That leaves #, ?, &, =, +, ,, :, ; and @ untouched, so anything named with one of them produced a URL that meant something else: a repository file called design #draft?.md became /browse/docs/design%20#draft?.md, where the # opens a fragment and the rest of the path never reaches the server. Every endpoint that interpolates a path was affected, across all three products.

    Values are now escaped one /-separated segment at a time, which keeps separators in file-path parameters like browse/{path} while escaping everything else. Callers pass the same values as before.

  • #13 41e943c Thanks @MrRefactoring! - Add bitbucket_get_pending_review, a read-only tool that returns the authenticated user's pending draft review comments for a pull request. This le...

Read more

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 12:57

datacenter-mcp-core

Minor Changes

  • 9921e0a Thanks @MrRefactoring! - Add binary asset downloads across all three servers, with a shared delivery contract.

    Every download tool takes an optional absolute outputPath: with it the file is written to disk and only its metadata is returned, so file size is irrelevant. Without it the bytes come back as their own MCP content block — an image for raster images, a base64 resource blob otherwise — which bypasses the response cap that used to corrupt them. A file above ATLASSIAN_DC_MCP_MAX_INLINE_BYTES is refused with a pointer to outputPath instead of being silently truncated. That ceiling defaults to 1 MiB for raster images, which a host decodes as a picture, and 256 KiB for everything else, whose base64 a host has no way to read except as text — 256 KiB of it is already ~350k characters of context. Setting the variable applies a single value to both.

    Confluence — attachments could be listed, uploaded and replaced but never read back; there was no way to get a page's assets at all. Three new tools:

    • confluence_download_attachment — one attachment's bytes, identified by id or exact file name.
    • confluence_download_page_attachments — every attachment on a piece of content into a directory, optionally filtered by media-type prefix or exact file names, capped at 50 files with the remainder reported as skipped. A per-file failure is reported without aborting the rest.
    • confluence_download_page_images — the images a page actually displays, resolved from <ac:image> in its storage-format body (following <ri:page> to an image attached to another page). External <ri:url> images are listed rather than fetched.

    Bitbucket — bitbucket_download_file reads a repository file as bytes. bitbucket_get_file_content hits the same endpoint through the client's text path, which corrupts anything that is not UTF-8; its description now points at the new tool for binary files. Verified against Bitbucket Data Center 10.4.1: on a 20 000-byte binary the text path returns 36 122 bytes of replacement characters while the new tool returns the original 20 000 with a matching sha256, and a .zip confirms the base64 resource blob path for non-images.

    The Confluence tools were verified end-to-end against a Confluence Data Center 9.2.21 instance: files on disk are sha256-identical to a direct instance download, a 264 KB attachment (well past the old truncation threshold) arrives whole, and a page embedding six images — three of them attached to a different page — downloads all six.

    Jira — jira_get_attachment_content gains outputPath and now fetches the download URL with the client's credentials, configured request timeout and ApiError contract instead of a hand-rolled fetch that only spoke Bearer auth. Breaking: the response no longer carries data.contentBase64; the bytes arrive as a content block, or data.savedTo names the written file.

    Verified against Jira 11.3.8: a 150 KB attachment serialises to 200 117 characters in the old contentBase64 envelope — comfortably past the 100 000-character response cap that silently truncated it — while the new delivery carries all 200 000 base64 characters intact in their own content block, with a sha256 matching the uploaded file. The absolute /secure/attachment/... content URL, which sits outside the client's /rest base, is fetched correctly and rejects a bad token instead of returning empty bytes.

jira-datacenter-mcp

Minor Changes

  • 9921e0a Thanks @MrRefactoring! - Add binary asset downloads across all three servers, with a shared delivery contract.

    Every download tool takes an optional absolute outputPath: with it the file is written to disk and only its metadata is returned, so file size is irrelevant. Without it the bytes come back as their own MCP content block — an image for raster images, a base64 resource blob otherwise — which bypasses the response cap that used to corrupt them. A file above ATLASSIAN_DC_MCP_MAX_INLINE_BYTES is refused with a pointer to outputPath instead of being silently truncated. That ceiling defaults to 1 MiB for raster images, which a host decodes as a picture, and 256 KiB for everything else, whose base64 a host has no way to read except as text — 256 KiB of it is already ~350k characters of context. Setting the variable applies a single value to both.

    Confluence — attachments could be listed, uploaded and replaced but never read back; there was no way to get a page's assets at all. Three new tools:

    • confluence_download_attachment — one attachment's bytes, identified by id or exact file name.
    • confluence_download_page_attachments — every attachment on a piece of content into a directory, optionally filtered by media-type prefix or exact file names, capped at 50 files with the remainder reported as skipped. A per-file failure is reported without aborting the rest.
    • confluence_download_page_images — the images a page actually displays, resolved from <ac:image> in its storage-format body (following <ri:page> to an image attached to another page). External <ri:url> images are listed rather than fetched.

    Bitbucket — bitbucket_download_file reads a repository file as bytes. bitbucket_get_file_content hits the same endpoint through the client's text path, which corrupts anything that is not UTF-8; its description now points at the new tool for binary files. Verified against Bitbucket Data Center 10.4.1: on a 20 000-byte binary the text path returns 36 122 bytes of replacement characters while the new tool returns the original 20 000 with a matching sha256, and a .zip confirms the base64 resource blob path for non-images.

    The Confluence tools were verified end-to-end against a Confluence Data Center 9.2.21 instance: files on disk are sha256-identical to a direct instance download, a 264 KB attachment (well past the old truncation threshold) arrives whole, and a page embedding six images — three of them attached to a different page — downloads all six.

    Jira — jira_get_attachment_content gains outputPath and now fetches the download URL with the client's credentials, configured request timeout and ApiError contract instead of a hand-rolled fetch that only spoke Bearer auth. Breaking: the response no longer carries data.contentBase64; the bytes arrive as a content block, or data.savedTo names the written file.

    Verified against Jira 11.3.8: a 150 KB attachment serialises to 200 117 characters in the old contentBase64 envelope — comfortably past the 100 000-character response cap that silently truncated it — while the new delivery carries all 200 000 base64 characters intact in their own content block, with a sha256 matching the uploaded file. The absolute /secure/attachment/... content URL, which sits outside the client's /rest base, is fetched correctly and rejects a bad token instead of returning empty bytes.

Patch Changes

  • Updated dependencies [9921e0a]:
    • datacenter-mcp-core@0.5.0

confluence-datacenter-mcp

Minor Changes

  • 9921e0a Thanks @MrRefactoring! - Add binary asset downloads across all three servers, with a shared delivery contract.

    Every download tool takes an optional absolute outputPath: with it the file is written to disk and only its metadata is returned, so file size is irrelevant. Without it the bytes come back as their own MCP content block — an image for raster images, a base64 resource blob otherwise — which bypasses the response cap that used to corrupt them. A file above ATLASSIAN_DC_MCP_MAX_INLINE_BYTES is refused with a pointer to outputPath instead of being silently truncated. That ceiling defaults to 1 MiB for raster images, which a host decodes as a picture, and 256 KiB for everything else, whose base64 a host has no way to read except as text — 256 KiB of it is already ~350k characters of context. Setting the variable applies a single value to both.

    Confluence — attachments could be listed, uploaded and replaced but never read back; there was no way to get a page's assets at all. Three new tools:

    • confluence_download_attachment — one attachment's bytes, identified by id or exact file name.
    • confluence_download_page_attachments — every attachment on a piece of content into a directory, optionally filtered by media-type prefix or exact file names, capped at 50 files with the remainder reported as skipped. A per-file failure is reported without aborting the rest.
    • confluence_download_page_images — the images a page actually displays, resolved from <ac:image> in its storage-format body (following <ri:page> to an image attached to another page). External <ri:url> images are listed rather than fetched.

    Bitbucket — bitbucket_download_file reads a repository file as bytes. bitbucket_get_file_content hits the same endpoint through the client's text path, which corrupts anything that is not UTF-8; its description now points at the new tool for binary files. Verified against Bitbucket Data Center 10.4.1: on a 20 000-byte binary the text path returns 36 122 bytes of replacement characters while the new tool returns the original 20 000 with a matching sha256, and a .zip confirms the base64 resource blob path for non-images.

    The Confluence tools were verified end-to-end against a Confluence Data Center 9.2.21 instance: files on disk are sha256-id...

Read more

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 07 Jul 11:01

jira-datacenter-mcp

Patch Changes

  • Updated dependencies []:
    • datacenter-mcp-core@0.4.3

confluence-datacenter-mcp

Patch Changes

  • Updated dependencies []:
    • datacenter-mcp-core@0.4.3

bitbucket-datacenter-mcp

Patch Changes

  • e2f63c8 Thanks @MrRefactoring! - Fix bitbucket_submit_pull_request_review not publishing the reviewer's pending (draft) comments. It called the participant-status endpoint (PUT .../participants/{userSlug}), which only sets an approval status and leaves draft comments unpublished — so a review was recorded but the pending comments (including inline/file comments) never appeared. It now calls the correct PUT .../pull-requests/{id}/review (finishReview) endpoint, which acts as the authenticated user (the PAT owner) and atomically publishes their pending comments while setting the status. The userSlug argument is no longer required (the review is always submitted as the token owner) and an optional commentText summary is now supported. Verified live against Bitbucket DC 9.3.

  • Updated dependencies []:

    • datacenter-mcp-core@0.4.3

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 07 Jul 09:16

jira-datacenter-mcp

Patch Changes

  • Updated dependencies []:
    • datacenter-mcp-core@0.4.2

confluence-datacenter-mcp

Patch Changes

  • Updated dependencies []:
    • datacenter-mcp-core@0.4.2

bitbucket-datacenter-mcp

Patch Changes

  • 7202a08 Thanks @MrRefactoring! - Fix inline pull-request and commit comments silently posting as general (unanchored) comments. The comment client assembles the POST body with pickBody(params, CommentSchema), but CommentSchema did not declare anchor (file/line attachment) or parent (reply reference), so those fields were stripped from the request: an inline comment landed as a top-level PR comment and a reply landed as a new thread. Both fields are now part of CommentSchema and reach the server. Added an api-layer regression test that asserts the fields survive body assembly (the existing service-level tests mock the client namespace and could not catch this).

  • Updated dependencies []:

    • datacenter-mcp-core@0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 07 Jul 07:22

datacenter-mcp-core

Patch Changes

  • 9d61f30 Thanks @MrRefactoring! - Honor the Retry-After response header on rate-limited/unavailable responses. The hand-written HTTP client now parses Retry-After (delta-seconds or HTTP-date) into ApiError.retryAfterMs, and handleApiOperation uses it as the wait before the next retry instead of its own exponential backoff when the server provides one. The honored delay is clamped to a new maxRetryAfterMs retry option (default 30s) so a large server value can never hang a tool call, and the retry log records whether Retry-After was honored. All three products benefit uniformly since they share the core client. A new parseRetryAfterMs helper is exported for reuse.

jira-datacenter-mcp

Patch Changes

  • Updated dependencies [9d61f30]:
    • datacenter-mcp-core@0.4.1

confluence-datacenter-mcp

Patch Changes

  • Updated dependencies [9d61f30]:
    • datacenter-mcp-core@0.4.1

bitbucket-datacenter-mcp

Patch Changes

  • Updated dependencies [9d61f30]:
    • datacenter-mcp-core@0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 23:15

datacenter-mcp-core

Minor Changes

  • 6df9e9d Thanks @MrRefactoring! - Roll tool annotations out to Confluence (101 tools) and Bitbucket (114 tools) via the shared registerAnnotatedTool helper, so every tool across all three products now advertises readOnlyHint/destructiveHint/idempotentHint/title/openWorldHint.

    The core classifier learned the vocabulary these products use: it skips the admin_ namespace token so confluence_admin_delete_user is correctly flagged destructive, treats convert/compare/browse/can/is as read-only, and classifies grant/revoke/enable/disable/watch/unwatch/edit as idempotent non-destructive writes. Pull-request and version merges are flagged destructive.

  • 6bdf2db Thanks @MrRefactoring! - Mature the Jira MCP surface:

    • Tool annotations on all Jira tools. A new deriveToolAnnotations / registerAnnotatedTool helper in core derives readOnlyHint/destructiveHint/idempotentHint/title/openWorldHint from each tool's <product>_<verb>_<noun> name, so hosts can auto-approve read-only calls and warn before destructive ones (delete/remove/merge-version).
    • More resources: added jira://project/{key}, jira://board/{id}, and jira://user/{username} alongside the existing jira://issue/{key}.
    • More prompts: added jira_plan_sprint, jira_break_down_epic, and jira_build_jql alongside jira_triage_issue.
    • Opt-in pagination: the bounded agile listers (jira_get_boards, jira_get_board_sprints, jira_get_board_versions, jira_get_board_epics) accept fetchAll to follow pagination and return every page as a flat array (safety-capped). The JQL-backed issue listings stay single-page and agent-driven.
  • 7f1c16a Thanks @MrRefactoring! - Add a configurable response-size cap so oversized API responses no longer blow the model's context window. Every tool response is serialized through formatToolResponse, which now truncates payloads larger than ATLASSIAN_DC_MCP_MAX_RESPONSE_CHARS (default 100,000 characters, ~25k tokens) and appends a clear marker explaining the payload was cut and how to get the rest (narrow the query, use a smaller limit or pagination, request specific fields). Set the env var to 0 to disable the cap. This protects Jira, Confluence, and Bitbucket uniformly against large diffs, long page bodies, and big unfiltered list results.

  • 8e5a1e3 Thanks @MrRefactoring! - Add two MCP protocol maturity features across all three products:

    • Server instructions: each server now advertises an instructions string in its initialize result, telling the client/model what the server is, that every call acts as the single configured user, the <product>_<verb>_<noun> naming and read/write/destructive annotations, how to search (JQL/CQL), the fetchAll pagination opt-in, and the addressable resource URIs. createMcpServer gained an optional instructions field.
    • Argument completions (completion/complete): prompt arguments and resource-template variables now offer live autocompletion, backed by list endpoints and filtered against the partial input (case-insensitive substring, capped). Confluence completes spaceKey; Jira completes projectKey and boardId; Bitbucket completes projectKey and (scoped to the chosen project) repositorySlug. A shared filterCompletions helper was added to core. Completions never throw — a failed lookup yields an empty list. Verified live against Confluence Data Center 9.2.21 and Bitbucket Data Center 9.3.2 instances.

jira-datacenter-mcp

Minor Changes

  • 6bdf2db Thanks @MrRefactoring! - Mature the Jira MCP surface:

    • Tool annotations on all Jira tools. A new deriveToolAnnotations / registerAnnotatedTool helper in core derives readOnlyHint/destructiveHint/idempotentHint/title/openWorldHint from each tool's <product>_<verb>_<noun> name, so hosts can auto-approve read-only calls and warn before destructive ones (delete/remove/merge-version).
    • More resources: added jira://project/{key}, jira://board/{id}, and jira://user/{username} alongside the existing jira://issue/{key}.
    • More prompts: added jira_plan_sprint, jira_break_down_epic, and jira_build_jql alongside jira_triage_issue.
    • Opt-in pagination: the bounded agile listers (jira_get_boards, jira_get_board_sprints, jira_get_board_versions, jira_get_board_epics) accept fetchAll to follow pagination and return every page as a flat array (safety-capped). The JQL-backed issue listings stay single-page and agent-driven.
  • 8e5a1e3 Thanks @MrRefactoring! - Add two MCP protocol maturity features across all three products:

    • Server instructions: each server now advertises an instructions string in its initialize result, telling the client/model what the server is, that every call acts as the single configured user, the <product>_<verb>_<noun> naming and read/write/destructive annotations, how to search (JQL/CQL), the fetchAll pagination opt-in, and the addressable resource URIs. createMcpServer gained an optional instructions field.
    • Argument completions (completion/complete): prompt arguments and resource-template variables now offer live autocompletion, backed by list endpoints and filtered against the partial input (case-insensitive substring, capped). Confluence completes spaceKey; Jira completes projectKey and boardId; Bitbucket completes projectKey and (scoped to the chosen project) repositorySlug. A shared filterCompletions helper was added to core. Completions never throw — a failed lookup yields an empty list. Verified live against Confluence Data Center 9.2.21 and Bitbucket Data Center 9.3.2 instances.

Patch Changes

confluence-datacenter-mcp

Minor Changes

  • 1bdd046 Thanks @MrRefactoring! - Expand the Confluence MCP API coverage with 11 new tools (all live-verified against a Confluence Data Center 9.2.21 instance):

    • Label discovery (6): confluence_get_recently_used_labels and confluence_get_related_labels (instance-wide), plus confluence_get_space_labels, confluence_get_space_popular_labels, confluence_get_space_recent_labels, and confluence_get_space_related_labels (per-space).
    • Space watchers: confluence_get_space_watchers lists the users watching a space.
    • Admin reads (3): confluence_get_access_mode_status (READ_WRITE / READ_ONLY), confluence_get_audit_records (audit log), and confluence_get_global_permissions (global permission grants).
    • Content cleanup: confluence_delete_content_version removes a specific historical version of a page.

    These wire previously-unused generated client services (LabelService, SpaceLabelService, SpaceWatchersService, AccessModeService, DefaultService, GlobalPermissionsService, ContentVersionService) into ConfluenceService and the tool registry, bringing the Confluence tool count to 112.

  • 6df9e9d Thanks @MrRefactoring! - Roll tool annotations out to Confluence (101 tools) and Bitbucket (114 tools) via the shared registerAnnotatedTool helper, so every tool across all three products now advertises readOnlyHint/destructiveHint/idempotentHint/title/openWorldHint.

    The core classifier learned the vocabulary these products use: it skips the admin_ namespace token so confluence_admin_delete_user is correctly flagged destructive, treats convert/compare/browse/can/is as read-only, and classifies grant/revoke/enable/disable/watch/unwatch/edit as idempotent non-destructive writes. Pull-request and version merges are flagged destructive.

  • 386e420 Thanks @MrRefactoring! - Rewrite the Confluence client off the generated openapi-typescript-codegen output onto the shared hand-written HTTP client, completing the migration already done for Jira and Bitbucket. packages/confluence/src/confluenceClient/ is now a small hand-written client: core/client.ts (createConfluenceClient factory over core's createHttpClient), api/ (one free function per endpoint grouped into content/spaces/attachments/users/webhooks/admin namespaces), plus models.ts and a thin index.ts. The OpenAPI singleton, ...

Read more

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 10:13

datacenter-mcp-core

Minor Changes

  • 7ac1a1f Thanks @MrRefactoring! - Lift the HTTP client core into datacenter-mcp-core so every product package shares one implementation. createHttpClient, the route tagged-template URL builder, pickBody, bindGroup, ApiError, and the client interfaces (HttpClient, SendRequestOptions, HttpClientConfig, …) now live in and are exported from core; a new responseType: 'arraybuffer' mode returns the raw bytes for binary downloads, and a new softValidation config flag validates responses non-fatally (a schema mismatch logs a warning and passes the raw body through instead of throwing) for clients whose schemas aren't yet fully verified against a live instance. Response parsing also tolerates an empty body on a 200/201 that still advertises a JSON Content-Type (some mutation endpoints answer this way), returning undefined instead of throwing on JSON.parse(''). The Bitbucket client drops its local copies and imports these from core, with no change to its behavior or exposed tools.

Patch Changes

  • 9126faa Thanks @MrRefactoring! - Make every index.ts a pure barrel (re-exports only). Each product's tool-registration/bootstrap entry moves from src/index.ts to src/server.ts (imported by the run.ts bin dispatcher and the start/dev/inspect scripts), and src/index.ts becomes a barrel over the service, config, and mappers. In core, the createMcpServer/connectServer/formatToolResponse runtime moves to src/server.ts and index.ts re-exports it, so the datacenter-mcp-core public API is unchanged. No change to the npx <product>-datacenter-mcp [setup] command or server behavior.

  • d220a9e Thanks @MrRefactoring! - Improve npm discoverability: mention Claude/AI assistants in package descriptions and add search keywords (mcp-server, claude, claude-desktop, anthropic, ai, llm, and product-specific aliases like jira-server/confluence-server/bitbucket-server).

jira-datacenter-mcp

Minor Changes

  • 868ed80 Thanks @MrRefactoring! - Add a first-class named-profile concept for managing more than one instance of the same product. setup --profile <name> reads/writes a distinct home file (<product>.<profile>.env) and Keychain account (<product>-<profile>-token/-password) instead of the default unsuffixed ones; set ATLASSIAN_DC_MCP_PROFILE=<name> when launching the server to read that profile back. process.env and ATLASSIAN_DC_MCP_CONFIG_FILE are unaffected and still take priority, as before.

  • 5b39442 Thanks @MrRefactoring! - Add Jira application properties tools: jira_getApplicationProperty, jira_getAdvancedSettings, and jira_setApplicationProperty for reading and updating global application properties / advanced settings. The set operation calls the endpoint directly since the generated client's setPropertyViaRestfulTable omits the request body the REST API requires.

  • c6046bf Thanks @MrRefactoring! - Add jira_getAttachmentContent to download an attachment's raw content as base64, fixing the previous metadata-only round trip.

  • 520ddfd Thanks @MrRefactoring! - Add Basic auth (username/password) support to jira-datacenter-mcp as an alternative to the API token, with Keychain-backed password storage on macOS.

  • 41096e8 Thanks @MrRefactoring! - Add Jira Data Center cluster, index snapshot, and reindex admin tools (20 new tools): cluster node listing/deletion/offline/index-snapshot-request plus zero-downtime upgrade approve/cancel/retry/start/state from ClusterService; issue index summary from IndexService; index snapshot list/create/status from IndexSnapshotService; and reindex info/start/per-issue/progress/pending-requests from ReindexService.

  • 6c97099 Thanks @MrRefactoring! - Add Jira instance metadata read tools: jira_get_configuration (which optional features — voting, watching, sub-tasks, time tracking, attachments, issue linking — are enabled, with the time-tracking configuration), jira_get_status_categories / jira_get_status_category (the To Do / In Progress / Done grouping behind statuses), and jira_get_issue_picker_suggestions (issue suggestions matching a query and/or JQL, e.g. for building a picker).

  • 284dab2 Thanks @MrRefactoring! - Add Jira email template management tools (download/upload/apply/reset to default/list types) and session & WebSudo tools (get current session, create/delete a session, release an elevated-permission WebSudo session). 9 new tools total.

  • eacc93e Thanks @MrRefactoring! - Add Jira entity property tools for issues, projects, and comments: get property keys, get a property, set a property, and delete a property, for each of the three entity types (12 new tools total).

  • a87fe31 Thanks @MrRefactoring! - Add Jira filter-sharing tools: jira_get_filter_share_permissions, jira_get_filter_share_permission, jira_add_filter_share_permission (share a saved filter with a group, project, project role, all logged-in users, or globally), and jira_delete_filter_share_permission, plus jira_get_default_share_scope / jira_set_default_share_scope for the current user's default share scope for new filters and dashboards.

  • d6e8187 Thanks @MrRefactoring! - Add Jira issue lifecycle tools: restoreIssue (undo an archive), notifyIssue (send a manual email notification to reporter/assignee/watchers/voters/users/groups), setCommentPinned (pin/unpin a comment), and getPinnedComments.

  • 0cd9b9f Thanks @MrRefactoring! - Add Jira issue-navigator column tools: jira_get_my_columns / jira_set_my_columns / jira_reset_my_columns for a user's own columns (defaulting to the current user), and jira_get_default_columns / jira_set_default_columns for the system default columns. The set operations use the endpoints' repeated columns form-field encoding rather than JSON.

  • a31cb9a Thanks @MrRefactoring! - Add Jira project lifecycle tools: createProject, updateProject, deleteProject, archiveProject, and restoreProject.

  • ac27a9a Thanks @MrRefactoring! - Add Jira remote issue link tools: getRemoteIssueLinks, getRemoteIssueLink, createOrUpdateRemoteIssueLink, updateRemoteIssueLink, deleteRemoteIssueLink, and deleteRemoteIssueLinkByGlobalId, for linking issues to Confluence pages or other external URLs.

  • 0a48e95 Thanks @MrRefactoring! - Add jira_getServerInfo (server version, build number, deployment type) and jira_validateLicense (validate a license string against the current installation). The generated client has no endpoint for reading the currently installed license; validateLicense is the only license-related surface it exposes.

  • 892f36d Thanks @MrRefactoring! - Add Jira webhook tools: jira_get_webhooks, jira_get_webhook, jira_create_webhook (subscribe a URL to Jira events, optionally filtered by JQL), jira_update_webhook, and jira_delete_webhook, wrapping the /rest/webhooks/1.0/ plugin API. Note: unlike the platform REST API, the webhook endpoints do not accept personal access tokens — they require Basic auth (username/password) or a session — so these tools work only when the server is configured with Basic auth. Responses are validated softly (schema mismatches log and pass through rather than failing).

  • f0f610c Thanks @MrRefactoring! - Add Jira workflow scheme write tools: createWorkflowScheme, updateWorkflowScheme, deleteWorkflowScheme, setWorkflowSchemeIssueTypeMap...

Read more

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 07:13

datacenter-mcp-core

Minor Changes

  • 582a094 Thanks @MrRefactoring! - Allow the MCP servers to start and run without an API token, for Data Center instances that permit anonymous access. *_API_TOKEN is no longer required by config validation or the interactive setup CLI; when it's absent, requests are sent with no Authorization header instead of the previous placeholder-token workaround.

jira-datacenter-mcp

Minor Changes

  • 582a094 Thanks @MrRefactoring! - Allow the MCP servers to start and run without an API token, for Data Center instances that permit anonymous access. *_API_TOKEN is no longer required by config validation or the interactive setup CLI; when it's absent, requests are sent with no Authorization header instead of the previous placeholder-token workaround.

Patch Changes

  • Updated dependencies [582a094]:
    • datacenter-mcp-core@0.2.0

confluence-datacenter-mcp

Minor Changes

  • 582a094 Thanks @MrRefactoring! - Allow the MCP servers to start and run without an API token, for Data Center instances that permit anonymous access. *_API_TOKEN is no longer required by config validation or the interactive setup CLI; when it's absent, requests are sent with no Authorization header instead of the previous placeholder-token workaround.

Patch Changes

  • Updated dependencies [582a094]:
    • datacenter-mcp-core@0.2.0

bitbucket-datacenter-mcp

Minor Changes

  • 582a094 Thanks @MrRefactoring! - Allow the MCP servers to start and run without an API token, for Data Center instances that permit anonymous access. *_API_TOKEN is no longer required by config validation or the interactive setup CLI; when it's absent, requests are sent with no Authorization header instead of the previous placeholder-token workaround.

Patch Changes

  • Updated dependencies [582a094]:
    • datacenter-mcp-core@0.2.0