by Vortiago
A Model Context Protocol (MCP) server enabling AI assistants to interact with Outline documentation services.
# Add to your Claude Code skills
git clone https://github.com/Vortiago/mcp-outlineA Model Context Protocol server for interacting with Outline document management.
Before using this MCP server, you need:
Getting your API key: Log into Outline → Click your profile → Settings → API Keys → "New API Key". Copy the generated token.
No comments yet. Be the first to share your thoughts!
Click a button to install with interactive API key prompt:
Install with uv (recommended), pip, or Docker:
uvx mcp-outline # using uv
pip install mcp-outline # using pip
# using Docker
docker run -e OUTLINE_API_KEY=<your-key> ghcr.io/vortiago/mcp-outline:latest
Then add to your MCP client config (works with VS Code, Claude Desktop, Cursor, and others):
{
"inputs": [
{
"id": "outline_api_key",
"type": "promptString",
"description": "Enter OUTLINE_API_KEY",
"password": true
},
{
"id": "outline_api_url",
"type": "promptString",
"description": "Outline API URL (optional, for self-hosted)",
"password": false
}
],
"servers": {
"mcp-outline": {
"command": "uvx",
"args": ["mcp-outline"],
"env": {
"OUTLINE_API_KEY": "${input:outline_api_key}",
"OUTLINE_API_URL": "${input:outline_api_url}"
}
}
}
}
claude mcp add mcp-outline uvx mcp-outline
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mcp-outline": {
"command": "uvx",
"args": ["mcp-outline"],
"env": {
"OUTLINE_API_KEY": "<YOUR_API_KEY>",
"OUTLINE_API_URL": "<YOUR_OUTLINE_URL>"
}
}
}
}
Setup guides for more clients: Docker (HTTP), Cline, Codex, Windsurf, and others
| Variable | Required | Default | Notes |
|----------|----------|---------|-------|
| OUTLINE_API_KEY | Yes* | - | Required for tool calls to succeed. For SSE/HTTP, can alternatively be provided per-request via x-outline-api-key header (details) |
| OUTLINE_API_URL | No | https://app.getoutline.com/api | For self-hosted: https://your-domain/api |
| OUTLINE_VERIFY_SSL | No | true | Set false for self-signed certificates |
| OUTLINE_READ_ONLY | No | false | true = disable ALL write operations (details) |
| OUTLINE_DISABLE_DELETE | No | false | true = disable only delete operations (details) |
| OUTLINE_DISABLE_AI_TOOLS | No | false | true = disable AI tools (for Outline instances without OpenAI) |
| OUTLINE_DYNAMIC_TOOL_LIST | No | false | true = enable per-user tool filtering by role/key scopes (details) |
| OUTLINE_MAX_CONNECTIONS | No | 100 | Max concurrent connections in pool |
| OUTLINE_MAX_KEEPALIVE | No | 20 | Max idle connections in pool |
| OUTLINE_TIMEOUT | No | 30.0 | Read timeout in seconds |
| OUTLINE_CONNECT_TIMEOUT | No | 5.0 | Connection timeout in seconds |
| OUTLINE_WRITE_TIMEOUT | No | 30.0 | Write timeout in seconds |
| MCP_TRANSPORT | No | stdio | Transport mode: stdio (local), sse or streamable-http (remote) |
| MCP_HOST | No | 127.0.0.1 | Server host. Use 0.0.0.0 in Docker for external connections |
| MCP_PORT | No | 3000 | HTTP server port (only for sse and streamable-http modes) |
| Feature | Env Var | Effect |
|---------|---------|--------|
| Read-only mode | OUTLINE_READ_ONLY=true | Disables all write operations — only search, read, and export tools available |
| Disable deletes | OUTLINE_DISABLE_DELETE=true | Disables only delete operations, all other writes allowed |
| Dynamic tool list | OUTLINE_DYNAMIC_TOOL_LIST=true | Filters tools per-user based on Outline role and API key scopes |
| Per-user Outline API keys | x-outline-api-key header | Each user passes their own Outline API key in HTTP mode for multi-user setups |
Read-only mode takes precedence over disable-delete. See Configuration Guide for details.
Note: Tool availability depends on your access control settings.
search_documents(query, collection_id?, limit?, offset?) - Search documents by keywords with paginationlist_collections() - List all collectionsget_collection_structure(collection_id) - Get document hierarchy within a collectionget_document_id_from_title(query, collection_id?) - Find document ID by title searchread_document(document_id) - Get document contentexport_document(document_id) - Export document as markdowncreate_document(title, collection_id, text?, parent_document_id?, publish?) - Create new documentupdate_document(document_id, title?, text?, append?) - Update document (append mode available)move_document(document_id, collection_id?, parent_document_id?) - Move document to different collection or parentarchive_document(document_id) - Archive documentunarchive_document(document_id) - Restore document from archivedelete_document(document_id, permanent?) - Delete document (or move to trash)restore_document(document_id) - Restore document from trashlist_archived_documents() - List all archived documentslist_trash() - List all documents in trashadd_comment(document_id, text, parent_comment_id?) - Add comment to document (supports threaded replies)list_document_comments(document_id, include_anchor_text?, limit?, offset?) - View document comments with paginationget_comment(comment_id, include_anchor_text?) - Get specific comment detailsget_document_backlinks(document_id) - Find documents that link to this documentcreate_collection(name, description?, color?) - Create new collectionupdate_collection(collection_id, name?, description?, color?) - Update collection propertiesdelete_collection(collection_id) - Delete collectionexport_collection(collection_id, format?) - Export collection (default: outline-markdown)export_all_collections(format?) - Export all collections