settings — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited settings (Hook) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
## 📢 Official Outline MCP Server Available
>
Outline now ships an official MCP server — we recommend using it. Read the docs.
<!-- mcp-name: io.github.Vortiago/mcp-outline -->
A 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.
Click a button to install with interactive API key prompt:
%22%2C%22password%22%3Afalse%7D%5D&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22mcp-outline%22%5D%2C%22env%22%3A%7B%22OUTLINE_API_KEY%22%3A%22%24%7Binput%3Aoutline_api_key%7D%22%2C%22OUTLINE_API_URL%22%3A%22%24%7Binput%3Aoutline_api_url%7D%22%7D%7D)
%22%2C%22password%22%3Afalse%7D%5D&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22mcp-outline%22%5D%2C%22env%22%3A%7B%22OUTLINE_API_KEY%22%3A%22%24%7Binput%3Aoutline_api_key%7D%22%2C%22OUTLINE_API_URL%22%3A%22%24%7Binput%3Aoutline_api_url%7D%22%7D%7D&quality=insiders)
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:latestThen 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}"
}
}
}
}<details> <summary>Claude Code</summary>
claude mcp add mcp-outline uvx mcp-outlineInstalling 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). </details>
<details> <summary>Claude Desktop</summary>
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>"
}
}
}
}</details>
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_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) |
| 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_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 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_filter windows by last change: day/week/month/year (default week). 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 searchread_document(document_id, offset?, limit?) - Get document content with optional line-range paginationexport_document(document_id) - Export document as markdownget_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)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)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 changesmove_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 collectionsbatch_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 documentsask_ai_about_documents(question, collection_id?, document_id?) - Ask natural language questions about your documentsoutline://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 documentgit 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.
Server not connecting? Test your API key:
curl -H "Authorization: Bearer YOUR_API_KEY" YOUR_OUTLINE_URL/api/auth.infoSee Troubleshooting Guide for common issues with tools, rate limiting, and Docker.
Contributions welcome! See CONTRIBUTING.md for setup instructions.
This project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.