Files
outline-mcp-custom/IMPLEMENTATION.md
Ben 5da443cef7
Some checks failed
Build and Push Docker Image / build (push) Failing after 0s
Initial commit: Outline MCP server with hybrid light pattern
2025-12-30 19:36:17 +00:00

8.8 KiB

Outline MCP Implementation Guide

This document provides implementation details and comprehensive API reference for AI agents using the Outline MCP server.

Architecture

The server follows the Hybrid MCP Light pattern:

  • 4 specific tools for common read operations
  • 1 API passthrough for full coverage
  • Embedded API reference resource

Tools Overview

search_documents

Full-text search across all documents.

Params: query (required), collection_id, limit (default 25), include_archived
Returns: Search results with document titles, IDs, and context snippets

get_document

Retrieve a document by ID.

Params: document_id (required), share_id
Returns: Document metadata and full Markdown content

list_collections

List all collections in the workspace.

Params: limit (default 25), offset
Returns: Collection names, IDs, permissions, and metadata

list_collection_documents

List documents within a specific collection.

Params: collection_id (required), limit, offset
Returns: Document tree structure for the collection

outline_api_call

Raw API passthrough for any Outline endpoint.

Params: method (required), params (JSON string)
Returns: Raw API response as JSON string

Outline API Reference

Outline uses an RPC-style API where all requests are POST to /api/. All responses have format: {"ok": true/false, "data": ...}

Authentication

All requests require Bearer token: Authorization: Bearer Get your token from Outline Settings > API Tokens.

Pagination

Most list endpoints accept: limit (default 25, max 100), offset (default 0) Response includes: pagination.nextPath if more results exist.


Documents

documents.list

List documents. Params: collectionId?, userId?, parentDocumentId?, sort?, direction?, limit?, offset?

documents.info

Get document by ID. Params: id (required), shareId?

documents.search

Full-text search. Params: query (required), collectionId?, userId?, dateFilter?, includeArchived?, includeDrafts?, limit?, offset?

documents.create

Create document. Params: title (required), collectionId (required), text?, parentDocumentId?, templateId?, template?, publish?

documents.update

Update document. Params: id (required), title?, text?, append?, publish?, done?

documents.delete

Delete document. Params: id (required), permanent?

documents.move

Move document. Params: id (required), collectionId?, parentDocumentId?

documents.archive

Archive document. Params: id (required)

documents.unarchive

Restore archived document. Params: id (required)

documents.restore

Restore deleted document. Params: id (required), revisionId?

documents.export

Export document. Params: id (required) Returns Markdown content.

documents.import

Import document. Multipart form: file, collectionId, parentDocumentId?, template?, publish?

documents.star

Star a document. Params: id (required)

documents.unstar

Remove star. Params: id (required)

documents.templatize

Convert to template. Params: id (required)

documents.unpublish

Unpublish document. Params: id (required)


Collections

collections.list

List all collections. Params: limit?, offset?

collections.info

Get collection details. Params: id (required)

collections.documents

Get document structure for collection. Params: id (required), limit?, offset?

collections.create

Create collection. Params: name (required), description?, color?, permission?, sharing?

collections.update

Update collection. Params: id (required), name?, description?, color?, permission?, sharing?

collections.delete

Delete collection. Params: id (required)

collections.add_user

Add user to collection. Params: id (required), userId (required), permission?

collections.remove_user

Remove user from collection. Params: id (required), userId (required)

collections.memberships

List collection members. Params: id (required), query?, permission?, limit?, offset?

collections.add_group

Add group to collection. Params: id (required), groupId (required), permission?

collections.remove_group

Remove group. Params: id (required), groupId (required)

collections.group_memberships

List group memberships. Params: id (required), query?, permission?, limit?, offset?

collections.export

Export entire collection. Params: id (required), format?

collections.export_all

Export all collections. Params: format?


Users

users.list

List workspace users. Params: query?, filter?, sort?, direction?, limit?, offset? Filter options: all, active, invited, suspended, admins

users.info

Get user by ID. Params: id (required)

users.invite

Invite users. Params: invites (array of {email, name, role})

users.update

Update user. Params: id (required), name?, avatarUrl?

users.delete

Delete user. Params: id (required)

users.suspend

Suspend user. Params: id (required)

users.activate

Activate suspended user. Params: id (required)

users.promote

Promote to admin. Params: id (required)

users.demote

Remove admin. Params: id (required)


Groups

groups.list

List groups. Params: query?, sort?, direction?, limit?, offset?

groups.info

Get group. Params: id (required)

groups.create

Create group. Params: name (required)

groups.update

Update group. Params: id (required), name (required)

groups.delete

Delete group. Params: id (required)

groups.memberships

List group members. Params: id (required), query?, limit?, offset?

groups.add_user

Add user to group. Params: id (required), userId (required)

groups.remove_user

Remove user from group. Params: id (required), userId (required)


Comments

comments.list

List comments on document. Params: documentId (required), limit?, offset?

comments.create

Create comment. Params: documentId (required), data (required - ProseMirror JSON)

comments.update

Update comment. Params: id (required), data (required)

comments.delete

Delete comment. Params: id (required)


Revisions

revisions.list

List document revisions. Params: documentId (required), limit?, offset?

revisions.info

Get revision. Params: id (required)


Shares

shares.list

List document shares. Params: documentId?, sort?, direction?, limit?, offset?

shares.info

Get share by ID or documentId. Params: id?, documentId?

shares.create

Create share link. Params: documentId (required), published?, urlId?, includeChildDocuments?

shares.update

Update share. Params: id (required), published?, urlId?, includeChildDocuments?

shares.revoke

Revoke share. Params: id (required)


Stars

stars.list

List starred documents. Params: limit?, offset?

stars.create

Star an item. Params: documentId?, collectionId?

stars.delete

Remove star. Params: id (required)


Events

events.list

List audit events. Params: name?, actorId?, documentId?, collectionId?, auditLog?, sort?, direction?, limit?, offset?


File Operations

fileOperations.list

List file operations. Params: type?, limit?, offset?

fileOperations.info

Get file operation status. Params: id (required)

fileOperations.redirect

Get download URL. Params: id (required)

fileOperations.delete

Delete file operation. Params: id (required)


Attachments

attachments.create

Create attachment upload URL. Params: name (required), documentId (required), size (required), contentType (required)

attachments.delete

Delete attachment. Params: id (required)

attachments.redirect

Get attachment URL. Params: id (required)


Auth

auth.info

Get current user and team info. No params.

auth.config

Get auth configuration. No params.


Views

views.list

List document views. Params: documentId (required), limit?, offset?

views.create

Record a view. Params: documentId (required)


Common Response Patterns

Success

{"ok": true, "data": {...}, "pagination": {"nextPath": "...", "limit": 25, "offset": 0}}

Error

{"ok": false, "error": "message", "status": 401}

Rate Limiting

HTTP 429 with Retry-After header


Usage Examples

Create a document

method: "documents.create"
params: {"title": "My Document", "collectionId": "collection-uuid", "text": "# Hello\n\nDocument content here.", "publish": true}

Update document content

method: "documents.update"
params: {"id": "document-uuid", "text": "# Updated Content\n\nNew content here."}

Delete a document

method: "documents.delete"
params: {"id": "document-uuid"}

Invite a user

method: "users.invite"
params: {"invites": [{"email": "user@example.com", "name": "User Name", "role": "member"}]}

Create a collection

method: "collections.create"
params: {"name": "Engineering", "description": "Engineering documentation", "permission": "read_write"}