confluence-mini-mcp
Crawls Confluence page trees, follows internal and external links, and caches pages as Markdown. Provides tools for searching, retrieving, listing, and refreshing cached Confluence pages.
Integrates with Slack through the nanobot framework, allowing users to search and retrieve Confluence content directly from Slack.
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-mini-mcpsearch for latest engineering updates"
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-mini-mcp
Lightweight MCP server that crawls Confluence subtrees and serves cached Markdown. Works with Claude Code and nanobot (Slack) via stdio.
Claude Code config
{
"mcpServers": {
"confluence-docs": {
"command": "uvx",
"args": ["--from", "git+https://github.com/bonkey/confluence-mini-mcp", "confluence-mini-mcp"],
"env": {
"CONFLUENCE_BASE_URL": "https://company.atlassian.net/wiki",
"CONFLUENCE_EMAIL": "you@company.com",
"CONFLUENCE_API_TOKEN": "...",
"CONFLUENCE_ROOT_PAGE_IDS": "123456,789012"
}
}
}
}Pin to a tag: "--from", "git+https://github.com/bonkey/confluence-mini-mcp@v0.1.1"
Related MCP server: confluence-mcp-server
Nanobot config
[mcp.confluence]
command = "uvx"
args = ["--from", "git+https://github.com/bonkey/confluence-mini-mcp", "confluence-mini-mcp"]
env = { CONFLUENCE_BASE_URL = "https://company.atlassian.net/wiki", CONFLUENCE_EMAIL = "you@company.com", CONFLUENCE_API_TOKEN = "...", CONFLUENCE_ROOT_PAGE_IDS = "123456,789012" }Tools
Tool | Description |
| Keyword search across cached pages (title 10x weight) |
| Full Markdown content by page ID (Confluence or external) |
| Index of all cached pages (optional space_key filter) |
| Force re-crawl, bypass TTL |
Crawling
The crawler walks a graph, not just a tree:
Child pages — standard parent → children traversal
Linked Confluence pages — any internal link in page content is followed (enables a single "hub page" linking to multiple subtrees)
External HTTP links — fetched as Markdown (1 level deep, follows redirects only)
In-page directives
Add a [confluence-mcp] block anywhere on a Confluence page to control crawl behaviour for that subtree:
[confluence-mcp]
max_depth=3
follow_links=false
follow_external=trueDirective | Default | Description |
| (global config) | Override crawl depth from this page down |
|
| Follow linked Confluence pages in content |
|
| Fetch external HTTP links in content |
The directive block is stripped from the Markdown output — agents never see it.
Configuration
All settings via env vars or confluence-mini-mcp.toml:
Env var | Description | Default |
| Wiki base URL | required |
| Atlassian email | required |
| API token | required |
| Comma-separated root page IDs | required |
| Cache directory |
|
| Cache max age |
|
| Max crawl depth |
|
| Max pages to crawl |
|
| Background refresh interval (0=off) |
|
| Fake cache mode, no API calls |
|
Development
just dev # run in dry-run mode
just check # format + test
just release # tag + pushAvailable Tools
4 toolsget_pageA
Retrieve the full Markdown content of a specific page by ID.
Use this after search_pages to read the complete content of a result. Pages may be Confluence pages or crawled external websites.
Args: page_id: The page ID from search_pages or list_pages results.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that returned content is Markdown and that pages may be Confluence or crawled external websites (useful scope context), but it says nothing about permissions/auth, pagination or truncation of long pages, caching interplay with refresh_cache, or error behavior for invalid IDs. Adequate but incomplete for a read tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and return type, followed by one sentence of usage guidance and one short Args entry. No filler, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't explain return values. It covers purpose, upstream tooling, content format, and page-type scope. The remaining gap is behavioral detail (permissions, truncation) that no annotation supplies, but for a simple single-param reader the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains page_id is 'The page ID from search_pages or list_pages results,' telling the agent where the value originates. With only one parameter, this is close to complete; it lacks only format/length details, which are minor given the provenance guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Retrieve) plus resource (full Markdown content of a specific page by ID), and it distinguishes itself from siblings by naming search_pages and list_pages as the upstream producers of the ID. An agent can immediately tell this is the read-full-content step after a search/list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'Use this after search_pages to read the complete content of a result.' It names the alternative workflow (search_pages/list_pages for discovery, this for full content), which is exactly the routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesB
List all cached pages, optionally filtered by space key.
Args: space_key: Optional space key to filter by.
| Name | Required | Description | Default |
|---|---|---|---|
| space_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that results come from a cache (implying possible staleness and a relationship to refresh_cache), but says nothing about pagination or result-size limits for a 'list all' operation, or any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose in the first sentence and the argument explained immediately after; nothing extraneous. Minor redundancy in restating the space-key filter inside the Args block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with an output schema present, the essentials are covered. However, with no annotations the definition should at least declare the read-only nature and the cache-refresh relationship to its siblings, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does identify space_key as an optional filter, but that is essentially a restatement of the parameter name plus the already-implied optionality from default ""; no format, example, or matching behavior is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with a qualifying scope ('List all cached pages'), which also separates it from get_page and search_pages since it is a bulk cached listing. It never explicitly names or contrasts with those siblings, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'optionally' implies when the space_key filter applies, but there is no statement of when to prefer this over search_pages or get_page, and no exclusions or prerequisites. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_cacheA
Force an immediate re-crawl of all configured subtrees, bypassing TTL and version checks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose meaningful traits: it operates on ALL configured subtrees, it forces an immediate re-crawl, and it bypasses TTL and version checks. It does not state permission requirements, whether the call blocks until completion, or the cost/rate-limit implications of a full re-crawl, leaving real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action, the scope, and the bypass behavior with zero filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema present, the description need not explain return values, and it sufficiently conveys scope and effect. The only shortfall is the absence of auth/permission and synchronous-vs-async behavior for what is clearly an expensive forced refresh.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description adds no parameter context because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Force an immediate re-crawl') and an exact resource scope ('all configured subtrees'), and the phrase 'bypassing TTL and version checks' distinguishes it from the read-only siblings (list_pages, search_pages, get_page). An agent can tell this is a cache-invalidation operation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'bypassing TTL and version checks' suggests this is for forcing freshness when cached data is unacceptable. However, there is no explicit when-to-use, when-not-to-use, or named alternative, so the agent must infer the trigger condition itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pagesA
Full-text search across all cached Confluence pages and external links.
Returns short snippets only. IMPORTANT: Always call get_page on relevant results to read the full content before answering questions. The snippet is just a preview — the full page often contains the information you need.
Args: query: Space-separated keywords to search for. Try single key terms first; the search supports prefix matching. limit: Max results to return (default 10, max 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that only short snippets are returned, warns the snippet is a preview, and documents prefix matching plus the default and max limit. It does not mention cache staleness or whether refresh_cache is needed for fresh content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then the actionable directive, then args. Slightly redundant, since 'Returns short snippets only' and 'The snippet is just a preview' make the same point, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers purpose, follow-up workflow, and both parameters. The only gap is cache-related context (e.g., when results may be stale and what refresh_cache does), which matters for a cached-index search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: 'query' is defined as space-separated keywords with a single-key-term-first and prefix-matching strategy, and 'limit' gets default 10 / max 20. Both parameters gain meaning found nowhere in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Full-text search across all cached Confluence pages and external links'), including the searchable scope, so an agent can distinguish it from get_page, which it explicitly names as the follow-up step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear workflow directive ('Always call get_page on relevant results to read the full content before answering questions'), which is exactly the context an agent needs. It does not, however, explain when to prefer search_pages over siblings like list_pages or refresh_cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.3.0- First observed
get_page - First observed
list_pages - First observed
refresh_cache - First observed
search_pages
TDQS
Scored across 4 tools
list_pages and search_pages both surface pages, but they differ by enumeration vs full-text query and are clearly documented. get_page and refresh_cache have non-overlapping cache-read and cache-maintenance roles, so misselection is unlikely.
All four tools follow a consistent snake_case verb_noun pattern: list_pages, refresh_cache, search_pages, get_page. There is no mixing of naming conventions.
Four tools are well-scoped for a mini read-oriented Confluence cache MCP. Each tool has a distinct role: enumerate, search, retrieve, and refresh, with no redundant tools.
The set covers the core read path: list cached pages, search them, and fetch full page content. It lacks page creation/update/delete, but as a mini cache reader this is a reasonable scope with only minor gaps.
Maintenance
Related MCP Connectors
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Read-only MCP server for the OrchestKit docs: full-text search + Markdown fetch. No auth.
MCP server for querying Forkast documentation
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables querying and interacting with a Markdown wiki generated from Confluence pages, with search and MCP server for LLM access.104MIT
- AlicenseAqualityDmaintenanceMCP server for Confluence Cloud/Server/Data Center, enabling page search, CQL queries, page CRUD, attachment upload, and user identity lookup.23243 npm4MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for searching and retrieving pages from Atlassian Confluence.37 npm1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for reading Confluence Server/DC documents with search, page content, metadata, spaces, page tree, and attachment/image support.4 npmMIT