TriliumNext (trilium-mcp) について
trilium-mcpは、ETAPI経由でセルフホストのTriliumNextナレッジベースを読み書きする、AIエージェント向けMCPサーバーです。ノート、属性、検索の操作を単一のGo静的バイナリで提供します。
主な機能
- 01ノートの作成、更新、削除
- 02ノートの一括作成と一括削除
- 03ノートと階層ツリーの取得
- 04ノート検索と属性管理
- 05ノートの移動、複製、内容追記
活用シーン
- 01調査資料や決定事項をナレッジベースに記録
- 02ノートとラベルで構造化テーブルを管理
- 03ナレッジベースを検索して会話に抜粋を取り込む
MCP 対応
stdio経由でMCPクライアントにツールを提供し、ETAPIを介したTriliumNextのノートや属性の読み書きを可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e TRILIUM_URL -e TRILIUM_TOKEN -e TRILIUM_HTTP_TIMEOUT_SECONDS -e TRILIUM_MCP_LOG ghcr.io/ovden13/trilium-mcp:0.1.5TRILIUM_URLBase 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シークレットETAPI token created in Trilium under Options -> ETAPITRILIUM_HTTP_TIMEOUT_SECONDSPer-request HTTP timeout in seconds (default 30)TRILIUM_MCP_LOGTool-call log level on stderr: off / info (default) / debugローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/ovden13/trilium-mcp:0.1.5stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
trilium-mcp
AI エージェント(Claude Desktop、Claude Code、MCP 互換クライアント)から、セルフホスト可能な TriliumNext ナレッジベースを ETAPI 経由で読み書きできる MCP サーバーです。
単一の静的 Go バイナリです。実行時の依存関係はありません。HTTP(S) 経由でローカルの Trilium と通信し、stdio 経由でクライアントと通信します。
その理由
TriliumNext は優れた個人用ナレッジベースです。ラベルやリレーションなどの属性を備えたノートのツリー構造が、テーブルの列、ボードのレーン、カレンダーのイベントとしても機能します。この MCP は、エージェントが以下を行うのに適した ETAPI の機能を公開します。
- ノートに情報を記録する(読書リスト、意思決定、調査メモなど)。
- 親ノートの下に行としてノートを作成し、列としてラベルを付けて、構造化された「テーブル」を管理する。
- 既存のナレッジベースを検索し、抜粋を会話に取り込む。
意図的に最小限の設計にしています。ツールは 10 個、Go のコードは約 600 行で、凝った抽象化はありません。
ツール
| ツール | 目的 |
|---|---|
create_note | ノートを作成します(任意で親ノートの指定やラベルの一括設定もできます)。 |
batch_create_notes | 1 回の呼び出しで複数のノートを作成します。再構成時の呼び出しごとのスキーマ処理のオーバーヘッドを削減できます。 |
get_note | ノートのメタデータを取得します。任意で本文も含められます。 |
get_note_subtree | ノートとその子孫を、指定した階層数までネストされたツリーとして再帰的に取得します。N+1 回の get_note 呼び出しを置き換えます。 |
update_note | 部分更新を行います。変更したいフィールドだけを指定し、省略したフィールドはそのままにします。 |
append_content | 設定可能な区切り文字を使って、本文にテキストを追記します。 |
delete_note | ノートとそのサブツリーを削除します。 |
batch_delete_notes | 複数のノートを削除します。一部で失敗しても、残りの処理は続行します。 |
move_note | 2 回の ETAPI 呼び出しでノートの親を変更します(従来の読み取り・再作成・削除の手順に代わります)。 |
clone_note | ノートを別の親の下にも追加します。Trilium ネイティブの複数親リンクを使用します。 |
delete_branch | ノートを削除せずに、1 つの親子リンクを削除します(クローン解除)。 |
search_notes | Trilium の強力な検索機能を利用します(#label、~relation、note.title %= "regex"、祖先による絞り込みなど)。 |
add_label | ラベル(#key=value)を付与します。コレクションビューで「列」として機能します。 |
add_relation | リレーション(~name → noteId)を付与します。ノート間の外部キーのように機能します。 |
remove_attribute | 属性 ID を指定してラベルまたはリレーションを削除します。 |
list_attributes | ノートのすべてのラベルとリレーションを一覧表示します。 |
クイックスタート
1. TriliumNext を起動する
まだお持ちでない場合:
# docker-compose.yml
services:
trilium:
image: triliumnext/notes:latest
ports:
- "8092:8080"
volumes:
- ./data:/home/node/trilium-data
docker compose up -d
http://localhost:8092/ を開いてセットアップウィザードを完了し、オプション → ETAPI → 新しい ETAPI トークンを作成を選択します。トークンをコピーしてください(表示されるのは一度だけです)。
2. trilium-mcp をインストールする
ビルド済みバイナリ(推奨)— リリースから適切なアーカイブを取得します。
ソースから Go 1.23 以降でビルドする場合:
go install github.com/OVDEN13/trilium-mcp@latest
Docker を使う場合(ホストに Go は不要です):
git clone https://github.com/OVDEN13/trilium-mcp && cd trilium-mcp
docker build -t trilium-mcp .
3. 設定する
.env.example をバイナリと同じ場所に .env としてコピーします。
TRILIUM_URL=http://localhost:8092
TRILIUM_TOKEN=your-etapi-token-here
# Optional:
# TRILIUM_HTTP_TIMEOUT_SECONDS=30
または、同じ値を実際の環境変数として渡すこともできます。サーバーはいずれの方法でも読み込みます。
4. MCP クライアントに登録する
Claude Code(CLI):
claude mcp add --scope user trilium /path/to/trilium-mcp \
--env TRILIUM_URL=http://localhost:8092 \
--env TRILIUM_TOKEN=your-token
Claude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)またはお使いの OS に対応する同等のファイルに追加します。
{
"mcpServers": {
"trilium": {
"command": "/absolute/path/to/trilium-mcp",
"env": {
"TRILIUM_URL": "http://localhost:8092",
"TRILIUM_TOKEN": "your-token"
}
}
}
}
クライアントを再起動すると、10 個のツールが trilium__* として表示されます。
使用パターン
ノートの「データベース」(最大の特長)
Trilium のコレクションビュー(テーブル/ボード/カレンダー)は、共通のラベルに基づいて任意のノートの子ノートを表示します。そのため、「テーブル」は親ノートと子ノート、そして一貫したラベルのスキーマだけで構成できます。
Books (parent)
├── "Atomic Habits" #status=read #rating=9 #author=Clear
├── "Antifragile" #status=read #rating=8 #author=Taleb
└── "Деньги" #status=reading #author=Жонсон
エージェントは次のようにデータを追加します。
// 1. Create the row
create_note({
parent_note_id: "<id of Books>",
title: "Atomic Habits",
labels: { "status": "read", "rating": "9", "author": "Clear" }
})
// 2. Query rows later
search_notes({ query: "#status=read #rating>=8", ancestor_note_id: "<id of Books>" })
Trilium の UI で親ノートのビューをテーブルに切り替えるか、status でボードに、日付ラベルでカレンダーに切り替えれば、ノートから離れることなくデータベースを利用できます。
追記専用ログ
append_content({ note_id: "<journal id>", content: "Decided to ship v0.2 on Monday." })
append_content は既存の内容を壊さずに追記できるため、日記、意思決定ログ、アイデアの書き出しに便利です。
Trilium 検索チートシート
#tag— ノートにtagラベルが付いています。#status=active— ラベルが一致します。#rating>=8— 数値を比較します。~author.title *= "Clear"— 関連をたどり、関連先のタイトルを照合します。note.title %= "^Re:"— タイトルに正規表現を適用します。note.content *= "kubernetes"— 本文内の部分文字列を検索します。#status=active OR #status=pending— 論理演算を行います。ancestor_note_idと組み合わせて、サブツリーの範囲に絞り込みます。
詳細なリファレンス:Trilium 検索ドキュメント。
環境変数
| 変数 | デフォルト値 | 説明 |
|---|---|---|
TRILIUM_URL | 必須 | Trilium インスタンスのベース URL。例:http://localhost:8092。/etapi パスは自動的に追加されますが、末尾の /etapi は許容され、削除されます(そのため、http://localhost:8092/etapi も使用できます)。カンマ区切りで複数の URL を指定できます。サーバーは指定された順に試し、トランスポートエラー(DNS/接続/タイムアウト)の場合は次の URL にフォールバックします。404 などの HTTP エラーはリトライせず、ただちに返されます。例:http://192.168.0.10:8092,https://memo.example.com(LAN の高速な URL を先に、公開 URL をフォールバック先に指定)。 |
TRILIUM_TOKEN | 必須 | Trilium の設定にある ETAPI トークン |
TRILIUM_HTTP_TIMEOUT_SECONDS | 30 | リクエストごとのタイムアウト |
TRILIUM_MCP_LOG | info | off / info / debug。ログは stderr に書き込まれます(stdout は MCP JSON-RPC ストリーム専用です)。info では、ツール呼び出しごとに名前、所要時間、成功/エラーが 1 行で表示されます。debug では、リクエスト引数とレスポンスの一部を切り詰めて表示します。 |
ソースからビルドする
git clone https://github.com/OVDEN13/trilium-mcp
cd trilium-mcp
go build -ldflags="-s -w" -o trilium-mcp .
クロスコンパイルする場合(例:Linux から macOS 向けにビルド):
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -o trilium-mcp-darwin-arm64 .
セキュリティに関する注意事項
- サーバーは環境変数から
TRILIUM_TOKENを読み取ります。パスワードと同様に扱ってください。このトークンを持つ人は、ナレッジベース全体の読み取りと書き込みが可能です。.envは git の対象にしないでください(.gitignoreに含まれています)。 - バイナリが通信するのは、設定された Trilium URL のみです。外部への接続、ディスクへのログ記録、待ち受けポートの開放は行いません。
- HTTPS は自動的に機能します(ホストから実行する場合、バイナリにはシステム CA が含まれています。Docker イメージには
ca-certificatesが含まれています)。
コントリビューション
PR を歓迎します。以下のような改善が役立ちます。
- 大きなノート本文をバッファリングせずにストリーム処理する。
move_note/clone_noteツール。- 一括操作(
add_label_to_many)。 - TriliumNext の機能追加に伴う ETAPI v2 の機能への対応。
- 一時的な TriliumNext コンテナを使ったテスト。
大規模な変更を行う場合は、まず issue を作成して方向性をご相談ください。
ライセンス
MIT。
trilium-mcp は独立したプロジェクトであり、TriliumNext プロジェクトによる承認を受けておらず、同プロジェクトとも提携していません。TriliumNext 自体は AGPL-3.0 でライセンスされています。この MCP サーバーは、公開 ETAPI 経由でのみ TriliumNext と通信します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。