The tools support permission-preserving page and related-content operations. For operational limits, see Compatibility and limitations. Native Confluence permissions always apply; optional administrator space filters can only narrow access. Examples are tool arguments. Replace illustrative space keys and page IDs with the intended content. Use the schemas advertised by this plugin; unknown arguments are rejected.
Use the connection’s tool catalog. tools/list supplies the current schemas for the tools available to the caller. See Compatibility and limitations for operational limits.
confluence_get_current_user
Confirm which Confluence account the connection uses and the effective administrator space policy.
Arguments: none. Pass an empty object.
{}
Output: executedAs (username), userKey, spaceScopeMode, allowedSpaces, and blockedSpaces. Mode is native_permissions, allowlist, blocklist, or legacy allowlist_and_blocklist. Empty lists mean absent administrator filters, not an enumeration of spaces the caller can access. Lists never grant native permissions.
Example: “Show my connected Confluence user and the configured spaces.” An illustrative decoded result is:
{"executedAs": "alex", "userKey": "example-user-key", "spaceScopeMode": "native_permissions", "allowedSpaces": [], "blockedSpaces": []}
confluence_search
Find current pages. Users describe what they want to their AI assistant; the AI client constructs the confluence_search arguments. For direct integrations, query accepts a Confluence Query Language (CQL) predicate, not a natural-language prompt. The plugin forwards that predicate to Confluence with page and space-policy constraints, enforces native permissions, and checks every returned page again.
|
Argument |
Type and behavior |
|---|---|
|
|
Optional string; CQL predicate up to 2,000 characters, without |
|
|
Optional integer, 1–25. Default: 10. |
|
|
Optional integer offset, 0–10,000. Default: 0. |
A user can ask “Find architecture decision pages and cite their links.” One illustrative tool call prepared by the client is shown below; replace the space key with the intended space. Users do not need to compose this query themselves.
{"query":"space = ARCH AND title ~ \"decision\"","limit":10,"start":0}
Output: results contains permitted Confluence content records, including page IDs, titles, and links supplied by Confluence. size is the number returned after filtering; start and limit echo the requested pagination. executedAs identifies the caller and backend describes the retrieval path. No total match count is returned.
Use a result’s id with confluence_get_page. Increase start by limit for the next batch. Permission and policy filtering can make batches smaller; if no pages are permitted, results is empty.
confluence_get_page
Read a current page by ID.
|
Argument |
Type and behavior |
|---|---|
|
|
Required positive numeric string. Use an ID returned by search. |
{"page_id":"123456"}
Output:
-
id,title,space,version, andurlidentify the page and its source. -
bodyStoragecontains up to 50,000 characters of Confluence storage content.truncatedmarks an incomplete read; useconfluence_read_page_chunkto read the remaining content of a long page. -
executedAs,userKey,spaceScopeMode,allowedSpaces, andblockedSpacesdescribe identity and administrator scope.backenddescribes retrieval. OutputbodyStorageis storage-format content; write arguments use the distinct namebody_storage.
Example: “Read the selected page, summarize the decision, and cite its source URL. Say whether the content is truncated.”
confluence_create_page
Create a current page as the authenticated caller. The user needs native space VIEW and page-create permission; optional administrator filters also apply. An optional parent must be a visible current page in the same space. Confluence performs native validation and records the caller as creator.
|
Argument |
Type and behavior |
|---|---|
|
|
Required string; target Confluence space key. |
|
|
Required non-blank string, at most 255 characters. |
|
|
Required string, at most 50,000 characters; Confluence storage format, not Markdown. |
|
|
Optional positive numeric string; a visible parent page in the target space. |
{
"space_key": "DEV",
"title": "Integration notes",
"body_storage": "<p>Created through MCP.</p>"
}
Output: id, version, url, and executedAs. Use the returned ID for subsequent reads and updates. Creation is not idempotent: after a timeout or ambiguous transport failure, check Confluence for the intended page before retrying to avoid duplicates.
Safe editing and storage format
Never update from an incomplete read. A truncated: true response is partial. You can read the remainder with confluence_read_page_chunk, but full-page and section updates still reject pages whose current body exceeds 50,000 characters. Use Confluence’s editor for those pages.
For an existing page, require truncated: false, retain the complete returned bodyStorage, and modify only the intended content. Preserve unrelated macros, parameters, layouts, tables, links, tasks and other storage-format elements. A summary or Markdown rendering is not an equivalent replacement body. The plugin does not convert Markdown/wiki markup and sends full-page replacement storage to Confluence for native validation. The separate section tool uses a precise version-bound selector and retains surrounding storage.
-
Read the page and retain its ID, complete storage body, title and current version. Keep an appropriate recovery copy or use the organization’s normal content-change process.
-
Prepare the full replacement body, preserving everything outside the intended edit. Inspect the change before submitting; native validation does not prove that an AI rewrite retained unrelated content.
-
Submit
page_id, the currentversion, and the complete desiredtitleandbody_storage. The server increments the version after a successful update. -
On conflict, re-read the latest complete page and reconcile the change rather than replaying stale content. Afterwards read again and inspect the rendered page in Confluence, particularly macros, links, tables and task lists.
confluence_update_page
Replace a current page’s title and complete storage body as the authenticated caller. Native VIEW and EDIT permissions and optional space filters apply. The tool preserves space, parent/ancestry and page restrictions; it does not accept author/editor overrides.
|
Argument |
Type and behavior |
|---|---|
|
|
Required positive numeric string; current page to update. |
|
|
Required integer: the current version returned by get_page, from 1 through 2,147,483,646. Do not pre-increment it. |
|
|
Required non-blank string, at most 255 characters; complete replacement title. |
|
|
Required string, at most 50,000 characters; complete replacement body in Confluence storage format. |
{
"page_id": "123456",
"version": 1,
"title": "Integration notes",
"body_storage": "<p>Updated through MCP.</p>"
}
Output: id, the resulting version, url, and executedAs. On a version conflict, read the latest page, reconcile the intended change, and retry with its current version. Blindly resending stale content can overwrite another person’s work.
The toolset does not expose page deletion, moving pages, changing permissions/restrictions, draft management, history restoration, or arbitrary REST execution. Unknown arguments, including identity overrides, are rejected.
Results and errors
The MCP response contains JSON encoded as text in content[0].text. Successful calls set isError: false. A failed tool call sets isError: true and returns an error message, requestId and errorCategory in that JSON. Use the reference and request time when asking for help. An HTTP 200 alone does not establish tool success.
Unsupported arguments are rejected. A missing, restricted, or out-of-scope page returns no page content; the denial does not establish whether a hidden page exists.
For technical integration context, see Developer and technical integration. For connection setup, see Connect your MCP client. For failed calls, see Troubleshooting.
Additional tools and common behavior
The app’s tools/list is the authoritative JSON Schema catalog. Every tool rejects unknown arguments and identity/scope overrides. Results are JSON encoded in MCP content[0].text, with isError indicating tool failure. HTTP 200 alone does not establish success.
Common contract
All IDs are positive decimal strings, at most 19 digits and within signed Java long. Versions are integers, 1–2,147,483,646. Unknown JSON properties, wrong types, nulls and out-of-range values fail validation. All related operations first require native access to the current owning page and its space, then apply the optional administrator space policy. Native services perform the action-specific permission checks as the unchanged authenticated caller. No service-account fallback or impersonation exists.
List pagination uses optional start (0–10,000, default 0) and limit (1–25, default 10). Responses contain results, start, limit, hasMore and, when available, nextStart. Filtering can produce short or empty batches; follow the returned cursor rather than the result count. At the offset ceiling, paginationLimitReached: true indicates that additional native results cannot be traversed through this contract; no unusable nextStart is returned. Lists are not immutable snapshots. Related results include executedAs.
Storage strings are Confluence storage XML, not Markdown. New comment bodies and section edits validate complete XML fragments with ac and ri namespace bindings; DTDs and external entities are rejected. Other namespaces must be declared in the fragment. Lengths use Java string characters (UTF-16 code units). The MCP request envelope remains bounded at 65,536 characters after framework buffering, which can impose a tighter limit on heavily escaped content.
Sections
|
Tool |
Required arguments |
Optional arguments |
|---|---|---|
|
|
|
|
|
|
|
None |
version is the expected current page version for both reading and editing. section_index is a 1-based integer ordinal (maximum 50,000) returned by section discovery at that version. A heading name is not a selector. Duplicate headings have distinct ordinals; omitting the edit ordinal or supplying a heading-string argument fails without mutation. A selected read cannot also specify pagination.
Discovery returns sectionIndex, level and the original headingStorage for top-level h1–h6 elements. A selected read returns sectionIndex, headingStorage, bodyStorage, pageId, version, and truncated: false. Its body begins after the heading and includes subordinate headings until the next heading of equal or higher rank, or end of storage. Introductory content before the first heading is not a section. Headings inside a macro, table, task, layout or other container are unsupported and fail closed, rather than splitting that structure.
An edit replaces only the selected section body, preserving its heading and surrounding storage. Supply complete storage XML and the current page version; both the current page and result must fit the 50,000-character limit. A concurrent edit returns a conflict; no automatic retry or rebase occurs. Success returns id, version, url and executedAs.
Example discovery: {"page_id":"123","version":7,"limit":10}. Read: {"page_id":"123","version":7,"section_index":2}. Edit: {"page_id":"123","version":7,"section_index":2,"body_storage":"<p>Revised decision.</p>"}. Always rediscover selectors after any successful edit or conflict.
History
|
Tool |
Required arguments |
Optional arguments |
|---|---|---|
|
|
|
|
|
|
|
None |
History is gated by access to the current page, not historical permissions or a service account. The list walks a bounded number of version numbers in descending order; deleted historical versions are skipped while advancing the cursor. currentVersion records the head observed for that call. Edits between requests can shift offsets.
Metadata contains version, historical title, author, modifiedAt (UTC when available), message (at most 1,024 characters) and metadataTruncated. Selected reads return metadata, bodyStorage (at most 50,000 characters), and truncated. Missing history returns no content. There is no restoration operation. Example: {"page_id":"123","version":3}.
Comments
|
Tool |
Required arguments |
Optional arguments |
|---|---|---|
|
|
|
|
|
|
|
None |
|
|
|
|
|
|
|
None |
|
|
|
None |
Comment metadata includes id, version, author, editor, optional modifiedAt/parentCommentId, and inline. A selected read wraps it in comment, with bodyStorage and truncated at 50,000 characters. Lists omit bodies. Only comments visible to the caller are returned.
Mutation tools operate on footer comments. New bodies must be non-blank complete storage XML, at most 50,000 characters. A reply's parent must be a visible footer comment on the same page. Edits require the exact current comment version, reject oversized existing comments, and use native optimistic version validation. Native per-comment edit/remove permission applies, including author-specific rules; page edit permission alone is not substituted. Native comment deletion determines how replies are handled. Inline comment creation/edit/removal is outside this contract; inline comments may be read when returned and permitted by the native service.
Add/reply and edit return id, version, executedAs; removal returns removed and executedAs. Example reply: {"page_id":"123","parent_comment_id":"456","body_storage":"<p>Agreed.</p>"}. An edit additionally uses comment_id and the current integer version.
Labels
|
Tool |
Required arguments |
Optional arguments |
|---|---|---|
|
|
|
|
|
|
|
None |
Only global labels are exposed. label is 1–255 lowercase letters/digits/underscores/hyphens, beginning with a letter or digit. Add/remove changes only that label, leaving unrelated and personal/system labels untouched. Label changes require native page edit permission; the native content-label service also enforces its action-specific permissions. List records contain name and prefix; mutations return label, action and executedAs. Example: {"page_id":"123","label":"architecture-decision"}.
Attachments
|
Tool |
Required arguments |
Optional arguments |
|---|---|---|
|
|
|
|
|
|
|
None |
|
|
|
None |
|
|
source |
None |
The transfer format is standard canonical padded base64, at most 32,768 decoded bytes (43,692 encoded characters), including zero-byte files. Missing required padding, non-canonical, malformed or oversized input is rejected. Retrieval returns attachment metadata plus dataBase64 and truncated: false, or fails if the file exceeds the limit; it never returns partial binary. List/read metadata includes id, filename, mediaType, sizeBytes, version. No server path or fetch URL is accepted or returned.
filename must be a non-blank simple name, at most 255 characters, with no leading/trailing whitespace, path separators, colon, double quote or control characters; ./.. are rejected. media_type must be a lowercase MIME type without parameters, at most 127 characters. This validates the declared type's syntax; it is not a malware or content-sniffing guarantee. Native upload restrictions, MIME handling, licensing and configured site limits also apply. The plugin limit is fixed and cannot widen the native site's policy.
Inline upload and copy create a new attachment filename. An existing name returns a conflict; choose another name or use the explicit attachment-version workflow. Do not assume a failed or interrupted request made no change.
Copies check current source-page access, attachment ownership/visibility, destination-page access and native attachment-create permission, with administrator policy on both ends. They copy bytes and native media type into the explicit new name; they do not move an attachment or copy its history. Temporary upload files are generated privately on the server and removed after the native call. Success returns attachmentIds (one ID), filename, sizeBytes, version: 1, executedAs.
Upload example: {"page_id":"123","filename":"note.txt","media_type":"text/plain","data_base64":"SGVsbG8K"}. Copy: {"page_id":"123","attachment_id":"456","destination_page_id":"789","filename":"copied-note.txt"}.
Errors and retries
Tool failures return error, errorCategory, requestId with isError: true. invalid_arguments covers strict validation, preflight stale versions and existing filenames; permission_or_unavailable combines missing/inaccessible content and native/policy denials. Native optimistic conflicts use version_conflict; configuration, I/O/timeouts and unexpected failures use the existing sanitized categories. Native exception details, credentials and local paths are not returned.
Failed mutations include mutationOutcome and retryGuidance. Known validation, permission or conflict rejections return not_applied; unexpected or I/O failures may return unknown. The app never automatically retries a mutation. A timeout can follow a successful save: inspect the destination before retrying. Creates, replies and uploads have no client idempotency key. Uploading the same filename again does not create an intentional new version.
Page replacement boundary
confluence_get_page returns up to 50,000 UTF-16 code units, with truncated: true for longer content. Full-page and section updates reject pages whose current body exceeds this limit, even if the proposed replacement is shorter. Use Confluence’s editor for those pages.
Supply the current page version when editing. If it conflicts, read the page again and review the intended change; the app does not merge or retry automatically.
Input schema reference
The JSON below describes tool inputs. Use the connection’s tools/list schemas when making calls.
{
"tools": [
{
"name": "confluence_create_page",
"description": "Create a current page as the native caller subject to native permissions and optional administrator space filters. Optional parent must be visible in that space. Body uses Confluence storage format.",
"inputSchema": {
"type": "object",
"properties": {
"space_key": {
"type": "string"
},
"parent_id": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"body_storage": {
"type": "string",
"maxLength": 50000
}
},
"required": [
"space_key",
"title",
"body_storage"
],
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_update_page",
"description": "Replace title and storage body as the native caller. Supply the current version from get_page; conflicts require a fresh read. Rejects updates when the current stored body exceeds 50000 characters; use the native Confluence editor for those pages. Retains space, ancestry and restrictions.",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"body_storage": {
"type": "string",
"maxLength": 50000
}
},
"required": [
"page_id",
"version",
"title",
"body_storage"
],
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_search",
"description": "Search permitted current pages using Confluence CQL as the native caller.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_get_page",
"description": "Read a permitted current page through Java APIs; scope and native permissions are enforced.",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
},
"required": [
"page_id"
],
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_get_current_user",
"description": "Inspect the real native Confluence caller and optional administrator space filters.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_list_sections",
"description": "Identify top-level storage headings or read one section by its ordinal at the expected page version. Duplicate headings use distinct ordinals. Selected body excludes its heading and includes subordinate sections. Nested headings fail closed.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"section_index": {
"type": "integer",
"minimum": 1,
"maximum": 50000
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id",
"version"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_update_section",
"description": "Replace only a section's body using its exact ordinal and expected page version. Keeps its heading and surrounding storage byte-for-byte. No automatic retry or rebase. Pages above 50000 characters require the native editor.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"section_index": {
"type": "integer",
"minimum": 1,
"maximum": 50000
},
"body_storage": {
"type": "string",
"maxLength": 50000
}
},
"required": [
"page_id",
"version",
"section_index",
"body_storage"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_list_versions",
"description": "List bounded descending version metadata subject to current page access. Offset pagination may shift after edits; currentVersion identifies the observed head. Missing deleted versions advance the cursor.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_get_version",
"description": "Read historical storage and metadata subject to current page access. Body is bounded at 50000 characters with an explicit truncation flag. Does not restore content.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
}
},
"required": [
"page_id",
"version"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_list_labels",
"description": "List global page labels subject to native permissions and administrator space policy.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_add_label",
"description": "Add a global label without replacing unrelated labels using native permissions.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"label": {
"type": "string",
"maxLength": 255
}
},
"required": [
"page_id",
"label"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_remove_label",
"description": "Remove only the named global label using native permissions.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"label": {
"type": "string",
"maxLength": 255
}
},
"required": [
"page_id",
"label"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_list_comments",
"description": "List comment metadata and reply relationships with bounded pagination under native permissions.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_get_comment",
"description": "Read a comment on the specified visible page, with bounded storage and a truncation flag.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"comment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
}
},
"required": [
"page_id",
"comment_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_add_comment",
"description": "Add a footer comment or reply to a footer comment as the real caller. Body is storage XML. Never automatically retry after an ambiguous outcome.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"parent_comment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"body_storage": {
"type": "string",
"maxLength": 50000
}
},
"required": [
"page_id",
"body_storage"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_update_comment",
"description": "Edit a footer comment with native per-comment edit permission and an expected version. Rejects oversized existing comments. No automatic retry.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"comment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"body_storage": {
"type": "string",
"maxLength": 50000
}
},
"required": [
"page_id",
"comment_id",
"version",
"body_storage"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_remove_comment",
"description": "Remove a footer comment using native per-comment delete permission. Native reply handling applies. Check current state before retrying an ambiguous result.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"comment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
}
},
"required": [
"page_id",
"comment_id"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_list_attachments",
"description": "List bounded attachment metadata on a visible page under native permissions and space policy.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"start": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_get_attachment",
"description": "Retrieve an attachment on a visible page as canonical base64, up to 32768 bytes. No paths or arbitrary URLs.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"attachment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
}
},
"required": [
"page_id",
"attachment_id"
]
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "confluence_upload_attachment",
"description": "Create an attachment from canonical base64, up to 32768 bytes. Rejects existing filenames; no intentional new versions or replacement. Native upload restrictions apply. Read destination before retrying ambiguous results.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"filename": {
"type": "string",
"maxLength": 255
},
"media_type": {
"type": "string",
"maxLength": 127
},
"data_base64": {
"type": "string",
"maxLength": 43692
}
},
"required": [
"page_id",
"filename",
"media_type",
"data_base64"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
},
{
"name": "confluence_copy_attachment",
"description": "Copy attachment bytes to a new explicit filename with native source access, destination upload permission and both space policies. Up to 32768 bytes. Rejects existing names; no automatic retry.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"attachment_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"destination_page_id": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"filename": {
"type": "string",
"maxLength": 255
}
},
"required": [
"page_id",
"attachment_id",
"destination_page_id",
"filename"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
}
]
}
Navigation, transfers and page lifecycle tools
The app supports navigation, file transfers and page lifecycle operations. Follow returned cursors and inspect errors before continuing. Exact schemas follow.
confluence_list_spaces
Browse accessible spaces and permitted homepages. Opaque node-local cursors expire after 15 minutes; no hidden totals. Bounded scanning may return an empty incomplete batch.
{
"type": "object",
"additionalProperties": false,
"properties": {
"cursor": {
"type": "string",
"maxLength": 8192
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": []
}
confluence_list_pages
Browse children or descendants, checking every ancestor and space policy. Returns parent/position preconditions. Bounded scanning; no hidden counts. Cursors are caller/node/query-bound.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"depth": {
"type": "string",
"maxLength": 256,
"enum": [
"children",
"descendants"
]
},
"cursor": {
"type": "string",
"maxLength": 8192
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"page_id"
]
}
confluence_get_ancestors
Read permitted ancestry and page parent/position; fails closed on hidden paths or more than 50 edges.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
}
},
"required": [
"page_id"
]
}
confluence_begin_attachment_upload
Start a caller-bound upload for a new filename or explicit new_version with attachment_id/version. Declare length and SHA-256. 10 MiB default, 16 sessions/node, four/caller, 128 MiB reserved, 15-minute absolute expiry. Keep subsequent calls on this node.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"filename": {
"type": "string",
"maxLength": 255
},
"media_type": {
"type": "string",
"maxLength": 127
},
"size_bytes": {
"type": "integer",
"minimum": 0,
"maximum": 104857600
},
"sha256": {
"type": "string",
"maxLength": 256,
"pattern": "^[a-f0-9]{64}$"
},
"mode": {
"type": "string",
"maxLength": 256,
"enum": [
"create",
"new_version"
]
},
"attachment_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
}
},
"required": [
"page_id",
"filename",
"media_type",
"size_bytes",
"sha256",
"mode"
]
}
confluence_append_attachment_chunk
Append canonical base64 of 1-32768 bytes at the exact nextOffset. Rechecks owning-page access and version. No overwrite/retry of chunks.
{
"type": "object",
"additionalProperties": false,
"properties": {
"transfer_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[a-f0-9-]{36}$"
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 104857600
},
"data_base64": {
"type": "string",
"maxLength": 43692
}
},
"required": [
"transfer_id",
"offset",
"data_base64"
]
}
confluence_commit_attachment_upload
Commit only after the complete length and SHA-256 match. An upload can be committed once. After a lost response, check the destination before retrying.
{
"type": "object",
"additionalProperties": false,
"properties": {
"transfer_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[a-f0-9-]{36}$"
}
},
"required": [
"transfer_id"
]
}
confluence_cancel_attachment_upload
Discard this caller's local pending transfer and temporary bytes. Does not modify native content.
{
"type": "object",
"additionalProperties": false,
"properties": {
"transfer_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[a-f0-9-]{36}$"
}
},
"required": [
"transfer_id"
]
}
confluence_read_attachment_chunk
Read up to 32768 bytes at an explicit offset and expected native attachment version; repeat access/version checks after reading. Assemble chunks and verify binary integrity. Configured transfer size limit applies.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"attachment_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 104857600
},
"length": {
"type": "integer",
"minimum": 1,
"maximum": 32768
}
},
"required": [
"page_id",
"attachment_id",
"version",
"offset"
]
}
confluence_copy_large_attachment
Copy the specified attachment version to a permitted destination under a new filename. The caller needs source access and destination upload permission. An existing destination filename is refused.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"attachment_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"destination_page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"filename": {
"type": "string",
"maxLength": 255
}
},
"required": [
"page_id",
"attachment_id",
"version",
"destination_page_id",
"filename"
]
}
confluence_copy_page
Copy one page or a tree of at most 25 pages and five levels. Select attachments and labels explicitly; comments, history and properties are excluded. Restricted source ancestry is refused. Copies inherit destination access and keep original link targets. Follow each returned copyCursor using only copy_cursor; optionally set cancel: true. Cursors are single-use, expire after 15 minutes and require node affinity. Limits are 16 pending plans per node and four per caller. Cancellation keeps pages already saved. Inspect per-item outcomes and reconcile partial or uncertain results before retrying.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"destination_page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"destination_version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"title_prefix": {
"type": "string",
"maxLength": 100
},
"children": {
"type": "string",
"maxLength": 256,
"enum": [
"none",
"bounded"
]
},
"max_pages": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"max_depth": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"attachments": {
"type": "string",
"maxLength": 256,
"enum": [
"exclude",
"include"
]
},
"labels": {
"type": "string",
"maxLength": 256,
"enum": [
"exclude",
"include"
]
},
"restrictions": {
"type": "string",
"maxLength": 256,
"enum": [
"reject"
]
},
"links": {
"type": "string",
"maxLength": 256,
"enum": [
"preserve"
]
},
"acknowledge_destination_access": {
"type": "boolean"
},
"copy_cursor": {
"type": "string",
"pattern": "^[a-f0-9-]{36}$",
"maxLength": 36
},
"cancel": {
"type": "boolean"
}
},
"required": [],
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"destination_page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"destination_version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"title_prefix": {
"type": "string",
"maxLength": 100
},
"children": {
"type": "string",
"maxLength": 256,
"enum": [
"none",
"bounded"
]
},
"max_pages": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"max_depth": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"attachments": {
"type": "string",
"maxLength": 256,
"enum": [
"exclude",
"include"
]
},
"labels": {
"type": "string",
"maxLength": 256,
"enum": [
"exclude",
"include"
]
},
"restrictions": {
"type": "string",
"maxLength": 256,
"enum": [
"reject"
]
},
"links": {
"type": "string",
"maxLength": 256,
"enum": [
"preserve"
]
},
"acknowledge_destination_access": {
"type": "boolean"
}
},
"required": [
"page_id",
"version",
"destination_page_id",
"destination_version",
"title_prefix",
"children",
"max_pages",
"max_depth",
"attachments",
"labels",
"restrictions",
"links",
"acknowledge_destination_access"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"copy_cursor": {
"type": "string",
"pattern": "^[a-f0-9-]{36}$",
"maxLength": 36
},
"cancel": {
"type": "boolean"
}
},
"required": [
"copy_cursor"
]
}
]
}
confluence_move_page
Move or reorder a page within the same space, retaining its identity, content and direct restrictions. Destination ancestry changes inherited access. Supply current source and destination state, plus sibling state for before/after placement. Native permissions apply; cycles and subtrees beyond 25 pages or five levels are refused. Cross-space moves require Confluence’s interface.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"current_parent_id": {
"type": "string",
"maxLength": 256,
"pattern": "^(0|[1-9][0-9]{0,18})$"
},
"current_position": {
"type": "integer",
"minimum": -1,
"maximum": 2147483646
},
"destination_page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"destination_version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"placement": {
"type": "string",
"maxLength": 256,
"enum": [
"child",
"before",
"after"
]
},
"sibling_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"sibling_version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"sibling_position": {
"type": "integer",
"minimum": -1,
"maximum": 2147483646
},
"acknowledge_destination_access": {
"type": "boolean"
}
},
"required": [
"page_id",
"version",
"current_parent_id",
"current_position",
"destination_page_id",
"destination_version",
"placement",
"acknowledge_destination_access"
]
}
confluence_trash_page
Reversibly trash a current non-homepage without children at the expected version, using native delete permissions. No recursive trash or purge.
{
"type": "object",
"additionalProperties": false,
"properties": {
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
}
},
"required": [
"page_id",
"version"
]
}
confluence_list_trash
Bounded trash discovery for native space administrators in permitted spaces. Returns trashed page metadata for restoration; no content body or purge.
{
"type": "object",
"additionalProperties": false,
"properties": {
"space_key": {
"type": "string",
"maxLength": 255
},
"cursor": {
"type": "string",
"maxLength": 8192
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"space_key"
]
}
confluence_restore_page
Restore a trashed page as a space administrator. Supply its expected trashed version and an explicit current parent in the original space. Title, child, state and permission conflicts are refused. Destination inheritance applies.
{
"type": "object",
"additionalProperties": false,
"properties": {
"space_key": {
"type": "string",
"maxLength": 255
},
"page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"destination_page_id": {
"type": "string",
"maxLength": 256,
"pattern": "^[1-9][0-9]{0,18}$"
},
"destination_version": {
"type": "integer",
"minimum": 1,
"maximum": 2147483646
},
"acknowledge_destination_access": {
"type": "boolean"
}
},
"required": [
"space_key",
"page_id",
"version",
"destination_page_id",
"destination_version",
"acknowledge_destination_access"
]
}
Changes during an operation
Changes to permissions, destination hierarchy or copied content can stop a copy, move or restoration. Inspect current content before retrying. Copy outcomes include only records still visible to the caller, so they are not a complete audit after access changes.