mcpField
T
TriliumNext (trilium-mcp)

TriliumNext (trilium-mcp)

ローカル
github.com/OVDEN13メモリ・ナレッジ519 週間前に更新

TriliumNext (trilium-mcp) について

trilium-mcpは、ETAPI経由でセルフホストのTriliumNextナレッジベースを読み書きする、AIエージェント向けMCPサーバーです。ノート、属性、検索の操作を単一のGo静的バイナリで提供します。

主な機能

  1. 01ノートの作成、更新、削除
  2. 02ノートの一括作成と一括削除
  3. 03ノートと階層ツリーの取得
  4. 04ノート検索と属性管理
  5. 05ノートの移動、複製、内容追記

活用シーン

  1. 01調査資料や決定事項をナレッジベースに記録
  2. 02ノートとラベルで構造化テーブルを管理
  3. 03ナレッジベースを検索して会話に抜粋を取り込む

MCP 対応

stdio経由でMCPクライアントにツールを提供し、ETAPIを介したTriliumNextのノートや属性の読み書きを可能にします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ovden13-trilium": {
"command": "docker",
"args": [
"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.5"
],
"env": {
"TRILIUM_URL": "<TRILIUM_URL>",
"TRILIUM_TOKEN": "<TRILIUM_TOKEN>",
"TRILIUM_HTTP_TIMEOUT_SECONDS": "<TRILIUM_HTTP_TIMEOUT_SECONDS>",
"TRILIUM_MCP_LOG": "<TRILIUM_MCP_LOG>"
}
}
}
}
起動コマンド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.5
設定が必要な環境変数
TRILIUM_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 -> ETAPI
TRILIUM_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/ovden13/trilium-mcp:0.1.5

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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_notes1 回の呼び出しで複数のノートを作成します。再構成時の呼び出しごとのスキーマ処理のオーバーヘッドを削減できます。
get_noteノートのメタデータを取得します。任意で本文も含められます。
get_note_subtreeノートとその子孫を、指定した階層数までネストされたツリーとして再帰的に取得します。N+1 回の get_note 呼び出しを置き換えます。
update_note部分更新を行います。変更したいフィールドだけを指定し、省略したフィールドはそのままにします。
append_content設定可能な区切り文字を使って、本文にテキストを追記します。
delete_noteノートとそのサブツリーを削除します。
batch_delete_notes複数のノートを削除します。一部で失敗しても、残りの処理は続行します。
move_note2 回の ETAPI 呼び出しでノートの親を変更します(従来の読み取り・再作成・削除の手順に代わります)。
clone_noteノートを別の親の下にも追加します。Trilium ネイティブの複数親リンクを使用します。
delete_branchノートを削除せずに、1 つの親子リンクを削除します(クローン解除)。
search_notesTrilium の強力な検索機能を利用します(#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_SECONDS30リクエストごとのタイムアウト
TRILIUM_MCP_LOGinfooff / 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 と通信します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。