Skip to main content
Glama
trilium-bolt

trilium-bolt

by mursilsayed

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 to trilium-bolt@latest as shown above, then restart your MCP client so it respawns the server process.

  • Still seeing an old version after that? npx can serve a stale cached copy — clear it once with npx 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 — run npm install -g trilium-bolt@latest to upgrade.

  • Confirm the version in use: npm view trilium-bolt version shows 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 app

This 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 HTML

  • Other note types — Only text notes are converted. Code, canvas and every other type are read and saved exactly as stored, and contentFormat is ignored for them

No configuration needed — markdown is the default for both input and output.

Tools

Tool

Description

search_notes

Full-text and attribute search; includeArchived also searches notes labelled #archived

get_note

Retrieve note content (as markdown for text notes, raw otherwise) and metadata, including parent and child note IDs; supports contentStart/contentMaxChars to page through large notes; always reports contentSha256 and contentLength for the whole note

get_note_tree

Get children/hierarchy of a note

get_revisions

List revision snapshots for a note, newest first

get_revision

Get a single revision's content and metadata

create_note

Create a new note — accepts markdown (default) or HTML, or contentFilePath; returns utcDateModified

update_note

Update note title, content (markdown or HTML, or contentFilePath), or attributes; optional expectedUtcDateModified for optimistic concurrency; returns the new utcDateModified

patch_note

Find-and-replace a piece of a note's content without resending the whole note; optional expectedUtcDateModified for optimistic concurrency; returns the new utcDateModified

delete_note

Delete a note

delete_attribute

Delete an attribute (label or relation) from a note by name

create_backup

Create a backup of the Trilium database

create_revision

Create a revision snapshot of a note's current content; returns the new revisionId

Configuration

Variable

Required

Default

Description

TRILIUM_TOKEN

Yes

-

Your ETAPI token

TRILIUM_URL

No

http://localhost:37840

Trilium server URL

TRILIUM_CONTENT_DIR

No

-

Folder that contentFilePath may read from. If unset, contentFilePath is disabled. Paths outside it are rejected after resolving symbolic links

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" note

Backups and revisions:

Create a backup of my Trilium database called "before-cleanup"
Save a revision of my "Project Plan" note before I make changes

Explore hierarchy:

Show me the structure of my "Projects" folder

Building from source

git clone https://github.com/mursilsayed/trilium-bolt.git
cd trilium-bolt
npm install
npm run build

To 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 publish

To publish a pre-release or dry-run first:

npm publish --dry-run

Requirements

  • Node.js 18+

  • Trilium Notes running with ETAPI enabled

License

MIT

Available Tools

10 tools
create_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

    A3.8/5.0

    Scored across 10 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    With 10 tools, the server is well-scoped for a note management domain. Each tool covers a meaningful operation without unnecessary bloat or redundancy.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A 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.
      4
      2
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      A 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 npm
      70
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
      3 npm
      2
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      MCP server for connecting ChatGPT Web to a TriliumNext knowledge base, enabling search, read, create, edit, rename, and move operations through the Trilium ETAPI.
      -