confluence-mcp
# Confluence MCP Server
MCP server for Confluence integration — read, write, search, and manage attachments via the Confluence REST API.
## Installation
```bash
npm install -g @mcd/confluence-mcp-server
```
Or use with npx:
```bash
npx @mcd/confluence-mcp-server
```
## Configuration
Add to your MCP settings (e.g. `~/.kiro/settings/mcp.json`):
```json
{
"mcpServers": {
"confluence-mcp": {
"command": "npx",
"args": ["@mcd/confluence-mcp-server@latest"],
"env": {
"CONFLUENCE_URL": "https://your-confluence.atlassian.net",
"CONFLUENCE_USERNAME": "your-email@example.com",
"CONFLUENCE_TOKEN": "your-api-token",
"CONFLUENCE_CLOUD": "true"
}
}
}
}
```
For local development, point directly to the compiled output:
```json
{
"mcpServers": {
"confluence-mcp": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"CONFLUENCE_URL": "...",
"CONFLUENCE_USERNAME": "...",
"CONFLUENCE_TOKEN": "...",
"CONFLUENCE_CLOUD": "false"
}
}
}
}
```
## Environment Variables
| Variable | Description |
|----------|-------------|
| `CONFLUENCE_URL` | Your Confluence instance URL |
| `CONFLUENCE_USERNAME` | Your username or email |
| `CONFLUENCE_TOKEN` | Your API token or password |
| `CONFLUENCE_CLOUD` | `"true"` for Cloud, `"false"` for Server |
## Available Tools
### Pages
- `search` — Search Confluence content (CQL)
- `get_page` — Get page content by ID
- `get_page_children` — Get child pages of a parent page
- `create_page` — Create a new page
- `update_page` — Update page content (inline HTML or file path)
### Attachments
- `get_attachments` — List attachments on a page
- `download_attachment` — Download an attachment to local disk
- `upload_attachment` — Upload a local file as a page attachment, with optional embedding in page body
### Comments
- `get_comments` — Get page comments
- `add_comment` — Add a comment to a page
## Tool Examples
**Search:**
```json
{ "query": "space = DEV AND title ~ \"API\"", "limit": 10 }
```
**Update page with inline content:**
```json
{ "page_id": "123456", "content": "<h1>Title</h1><p>Updated content</p>" }
```
**Update page from file (recommended for large content):**
```json
{ "page_id": "123456", "content_file": "/absolute/path/to/content.html" }
```
**Upload attachment:**
```json
{ "page_id": "123456", "file_path": "/absolute/path/to/file.png" }
```
**Upload and embed in page body:**
```json
{
"page_id": "123456",
"file_path": "/absolute/path/to/image.png",
"embed_in_body": true,
"comment": "Optional comment"
}
```
Images are embedded as `<ac:image>`, other files as a `view-file` macro link.
## Development
```bash
npm install
npm run build
```
TDQS
Scored across 10 tools
Each tool targets a distinct resource and action: search, page retrieval, children, attachments (list vs download), comments (list vs add), page create/update, and attachment upload. No two tools appear to do the same thing.
Most names follow a clear verb_noun pattern (get_page, create_page, update_page, upload_attachment). The mix of verbs like search, get, download, add, create, update, upload is reasonable and readable, though not perfectly uniform.
With 10 tools, the set is well-scoped for a Confluence MCP server covering search, page content, comments, and attachments. Each tool has a clear role without feeling excessive.
Core content operations are covered (search, read, create, update, comment, attachments), but there are no delete operations for pages, comments, or attachments. This is a notable gap for full lifecycle management, though typical workflows are still possible.