Manage Outline Documents with Automation
Search, read, create, and manage Outline documents and collections - comments, backlinks, and direct URI resource access.
Maintainer of this project? Claim this page to edit the listing.
1.10.1Add to Favorites
Why it matters
Automate interactions with your Outline document management system. Search, create, edit, and manage documents and collections seamlessly, with built-in rate limiting for smooth API usage.
Outcomes
What it gets done
Search documents by keywords and retrieve content
Create, update, and archive documents within collections
Manage document hierarchy and move items between collections
Export documents and collections in markdown format
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-outline | bash Capabilities
Tools your agent gets
Search documents by keywords with pagination
List all collections
Get document hierarchy in a collection
Find document ID by title
Get document content
Export document as markdown
Create a new document
Update document with append mode available
Overview
Outline MCP Server
MCP Outline Server lets an AI assistant search, read, create, and edit Outline documents and collections, manage comments and backlinks, and access content directly via resource URIs, with automatic API rate-limit handling. Use it for conversational management of an Outline knowledge base, for both cloud-hosted and self-hosted instances. Outline now ships an official MCP server, recommended over this community implementation.
What it does
MCP Outline Server connects an AI assistant to Outline, the team knowledge base and document management tool, for searching, reading, creating, editing, and archiving documents, managing collections, and working with comments and backlinks. Note: Outline now ships an official MCP server, which the project itself recommends using instead of this community implementation.
When to use - and when NOT to
Use it when you want an AI assistant to search your Outline knowledge base, read or edit documents, create new documents within a collection hierarchy, add or view threaded comments, or find backlinks referencing a specific document. It requires an Outline API key (generate one via Settings -> API Keys -> New API Key in the Outline web UI) and works with both cloud-hosted and self-hosted Outline instances (set OUTLINE_API_URL for self-hosted). Do not hammer the API with unthrottled requests - the server handles rate limiting transparently with automatic retry, so let it manage backoff itself.
Capabilities
- Document operations: search, read, create, edit, and archive documents.
- Collections: list, create, and manage document hierarchies.
- Comments: add and view threaded comments on documents.
- Backlinks: find documents that reference a specific document.
- MCP Resources: direct content access via URIs, e.g.
outline://document/{id},outline://collection/{id}. - Automatic rate limiting: transparent handling of Outline API limits with retry logic.
- AI-powered Q&A:
ask_ai_about_documentsanswers natural-language questions scoped to a collection or document. - Access control:
OUTLINE_READ_ONLYdisables all write operations,OUTLINE_DISABLE_DELETEdisables only deletes,OUTLINE_DYNAMIC_TOOL_LISTfilters available tools per-user by Outline role and API key scope, and anx-outline-api-keyheader lets each user pass their own key in HTTP mode for multi-user setups.
How to install
One-click install available for VS Code, VS Code Insiders, and Cursor with an interactive API key prompt. Or install manually:
uvx mcp-outline
# or
pip install mcp-outline
# or via Docker
docker run -e OUTLINE_API_KEY=<your-key> ghcr.io/vortiago/mcp-outline:latest
Configure your MCP client with OUTLINE_API_KEY (required) and OUTLINE_API_URL (optional, for self-hosted instances):
{
"servers": {
"mcp-outline": {
"command": "uvx",
"args": ["mcp-outline"],
"env": {
"OUTLINE_API_KEY": "${input:outline_api_key}",
"OUTLINE_API_URL": "${input:outline_api_url}"
}
}
}
}
For Claude Code: claude mcp add mcp-outline uvx mcp-outline. Requires Python 3.10+ for non-Docker installs.
Who it's for
Teams using Outline for internal documentation who want an AI assistant to search, read, and edit their knowledge base conversationally - though new users should check whether Outline's official MCP server better fits their needs first. The project is MIT-licensed.
Source README
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 # 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 Code
claude mcp add mcp-outline uvx mcp-outline
Installing the repo as a plugin instead also bundles theoutline-explorer agent (fast read-only wiki exploration) and theoutline 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.
Tools
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; passstatusFilterwithdraft,archived, and/orpublishedto include other stateslist_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_filterwindows by last change:day/week/month/year(defaultweek). Defaults to published documentslist_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 search
Document Reading
read_document(document_id, offset?, limit?)- Get document content with optional line-range paginationexport_document(document_id)- Export document as markdown
Document Navigation
get_document_toc(document_id)- Get table of contents with heading structure and line numbersread_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 documentupdate_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=Falsestages changes locally,save=Trueon the final call pushes all changesmove_document(document_id, collection_id?, parent_document_id?)- Move document to different collection or parent
Document Lifecycle
archive_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 trash
Comments & Collaboration
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 paginationget_comment(comment_id, include_anchor_text?)- Get specific comment detailsget_document_backlinks(document_id)- Find documents that link to this document
Collection Management
create_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
Batch Operations
batch_create_documents(documents)- Create multiple documents at oncebatch_update_documents(updates)- Update multiple documents at oncebatch_move_documents(document_ids, collection_id?, parent_document_id?)- Move multiple documentsbatch_archive_documents(document_ids)- Archive multiple documentsbatch_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 structureoutline://collection/{id}/documents- Flat list of documents in collectionoutline://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 # unit tests
uv run poe test-integration # integration tests (starts MCP server via stdio)
uv run poe test-e2e # E2E tests (requires Docker)
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.
FAQ
Common questions
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.