Skip to main content
Glama
nizovtsevnv

Outline knowledge base MCP Server

by nizovtsevnv

Outline MCP Server

CI Release Build GitHub release (latest SemVer) License: MIT Rust

MCP (Model Context Protocol) server for Outline API interaction with focus on simplicity, performance, and reliability.

Supports two transport modes:

  • STDIO — single-user, for direct integration with MCP clients (Cursor IDE, Claude Desktop, etc.)

  • HTTP — multi-user Streamable HTTP transport (MCP 2025-03-26 spec) with authentication, rate limiting, sessions, SSE, and CORS

Quick Start

1. Get Your Outline API Key

2. Download & Install

Choose one of the installation methods:

Download from GitHub Releases

After extracting:

  • Linux/macOS: If needed, make executable: chmod +x outline-mcp

  • Windows: Since the release is not code-signed, Windows Defender may block execution. You'll need to:

    1. Allow the executable through Windows Defender/antivirus

    2. Add the folder to Windows Defender exclusions, or

    3. Right-click the file > Properties > "Unblock" if downloaded from internet

Option 2: Install from crates.io

cargo install outline-mcp-rs

Requires Rust toolchain. The binary will be installed to

Option 3: Build from source

git clone https://github.com/nizovtsevnv/outline-mcp-rs.git
cd outline-mcp-rs
cargo build --release
# Binary will be in target/release/outline-mcp

Option 4: Nix (with reproducible environment)

nix run github:nizovtsevnv/outline-mcp-rs

3. Configure your AI agent (STDIO mode)

JSON configuration for Cursor IDE, Gemini CLI:

{
  "mcpServers": {
    "Outline knowledge base": {
      "command": "outline-mcp",
      "env": {
        "OUTLINE_API_KEY": "your-api-key-here",
        "OUTLINE_API_URL": "https://app.getoutline.com/api"
      }
    }
  }
}

Path Notes:

  • cargo install: Use "outline-mcp" (added to PATH automatically)

  • Downloaded binary: Use full path like "/path/to/outline-mcp"

  • Built from source: Use "/path/to/outline-mcp-rs/target/release/outline-mcp"

Path Requirements:

  • Use absolute paths - relative paths may not work correctly

  • No spaces in the executable file path (use underscores or hyphens instead)

  • ASCII characters only - avoid non-Latin characters in paths

  • Windows users: Use double backslashes \\ in paths (e.g., "C:\\tools\\outline-mcp.exe")

Related MCP server: MCP-Guide

HTTP Mode (Multi-User)

HTTP mode enables a Streamable HTTP transport server where multiple users can connect, each with their own Outline API key. The server itself is protected by MCP access tokens.

Architecture

                    +--------------------------+
  Client A ------->|                          |-------> Outline API
  [X-MCP-Token]    |    MCP HTTP Server       |  (user A's key)
  [Authorization]  |                          |
                   |  - Auth (X-MCP-Token)    |
  Client B ------->|  - Rate limiting per IP  |-------> Outline API
  [X-MCP-Token]    |  - Sessions (UUID v4)    |  (user B's key)
  [Authorization]  |  - SSE streaming         |
                   |  - CORS                  |
  Client C ------->|                          |-------> Outline API
                   +--------------------------+  (user C's key)

Setup

# Required: set allowed MCP access tokens (comma-separated)
export MCP_AUTH_TOKENS="token-for-alice,token-for-bob"

# Optional: configure Outline API URL (default: https://app.getoutline.com/api)
export OUTLINE_API_URL="https://your-outline.example.com/api"

# Start the server
./outline-mcp --http

Client Requests

Each request must include two credentials:

  • X-MCP-Token header — server access token (one of the values from MCP_AUTH_TOKENS)

  • Authorization: Bearer <key> header — the user's own Outline API key

# Health check (no auth required)
curl http://127.0.0.1:3000/health

# Initialize session
curl -X POST http://127.0.0.1:3000/mcp \
  -H "Content-Type: application/json" \
  -H "X-MCP-Token: token-for-alice" \
  -H "Authorization: Bearer ol_api_xxxxx" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}'
# Response includes Mcp-Session-Id header

# List tools (with session)
curl -X POST http://127.0.0.1:3000/mcp \
  -H "Content-Type: application/json" \
  -H "X-MCP-Token: token-for-alice" \
  -H "Authorization: Bearer ol_api_xxxxx" \
  -H "Mcp-Session-Id: <id-from-init>" \
  -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}'

# Delete session
curl -X DELETE http://127.0.0.1:3000/mcp \
  -H "X-MCP-Token: token-for-alice" \
  -H "Mcp-Session-Id: <id-from-init>"

HTTP Endpoints

Method

Path

Auth

Description

GET

/health

No

Health check ({"status":"ok","version":"..."})

POST

/mcp

Yes

Process MCP JSON-RPC request

GET

/mcp

Yes

Open SSE stream (requires Mcp-Session-Id)

DELETE

/mcp

Yes

Terminate session (requires Mcp-Session-Id)

OPTIONS

*

No

CORS preflight

HTTP Error Responses

Status

Meaning

401

Missing or invalid X-MCP-Token / Authorization header

413

Request body exceeds HTTP_MAX_BODY_SIZE

415

Content-Type is not application/json

429

Rate limit exceeded for this IP

Configuration

Environment Variables

Variable

Mode

Required

Default

Description

OUTLINE_API_KEY

STDIO

Yes

Outline API key

OUTLINE_API_URL

Both

No

https://app.getoutline.com/api

Outline instance URL

MCP_AUTH_TOKENS

HTTP

Yes

Comma-separated MCP access tokens

HTTP_HOST

HTTP

No

127.0.0.1

Bind address

HTTP_PORT

HTTP

No

3000

Port number (>= 1024)

HTTP_RATE_LIMIT

HTTP

No

60

Max requests/min per IP

HTTP_SESSION_TIMEOUT

HTTP

No

1800

Session TTL in seconds (30 min)

HTTP_MAX_BODY_SIZE

HTTP

No

1048576

Max request body in bytes (1 MB)

RUST_LOG

Both

No

error (STDIO) / info (HTTP)

Log level

STDIO Mode (Default)

export OUTLINE_API_KEY="your-key-here"
./outline-mcp

HTTP Mode

export MCP_AUTH_TOKENS="my-secret-token"
./outline-mcp --http

Supported Tools (25)

Complete coverage of Outline API functionality:

Document Operations (12)

  • create_document - Create new document

  • get_document - Retrieve document by ID

  • update_document - Update existing document

  • delete_document - Delete document

  • list_documents - List documents with filtering

  • search_documents - Search documents by query

  • archive_document - Archive document

  • restore_document - Restore document from trash

  • unarchive_document - Unarchive document

  • move_document - Move document between collections

  • list_drafts - List draft documents

  • create_template_from_document - Create reusable templates

Collection Management (6)

  • create_collection - Create new collection

  • get_collection - Retrieve collection details

  • update_collection - Update collection metadata

  • delete_collection - Delete collection

  • list_collections - List all collections

  • get_collection_documents - Get document structure of a collection

Comments & Collaboration (5)

  • create_comment - Add comment to document

  • get_comment - Get comment by ID

  • update_comment - Modify existing comment

  • delete_comment - Remove comment

  • list_document_comments - List comments for a document

User Management (2)

  • list_users - List team members

  • get_user - Get user by ID

Architecture

┌─────────────────┐    ┌──────────────────────────────┐    ┌─────────────────┐
│   MCP Client    │────│      Transport Layer          │────│  Outline API    │
│ (Claude/Cursor) │    │  STDIO | Streamable HTTP      │    │   (REST/JSON)   │
└─────────────────┘    └──────────────────────────────┘    └─────────────────┘

Source Layout

src/
├── main.rs          # Entry point, logging init
├── lib.rs           # run_stdio(), run_http()
├── cli.rs           # CLI argument parsing
├── config.rs        # Environment variable configuration
├── error.rs         # Centralized error types
├── mcp.rs           # MCP JSON-RPC 2.0 protocol handler
├── outline.rs       # Outline API HTTP client
├── tools/           # MCP tool implementations
│   ├── mod.rs       # Tool registry & dispatcher
│   ├── common.rs    # Shared tool utilities
│   ├── documents.rs # Document operations (12 tools)
│   ├── collections.rs # Collection operations (6 tools)
│   ├── comments.rs  # Comment operations (5 tools)
│   └── users.rs     # User operations (2 tools)
└── http/            # Streamable HTTP transport
    ├── mod.rs       # HttpBody enum, module declarations
    ├── server.rs    # HttpServer, AppState, graceful shutdown
    ├── router.rs    # Request routing by method + path
    ├── handler.rs   # MCP POST/GET/DELETE handlers
    ├── auth.rs      # Token validation + rate limiting
    ├── session.rs   # UUID v4 session management with TTL
    ├── sse.rs       # SSE body + keepalive encoding
    ├── cors.rs      # CORS header management
    ├── request.rs   # Request validation (Content-Type, size)
    ├── response.rs  # HTTP response builders (status codes)
    └── health.rs    # GET /health endpoint

Project Principles

Performance

  • Static builds with musl/glibc - single file without dependencies

  • < 5MB binary with full functionality

  • < 10ms startup time to ready state

  • < 10MB memory usage

Reliability

  • Zero dependencies at runtime (static linking)

  • Explicit error handling - no panics in production

  • Type safety - leveraging Rust's ownership system

  • Comprehensive testing - unit and integration tests

Simplicity

  • Minimal code - only essential functionality

  • Clear architecture - easy to understand and modify

  • Single binary - simple deployment

  • Environment configuration - no config files

Development

Requirements

  • Nix (recommended) - handles all dependencies automatically

  • OR manually: Rust 1.75+, OpenSSL development libraries

Build Commands

# Development environments
nix develop              # Native development with tools
nix develop .#musl       # musl static build environment
nix develop .#windows    # Windows cross-compilation
nix develop .#macos      # macOS development (Darwin only)

# Package building
nix build                # Native build (Linux/macOS auto-detect)
nix build .#musl         # Static musl build (portable Linux)
nix build .#glibc-optimized # Optimized glibc build
nix build .#windows      # Windows cross-compilation
nix build .#macos-x86_64 # macOS Intel
nix build .#macos-arm64  # macOS Apple Silicon

Testing

# Run all tests
nix develop -c cargo test

# Integration tests
nix develop -c cargo test --test http_transport_tests
nix develop -c cargo test --test mcp_tests

Development Workflow

nix develop
cargo fmt
cargo clippy -- -D warnings
cargo test
cargo build --release

Contributing

  1. Fork the repository

  2. Create feature branch (git checkout -b feature/amazing-feature)

  3. Make changes with tests

  4. Ensure all checks pass: cargo fmt && cargo clippy -- -D warnings && cargo test

  5. Submit pull request

License

MIT License - see LICENSE file for details.

Acknowledgments

  • Outline team for excellent API documentation

  • Anthropic for MCP protocol specification

  • Rust community for outstanding tooling and libraries

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nizovtsevnv/outline-mcp-rs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server