A Monday wiki digest
Every Monday at 8:30, search Confluence for pages in our team space that changed in the last seven days, and write a short summary of what changed and who changed it to wiki-digest.md.
Verified MCP server: Confluence
The tool list below is a live capture from the running server; an authenticated tool call is still pending credentials.
The short answer
Last verified 2026-08-03
The Confluence MCP server lets an AI assistant search your wiki and read pages, page trees, comments, attachments and permissions, from a chat window or a scheduled routine. It is one half of mcp-atlassian, a community package that covers Confluence and Jira from the same command and runs on your own Mac against an Atlassian API token, and it is not the same product as Atlassian's own hosted Rovo MCP Server, which your client reaches over the network once it has signed in to Atlassian. We ran the community one with its read-only switch on, spoke the protocol to it, and enumerated every tool that configuration exposes: the table below is that capture, word for word. What we could not do is complete an authenticated call. That needs a token for a real Confluence site, so the single call we made came back as a 404 from the placeholder address we had pointed it at, printed in full below, and this page stops there. One detail is worth catching before you start, because it costs people an evening: the address you paste ends in /wiki, and the Jira one does not. [1][3][8][5]
Verification
Method
We spawned the server with uvx over stdio against a placeholder Confluence address, with placeholder values in CONFLUENCE_URL, CONFLUENCE_USERNAME and CONFLUENCE_API_TOKEN and READ_ONLY_MODE set to true, completed the MCP initialize handshake, and called tools/list: the 20 tools below are that response, word for word. We then made one real tools/call, confluence_search, and it failed, as it had to. The excerpt printed beside it is what came back, a 404 from the placeholder address, which is a configuration and authentication error rather than a Confluence result. An authenticated call here is pending an Atlassian API token for a real wiki, which we do not have, so nothing on this page claims a successful Confluence read. Four more runs of the same package on the same Mac that day produced the rest of the errors quoted below: one with no Atlassian variables at all, one with a malformed address, one calling a tool name that does not exist, and one sending arguments the tools reject. One thing to expect in the banner below: its timestamps read 08/04/26 because the run crossed local midnight, while the capture is dated 2026-08-03 with the rest of its batch.
Startup banner
╭──────────────────────────────────────────────────────────────────────────────╮
│ │
│ │
│ ▄▀▀ ▄▀█ █▀▀ ▀█▀ █▀▄▀█ █▀▀ █▀█ │
│ █▀ █▀█ ▄▄█ █ █ ▀ █ █▄▄ █▀▀ │
│ │
│ │
│ │
│ FastMCP 3.4.5 │
│ https://gofastmcp.com │
│ │
│ 🖥 Server: Atlassian MCP, 3.4.5 │
│ 🚀 Deploy free: https://horizon.prefect.io │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
WARNING - mcp_atlassian.utils.toolsets - TOOLSETS is not set — currently defaults to all toolsets. In v0.22.0, the default will change to 6 core toolsets only. Set TOOLSETS=all explicitly to preserve current behavior.
[08/04/26 00:08:49] INFO Starting MCP server 'Atlassian transport.py:241
MCP' with transport 'stdio' One real tool call
tools/call confluence_search {"query": "siteSearch ~ \"onboarding\"", "limit": 3}Error calling tool 'search': 404 Client Error: Not Found for url: https://example.atlassian.net/wiki/rest/api/search?start=0&limit=3&cql=siteSearch+~+%22onboarding%22&expand=content.history,content.version
Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 20 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| confluence_searchquery*limitspaces_filter | Search Confluence content using simple terms or CQL. |
| confluence_get_pagepage_idtitlespace_keyinclude_metadataconvert_to_markdown | Get content of a specific Confluence page by its ID, or by its title and space key. |
| confluence_get_page_childrenparent_id*expandlimitinclude_contentconvert_to_markdownstartinclude_folders | Get child pages and folders of a specific Confluence page. |
| confluence_get_space_page_treespace_key*limit | Get page hierarchy for a Confluence space as a flat list. Returns pages with parent_id and depth attributes for token-efficient processing. Filter by depth to focus on relevant sections, or find pages by title. Much more efficient than rendering full ASCII trees. Use this to understand space organization before creating/moving pages. |
| confluence_get_commentspage_id* | Get comments for a specific Confluence page. |
| confluence_get_labelspage_id* | Get labels for Confluence content (pages, blog posts, or attachments). |
| confluence_get_inline_commentspage_id* | Get all inline comments for a Confluence page. |
| confluence_search_userquery*limitgroup_name | Search Confluence users using CQL (Cloud) or group member API (Server/DC). |
| confluence_get_page_historypage_id*version*convert_to_markdown | Get a historical version of a specific Confluence page. |
| confluence_get_page_diffpage_id*from_version*to_version* | Get a unified diff between two versions of a Confluence page. |
| confluence_get_page_viewspage_id*include_title | Get view statistics for a Confluence page. Note: This tool is only available for Confluence Cloud. Server/Data Center instances do not support the Analytics API. |
| confluence_get_attachmentscontent_id*startlimitfilenamemedia_type | List all attachments for a Confluence content item (page or blog post). Returns metadata about attachments including: - Attachment ID, title, and file type - File size and download URL - Creation/modification dates - Version information **Important**: Confluence API returns 'application/octet-stream' as the media type for most binary files (PNG, JPG, PDF) instead of specific types like 'image/png'. For filtering by file type, using the 'filename' parameter is more reliable (e.g., filename='*.png' pattern matching if supported, or exact filename). Useful for: - Discovering what files are attached to a page - Getting attachment IDs for download operations - Checking if a specific file exists - Listing images/documents for processing |
| confluence_download_attachmentattachment_id* | Download an attachment from Confluence as an embedded resource. Returns the attachment content as a base64-encoded embedded resource so that it is available over the MCP protocol without requiring filesystem access on the server. Files larger than 50 MB are not downloaded inline; a descriptive error message is returned instead. |
| confluence_download_content_attachmentscontent_id* | Download all attachments for a Confluence content item as embedded resources. Returns attachment contents as base64-encoded embedded resources so that they are available over the MCP protocol without requiring filesystem access on the server. Files larger than 50 MB are skipped with an error entry in the summary. |
| confluence_get_page_imagescontent_id* | Get all images attached to a Confluence page as inline image content. Filters attachments to images only (PNG, JPEG, GIF, WebP, SVG, BMP) and returns them as base64-encoded ImageContent that clients can render directly. Non-image attachments are excluded. Files with ambiguous MIME types (application/octet-stream) are detected by filename extension as a fallback. Images larger than 50 MB are skipped with an error entry in the summary. |
| confluence_list_page_templatesspace_keylimit | List Confluence page content templates. This operation is only available for Confluence Cloud. Returns template metadata (ID, name, description, type) without the full body. Use confluence_get_page_template to fetch a template's body. |
| confluence_get_page_templatetemplate_id* | Get a Cloud page template by ID, including its storage-format body. |
| confluence_get_page_restrictionspage_id* | Get view and edit restrictions for a Confluence page. Returns the current restriction lists for the read (view) and update (edit) operations. An empty list means the page is unrestricted for that operation. |
| confluence_check_content_permissionscontent_id*user_identifier*operation*subject_type | Check whether a user or group can perform an operation on specific content. Wraps POST /wiki/rest/api/content/{id}/permission/check. Note: This tool is only available for Confluence Cloud. Server/Data Center instances use different permission APIs. Returns a JSON object with a 'hasPermission' boolean indicating whether the subject has the requested permission on the content. |
| confluence_get_space_permissionsspace_id*limitcursor | List all permission assignments for a Confluence space. Wraps GET /wiki/api/v2/spaces/{id}/permissions. Note: This tool is only available for Confluence Cloud. Server/Data Center instances use different permission APIs. Returns a JSON object with a 'results' list of permission assignment objects. Each entry contains the principal (user or group), the operation permitted, and the target. Use this to audit who has access to a space. |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"confluence": {
"command": "uvx",
"args": ["mcp-atlassian"],
"env": {
"CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
"CONFLUENCE_USERNAME": "you@your-company.com",
"CONFLUENCE_API_TOKEN": "your_api_token",
"READ_ONLY_MODE": "true"
}
}
}
}Keep the /wiki on the end of the address, fill in the email you sign in with and a token from id.atlassian.com, then quit and reopen Claude Desktop. READ_ONLY_MODE is the switch that produced the 20 tools on this page: drop it and the same server also exposes the tools that create, edit and delete pages. If Claude Desktop cannot find uvx, write the full path instead: run which uvx in Terminal to see yours, which is /Users/yourname/.local/bin/uvx if you installed uv with the astral.sh installer and somewhere else if you installed it with Homebrew. [10][5][6][13]
One command in your terminal:
claude mcp add confluence -e CONFLUENCE_URL=https://your-company.atlassian.net/wiki -e CONFLUENCE_USERNAME=you@your-company.com -e CONFLUENCE_API_TOKEN=your_api_token -e READ_ONLY_MODE=true -- uvx mcp-atlassian
Each -e sets one environment variable, and everything after the double dash is the exact command Claude Code will run. Your token ends up in your shell history, so paste it in a fresh terminal if that matters to you. [11]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"confluence": {
"command": "uvx",
"args": ["mcp-atlassian"],
"env": {
"CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
"CONFLUENCE_USERNAME": "you@your-company.com",
"CONFLUENCE_API_TOKEN": "your_api_token",
"READ_ONLY_MODE": "true"
}
}
}
}Cursor picks the file up on restart. A project-level .cursor/mcp.json is worth committing to git only after you have moved the token out of it. [12]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Confluence Command uvx Arguments mcp-atlassian Environment Variables CONFLUENCE_URL=https://your-company.atlassian.net/wiki CONFLUENCE_USERNAME=you@your-company.com CONFLUENCE_API_TOKEN=your_api_token READ_ONLY_MODE=true
All four values belong in the Environment Variables field, one per line, not in Arguments. Click Test Connection first: a working server answers with its tool count, twenty for this configuration. If it answers zero, the variables did not reach it. [14]
No terminal needed
If you have never opened Terminal and never want to, this is your path, with one unavoidable detour: this server needs an Atlassian API token, so step two is getting one. Routines is a Mac app that runs MCP servers for you: fill in the fields once, and this server's tools are available to your AI in chat and in scheduled routines.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
Go to id.atlassian.com, open Security, then API tokens, and create one. Copy it somewhere safe: Atlassian shows it once. It is the same token page Jira uses, so one you already made works here. You will also need the email address you sign in with.
03
Open Confluence in a browser and read the address bar: the part you need is the https://something.atlassian.net/wiki prefix, with the /wiki on the end. That trailing /wiki is the single most common thing people get wrong here, because the Jira address does not have it.
04
Click your account at the bottom of the sidebar, choose Settings, open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server. Switch the form to Command (stdio): this server is a command that runs on your Mac, not a web address. Name it Confluence. Command: uvx. Arguments: mcp-atlassian.
05
In the Environment Variables field put one per line: CONFLUENCE_URL=https://your-company.atlassian.net/wiki, then CONFLUENCE_USERNAME=you@your-company.com, then CONFLUENCE_API_TOKEN= followed by the token you copied, then READ_ONLY_MODE=true. The first three are required, or the server starts with no tools at all. The fourth is the one that holds this connection to reading, which is the configuration we verified.
06
Click Test Connection: Routines starts the server and reports how many tools it found, twenty for this configuration. Then click Add Server. The tools work in chat right away; to let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every Monday at 8:30, search Confluence for pages in our team space that changed in the last seven days, and write a short summary of what changed and who changed it to wiki-digest.md.
Every Friday at 15:00, walk the page tree of our Handbook space in Confluence, list the pages nobody has edited in 90 days with a one-line note on what each one covers, and save the list as stale-docs.md.
Every weekday at 8:00, check our Runbook page in Confluence for a new version since yesterday, and if there is one, summarize what changed in three bullets and save it as runbook-changes.md.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
{"jsonrpc":"2.0","id":2,"result":{"tools":[]}}The fix
The server starts happily with no Atlassian credentials at all and then exposes nothing, which is why this looks like a working connection with a broken server. We reproduced it by launching it with every Confluence and Jira variable removed: the handshake completed, the banner printed as usual, and tools/list came back with the empty list above. Check that CONFLUENCE_URL, CONFLUENCE_USERNAME and CONFLUENCE_API_TOKEN all actually reached the process. In a form-based client that means the Environment Variables field, not the arguments.
What you see
Error calling tool 'search': 404 Client Error: Not Found for url: https://example.atlassian.net/wiki/rest/api/search?start=0&limit=3&cql=siteSearch+~+%22onboarding%22&expand=content.history,content.version
The fix
The tools are there, the call goes out, and the address answers 404. We triggered this on purpose by pointing CONFLUENCE_URL at https://example.atlassian.net/wiki, which is not a real wiki. Note what the message hands you for free: the full URL the server built, so you can see exactly which address it used. Check that first. The usual mistake is pasting the Jira address, which has no /wiki on the end, and the same 404 also covers a wrong email or a mistyped token. Do not read a clean startup as proof the address is right, either: we started the server once with CONFLUENCE_URL set to not-a-valid-url and the handshake still completed, because the address is only tested when the first request goes out.
What you see
1 validation error for call[search]
query
Missing required argument [type=missing_argument, input_value={}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.13/v/missing_argumentThe fix
This one never reached Atlassian. The server checks arguments first, and confluence_search without a query is refused on the spot. Sending limit as the word three instead of a number gets the same treatment, with a line about being unable to parse the string as an integer in place of the missing-argument one. It is a useful failure to recognise, because it means the connection itself is fine: the assistant called the tool wrong, and asking it to try again with the missing value usually ends it.
What you see
Error calling tool 'get_page': Either 'page_id' OR both 'title' and 'space_key' must be provided.
The fix
confluence_get_page takes either a page id or a title together with its space key, and it refuses anything less. People hit this when they ask for a page by name, because a title is not unique across spaces. Have the assistant run confluence_search first and take the id from the result, or give it the space key alongside the exact title.
What you see
Unknown tool: confluence_serach_pages
The fix
We asked for confluence_serach_pages, typo included, and this one line is the whole reply. Two things to take from it. Assistants invent plausible tool names, so a routine that fails this way is usually calling something that never existed rather than something that broke. And the reply arrives as an ordinary result rather than a protocol error, so an assistant can read straight past it: the twenty names in the table above are the entire vocabulary of this connection.
The fix
The uvx command belongs to uv, the Python package runner, and this server is a Python one. If uv is not installed, every client on this page fails at the spawn step before the server can say anything: install it from astral.sh/uv and restart your client. There is a second version of the same failure: whichever folder uv landed in is usually missing from the PATH of an app launched from the Dock, so a client that works in a terminal can still fail in a window. Run which uvx in Terminal to see where yours is, /Users/yourname/.local/bin/uvx if you used the astral.sh installer and somewhere else if you installed uv with Homebrew, and paste that full path in as the command.
FAQ
It is a small program that hands an AI assistant a set of Confluence actions: search the wiki with CQL, read a page, walk a space's page tree, and pull comments, labels, attachments, version history and permissions. Two servers can do this, and they are not the same product. Atlassian hosts its own, the Rovo MCP Server, which your client reaches over the network after signing in. The community one, mcp-atlassian, runs as a local process on your Mac and authenticates with an Atlassian API token. This page verified the community one, because it is the one that starts without an Atlassian tenant to sign into. The same package also covers Jira, which has its own page in this directory. [8][5]
We started the server, completed the MCP handshake, and read the tool list off the wire. That part is measured, and the table above is the raw response. The one real tool call we made did not succeed: confluence_search reached the placeholder address we had configured and came back with a 404, which is what an unauthenticated or misconfigured setup looks like from the outside. So the tool list is evidence, and nothing here describes what a successful Confluence search returns, because we never saw one. Every error we did get is printed in full, including the ones from four further probe runs.
The configuration on this page enumerates 20, all of them reads: pages and search (confluence_search, confluence_get_page, confluence_get_page_children, confluence_get_space_page_tree, confluence_get_page_history, confluence_get_page_diff), comments and labels (confluence_get_comments, confluence_get_inline_comments, confluence_get_labels), people and analytics (confluence_search_user, confluence_get_page_views), attachments and images (confluence_get_attachments, confluence_download_attachment, confluence_download_content_attachments, confluence_get_page_images), templates (confluence_list_page_templates, confluence_get_page_template) and permissions (confluence_get_page_restrictions, confluence_check_content_permissions, confluence_get_space_permissions). The project's docs count 35 Confluence tools across 8 toolsets, and the 15 of those that write are exactly the ones our read-only run left out. The 98 tools the README advertises are Confluence and Jira together, not Confluence alone. [7][5]
The package can. The configuration on this page cannot, on purpose. We ran it with READ_ONLY_MODE=true, which the docs describe as disabling write operations, and the 20 tools it answered with are all reads. Remove that line and the same command also exposes the tools that create, update, move, copy and delete pages, add comments and labels, and upload attachments, none of which we enumerated or can vouch for here. Read-only is the safer order anyway: let an assistant read your wiki for a week before you let it write to it. [6][7]
Yes. For the Cloud setup on this page that means your wiki address ending in /wiki, the email you sign in with, and an Atlassian API token created at id.atlassian.com under Security, then API tokens. Tokens belong to your Atlassian account rather than to one product, so the one you made for Jira works here too, and it reaches everything your account reaches: a page this server can read is a page you could open in your browser, no more and no less. Treat it like your password, keep it in the environment variables field rather than in a file you commit to git, and leave READ_ONLY_MODE=true in place so a badly worded routine cannot rewrite a page. Server or Data Center installs use a Personal Access Token instead, which we did not test. [9][5]
Both numbers are real and we captured both. PyPI publishes mcp-atlassian at 0.23.0. Over MCP the running process self-reports as Atlassian MCP 3.4.5, which is the version of FastMCP, the framework it is built on: the startup banner above prints 3.4.5 next to the FastMCP name. Reading 3.4.5 as the Confluence server's own version number would be wrong. [1]
No. Routines ships an Atlassian connector you turn on with a one-click sign-in, and it covers Confluence as well as Jira through Atlassian's hosted MCP server, so there is nothing to install and no token to paste. Set the community server up instead if you want the tool set on this page, page trees, version diffs, attachments and permission checks included, or if your Confluence is a Server or Data Center instance rather than Cloud. [14]
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
[2]
357,922 downloads in the last week, 1,902,768 in the last month.
[3]
5,691 stars, not archived, and a push dated 2026-08-02 at access time, per the GitHub API.
[4]
[5]
The uvx command shape, the CONFLUENCE_URL value ending in /wiki with CONFLUENCE_USERNAME and CONFLUENCE_API_TOKEN beside it, the API token and Personal Access Token routes, and the count of 98 tools across Jira and Confluence.
[6]
The Server Options table lists READ_ONLY_MODE as "Disable write operations (true/false)".
[7]
98 tools in total, and 8 Confluence toolsets listing 35 Confluence tools, 15 of which are writes.
[8]
Atlassian's own hosted server and its current URL, https://mcp.atlassian.com/v1/mcp/authv2.
[9]
Where an Atlassian API token is created for the community server.
[10]
The claude_desktop_config.json shape, including the env object.
[11]
The claude mcp add syntax, including -e for environment variables.
[12]
[13]
The standalone installer puts uv and uvx in ~/.local/bin on macOS; Homebrew is listed as a separate install method, and it put uvx at /usr/local/bin/uvx on the Mac this page was captured on.
[14]
The built-in Atlassian connector, which covers Confluence and Jira, and how Routines runs any MCP server.
This page describes Confluence as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines