trilium-bolt
trilium-bolt is an MCP server that lets AI search, read, create, edit, and organize Trilium Notes, with markdown conversion for text notes.
Search notes using full-text or attribute/label queries, with result limits.
Retrieve note content/metadata or inspect note hierarchy up to 5 levels deep.
Create notes with title, markdown/HTML content, note type, parent, and label/relation attributes.
Update note title/content/attributes, or patch content via find-and-replace using literal text or regex.
Delete notes and remove labels/relations.
Create database backups and note revision snapshots.
Use markdown by default for text-note read/write; optionally pass raw HTML.
Allows AI agents to search, create, update, and organize notes in Trilium Notes, a note-taking application. Provides tools for full-text search, note retrieval, hierarchy exploration, note creation/update with markdown or HTML, attribute management, backups, and revisions.
Click on "Deploy 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., "@trilium-bolt Search my Trilium notes for 'machine learning'"
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.
trilium-bolt
Lightning-fast MCP server for Trilium Notes — returns LLM-friendly markdown instead of raw HTML, so AI can read and write your notes naturally. Search, create, update, and organize your notes with AI. Connect Claude to your personal knowledge base with minimal setup.
Quick Start
1. Get your Trilium token
In Trilium: Options → ETAPI → Create new ETAPI token
2. Configure Claude Code to use the MCP server
Add to your ~/.claude.json:
{
"mcpServers": {
"trilium": {
"command": "npx",
"args": ["-y", "trilium-bolt@latest"],
"env": {
"TRILIUM_TOKEN": "your-token-here"
}
}
}
}Not using Claude Code? See setup instructions for Cursor, Windsurf, VS Code, Cline, and other MCP clients
Running Trilium in Docker? See the Docker Setup Guide
Staying on the latest version
Pinning @latest in the config above makes npx re-check the npm registry on every launch, so new tool releases show up automatically the next time your MCP client restarts.
Already configured without
@latest? Update your config totrilium-bolt@latestas shown above, then restart your MCP client so it respawns the server process.Still seeing an old version after that?
npxcan serve a stale cached copy — clear it once withnpx clear-npx-cache(or delete~/.npm/_npx), then restart your client again.Installed globally instead (
npm install -g trilium-bolt)? Global installs don't auto-update — runnpm install -g trilium-bolt@latestto upgrade.Confirm the version in use:
npm view trilium-bolt versionshows the latest published version on npm to compare against.
3. Use it
You: Search my notes for "project ideas"
You: Create a new note called "Meeting Notes" under my Work folder
You: What's in my daily journal from last week?That's it!
Related MCP server: triliumnext-mcp
Why Lightweight?
Unlike traditional servers, trilium-bolt uses stdio transport - meaning:
On-demand execution - Only runs when Claude needs it, not a 24/7 daemon
Zero network ports - No HTTP server, no port conflicts, no firewall rules
Minimal memory - ~20-30MB when active, 0MB when idle
No background processes - Spawned by Claude, terminates when done
Instant startup - No container spin-up, just a Node.js process
How it works
┌──────────────┐ stdin/stdout ┌─────────────┐ ETAPI ┌─────────────┐
│ MCP Client │ ◄──────────────────► │ trilium-bolt │ ◄────────────► │ Trilium │
│ (Claude Code,│ └─────────────┘ └─────────────┘
│ Cursor, etc)│ Runs on-demand Your notes
└──────────────┘ No daemon Local appThis is the simplest possible architecture - just a CLI that your MCP client invokes when you ask about your notes.
Markdown support
Trilium stores notes as HTML internally, but LLMs work much better with markdown. trilium-bolt handles the conversion transparently:
Reading notes — HTML content is automatically converted to markdown before returning to the AI
Creating/updating notes — Content is accepted as markdown by default and converted to HTML before saving to Trilium
HTML pass-through — Set
contentFormat: "html"on create/update calls if you need to send raw HTMLOther note types — Only
textnotes are converted. Code, canvas and every other type are read and saved exactly as stored, andcontentFormatis ignored for them
No configuration needed — markdown is the default for both input and output.
Tools
Tool | Description |
| Full-text and attribute search; |
| Retrieve note content (as markdown for text notes, raw otherwise) and metadata, including parent and child note IDs; supports |
| Get children/hierarchy of a note |
| List revision snapshots for a note, newest first |
| Get a single revision's content and metadata |
| Create a new note — accepts markdown (default) or HTML, or |
| Update note title, content (markdown or HTML, or |
| Find-and-replace a piece of a note's content without resending the whole note; optional |
| Delete a note |
| Delete an attribute (label or relation) from a note by name |
| Create a backup of the Trilium database |
| Create a revision snapshot of a note's current content; returns the new |
Configuration
Variable | Required | Default | Description |
| Yes | - | Your ETAPI token |
| No |
| Trilium server URL |
| No | - | Folder that |
Examples
Search notes:
Search my Trilium notes for anything about "machine learning"
Find all my notes tagged with "recipe"
Show me notes that are tagged both "recipe" and "vegetarian"
Find all notes where the priority label is set to "high" and status is "active"
Find all notes whose titles start with "Meeting"Create a note:
Create a note titled "Book Notes: Atomic Habits" with a summary of the key points
Create a note called "Pasta Carbonara" tagged with "recipe" and "italian"Create/update notes with attributes:
Create a note "Sprint Planning" with labels priority=high and status=active
Add a "completed" tag to my "Q4 Report" note
Update the priority label on my "Bug Fix" note to "low"Delete attributes:
Remove the "deprecated" tag from my "Old API" note
Delete the priority label from my "Task List" noteBackups and revisions:
Create a backup of my Trilium database called "before-cleanup"
Save a revision of my "Project Plan" note before I make changesExplore hierarchy:
Show me the structure of my "Projects" folderBuilding from source
git clone https://github.com/mursilsayed/trilium-bolt.git
cd trilium-bolt
npm install
npm run buildTo use your local build instead of the published package, point your MCP client to the built output:
{
"mcpServers": {
"trilium": {
"command": "node",
"args": ["/absolute/path/to/trilium-bolt/dist/index.js"],
"env": {
"TRILIUM_TOKEN": "your-token-here"
}
}
}
}For development, use npm run dev to rebuild on file changes.
Publishing to npm
npm run build
npm publishTo publish a pre-release or dry-run first:
npm publish --dry-runRequirements
Node.js 18+
Trilium Notes running with ETAPI enabled
License
MIT
Available Tools
10 toolscreate_backupA
Create a backup of the Trilium database
Inputs: backupName (required).
create_noteA
Create a new note in Trilium. Content can be provided as markdown (default) or HTML via the contentFormat parameter.
Inputs: title (required), content (required), mime, type, +3 more.
create_revisionB
Create a revision snapshot of a note's current content
Inputs: noteId (required).
delete_attributeA
Delete an attribute (label or relation) from a note by name
Inputs: noteId (required), attributeName (required), attributeType.
delete_noteB
Delete a note from Trilium
Inputs: noteId (required).
get_noteA
Get a note by ID, including its content and metadata. Text note content is returned as markdown for easier reading and processing.
Inputs: noteId (required), includeContent.
get_note_treeA
Get the children/hierarchy of a note
Inputs: depth, noteId.
patch_noteA
Find-and-replace a piece of a note's content without resending the whole note. Rejects the call if "search" matches zero or more than one location, unless "occurrence" is given to disambiguate.
Inputs: noteId (required), search (required), replace (required), isRegex, +2 more.
search_notesB
Search for notes in Trilium using full-text search or attribute queries
Inputs: query (required), limit.
update_noteA
Update a note's title and/or content. Content can be provided as markdown (default) or HTML via the contentFormat parameter.
Inputs: noteId (required), title, content, attributes, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct operation: search, retrieval, tree navigation, CRUD for notes, attribute deletion, backups, and revisions. While update_note and patch_note both modify content, their descriptions clearly separate full updates from targeted find-and-replace, preventing real ambiguity.
All tools follow a consistent snake_case verb_noun pattern (search_notes, get_note, create_note, delete_attribute, create_backup). The naming style is uniform and predictable across the entire tool set.
With 10 tools, the server is well-scoped for a note management domain. Each tool covers a meaningful operation without unnecessary bloat or redundancy.
The core note lifecycle is fully covered with create, read, update, delete, search, and hierarchy traversal. However, attribute management is one-sided (only delete_attribute, with no create/update), and revisions can be created but not listed or retrieved, leaving minor lifecycle gaps.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Notes and memory assistant: one Markdown vault that Claude, ChatGPT and any MCP client can share.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server enabling AI assistants to interact with TriliumNext notes, providing tools for creating, searching, reading, and updating notes in your knowledge base.42MIT
- AlicenseNot gradedqualityBmaintenanceA Model Context Protocol (MCP) server for interacting with TriliumNext via its ETAPI. Enables LLMs to create, read, update, and organize notes, including embedding images and files directly into note content.1,341 npm70MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.3 npm2MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for connecting ChatGPT Web to a TriliumNext knowledge base, enabling search, read, create, edit, rename, and move operations through the Trilium ETAPI.-