confluence-mcp
Allows managing Confluence Cloud wiki pages, spaces, blog posts, comments, attachments, labels, tasks, and content properties via the Confluence REST API v2.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@confluence-mcp list pages in space DEV"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
confluence-mcp
An MCP server for administering Atlassian Confluence Cloud wiki pages. Built with FastMCP and the Confluence REST API v2.
Features
Create, read, update, delete, and restore pages
Move (reparent) pages within a space; transfer page ownership
Navigate the page tree (children, ancestors, descendants)
Bulk-fetch multiple pages in a single request
Create, read, update, and delete spaces; manage space content properties
Full blog post CRUD (create, read, update, delete)
Read labels (list all labels, list pages/blogposts by label)
Inspect version history
Manage footer and inline comments (including creating inline comments)
List and delete attachments
Manage page and space content properties (key/value metadata)
Manage tasks
Bulk user lookup (resolve multiple account IDs to profiles)
Related MCP server: inhouse_confluence_mcp
Requirements
Python 3.11+
uvpackage managerAn Atlassian Confluence Cloud account with API access
Setup
1. Clone and install
git clone <repo-url>
cd confluence
uv sync2. Configure credentials
Copy .env.example to .env and fill in your values:
cp .env.example .envVariable | Required | Description |
| Yes | Your Confluence base URL, e.g. |
| Basic Auth | Atlassian account email |
| Basic Auth | |
| Bearer Auth | Personal Access Token (alternative to Basic Auth) |
Use either Basic Auth (EMAIL + API_TOKEN) or a Bearer token — not both.
3. Run
uv run confluence-mcpThe server communicates over stdio (standard MCP transport).
Integration
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your OS:
{
"mcpServers": {
"confluence": {
"command": "uv",
"args": [
"--directory", "/path/to/confluence",
"run", "confluence-mcp"
],
"env": {
"CONFLUENCE_BASE_URL": "https://your-domain.atlassian.net",
"CONFLUENCE_EMAIL": "you@example.com",
"CONFLUENCE_API_TOKEN": "your-api-token"
}
}
}
}OpenCode
Add to your OpenCode MCP config:
{
"confluence": {
"command": "uv",
"args": [
"--directory", "/path/to/confluence",
"run", "confluence-mcp"
]
}
}Set the env vars in your shell or .env file.
Tool Reference
Pages
Tool | Description |
| List pages filtered by space, title, status, or parent |
| Get a page by ID (with optional body format and version) |
| Fetch multiple pages by ID in a single request |
| Create a new page in a space |
| Update content, title, parent (move), or owner of a page |
| Rename a page without changing its body or version metadata |
| Move a page to trash (or permanently delete with |
| Restore a trashed page to |
| List permitted operations for a page |
Moving a page: pass parent_id in update_page to reparent within the same space.
Cross-space moves are not supported by the Confluence v2 API.
Transferring ownership: pass owner_id (Atlassian account ID) in update_page.
Page Navigation
Tool | Description |
| All child pages (recursive, paginated) |
| Immediate children only |
| Full breadcrumb trail to the root |
| All descendants |
Spaces
Tool | Description |
| List spaces (filterable by type, status, key, label) |
| Get a space by ID |
| Create a new space |
| List permitted operations for a space |
| List all labels used on content within a space |
| List pages in a space |
| List blog posts in a space |
| List permission assignments for a space |
Space Properties
Tool | Description |
| List key/value properties on a space |
| Get a specific space property |
| Create a new space property |
| Update an existing space property |
| Delete a space property |
Blog Posts
Tool | Description |
| List blog posts (filterable by space, status) |
| Get a blog post by ID |
| Create a new blog post in a space |
| Update content, title, or status of a blog post |
| Move a blog post to trash (or permanently delete with |
Labels
Label add/remove is available via the Confluence v1 API only; the v2 API is read-only for labels.
Tool | Description |
| List all labels across the Confluence instance |
| Labels attached to a page |
| Labels used across a space |
| Pages that carry a specific label |
| Blog posts that carry a specific label |
Version History
Tool | Description |
| Version history of a page |
| Details of a specific page version |
Footer Comments
Tool | Description |
| Footer comments on a page |
| Get a footer comment by ID |
| Create a comment on a page, blog post, or as a reply |
| Update comment content |
| Delete a comment |
| List replies to a comment |
Inline Comments
Tool | Description |
| Inline comments on a page |
| Get an inline comment by ID |
| Create an inline comment anchored to a text selection |
| Update content or resolved state |
| Delete an inline comment |
Attachments
Tool | Description |
| List attachments on a page |
| Get an attachment by ID |
| Delete an attachment |
Uploading attachments requires multipart form data and is not supported by this server.
Content Properties
Tool | Description |
| List key/value properties on a page |
| Get a specific property |
| Create a new property |
| Update an existing property |
| Delete a property |
Tasks
Tool | Description |
| List tasks (filterable by status, space, page, assignee) |
| Get a task by ID |
| Update task status, assignee, or due date |
Utility
Tool | Description |
| Resolve content IDs to their types (page, blogpost, etc.) |
| Resolve multiple Atlassian account IDs to user profiles |
Notes
Body formats:
storage(XHTML, default for write),wiki(Confluence wiki markup),atlas_doc_format(Atlassian Document Format / ADF),view(rendered HTML, read-only).Versioning:
update_page,update_blogpost,update_footer_comment, andupdate_inline_commentall require passing the currentversion_number. The API increments it automatically. Always callget_page/get_blogpostfirst to obtain the current version.Labels: To add or remove labels, use the Confluence v1 REST API (
/wiki/rest/api/content/{id}/label) directly — this is not exposed in this server.
Available Tools
62 toolsbulk_get_pagesBulk Get PagesARead-only
Fetch multiple pages by their IDs in a single request.
Returns a results list with one entry per resolved page ID.
Args:
page_ids: List of page IDs to retrieve (up to 250).
body_format: Body representation — 'storage', 'atlas_doc_format', or 'view'.
Inputs: page_ids (required), body_format.
bulk_user_lookupBulk User LookupARead-only
Resolve multiple Atlassian account IDs to user profiles in a single call.
Useful when you have a list of assignee/author IDs from tasks or comments
and want to retrieve display names and emails in bulk.
Args:
account_ids: List of Atlassian account IDs to look up (up to 200).
Inputs: account_ids (required).
convert_ids_to_typesConvert IDs to TypesARead-only
Convert a list of content IDs to their content types (page, blogpost, etc.).
Useful when you have an ID but don't know whether it refers to a page,
blog post, attachment, or other content type.
Args:
content_ids: List of content IDs to look up.
Inputs: content_ids (required).
create_blogpostCreate BlogpostA
Create a new blog post in a space.
Args:
space_id: The ID of the space to publish in.
title: Title of the blog post.
body_value: HTML/storage body content.
body_representation: Body format — 'storage', 'wiki', or 'atlas_doc_format'.
status: 'current' to publish immediately, or 'draft' to save as draft.
Inputs: title (required), space_id (required), body_value (required), status, +1 more.
create_inline_commentCreate Inline CommentA
Create an inline comment anchored to a text selection on a page.
Args:
page_id: The ID of the page to comment on.
body_value: HTML/storage-format body of the comment.
inline_marker_ref: The marker reference identifying the text selection
(obtained from the page's inline marker data).
body_representation: Body format — 'storage', 'wiki', or 'atlas_doc_format'.
resolved: Whether to create the comment in a resolved state.
Inputs: page_id (required), body_value (required), inline_marker_ref (required), resolved, +1 more.
create_pageCreate PageA
Create a new page in a space.
Args:
space_id: Target space ID.
title: Page title.
body_value: Page body content.
body_representation: Format of body_value — storage (default, XHTML), wiki, atlas_doc_format.
parent_id: Parent page ID (omit to create at space root).
status: 'current' (published, default) or 'draft'.
Inputs: title (required), space_id (required), body_value (required), status, +2 more.
create_page_propertyCreate Page PropertyA
Create a content property on a page.
Args:
page_id: Page ID.
key: Property key (must be unique on the page).
value: Property value — any JSON-serializable value.
Inputs: key (required), value (required), page_id (required).
create_spaceCreate SpaceA
Create a new Confluence space.
Args:
key: Unique space key (e.g. 'ENG'). Must be uppercase letters/numbers.
name: Human-readable space name.
description: Optional plain-text description of the space.
Inputs: key (required), name (required), description.
create_space_propertyCreate Space PropertyA
Create a new content property on a space.
Args:
space_id: The ID of the space.
key: Property key (must be unique within the space).
value: Property value (string, number, dict, or list).
Inputs: key (required), value (required), space_id (required).
delete_attachmentDelete AttachmentCDestructiveIdempotent
Delete an attachment.
Args:
attachment_id: Attachment ID.
Inputs: attachment_id (required).
delete_blogpostDelete BlogpostADestructiveIdempotent
Delete a blog post (moves to trash, or permanently purges).
Args:
blogpost_id: The ID of the blog post to delete.
purge: If True, permanently delete instead of moving to trash.
Inputs: blogpost_id (required), purge.
delete_inline_commentDelete Inline CommentCDestructiveIdempotent
Delete an inline comment.
Args:
comment_id: Comment ID.
Inputs: comment_id (required).
delete_pageDelete PageADestructiveIdempotent
Delete a page (moves to trash by default).
To permanently delete, first call delete_page to trash the page, then call
delete_page again with purge=True.
Args:
page_id: ID of the page to delete.
purge: If True, permanently delete a trashed page. The page must already
be in the trash; calling purge=True on a current page returns 400.
Inputs: page_id (required), purge.
delete_page_propertyDelete Page PropertyBDestructiveIdempotent
Delete a content property from a page.
Args:
page_id: Page ID.
property_id: Property ID.
Inputs: page_id (required), property_id (required).
delete_space_propertyDelete Space PropertyADestructiveIdempotent
Delete a content property from a space.
Args:
space_id: The ID of the space.
property_id: The ID of the property to delete.
Inputs: space_id (required), property_id (required).
get_attachmentGet AttachmentARead-only
Get an attachment by ID.
Args:
attachment_id: Attachment ID.
version: Specific version number.
Inputs: attachment_id (required), version.
get_blogpostGet BlogpostARead-only
Get a blog post by ID.
Args:
blogpost_id: The ID of the blog post.
body_format: Body representation — 'storage', 'atlas_doc_format', or 'view'.
version: Retrieve a specific historical version number.
Inputs: blogpost_id (required), version, body_format.
get_inline_commentGet Inline CommentARead-only
Get an inline comment by ID.
Args:
comment_id: Comment ID.
body_format: Body representation.
version: Specific version number.
Inputs: comment_id (required), version, body_format.
get_pageGet PageARead-only
Get a page by ID.
Args:
page_id: Page ID.
body_format: Body representation — storage (XHTML), view, atlas_doc_format.
get_draft: If True, return the current draft instead of published version.
version: Return a specific historical version number.
Inputs: page_id (required), version, get_draft, body_format.
get_page_ancestorsGet Page AncestorsBRead-only
Get all ancestor pages (breadcrumb trail) for a page.
Args:
page_id: Page ID.
Inputs: page_id (required).
get_page_childrenGet Page ChildrenARead-only
Get all child pages of a page (recursive, paginated).
Args:
page_id: Parent page ID.
cursor: Pagination cursor.
limit: Max results.
sort: Sort field.
Inputs: page_id (required), sort, limit, cursor.
get_page_descendantsGet Page DescendantsARead-only
Get all descendants of a page.
Args:
page_id: Page ID.
limit: Max results.
cursor: Pagination cursor.
Inputs: page_id (required), limit, cursor.
get_page_direct_childrenGet Page Direct ChildrenARead-only
Get the immediate (one-level-deep) children of a page.
Args:
page_id: Parent page ID.
cursor: Pagination cursor.
limit: Max results.
Inputs: page_id (required), limit, cursor.
get_page_operationsGet Page OperationsARead-only
Get the permitted operations (read, update, delete, …) for a page.
Args:
page_id: Page ID.
Inputs: page_id (required).
get_page_propertyGet Page PropertyARead-only
Get a specific content property on a page.
Args:
page_id: Page ID.
property_id: Property ID.
Inputs: page_id (required), property_id (required).
get_page_versionGet Page VersionARead-only
Get details for a specific version of a page.
Args:
page_id: Page ID.
version_number: Version number to retrieve.
Inputs: page_id (required), version_number (required).
get_spaceGet SpaceBRead-only
Get a space by its ID.
Args:
space_id: Space ID.
Inputs: space_id (required).
get_space_content_labelsGet Space Content LabelsARead-only
List all labels used on content within a space.
Args:
space_id: The ID of the space.
prefix: Filter by label prefix (e.g. 'global', 'my', 'team').
cursor: Pagination cursor from a previous response.
limit: Max results to return (default 25, max 250).
Inputs: space_id (required), limit, cursor, prefix.
get_space_operationsGet Space OperationsBRead-only
Get the operations (permissions) available to the current user in a space.
Args:
space_id: The ID of the space.
Inputs: space_id (required).
get_space_permissionsGet Space PermissionsARead-only
Get permission assignments for a space.
Args:
space_id: Space ID.
cursor: Pagination cursor.
limit: Max results.
Inputs: space_id (required), limit, cursor.
get_space_propertyGet Space PropertyARead-only
Get a single content property of a space by its ID.
Args:
space_id: The ID of the space.
property_id: The ID of the property.
Inputs: space_id (required), property_id (required).
get_taskGet TaskARead-only
Get a task by ID.
Args:
task_id: Task ID.
body_format: Body representation for the task content.
Inputs: task_id (required), body_format.
list_blogpostsList BlogpostsARead-only
List blog posts, optionally filtered by space.
Args:
space_id: Restrict to this space ID.
status: Filter by status — 'current' or 'draft'.
sort: Sort order (e.g. 'created-date', '-created-date', 'title').
cursor: Pagination cursor from a previous response.
limit: Max results to return (default 25, max 250).
Inputs: sort, limit, cursor, status, +1 more.
list_blogposts_in_spaceList Blog Posts in SpaceBRead-only
List blog posts in a space.
Args:
space_id: Space ID.
sort: Sort field.
status: Blog post status filter.
cursor: Pagination cursor.
limit: Max results.
Inputs: space_id (required), sort, limit, cursor, +1 more.
list_blogposts_with_labelList Blogposts With LabelARead-only
List blog posts that carry a specific label.
Args:
label_id: The ID of the label.
space_id: Restrict results to this space ID.
body_format: Body representation — 'storage', 'atlas_doc_format', or 'view'.
sort: Sort order (e.g. 'created-date', '-created-date', 'title').
cursor: Pagination cursor from a previous response.
limit: Max results to return (default 25, max 250).
Inputs: label_id (required), sort, limit, cursor, +2 more.
list_labelsList LabelsARead-only
List labels across the entire Confluence instance.
Args:
label_prefix: Filter by prefix — 'global', 'my', or 'team'.
body_format: Body representation for associated content.
cursor: Pagination cursor from a previous response.
limit: Max results to return (default 25, max 250).
Inputs: limit, cursor, body_format, label_prefix.
list_page_attachmentsList Page AttachmentsBRead-only
List attachments on a page.
Args:
page_id: Page ID.
sort: Sort field.
cursor: Pagination cursor.
status: Attachment status filter.
mediatype: MIME type filter, e.g. 'image/png'.
filename: Filename filter.
limit: Max results.
Inputs: page_id (required), sort, limit, cursor, +3 more.
list_page_inline_commentsList Page Inline CommentsCRead-only
List inline comments on a page.
Args:
page_id: Page ID.
body_format: Body representation.
sort: Sort field.
cursor: Pagination cursor.
limit: Max results.
Inputs: page_id (required), sort, limit, cursor, +1 more.
list_page_labelsList Page LabelsARead-only
List labels attached to a page.
Args:
page_id: Page ID.
prefix: Filter by label prefix (e.g. 'global', 'team').
sort: Sort field.
cursor: Pagination cursor.
limit: Max results.
Inputs: page_id (required), sort, limit, cursor, +1 more.
list_page_propertiesList Page PropertiesBRead-only
List content properties on a page.
Args:
page_id: Page ID.
key: Filter by property key.
cursor: Pagination cursor.
limit: Max results.
Inputs: page_id (required), key, limit, cursor.
list_pagesList PagesARead-only
List pages, optionally filtered by space, title, status, or parent.
Args:
space_id: Filter by space ID.
title: Exact title match.
status: Page status — current, archived, trashed, deleted.
ancestor_id: Filter by parent page ID.
sort: Sort field, e.g. 'title', '-title', 'created-date', '-modified-date'.
limit: Max results (1–250).
cursor: Pagination cursor from a previous response.
Inputs: sort, limit, title, cursor, +3 more.
list_pages_in_spaceList Pages in SpaceARead-only
List all pages in a space.
Args:
space_id: Space ID.
depth: 'all' (default) or 'root' (top-level pages only).
sort: Sort field.
status: Page status filter.
cursor: Pagination cursor.
limit: Max results.
Inputs: space_id (required), sort, depth, limit, +2 more.
list_pages_with_labelList Pages with LabelBRead-only
List all pages that carry a specific label.
Args:
label_id: Label ID.
space_id: Narrow results to a specific space.
body_format: Body representation in the returned pages.
sort: Sort field.
cursor: Pagination cursor.
limit: Max results.
Inputs: label_id (required), sort, limit, cursor, +2 more.
list_page_versionsList Page VersionsARead-only
List the version history of a page.
Args:
page_id: Page ID.
cursor: Pagination cursor.
limit: Max results.
sort: Sort field — 'created-date' (oldest first) or '-created-date' (newest first).
Inputs: page_id (required), sort, limit, cursor.
list_space_labelsList Space LabelsCRead-only
List labels used across a space.
Args:
space_id: Space ID.
prefix: Filter by label prefix.
sort: Sort field.
cursor: Pagination cursor.
limit: Max results.
Inputs: space_id (required), sort, limit, cursor, +1 more.
list_space_propertiesList Space PropertiesARead-only
List content properties of a space.
Args:
space_id: The ID of the space.
key: Filter by property key.
cursor: Pagination cursor from a previous response.
limit: Max results to return.
Inputs: space_id (required), key, limit, cursor.
list_spacesList SpacesARead-only
List Confluence spaces.
Args:
ids: Comma-separated space IDs to filter by.
keys: Comma-separated space keys to filter by.
type: Space type — 'global' or 'personal'.
status: Space status — 'current' or 'archived'.
labels: Comma-separated labels to filter by.
sort: Sort field, e.g. 'name', '-name', 'key'.
cursor: Pagination cursor.
limit: Max results.
Inputs: ids, keys, sort, type, +4 more.
list_tasksList TasksARead-only
List tasks in Confluence.
Args:
status: Task status — 'open' or 'complete'.
space_id: Filter by space ID.
page_id: Filter by page ID.
assigned_to: Filter by assignee account ID.
created_by: Filter by creator account ID.
due_at_from: ISO 8601 — tasks due on or after this date.
due_at_to: ISO 8601 — tasks due on or before this date.
cursor: Pagination cursor.
limit: Max results.
Inputs: limit, cursor, status, page_id, +5 more.
restore_pageRestore PageAIdempotent
Restore a trashed page by setting its status back to 'current'.
Args:
page_id: ID of the trashed page.
title: Page title (unchanged or new).
body_value: Page body content (unchanged or new).
version_number: The next version number to store — must be current version + 1.
body_representation: Format of body_value — storage (default), wiki, atlas_doc_format.
parent_id: Parent page ID (required if the original parent was also deleted).
Inputs: title (required), page_id (required), body_value (required), version_number (required), +2 more.
update_blogpostUpdate BlogpostAIdempotent
Update an existing blog post.
Args:
blogpost_id: The ID of the blog post to update.
title: New title.
body_value: New body content.
version_number: The *new* version number (current version + 1).
body_representation: Body format — 'storage', 'wiki', or 'atlas_doc_format'.
status: 'current' or 'draft'.
Inputs: title (required), body_value (required), blogpost_id (required), version_number (required), +2 more.
update_inline_commentUpdate Inline CommentAIdempotent
Update an inline comment (content or resolved state).
Args:
comment_id: Comment ID.
body_value: New comment content.
version_number: The next version number to store — must be current version + 1.
body_representation: Format of body_value — storage (default), wiki, atlas_doc_format.
resolved: Set to True to mark the comment thread as resolved, False to reopen.
Inputs: body_value (required), comment_id (required), version_number (required), resolved, +1 more.
update_pageUpdate PageAIdempotent
Update an existing page (content, title, parent, or owner).
To move a page to a different parent within the same space, pass the new
parent_id. Cross-space moves are not supported by the v2 API.
To transfer ownership, pass the new owner's account ID as owner_id.
Args:
page_id: ID of the page to update.
title: New (or unchanged) title.
body_value: New (or unchanged) body content.
version_number: The next version number to store — must be current version + 1.
body_representation: Format of body_value — storage (default), wiki, atlas_doc_format.
status: 'current' (published) or 'draft'.
parent_id: New parent page ID to move/reparent the page (same space only).
owner_id: Atlassian account ID of the new page owner.
version_message: Optional commit message stored in the version history.
Inputs: title (required), page_id (required), body_value (required), version_number (required), +5 more.
update_page_propertyUpdate Page PropertyBIdempotent
Update a content property on a page.
Args:
page_id: Page ID.
property_id: Property ID.
key: Property key.
value: New property value.
version_number: The next version number to store — must be current version + 1.
Inputs: key (required), value (required), page_id (required), property_id (required), +1 more.
update_page_titleUpdate Page TitleAIdempotent
Rename a page without changing its body or version metadata.
Args:
page_id: The ID of the page to rename.
title: The new title for the page.
Inputs: title (required), page_id (required).
update_space_propertyUpdate Space PropertyAIdempotent
Update an existing content property on a space.
Args:
space_id: The ID of the space.
property_id: The ID of the property to update.
key: Property key.
value: New property value.
version_number: Current version number of the property (incremented automatically).
Inputs: key (required), value (required), space_id (required), property_id (required), +1 more.
update_taskUpdate TaskAIdempotent
Update a task's status, assignee, or due date.
Args:
task_id: Task ID.
status: New status — 'open' or 'complete'.
assigned_to: Account ID of the new assignee.
due_at: ISO 8601 due date.
Inputs: status (required), task_id (required), due_at, assigned_to.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 62 tools
Several tools are redundant or have overlapping functionality, such as list_pages vs list_pages_in_space and update_page vs update_page_title, which both can modify titles. The large number of similar list/get/create/update/delete tools across pages, blogposts, comments, and properties creates potential confusion despite detailed descriptions.
The vast majority of tools follow a clear verb_noun pattern (e.g., list_pages, create_page, delete_inline_comment), and the naming is consistently snake_case. Minor deviations like 'bulk_user_lookup' (which starts with an adjective rather than a verb) prevent a perfect score, but the overall pattern is predictable.
With 62 tools, the server is extremely large and exceeds the typical well-scoped MCP server by a wide margin. Even for a complex domain like Confluence, this number of tools would overwhelm agents and make tool selection difficult, fitting the 'extreme mismatch' category.
The tool set covers many core Confluence operations including pages, blog posts, spaces, comments, properties, labels, and tasks. However, there are glaring gaps given the size: no search functionality, no attachment upload/update, no task creation/deletion, no space update/delete, and no dedicated blog post comment listing.
Related MCP Connectors
An MCP server that provides access to Agility CMS. See https://mcp.agilitycms.com for more details.
A MCP server built for developers enabling Git based project management with project and personal…
Shared project wiki for AI agents: read and write pages, next actions, and activity logs over MCP.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that enables querying and searching Atlassian Confluence pages and Jira issues through their REST APIs. Supports retrieving content by ID or URL, searching using CQL/JQL, and listing spaces and projects.1MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server implementation for interacting with self-hosted Confluence Data Center or Server instances via search, content retrieval, and optional write operations. It features space auto-discovery, audit logging, and granular access control for secure enterprise collaboration.-
- AlicenseAqualityDmaintenanceMCP server for Confluence Cloud/Server/Data Center, enabling page search, CQL queries, page CRUD, attachment upload, and user identity lookup.23404 npm4MIT
- FlicenseAqualityDmaintenanceMCP server for Confluence REST API enabling page retrieval, attachment downloads, space listing, comment access, and full-text search via tools.6-