
TriliumNext (trilium-mcp)
Connects Claude to a self-hosted TriliumNext knowledge base over ETAPI. You get sixteen tools covering the full lifecycle: create notes with labels in one shot, batch operations to avoid schema overhead, recursive subtree fetches, append-only content updates, and Trilium's native search syntax with regex, numeric comparisons, and relation traversal. The real win is using Trilium's collection views as structured databases. Create child notes under a parent, tag them with labels as columns, and query them like rows. An agent can maintain reading lists, decision logs, or any table-like data without leaving the note tree. Single Go binary, stdio transport, zero runtime dependencies.
- GitHub stars
- 1
- tools
- 16
- auth
- Secret needed
- transport
- STDIO
- env vars
- 4
- last updated
- May 11, 2026
Tools
16 toolsPublic tool metadata for what this MCP can expose to an agent.
create_noteCreate a note (optionally under a parent, with labels in one shot).
Create a note (optionally under a parent, with labels in one shot).
No parameter schema in public metadata yet.
batch_create_notesCreate many notes in one call — saves per-call schema overhead during restructuring.
Create many notes in one call — saves per-call schema overhead during restructuring.
No parameter schema in public metadata yet.
get_noteFetch note metadata; optionally include body content.
Fetch note metadata; optionally include body content.
No parameter schema in public metadata yet.
get_note_subtreeRecursively fetch a note + descendants up to N levels as a nested tree — replaces N+1 `get_note` calls.
Recursively fetch a note + descendants up to N levels as a nested tree — replaces N+1 `get_note` calls.
No parameter schema in public metadata yet.
update_notePartial update: include only the fields you want to change; omitted fields stay as-is.
Partial update: include only the fields you want to change; omitted fields stay as-is.
No parameter schema in public metadata yet.
append_contentAppend text to the body with a configurable separator.
Append text to the body with a configurable separator.
No parameter schema in public metadata yet.
delete_noteDelete a note and its subtree.
Delete a note and its subtree.
No parameter schema in public metadata yet.
batch_delete_notesDelete many notes; partial failures don't stop the rest.
Delete many notes; partial failures don't stop the rest.
No parameter schema in public metadata yet.
move_noteRe-parent a note in two ETAPI calls (vs the old read-recreate-delete dance).
Re-parent a note in two ETAPI calls (vs the old read-recreate-delete dance).
No parameter schema in public metadata yet.
clone_noteAdd the note under an additional parent — Trilium-native multi-parent links.
Add the note under an additional parent — Trilium-native multi-parent links.
No parameter schema in public metadata yet.
delete_branchRemove one parent-child link without deleting the note (un-clone).
Remove one parent-child link without deleting the note (un-clone).
No parameter schema in public metadata yet.
search_notesFull-power Trilium search (`#label`, `~relation`, `note.title %= "regex"`, ancestor scoping, etc.).
Full-power Trilium search (`#label`, `~relation`, `note.title %= "regex"`, ancestor scoping, etc.).
No parameter schema in public metadata yet.
add_labelAttach a label (`#key=value`) — acts as a "column" in collection views.
Attach a label (`#key=value`) — acts as a "column" in collection views.
No parameter schema in public metadata yet.
add_relationAttach a relation (`~name → noteId`) — like a foreign key between notes.
Attach a relation (`~name → noteId`) — like a foreign key between notes.
No parameter schema in public metadata yet.
remove_attributeRemove a label or relation by its attribute id.
Remove a label or relation by its attribute id.
No parameter schema in public metadata yet.
list_attributesList all labels and relations on a note.
List all labels and relations on a note.
No parameter schema in public metadata yet.
Sponsors
Configuration
TRILIUM_URL*Base URL of the Trilium ETAPI. Comma-separated for failover: fast LAN first, public fallback (e.g. http://192.168.0.10:8092,https://memo.example.com).
TRILIUM_TOKEN*secretETAPI token created in Trilium under Options -> ETAPI
TRILIUM_HTTP_TIMEOUT_SECONDSPer-request HTTP timeout in seconds (default 30)
TRILIUM_MCP_LOGTool-call log level on stderr: off / info (default) / debug
Readme
trilium-mcp
An MCP server that lets AI agents (Claude Desktop, Claude Code, any MCP-compatible client) read and write a self-hosted TriliumNext knowledge base over its ETAPI.
Single static Go binary. No runtime dependencies. Talks to your local Trilium over HTTP(S) and to the client over stdio.
Why
TriliumNext is a strong personal KB: tree-of-notes with attributes (labels, relations) that double as table columns / board lanes / calendar events. This MCP exposes the right slice of ETAPI so an agent can:
- Capture stuff into your notes (reading lists, decisions, research dumps).
- Maintain structured "tables" by creating notes-as-rows under a parent and tagging them with labels-as-columns.
- Search your existing KB and feed snippets back into a conversation.
It is intentionally minimal: ten tools, ~600 lines of Go, zero clever abstractions.
Tools
Details
- Repository
- github.com/ovden13/trilium-mcp
- Category
- Documents & Knowledge
- Package
ghcr.io/ovden13/trilium-mcp:0.1.5- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active