mcpField
T
trip2g

trip2g

リモート
trip2g.comメモリ・ナレッジ401 週間前に更新
リポジトリ公式サイト

trip2g について

trip2g は、Obsidian のボルトをウェブサイトとして公開し、同じノートを MCP エンドポイント経由で AI エージェントに提供するセルフホスト型のハブです。1 組の Markdown ノートを読者とエージェントの両方に使いたいユーザーを対象としています。単一の Go バイナリと SQLite で動作し、ノートはプレーンな Markdown ファイルとして保存されます。

主な機能

  1. 01全文検索とセマンティック検索のハイブリッド検索
  2. 02ID、パス、一致条件によるノートの読み取り
  3. 03類似ノートを探すツール
  4. 04ピアハブをまたぐフェデレーション検索
  5. 05git に反映されるノートのバージョン履歴
  6. 06セルフホスト可能な単一プロセス構成

活用シーン

  1. 01AI クライアントから個人やチームの Obsidian ボルトを検索する
  2. 02同じノートをウェブサイトと Telegram チャンネルに公開する
  3. 03接続された複数のナレッジベースをまたいで一度に問い合わせる

MCP 対応

trip2g は各ハブで MCP サーバーとして動作し、search、note_html、similar、federated_* などのツールと instructions プロンプトを公開します。アクセス範囲は呼び出し元のサブスクリプションによって制限されます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://trip2g.com/_system/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

11
パラメーター型必須説明
pidnumberいいえ検索結果の note_id フィールドからそのままコピーした、0 以上の整数(uint64)のノート ID。パス、slug、match_id ではありません。path を優先してください
hrefstringいいえ検索結果の href フィールドからそのままコピーしたノート href 文字列
lastnumberいいえすべてではなく、最新の下位項目を指定数だけ列挙します。ノートに日付付きセクションが毎日追加されると、1 年後には数百件になります。最新の数件に到達するために一覧全体を読むコストを避けられます。summary、total_children、omitted が省略内容を示すため、件数を制限した一覧が完全な一覧と誤解されることはありません。範囲が接する、または重なる場合は、同じ部分を重複して返さず、すべてを返します。
pathstringいいえ文字列形式のノートパス。例:"concepts/maska-i-glubina.md" — 検索結果の note_path フィールドからそのままコピーします。ノートを参照するデフォルトかつ推奨の方法です
firstnumberいいえ最も古いサブセクションを指定した数だけ列挙します。`last` と組み合わせると、途中を省いて、対象の始まりと現在の状況を確認できます。要約には省略部分の位置が示されます。
note_idnumberいいえpid と同じです。検索結果の note_id フィールドからそのままコピーした、0 以上の整数(uint64)のノート ID。パス、slug、match_id ではありません。path を優先してください
toc_patharrayいいえ展開するノードへのパンくずパス。例:["Chapter 1"]。最上位では省略するか [] を渡します。

詳細

trip2g

Obsidian の保管庫をウェブサイトとして公開します。AI エージェント向けのセルフホスト可能な MCP メモリです。

Obsidian で書いて、同期を押せば、ノートが公開されます。同じセルフホスト可能なハブが、読者にはウェブサイトを、エージェントには MCP エンドポイントを提供し、Telegram に投稿し、有料コンテンツへのアクセスを制限します。内部では、Markdown オペレーティングシステムとして動作します。すべてのノートはファイルであり、1 つのノートが人間向けのウェブページにも、エージェント向けのツール呼び出しにもなります。

CI License: MIT Release GitHub stars Go

trip2g を選ぶ理由

  • ノートを 2 通りに活用できます。 1 つの Markdown ファイルが、読者向けのページとして表示されると同時に、あらゆる MCP クライアントからの search / note_html 呼び出しに応答します。エクスポートの手間はなく、読み取れないベクトルストアに知識のコピーを閉じ込めることもありません。
  • データは自分の手元に残ります。 プレーンな Markdown、Git でクローンできる保管庫、すべての編集が読みやすい差分になります。間に SaaS は介在せず、いつでも git clone で移行できます。
  • 実行するプロセスは 1 つだけです。 SQLite 上で動作する単一の Go バイナリです。ノート PC、小規模な VM、コンテナのいずれでも、同じように起動します。MIT ライセンスです。

trip2g landing

クイックスタート

30 秒で動作を確認できます。 公開ナレッジハブを任意の MCP クライアントに追加し、質問してみましょう。接続されているすべてのベースを検索し、情報源を示して回答します。

{
  "mcpServers": {
    "trip2g": {
      "url": "https://trip2g.com/_system/mcp"
    }
  }
}

自分のハブを実行する:

git clone https://github.com/trip2g/trip2g && cd trip2g/quickstart
docker compose up

http://localhost:8081 を開き、[email protected] とコード 111111 でサインインして、ホームページから事前設定済みの Obsidian 保管庫をダウンロードしてください。コンテナは 1 つ、ファイルはローカルディスクに保存され、全文検索も利用できます。ほかのサービスは必要ありません。

ターミナルを使わずに始めたい場合は、無料のクラウドインスタンスをご利用ください。単一バイナリ、TLS 対応の Docker Compose、fly.io など、すべての選択肢をセルフホストガイドで紹介しています。

ドキュメント · はじめに · MCP ツール · セルフホスト · コントリビューション


すべてはノートです

Unix はすべてをファイルにしました。trip2g はすべてをノートにします。

人間とエージェントが共有する、パスで指定可能な単一のグローバル名前空間です。ノートは Markdown ファイルです。フロントマターはメタデータ、本文はコンテンツです。同じノートがウェブページ(表示サーバー)としても MCP 経由(エージェントのシステムコールインターフェース)としても提供され、すべての編集は note_versions にスナップショットとして保存され、Git にも反映されます。そのため、履歴はバイナリデータではなく、読みやすい差分になります。

   human A           human B           human C
      │                 │                 │
      ▼                 ▼                 ▼
   agent A           agent B           agent C
      │                 │                 │
      ▼                 ▼                 ▼
  ┌────────┐  MCP  ┌────────┐  MCP  ┌────────┐
  │ hub A  │ ◄───► │ hub B  │ ◄───► │ hub C  │
  └────────┘       └────────┘       └────────┘
       ▲                 ▲                 ▲
       └─── humans browse · agents query ──┘

同じハブが、人間にはウェブサイト(サブスクリプション、RSS、Telegram を利用可能)を、エージェントには MCP を提供します。データはプレーンな Markdown のままなので、いつでも移行できます。


マップ

trip2g では、プリミティブの対応関係が明確なため、オペレーティングシステムの用語を採用しています。各行には、実装の状況を示すタグが付いています。実装済みは main 上で動作するコード、ブランチは feat/agent-runtime 上で動作するコード、計画中は設計ドキュメントです。

OS の概念trip2g のプリミティブ状況
ファイルシステム人間とエージェントが共有する、パスで指定する単一のノート名前空間実装済み
ファイルノート:Markdown のフロントマター(メタデータ)+本文(コンテンツ)実装済み
オーバーレイファイルシステムフロントマターのパッチ(Jsonnet)で、ソースに触れることなくノートを上書き実装済み
スナップショットnote_versions + DB を正とする Git ミラー(gitapi)実装済み
Git 上のファイルシステムSmart HTTP(/_system/git)経由でボールトを git clone/pull/push実装済み
システムコールMCP ツール:search、note_html、similar、federated_*実装済み
ネットワークスタックフェデレーション:クエリをピアハブに一斉送信実装済み
仮想ホストフロントマターの route/routes によるドメインごとのルーティング実装済み
スケジューラーcron Webhook(next_run_at)+ goqite ワーカープール実装済み
プロセスのディスパッチWebhook 配信:ノートの作成/更新/削除 → POST実装済み
IPCイベントバスとしてのノート:あるエージェントの書き込みで次の処理が起動実装済み
ディスプレイサーバーウェブサイトのレンダリング:デフォルト+Jet テンプレート、mermaid、datachart実装済み
ページキャッシュ匿名ユーザー向けのレンダリング済みページキャッシュ。バージョンをキーに使用実装済み
出力先ノートを Telegram チャンネルに公開し、リンクを維持実装済み
標準入力フロントマターのフォーム。送信内容はノートごとに保存実装済み
権限(ユーザー)サブグラフ+サブスクリプション ACL、管理者、API キー実装済み
認証プロバイダーメールのマジックリンク、Google/GitHub OAuth、OIDC SSO実装済み
権限(エージェント)スコープ付きトークン内の Webhook ごとの read_patterns/write_patterns実装済み
認証情報ストア暗号化された secrets/federation_secrets(AES-256-GCM)実装済み
ケイパビリティチケットHAT:署名付きの短い TTL のトークン。ae=true で管理者権限に昇格実装済み
制御サーフェスカンバンボードのノート(layout: kanban)実装済み(レイアウト)、ブランチ(エージェント接続)
カーネル設定機能フラグ。起動時に検証(依存関係が欠けているとパニック)実装済み
プロセス実行環境内部 LLM 実行ループ(agentruntime)、ツールの許可リスト+上限ブランチ
パッケージマネージャーノートをロールとして使用:ノートを置くと fleet がエージェントを登録ブランチ
リソース制限実行ごとのトークン上限とステップ上限。どちらも上書き不可ブランチ

システムコール:MCP サーバー

すべてのハブに組み込まれています。エージェントがデータベースに直接アクセスすることはありません。MCP 経由でツールを呼び出し、アクセス範囲は呼び出し元のサブスクリプションに限定されます。

ツール用途
search全文検索とセマンティック検索のハイブリッド
note_htmlID、パス、または一致条件でノート(またはセクション)を読み取る
similar指定したノートに類似するノート
federated_search / federated_similar / federated_note_html同じ処理をピアハブに一斉送信
instructionsエージェント向けに作成者が定義したプロンプト

カスタムツールは、ノートのフロントマター(mcp_method:)で定義できます。


ネットワークスタック:フェデレーション

graph LR
    O[Obsidian vault] --> H[your hub]
    T[Telegram]       --> H
    H <-->|MCP federation| H2[peer hub]
    H2 --> B[their bases]
    H -->|/_system/mcp| A[agent]
    H2 -->|/_system/mcp| A

信頼できる人や組織とピアハブを構築します。各ハブは、ベースごとにアクセスを制御します。エージェントへの1つの質問で、接続されているすべてのナレッジをまとめて検索できます。ループは IP パケットと同じ仕組みで制限されます。各ハブは、ホップごとのカウンター(X-MCP-Federation-Depth ヘッダー)に対して max_depth を適用し、すべての呼び出しには有効期限の短い HMAC 署名付きトークンが含まれます。

各ハブはそれ自体が Markdown OS であり、ネットワークはコンピューター同士をつなぐインターネットのように、オペレーティングシステム同士をつなぐメッシュです。以下の構成はよくある例であり、これだけに限りません。プロトコルはトポロジーを前提としないため、どのような構成も構築できます。

トポロジーセットアップ結果
個人1つのハブ、多数のベースすべてのメモ、本、コースを1回のクエリで検索
友人各人がハブを運用し、ハブ同士がピア接続全員のナレッジをまとめて利用
企業中央ハブと従業員ごとのハブ組織内の知識やドキュメントを検索可能に
B2B2つのスター型トポロジーを1つのブリッジで接続システムを統合せずにナレッジを共有

プロセスディスパッチとスケジューラー:Webhook エージェント

エージェントを実行するカーネル側の仕組みです。main に含まれています。

  • 変更 Webhook。 メモの作成・更新・削除時にエージェントへ POST し、エージェントは API 経由でメモを書き戻します。Glob フィルタリングで実行対象のメモを選択し、HMAC で配信に署名し、max_depth で再帰を停止します。
  • Cron Webhook。 スケジュール(0 9 * * *)に従ってエージェントを実行します。next_run_at 列と毎分実行されるシステム cron がこれを駆動し、goqite ワーカープールがキューごとの並行処理数と優先度を管理します。同期または非同期で実行でき、任意で指示コンテキストを指定できます。

エージェント自体はどこに配置してもかまいません。これらの Webhook はイベントを配信し、メモの書き込みを受け付けるだけです。


ユーザーランド:エージェントフリート

feat/agent-runtime で開発中です。まだ main には含まれていません。

基本となる考え方は、メモを編集すると、対象を限定したサーバーサイドのエージェント実行が開始されることです。ローカルエディターや静的ビルダーとは異なり、エージェントはハブ上で実行され、ノート PC 上ではなく、メモの Glob パターンに従って対象が限定されます。

エージェントはメモです。フロントマターが設定であり、model、tools、read_patterns/write_patterns、trigger_on、for_each、max_depth、timeout_seconds を指定します。本文は指示であり、変更されたメモを参照できる Jet テンプレートです。fleet デーモンはエージェント用フォルダーを監視し、各ロールメモを解析して、自身を指す変更 Webhook として登録します。メモを追加するとエージェントがインストールされ、削除するとアンインストールされます。

graph LR
  E[note edited] --> W[change webhook fires]
  W --> F[fleet /deliver]
  F --> R[agentruntime loop]
  R -->|search / read_note| KB[(knowledge base)]
  R -->|write_note / patch_note| KB
  KB -.re-trigger.-> E

監視対象のメモが変更されると、trip2g が Webhook を発火し、フリートが対象を限定したループ(agentruntime)を実行します。モデルには指示と対象範囲内のコンテキストが渡され、search/read_note/write_note/patch_note を呼び出します。読み書きはロールの Glob パターンに照らして強制され、上書きできないトークン数とステップ数の上限が実行を制限し、max_depth が再トリガーのループを防ぎます。trip2g は単純なイベントソースのままです。指示、対象範囲、トリガーはすべてメモに記述されています。

この仕組みを支える基盤(変更/Cron Webhook、スコープ付きトークン、配信ジョブ)は main に含まれています。メモ内の LLM 実行機能(agentruntime)とフリートのリコンシラー(internal/fleet、cmd/fleet)は、feat/agent-runtime で追加されます。


コントロールサーフェス:カンバンボード

ボードは layout: kanban を指定したメモで、カードは - ship the docs @status:doing @assigned:bob のような行です。カードを編集するとメモが編集されるため、あらゆるエージェントを動かすのと同じトリガーで、ボードを読み、カードをその場で patch_note するトリアージエージェントを起動できます。メモは、人間が作業を指示する手段であると同時に、エージェントの入力と出力にもなります。

カンバンレイアウト(docs/_layouts/kanban.html)とスタンドアロンの kanban_template は main に含まれています。ボードをフリートに接続する機能は feat/agent-runtime の一部です。


表示サーバー:テンプレートとレンダラー

2 つの方法があり、ナレッジベースごとにどちらかを選びます。

A. デフォルトテンプレート(コード不要、フロントマターのみ)。ウィジェットとコンテンツブロックからページを構成します。

---
header: "[[Navigation]]"
left_sidebar: [TOC, inlinks]
content: [selfcontent, magazine]
magazine_include_files: "blog/**/*.md"
footer: "[[Footer]]"
---

quicktemplate を使ってレンダリングします。ノートはフロントマターの content_type を使って、HTML、JSON、RSS としてもレンダリングできます。

B. カスタム Jet テンプレート(自由に制御できます)。独自の .html ファイルを layouts フォルダーに配置し、layout: path/to/template で切り替えます。テンプレートには Markdown AST が渡されるため、セクションを反復処理したり、特定の部分をレンダリングしたり、HTML の細部までカスタマイズしたりできます。Jet テンプレートエンジンをベースにしています。

どちらの方法でも、バックエンドは各ノートが要求した場合に限り、ノートごとにレンダラー拡張機能を読み込みます。mermaid の図と、参照先の CSV をグラフに変換する datachart ウィジェット(ECharts 経由)が利用できます。ノートで必要な機能を宣言すると、そのページには必要なスクリプトだけが含まれます。


Telegram:ノートをチャンネル投稿に

同じノートを、スケジュールに従って、または即時に Telegram チャンネルへ公開できます。trip2g はリンクを維持します。独自の投稿があるノートへのウィキリンクはその投稿を指し、まだ投稿されていないノートへのリンクはウェブサイト上のページにフォールバックするため、リンク切れが発生しません。ノートを編集して再同期すると、チャンネルの投稿も自動的に更新されます。完全なガイド →


フォーム:構造化された入力

ノートは情報を表示するだけでなく、入力も受け付けられます。フロントマターに form: ブロックを追加すると、trip2g はページにフォームを表示し、GraphQL API 経由で送信を受け付けて、各送信内容をそのノートに関連付けて保存します。

---
title: Say hello
form:
  fields:
    - name: email
      type: email
      required: true
    - name: message
      type: text
      max_length: 2000
---

フィールドの型とバリデーターはフロントマターで指定します。公開フォームはデフォルトで Cloudflare Turnstile によって保護され、can_submit で投稿できるユーザーを制限できます。送信内容は管理パネルと GraphQL API に保存され、それぞれの送信内容が vault 管理者にメールで通知されます。仕様を一度定義して form_ref: で再利用するか、フロントマターパッチを使ってフォルダー全体にフォームを設定できます。OS の用語で言えば、これはノートの標準入力です。完全なガイド →


Git:vault はリポジトリです

trip2g は /_system/git で、ナレッジベース全体を git Smart HTTP 経由で提供します。他のリポジトリと同じように、クローン、プル、プッシュできます。データベースが正本であり、git ツリーはディスク上にあるチェックアウトではありません。エンドポイントを操作した時点で gitapi が必要に応じてツリーを生成し、プッシュ内容はノートに反映されます。そのため、git clone で vault をバックアップでき(全履歴も取得できます)、API の代わりにコミットを使って変更をスクリプト化できます。


収益化

サブグラフのペイウォールでノートを有料プロダクトにまとめ、無料のノートは公開したままにできます。支払いには暗号資産(NowPayments)、Patreon、Boosty を利用できます。


ソース

ソース状態
Obsidian利用可能:vault はローカルに保持され、双方向で同期します
Telegram利用可能:チャンネルへの公開と履歴のミラーリング
RSS output利用可能:すべてのベースでフィードを提供します
Notion予定
Google Drive予定
Linear、Slack archive、RSS import予定

セルフホスト

cd quickstart && docker compose up

trip2g は SQLite 上で単一プロセスとして動作し、データベースサーバーを別途用意する必要がないため、ノート PC、小規模な VM、コンテナーのいずれでも同じようにハブを起動できます。高可用性が必要な場合は、単一のリーダーが書き込みを処理する構成で、読み取りを水平方向にスケールできる読み取り専用レプリカを追加できます(feat/read-replica ブランチ)。

完全なガイド → · MIT · SQLite のみで動作します。セマンティック検索には埋め込み API(OpenAI または互換性のある任意のエンドポイント)が必要ですが、全文検索はオフラインで利用できます。

技術スタック

バックエンドGo、FastHTTP、gqlgen(GraphQL)
データベースSQLite + ストリーミングバックアップ用の Litestream
検索bleve(全文検索)+ OpenAI 互換 API を利用した埋め込み(セマンティック検索)
MarkdownGoldmark:ウィキリンク、フロントマター
テンプレートquicktemplate(デフォルト)+ Jet(カスタム)
チャートと図mermaid、ECharts(datachart)
フロントエンド$mol、TypeScript
アセットS3 互換(開発用は MinIO)

インスピレーション

OS という捉え方は、Markdown as an Operating System と、Unix の everything is a file から着想を得ています。私たちが大切にしているのは、次の 3 つです。

  • Markdown は汎用的な基盤です。 どのツールもどのモデルもすでに読み込めるファイルを 1 つ用意し、そこからウェブサイト、フィード、Git の履歴を生成します。
  • ファイルはプロセス間のインターフェースです。 エージェントがノートを書くと次のエージェントが起動するため、連携に別個のキュー API は必要ありません。
  • 人が読める差分は監査ログです。 編集内容はすべて note_version とコミットとして記録され、5 秒で読み取って元に戻せます。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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