loading…
Search for a command to run...
loading…
Node.js/TypeScript MCP server for Atlassian Confluence. Provides tools enabling AI systems (LLMs) to list/get spaces & pages (content formatted as Markdown) and
Node.js/TypeScript MCP server for Atlassian Confluence. Provides tools enabling AI systems (LLMs) to list/get spaces & pages (content formatted as Markdown) and search via CQL. Connects AI seamlessly to Confluence knowledge bases using the standard MCP in
Transform how you access and interact with your team's knowledge by connecting Claude, Cursor AI, and other AI assistants directly to your Confluence spaces, pages, and documentation. Get instant answers from your knowledge base, search across all your spaces, and streamline your documentation workflow.
Get up and running in 2 minutes:
Generate a Confluence API Token:
# Set your credentials
export ATLASSIAN_SITE_NAME="your-company" # for your-company.atlassian.net
export ATLASSIAN_USER_EMAIL="[email protected]"
export ATLASSIAN_API_TOKEN="your_api_token"
# List your Confluence spaces (TOON format by default)
npx -y @aashari/mcp-server-atlassian-confluence get --path "/wiki/api/v2/spaces"
# Get details about a specific space with field filtering
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/spaces/123456" \
--jq "{id: id, key: key, name: name, type: type}"
# Get a page with JMESPath filtering
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/pages/789" \
--jq "{id: id, title: title, status: status}"
# Search for pages (using CQL)
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/rest/api/search" \
--query-params '{"cql": "type=page AND space=DEV"}'
Add this to your Claude configuration file (~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"confluence": {
"command": "npx",
"args": ["-y", "@aashari/mcp-server-atlassian-confluence"],
"env": {
"ATLASSIAN_SITE_NAME": "your-company",
"ATLASSIAN_USER_EMAIL": "[email protected]",
"ATLASSIAN_API_TOKEN": "your_api_token"
}
}
}
}
Restart Claude Desktop, and you'll see the confluence server in the status bar.
Most AI assistants support MCP (Cursor AI, Continue.dev, and others). Install the server globally:
npm install -g @aashari/mcp-server-atlassian-confluence
Then configure your AI assistant to use the MCP server with STDIO transport. The binary is available as mcp-atlassian-confluence after global installation.
Create ~/.mcp/configs.json for system-wide configuration:
{
"confluence": {
"environments": {
"ATLASSIAN_SITE_NAME": "your-company",
"ATLASSIAN_USER_EMAIL": "[email protected]",
"ATLASSIAN_API_TOKEN": "your_api_token"
}
}
}
Alternative config keys: The system also accepts "atlassian-confluence", "@aashari/mcp-server-atlassian-confluence", or "mcp-server-atlassian-confluence" instead of "confluence".
You can also configure credentials using environment variables or a .env file:
# Create a .env file in your project directory
cat > .env << EOF
ATLASSIAN_SITE_NAME=your-company
[email protected]
ATLASSIAN_API_TOKEN=your_api_token
DEBUG=false
EOF
The server will automatically load these values from:
.env file in the current directory~/.mcp/configs.json (as shown above)This MCP server provides 5 generic tools that can access any Confluence API endpoint:
| Tool | Description |
|---|---|
conf_get |
GET any Confluence API endpoint (read data) |
conf_post |
POST to any endpoint (create resources) |
conf_put |
PUT to any endpoint (replace resources) |
conf_patch |
PATCH to any endpoint (partial updates) |
conf_delete |
DELETE from any endpoint (remove resources) |
All tools share these common parameters:
path (required): The API endpoint path (e.g., /wiki/api/v2/spaces)queryParams (optional): Query parameters as key-value pairs (e.g., {"limit": "25", "space-id": "123"})jq (optional): JMESPath expression to filter/transform the response (e.g., results[*].{id: id, title: title})outputFormat (optional): Output format - "toon" (default, 30-60% fewer tokens) or "json"Tools that accept a request body (conf_post, conf_put, conf_patch):
body (required): Request body as a JSON objectSpaces:
/wiki/api/v2/spaces - List all spaces/wiki/api/v2/spaces/{id} - Get space detailsPages:
/wiki/api/v2/pages - List pages (use space-id query param to filter)/wiki/api/v2/pages/{id} - Get page details/wiki/api/v2/pages/{id}/body - Get page body (use body-format param)/wiki/api/v2/pages/{id}/children - Get child pages/wiki/api/v2/pages/{id}/labels - Get page labelsComments:
/wiki/api/v2/pages/{id}/footer-comments - List/add footer comments/wiki/api/v2/pages/{id}/inline-comments - List/add inline comments/wiki/api/v2/footer-comments/{comment-id} - Get/update/delete commentBlog Posts:
/wiki/api/v2/blogposts - List blog posts/wiki/api/v2/blogposts/{id} - Get blog postSearch:
/wiki/rest/api/search - Search content (use cql query param)What is TOON? TOON (Token-Oriented Object Notation) is a format optimized for LLM token efficiency, reducing token costs by 30-60% compared to JSON. It's the default output format for all tools.
Benefits:
When to use JSON instead:
Example comparison:
// JSON format (verbose)
{"results": [{"id": "123", "title": "My Page"}, {"id": "456", "title": "Other Page"}]}
// TOON format (efficient)
results:
- id: 123
title: My Page
- id: 456
title: Other Page
To use JSON instead of TOON, set outputFormat: "json" in your request.
All tools support optional JMESPath (jq) filtering to extract specific data and reduce token costs:
# Get just space names and keys
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/spaces" \
--jq "results[].{id: id, key: key, name: name}"
# Get page title and status
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/pages/123456" \
--jq "{id: id, title: title, status: status}"
IMPORTANT: Always use the jq parameter to filter responses to only the fields you need. Unfiltered responses can be very large and expensive in token costs.
JMESPath Syntax Reference:
results[*] - All items in results arrayresults[0] - First item onlyresults[*].id - Just IDs from all itemsresults[*].{id: id, title: title} - Create objects with selected fieldsresults[?status=='current'] - Filter by conditionAsk your AI assistant:
Ask your AI assistant:
Ask your AI assistant:
Ask your AI assistant:
The CLI mirrors the MCP tools for direct terminal access. All commands support the same parameters as the tools.
get - GET any Confluence endpointpost - POST to any endpointput - PUT to any endpointpatch - PATCH any endpointdelete - DELETE from any endpointAll commands:
-p, --path <path> (required) - API endpoint path-q, --query-params <json> (optional) - Query parameters as JSON--jq <expression> (optional) - JMESPath filter expression-o, --output-format <format> (optional) - Output format: toon (default) or jsonCommands with body (post, put, patch):
-b, --body <json> (required) - Request body as JSON# GET request
npx -y @aashari/mcp-server-atlassian-confluence get --path "/wiki/api/v2/spaces"
# GET with query parameters and JMESPath filter
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/pages" \
--query-params '{"space-id": "123456", "limit": "10"}' \
--jq "results[*].{id: id, title: title}"
# GET with JSON output format
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/spaces" \
--output-format json
# POST request (create a page)
npx -y @aashari/mcp-server-atlassian-confluence post \
--path "/wiki/api/v2/pages" \
--body '{"spaceId": "123456", "status": "current", "title": "New Page", "body": {"representation": "storage", "value": "<p>Content here</p>"}}'
# POST request (add a comment)
npx -y @aashari/mcp-server-atlassian-confluence post \
--path "/wiki/api/v2/pages/789/footer-comments" \
--body '{"body": {"representation": "storage", "value": "<p>My comment</p>"}}'
# PUT request (update page - requires version increment)
npx -y @aashari/mcp-server-atlassian-confluence put \
--path "/wiki/api/v2/pages/789" \
--body '{"id": "789", "status": "current", "title": "Updated Title", "spaceId": "123456", "body": {"representation": "storage", "value": "<p>Updated content</p>"}, "version": {"number": 2}}'
# PATCH request (partial update)
npx -y @aashari/mcp-server-atlassian-confluence patch \
--path "/wiki/api/v2/spaces/123456" \
--body '{"name": "New Space Name"}'
# DELETE request
npx -y @aashari/mcp-server-atlassian-confluence delete \
--path "/wiki/api/v2/pages/789"
When API responses exceed approximately 40,000 characters (~10,000 tokens), the server automatically truncates the response to stay within token limits. When this happens:
You'll see a truncation notice at the end of the response showing:
The full raw response is saved to a temporary file in /tmp/mcp/ (path provided in the truncation notice)
Best practices to avoid truncation:
jq parameter to filter responses to only needed fieldslimit query parameter to restrict result counts (e.g., {"limit": "5"})Example of efficient filtering:
# Instead of getting all space data (can be huge):
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/spaces"
# Get only the fields you need:
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/api/v2/spaces" \
--query-params '{"limit": "10"}' \
--jq "results[*].{id: id, key: key, name: name}"
Enable debug logging to see detailed request/response information:
# Set DEBUG environment variable
export DEBUG=true
# For MCP mode
DEBUG=true npx -y @aashari/mcp-server-atlassian-confluence
# For CLI mode
DEBUG=true npx -y @aashari/mcp-server-atlassian-confluence get --path "/wiki/api/v2/spaces"
Debug logs are written to: ~/.mcp/data/@aashari-mcp-server-atlassian-confluence.[session-id].log
The MCP Inspector provides a visual interface for testing tools:
# Install the server globally
npm install -g @aashari/mcp-server-atlassian-confluence
# Run with MCP Inspector
npx @modelcontextprotocol/inspector node $(which mcp-atlassian-confluence)
Or use the built-in development command if you've cloned the repository:
npm run mcp:inspect
This starts the server in HTTP mode and opens the inspector UI in your browser.
You can run the server in HTTP mode to test with curl or other HTTP clients:
# Start server in HTTP mode
TRANSPORT_MODE=http npx -y @aashari/mcp-server-atlassian-confluence
The server will listen on http://localhost:3000/mcp by default. You can change the port:
PORT=8080 TRANSPORT_MODE=http npx -y @aashari/mcp-server-atlassian-confluence
Testing with curl:
# Initialize session
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "clientInfo": {"name": "curl-test", "version": "1.0.0"}, "capabilities": {}}}'
# List available tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}'
# Call a tool
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "conf_get", "arguments": {"path": "/wiki/api/v2/spaces", "queryParams": {"limit": "5"}}}}'
The response comes as Server-Sent Events (SSE) with format:
event: message
data: {"jsonrpc": "2.0", "id": 1, "result": {...}}
Check your API Token permissions:
Verify your site name format:
https://mycompany.atlassian.netmycompanyTest your credentials:
npx -y @aashari/mcp-server-atlassian-confluence get --path "/wiki/api/v2/spaces?limit=1"
Check the API path:
Verify access permissions:
Try different search terms:
Check CQL syntax:
~/.claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonIf you're still having issues:
Your Atlassian account needs:
Currently, this tool only supports Confluence Cloud. Confluence Server/Data Center support may be added in future versions.
Your site name is the first part of your Confluence URL:
https://mycompany.atlassian.net -> Site name: mycompanyhttps://acme-corp.atlassian.net -> Site name: acme-corpAny AI assistant that supports the Model Context Protocol (MCP):
Yes! This tool:
Yes! Use CQL queries for cross-space searches. For example:
npx -y @aashari/mcp-server-atlassian-confluence get \
--path "/wiki/rest/api/search" \
--query-params '{"cql": "type=page AND text~\"API documentation\""}'
Version 3.0 replaces 8+ specific tools with 5 generic HTTP method tools. If you're upgrading from v2.x:
Before (v2.x):
conf_ls_spaces, conf_get_space, conf_ls_pages, conf_get_page,
conf_search, conf_ls_comments, conf_add_comment, ...
After (v3.0):
conf_get, conf_post, conf_put, conf_patch, conf_delete
Migration examples:
conf_ls_spaces -> conf_get with path /wiki/api/v2/spacesconf_get_space -> conf_get with path /wiki/api/v2/spaces/{id}conf_ls_pages -> conf_get with path /wiki/api/v2/pages?space-id={id}conf_get_page -> conf_get with path /wiki/api/v2/pages/{id}conf_search -> conf_get with path /wiki/rest/api/search?cql=...conf_add_comment -> conf_post with path /wiki/api/v2/pages/{id}/footer-commentsregisterTool API)This server follows a 5-layer architecture:
src/tools/) - MCP tool definitions with Zod validationsrc/cli/) - Commander-based CLI for direct testingsrc/controllers/) - Business logic, JMESPath filtering, output formattingsrc/services/) - Confluence API communicationsrc/utils/) - Shared utilities (logger, config, formatters, TOON encoder)/tmp/mcp/v3.2.1 (Current)
v3.2.0
v3.1.0
v3.0.0 (Breaking change)
See CHANGELOG.md for complete version history.
Need help? Here's how to get assistance:
Made with care for teams who want to bring AI into their knowledge management workflow.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"atlassian-confluence": {
"command": "npx",
"args": [
"-y",
"@aashari/mcp-server-atlassian-confluence"
]
}
}
}