outline-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@outline-mcpShow me the table of contents"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
outline-mcp
Tree-structured knowledge base as an MCP server.
LLM sessions are ephemeral. outline-mcp gives them a persistent, editable knowledge tree — sections and content nodes that can be browsed (toc), annotated with properties, and evolved across sessions. Nodes with inject=true are automatically included in session context.
Quick Start
cargo install --path .Claude Code (~/.claude.json)
Native binary (after cargo install)
{
"mcpServers": {
"outline": {
"command": "outline-mcp",
"args": ["/path/to/your-book.json"]
}
}
}Docker (no Rust toolchain required)
{
"mcpServers": {
"outline": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/to/data:/data",
"ghcr.io/ynishi/outline-mcp:latest",
"/data/your-book.json"
]
}
}
}If the path argument is omitted, defaults to outline-book.json in the current directory.
Related MCP server: kontexta
Workflow
shelf → select_book → toc → node_create / node_update / node_move
node_batch_move / node_batch_update / node_query
checklist / import / init / gen_routing
snapshot_create / snapshot_list / snapshot_restore
node_history / dumpinit— Create a new empty booknode_create— Add sections and content nodes (with optionalproperties)toc— View the table of contents with numbered IDs (e.g.1,2-3). Supportsfilterby propertiesselect_book— Select a book. Nodes withinject=trueproperty have their body auto-appended (draft nodes excluded)checklist— Export a section (or the whole book) as a Markdown checklist with checkboxesnode_update— Edit title, body, type, placeholder, properties, or status (active/draft) of a nodenode_move— Relocate or delete nodes (with descendants)node_batch_move— Move or delete multiple nodes in a single atomic call (requires UUID or UUID-prefix IDs)node_batch_update— Update title/body/type/properties/status on multiple nodes atomicallynode_query— Search nodes by property values, status (active/draft), or type (section/content); optionally include body in resultsimport— Import a book from a previously exported JSON filegen_routing— Generate a Markdown routing table from nodes withroutingproperty across all bookssnapshot_create/snapshot_list/snapshot_restore— Full book versioning (create, list, restore)node_history— View per-node change log with before/after diffsdump— Export full book as JSON file
Node IDs
toc assigns human-friendly numbered IDs:
1. Coding Standards
1-1. Naming Conventions
1-2. Error Handling
2. Testing
2-1. Unit Tests
2-2. Integration TestsThese IDs (1, 1-2, 2-1, etc.) work in most tools. Full UUIDs and title substring matching are also supported as fallbacks.
Note:
node_batch_moveandnode_batch_updaterequire UUID or UUID-prefix IDs. Hierarchical toc IDs are intentionally rejected to prevent positional drift when the tree is modified mid-batch.
Node Properties
Nodes can have key-value properties for metadata:
node_create title="My Rule" properties={"inject": "true", "scope": "rust"}inject=true— Node body is automatically included inselect_bookoutput (context injection)routing=<scene>— Marks the node forgen_routingoutput. Use|to assign multiple scenes (e.g.routing="testing|TDD")routing_ref=<text>— Overrides the default§ID Titlereference in the routing table (e.g.routing_ref="select_book で全体参照")Properties with value
"true"appear as tags intoc:1. My Rule [inject]tocsupports filtering:filter={"inject": "true"}shows only matching nodesProperties are preserved in JSON export/import
Architecture
The repository is a Cargo workspace with two crates: an rmcp-independent SDK (outline-mcp-core) and the MCP server binary (outline-mcp).
crates/
├── outline-mcp-core/ # SDK crate (library, no rmcp dependency)
│ └── src/
│ ├── domain/ # Core model (TemplateBook, TemplateNode, NodeId)
│ │ ├── model/ # Aggregate root + value objects
│ │ ├── error.rs # Domain errors
│ │ └── repository.rs # BookRepository trait
│ ├── application/ # Use cases
│ │ ├── service.rs # BookService (CRUD)
│ │ └── eject.rs # EjectService (Markdown/JSON export & import)
│ └── infra/ # Persistence
│ ├── json_store.rs # JSON file repository (atomic write)
│ ├── changelog_store.rs
│ └── snapshot.rs
└── outline-mcp/ # Binary crate (MCP server, depends on outline-mcp-core)
└── src/
├── main.rs # Entry point
└── interface/
└── mcp/ # MCP handlers (rmcp, stdio)Downstream applications that want to embed the tree / snapshot / changelog logic without pulling rmcp can depend on outline-mcp-core directly:
[dependencies]
outline-mcp-core = "0.7"Export Formats
Markdown (default)
# My Runbook
## Design
- [ ] Define requirements
> requirements list: ___
- [ ] API design
REST endpointsJSON
Tree-structured format that can be re-imported:
{
"title": "My Runbook",
"max_depth": 4,
"nodes": [
{
"title": "Design",
"node_type": "section",
"children": [...]
}
]
}Upgrading
From 0.9.1 or earlier
The snapshot subsystem now persists to a per-book SQLite event log ({shelf_dir}/{slug}.events.db) in addition to the existing on-disk .snap.{millis}.json files. Existing installs must run the migrator once to fold pre-existing on-disk snapshots into the event log — until they do, those snapshots stay on disk but are not visible to snapshot_list / snapshot_restore.
1. Back up the shelf directory. The migrator is idempotent and does not delete files, but the shelf directory is the source of truth for your books; a copy is cheap insurance.
cp -a <shelf-dir> <shelf-dir>.bak2. Run the migrator.
outline-mcp migrate-snapshots --shelf <shelf-dir>The migrator scans every {slug}.snap.{millis}.json file under <shelf-dir>, imports each into {shelf-dir}/{slug}.events.db with its original timestamp preserved, and leaves the source .json file in place. Output looks like:
== rust ==
scanned: 3
imported: 3
skipped: 0
failed: 0Pass --slug <slug> to migrate one book at a time.
3. Verify (optional). Re-running the migrator is a no-op — every file will report as skipped.
What the migrator does not do
It does not delete the source
.snap.*.jsonfiles. Keep them for a while as a second layer of backup.It will refuse a stream that already carries events from a different clock (e.g. a book that has been actively edited via
snapshot_createbetween the upgrade and the migrator run). Run the migrator before doing new writes.The startup warning that steers you here is emitted via
tracing::warn!onstderr. MCP clients that swallow server stderr (Claude Code included) will not surface it — treat the migrator command as the canonical way to check.
Known limitations
Snapshots that were post-hoc labeled via
snapshot_tag(as opposed to labeled atsnapshot_createtime) lose the "time the label was attached" value in their sidecar.meta.json's internalcreated_atfield. The label text itself is preserved, andcreated_atis never exposed through the MCP surface — this is an internal-metadata drift, not user-visible.
License
Licensed under either of
at your option.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityAmaintenanceLocal-first knowledge base MCP server. Lets AI agents (Claude Code, Cursor, etc.) read and write your personal knowledge base through 20 MCP tools. Zero cloud dependency — all files stay on your machine.Last updated1,758656MIT
- AlicenseAqualityBmaintenanceA local-first MCP server that gives AI coding agents persistent memory and controlled commands. Features a git-backed markdown knowledge vault with FTS5 search, surgical section edits, token-aware context budgeting, and a sandboxed command engine with human approval gates. Works with Claude Code, Cursor, Copilot, Gemini, and more.Last updated531Apache 2.0
- AlicenseAqualityCmaintenanceA Python MCP server that gives LLMs persistent, searchable access to project context — documentation, architecture decisions, and session notes.Last updated5AGPL 3.0
- Alicense-qualityCmaintenanceMCP server that implements Karpathy's LLM Wiki pattern for Obsidian vaults, enabling persistent knowledge storage and BM25 search across AI sessions.Last updated401MIT
Related MCP Connectors
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Cloud-hosted MCP server for durable AI memory
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ynishi/outline-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server