Skip to main content

A Model Context Protocol (MCP) server for Outline (https://www.getoutline.com)

Project description

MCP Outline Server

📢 Official Outline MCP Server Available

Outline now ships an official MCP server — we recommend using it. Read the docs.


PyPI Python 3.10+ License: MIT CI Docker

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:

Install in VS Code Install in VS Code Insiders Install in Cursor

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 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.

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; 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

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 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          # 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.

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_outline-1.10.1.tar.gz (873.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_outline-1.10.1-py3-none-any.whl (68.5 kB view details)

Uploaded Python 3

File details

Details for the file mcp_outline-1.10.1.tar.gz.

File metadata

  • Download URL: mcp_outline-1.10.1.tar.gz
  • Upload date:
  • Size: 873.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for mcp_outline-1.10.1.tar.gz
Algorithm Hash digest
SHA256 91e532e4d9095dbe00ce24775eba4237bdbb525986420a735e17b6160ea6e264
MD5 4281115f142989f869c8c3495c753e19
BLAKE2b-256 ad3b0acbc614fec384ded116446af9b235b2414b789d745c516d064beeede2a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_outline-1.10.1.tar.gz:

Publisher: publish-pypi.yml on Vortiago/mcp-outline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_outline-1.10.1-py3-none-any.whl.

File metadata

  • Download URL: mcp_outline-1.10.1-py3-none-any.whl
  • Upload date:
  • Size: 68.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for mcp_outline-1.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a966f748d10ad63ea2e1ac364063751dc4ed26af1565d622803c742472999a3
MD5 c34f834be21bb68549e5eda324082ee6
BLAKE2b-256 81e29a1544f144ea1c712940fb59c22d0c1fe5b3aee05cca5d57efd629df1bc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_outline-1.10.1-py3-none-any.whl:

Publisher: publish-pypi.yml on Vortiago/mcp-outline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page