MCP Outline Server
π’ Official Outline MCP Server Available
Outline now ships an official MCP server β we recommend using it.
Read the docs.

A Model Context Protocol server for interacting with Outline document management.
Features
- Document operations: Search, read, create, edit, archive documents
- Collections: List, create, manage document hierarchies
- Comments: Add and view threaded comments
- Backlinks: Find documents referencing a specific document
- MCP Resources: Direct content access via URIs (outline://document/{id}, outline://collection/{id}, etc.)
- Automatic rate limiting: Transparent handling of API limits with retry logic
Prerequisites
Before using this MCP server, you need:
- An Outline account (cloud hosted or self-hosted)
- API key from Outline web UI: Settings β API Keys β Create New
- Python 3.10+ (for non-Docker installations)
Getting your API key: Log into Outline β Click your profile β Settings β API Keys β "New API Key". Copy the generated token.
Quick Start
One-Click Install
Click a button to install with interactive API key prompt:

Manual Install
Install with uv (recommended), pip, or Docker:
uvx mcp-outline
pip install mcp-outline
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 Code
claude mcp add mcp-outline uvx mcp-outline
Installing the repo as a plugin instead also bundles the
outline-explorer agent (fast read-only wiki exploration) and the
outline skill (Outline conventions: mermaidjs fences, document
structure, editing workflows).
Claude Desktop
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
Configuration
| 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_DISABLE_RECENT_DOCUMENTS | No | false | true = disable the list_recently_updated_documents tool |
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 |
OUTLINE_CACHE_TTL | No | 30 | Document cache TTL in seconds. The short default absorbs same-task read bursts without stressing the Outline API; set 0 to disable caching (always-fresh reads) or higher (e.g. 300) for more API savings. Staged edits work either way |
OUTLINE_CACHE_MAX_SIZE | No | 100 | Max cached documents |
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) |
Access Control
| 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 |
| Disable recent-changes tool | OUTLINE_DISABLE_RECENT_DOCUMENTS=true | Disables only the list_recently_updated_documents tool |
| 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 & Discovery
search_documents(query, collection_id?, limit?, offset?, statusFilter?) - Search documents by keywords with pagination. Defaults to published documents; pass statusFilter with draft, archived, and/or published to include other states
list_recently_updated_documents(date_filter?, collection_id?, status_filter?, limit?, offset?) - List documents by most recent change, newest first (e.g. "what changed this week"). date_filter windows by last change: day/week/month/year (default week). Defaults to published documents
list_collections() - List all collections
get_collection_structure(collection_id) - Get document hierarchy within a collection
get_document_id_from_title(query, collection_id?) - Find document ID by title search
Document Reading
read_document(document_id, offset?, limit?) - Get document content with optional line-range pagination
export_document(document_id) - Export document as markdown
Document Navigation
get_document_toc(document_id) - Get table of contents with heading structure and line numbers
read_document_section(document_id, heading) - Read a specific section by heading match (case-insensitive substring)
Document Management
create_document(title, collection_id, text?, parent_document_id?, publish?) - Create new document
update_document(document_id, title?, text?, append?) - Replace full document content (append mode available)
Document Editing
edit_document(document_id, edits, save?) - String-match editing with batched replacements; save=False stages changes locally, save=True on the final call pushes all changes
move_document(document_id, collection_id?, parent_document_id?) - Move document to different collection or parent
Document Lifecycle
archive_document(document_id) - Archive document
unarchive_document(document_id) - Restore document from archive
delete_document(document_id, permanent?) - Delete document (or move to trash)
restore_document(document_id) - Restore document from trash
list_archived_documents() - List all archived documents
list_trash() - List all documents in trash
add_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 pagination
get_comment(comment_id, include_anchor_text?) - Get specific comment details
get_document_backlinks(document_id) - Find documents that link to this document
Collection Management
create_collection(name, description?, color?) - Create new collection
update_collection(collection_id, name?, description?, color?) - Update collection properties
delete_collection(collection_id) - Delete collection
export_collection(collection_id, format?) - Export collection (default: outline-markdown)
export_all_collections(format?) - Export all collections
Batch Operations
batch_create_documents(documents) - Create multiple documents at once
batch_update_documents(updates) - Update multiple documents at once
batch_move_documents(document_ids, collection_id?, parent_document_id?) - Move multiple documents
batch_archive_documents(document_ids) - Archive multiple documents
batch_delete_documents(document_ids, permanent?) - Delete multiple documents
AI-Powered
ask_ai_about_documents(question, collection_id?, document_id?) - Ask natural language questions about your documents
Resources
outline://collection/{id} - Collection metadata (name, description, color, document count)
outline://collection/{id}/tree - Hierarchical document tree structure
outline://collection/{id}/documents - Flat list of documents in collection
outline://document/{id} - Full document content (markdown)
outline://document/{id}/backlinks - Documents that link to this document
Development
git clone https://github.com/Vortiago/mcp-outline.git
cd mcp-outline
uv sync --group dev
uv run poe test-unit
uv run poe test-integration
uv run poe test-e2e
See Development Guide for self-hosted Outline setup, MCP Inspector, and more.
Troubleshooting
Server not connecting? Test your API key:
curl -H "Authorization: Bearer YOUR_API_KEY" YOUR_OUTLINE_URL/api/auth.info
See Troubleshooting Guide for common issues with tools, rate limiting, and Docker.
Contributing
Contributions welcome! See CONTRIBUTING.md for setup instructions.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments