local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Supports loading configuration from .env files for managing environment variables like API tokens and graph names.
Enables parsing and conversion of markdown content, with support for importing nested markdown structures into Roam Research with proper hierarchy preservation.
Provides comprehensive access to Roam Research's API functionality, allowing AI assistants to interact with Roam Research graphs through tools for fetching, creating, and updating pages and blocks, importing markdown, searching content, and executing Datalog queries.
Roam Research MCP サーバー
Roam ResearchのAPI機能への包括的なアクセスを提供するモデルコンテキストプロトコル(MCP)サーバー。このサーバーにより、ClaudeのようなAIアシスタントが、標準化されたインターフェースを介してRoam Researchのグラフと対話できるようになります。(Roam Researchによる公式承認を受けていない、現在進行中の個人プロジェクトです。)
インストール
パッケージをグローバルにインストールできます。
または、リポジトリをクローンしてソースからビルドします。
特徴
サーバーは、Roam Research と対話するための強力なツールを提供します。
- .env サポートによる環境変数の処理
- 包括的な入力検証
- 大文字と小文字を区別しないページタイトルの一致
- 再帰ブロック参照解決
- Markdownの解析と変換
- 毎日のページ統合
- 詳細なデバッグログ
- 効率的なバッチ操作
- 階層的なアウトラインの作成
roam_fetch_page_by_title
: ページのコンテンツをタイトルで取得して読み取り、最大 4 レベルのブロック参照を再帰的に解決します。roam_create_page
: オプションコンテンツを含む新しいページを作成するroam_create_block
: ページに新しいブロックを作成します(デフォルトは今日の毎日のページ)roam_import_markdown
: 特定のブロックの下にネストされたマークダウンコンテンツをインポートするroam_add_todo
: チェックボックス構文を使用して、今日の日次ページに複数のToDo項目を追加します。roam_create_outline
: 適切なネストと構造を持つ階層的なアウトラインを作成するroam_search_block_refs
: ページ内またはグラフ全体でブロック参照を検索しますroam_search_hierarchy
: ブロックの親子関係をナビゲートして検索するroam_find_pages_modified_today
: 今日の深夜以降に変更されたすべてのページを検索しますroam_search_by_text
: すべてのページまたは特定のページ内で特定のテキストを含むブロックを検索します。roam_update_block
: 直接テキストまたはパターンベースの変換でブロックコンテンツを更新しますroam_search_by_date
: 作成日または変更日に基づいてブロックとページを検索しますroam_search_for_tag
: 特定のタグを含むブロックを検索し、近くのタグでフィルタリングするオプションもあります。roam_remember
: 自動タグ付けで思い出や情報を保存・分類するroam_recall
: タグ MEMORIES_TAG (下記参照) でマークされたブロック、または同じ名前のページタイトルのブロックの記憶を呼び出します。roam_datomic_query
: 高度なデータ取得と分析のために、Roam グラフでカスタム Datalog クエリを実行します。
設定
- Roam Research APIトークンを作成します:
- グラフ設定に移動
- 「APIトークン」セクションに移動します(設定 > 「グラフ」タブ > 「APIトークン」セクションで、「+新しいAPIトークン」ボタンをクリックします)
- 新しいトークンを作成する
- 環境変数を構成する: 必要な環境変数を構成するには、次の 2 つのオプションがあります。オプション 1: .env ファイルの使用 (開発に推奨) roam-research ディレクトリに
.env
ファイルを作成します。オプション 2: MCP 設定を使用する (代替方法) MCP 設定ファイルに構成を追加します。Copy- Cline の場合 (
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
): - Claude デスクトップ アプリの場合 (
~/Library/Application Support/Claude/claude_desktop_config.json
):
Copy注: サーバーは最初に .env ファイルからの読み込みを試み、次に MCP 設定からの環境変数にフォールバックします。
- Cline の場合 (
- サーバーを構築します (MCP のルート ディレクトリにいることを確認してください)。Copy
使用法
タイトルでページを取得
解決されたブロック参照を使用してページのコンテンツを取得して読み取ります。
次の内容でページ コンテンツをマークダウンとして返します。
- 完全な階層構造
- ブロック参照は再帰的に解決されます(最大 4 レベルの深さ)
- ネストレベルの適切なインデント
- 完全なマークダウンフォーマット
ページを作成
オプションのコンテンツを含む新しいページを作成します。
成功した場合、作成されたページの UID を返します。
ブロックを作成
ページに新しいブロックを追加します (page_uid も title も指定されていない場合は、デフォルトで今日の日次ページになります)。
次のいずれかを指定できます。
page_uid
: 対象ページへの直接参照title
: 対象ページの名前(存在しない場合は作成されます)- どちらでもない: ブロックは今日の日刊ページに追加されます
戻り値:
アウトラインを作成
適切なネストと構造を持つ階層的なアウトラインを作成します。
特徴:
- 最大10レベルのネストで複雑なアウトラインを作成
- アウトラインの構造と内容を検証する
- 適切な親子関係を維持する
- アウトラインのオプションのヘッダーブロック
- ページが指定されていない場合は、今日の日次ページがデフォルトになります
- ブロックを作成するための効率的なバッチ操作
パラメータ:
outline
: アウトライン項目の配列。各項目は次のようになります。text
: アウトライン項目の内容(必須)level
: ネストレベル(1~10、必須)
page_title_uid
: 対象ページのタイトルまたはUID(オプション、デフォルトは今日のページ)block_text_uid
: アウトラインのヘッダーテキスト(オプション)
戻り値:
ToDo項目を追加する
今日の毎日のページに 1 つ以上の ToDo 項目を追加します。
特徴:
- Roam チェックボックス構文を使用して todo を追加します (
{{TODO}} todo text
) - 1 回の操作で複数の ToDo を追加できます
- 10 件を超える ToDo を追加する場合は、効率化のためにバッチ アクションを使用します。
- 今日のページが存在しない場合は自動的に作成します
- 最上位レベルのブロックとしてToDoを順番に追加します
ネストされたマークダウンをインポートする
特定のブロックの下にネストされたマークダウン コンテンツをインポートします。
特徴:
- 特定のブロックのコンテンツをインポートします。
- UIDまたは文字列の完全一致で親ブロックを検索
- タイトルまたはUIDで特定のページ内のブロックを検索する
- ページが指定されていない場合は、今日のページがデフォルトになります
- コンテンツの配置を制御する:
- 親ブロックの最初または最後の子として追加
- 階層構造を維持する
- ネストされたコンテンツに対する効率的なバッチ操作
- 包括的な戻り値:Copy
パラメータ:
content
: インポートするネストされたマークダウンコンテンツpage_uid
: 親ブロックを含むページのUIDpage_title
: 親ブロックを含むページのタイトル(page_uidが指定されている場合は無視されます)parent_uid
: コンテンツを追加する親ブロックのUIDparent_string
: 親ブロックの正確な文字列コンテンツ(page_uid または page_title のいずれかを指定する必要があります)order
: コンテンツを追加する場所(「first」または「last」、デフォルトは「first」)
ブロック参照を検索
ページ内またはグラフ全体でブロック参照を検索します。
特徴:
- 特定のブロックへのすべての参照を検索する
- ページ内のブロック参照を検索する
- グラフ全体を検索
- 直接参照と間接参照の両方をサポート
- ブロックコンテンツと場所のコンテキストを含む
パラメータ:
block_uid
: 参照を検索するブロックのUID(オプション)page_title_uid
: 検索するページのタイトルまたはUID(オプション)
戻り値:
テキストで検索
すべてのページまたは特定のページ内で特定のテキストを含むブロックを検索します。
特徴:
- グラフ内のすべてのブロックで任意のテキストを検索します
- オプションのページスコープ検索
- 大文字と小文字を区別する検索または大文字と小文字を区別しない検索
- ページコンテキストを含むブロックコンテンツを返します
- Datalogクエリを使用した効率的なテキストマッチング
パラメータ:
text
: 検索するテキスト(必須)page_title_uid
: 検索するページのタイトルまたはUID(オプション)case_sensitive
: 大文字と小文字を区別した検索を実行するかどうか(オプション、デフォルト: Roam のネイティブ動作と一致するように true)
戻り値:
ブロックコンテンツの更新
直接的なテキスト置換またはパターンベースの変換を使用してブロックのコンテンツを更新します。
または、パターンベースの変換を使用します。
特徴:
- 2 つの更新モード:
- 直接的なコンテンツの置き換え
- 正規表現を使用したパターンベースの変換
- 更新前にブロックの存在を確認する
- 応答として更新されたコンテンツを返す
- グローバルまたは単一一致の置換のサポート
- ブロックの関係とメタデータを保持する
パラメータ:
block_uid
: 更新するブロックのUID(必須)content
: ブロックの新しいコンテンツ(直接置換を使用する場合)transform_pattern
: 既存のコンテンツを変換するためのパターン:find
: 検索するテキストまたは正規表現パターンreplace
: 置換するテキストglobal
: すべての出現箇所を置き換えるかどうか(デフォルト: true)
戻り値:
タグを検索
特定のタグを含むブロックを検索し、近くのタグでオプションでフィルタリングします。
特徴:
- 特定のタグを含むブロックを検索する
- 別のタグの存在によるフィルタリング(オプション)
- ページスコープまたはグラフ全体の検索
- 大文字と小文字を区別する検索または大文字と小文字を区別しない検索
- ページコンテキストを含むブロックコンテンツを返します
- Datalogクエリを使用した効率的なタグマッチング
パラメータ:
primary_tag
: 検索するメインタグ(必須)page_title_uid
: 検索するページのタイトルまたはUID(オプション)near_tag
: 結果をフィルタリングするための別のタグ(オプション)case_sensitive
: 大文字と小文字を区別した検索を実行するかどうか(オプション、デフォルト: Roam のネイティブ動作と一致するように true)
戻り値:
情報を記憶する
自動タグ付けと分類機能を使用して思い出や重要な情報を保存します。
特徴:
- #[[LLM/Memories]] タグで情報を保存する
- 組織にオプションのカテゴリタグを追加する
- 今日の毎日のページに自動的に追加されます
- メモリごとに複数のカテゴリをサポート
- roam_search_for_tagを使った簡単な検索
- 記憶の時系列を維持する
パラメータ:
memory
: 記憶する情報(必須)categories
: メモリにタグ付けするカテゴリのオプション配列
戻り値:
日付で検索
作成日または変更日に基づいてブロックとページを検索します。
特徴:
- 作成日、変更日、またはその両方で検索
- ブロック、ページ、またはその両方をフィルタリングする
- 開始日と終了日を含むオプションの日付範囲
- 結果にブロック/ページコンテンツを含めるか除外するか
- タイムスタンプで結果を並べ替える
- Datalogクエリを使用した効率的な日付ベースのフィルタリング
パラメータ:
start_date
: ISO形式(YYYY-MM-DD)での開始日(必須)end_date
: ISO形式(YYYY-MM-DD)での終了日(オプション)type
: 「作成日」、「変更日」、「両方」のどれで検索するか(必須)scope
: 「ブロック」、「ページ」、または「両方」を検索するかどうか(必須)include_content
: 一致するブロック/ページのコンテンツを含めるかどうか(オプション、デフォルト: true)
戻り値:
今日変更されたページを検索
今日の深夜以降に変更されたすべてのページを検索します。
特徴:
- 深夜以降にページに加えられたすべての変更を追跡します
- ブロック階層のあらゆるレベルでの変更を検出します
- 変更されたページタイトルの一意のリストを返します
- 変更されたページの数を含む
- パラメータは必要ありません
戻り値:
Datomicクエリを実行する
高度なデータ取得と分析のために、Roam グラフでカスタム Datalog クエリを実行します。
特徴:
- Roamのクエリエンジンへの直接アクセス
- すべての Datalog クエリ機能のサポート:
- 複雑なパターンマッチング
- 集計関数(count、sum、max、min、avg、distinct)
- 文字列操作 (含む?、始まる?、終わる?)
- 論理演算 (<、>、<=、>=、=、not=)
- 再帰クエリのルール
- 大文字と小文字を区別する検索機能と大文字と小文字を区別しない検索機能
- グラフ全体にわたる効率的なクエリ
パラメータ:
query
: 実行するデータログクエリ(必須)inputs
: クエリの入力パラメータのオプション配列
戻り値:
クエリの例:
- すべてのページを数える:
- 大文字と小文字を区別しないテキスト検索:
- 特定の日付以降に変更されたブロックを検索します。
詳細なクエリ例と構文ドキュメントについては、Roam_Research_Datalog_Cheatsheet.md を参照してください。
検索ブロック階層
ブロックの親子関係をナビゲートして検索します。
特徴:
- ブロック階層を上または下で検索
- 特定のブロックの子を見つける
- 特定のブロックの親を見つける
- 検索の深さを設定する(1~10レベル)
- オプションのページスコープフィルタリング
- 各結果の深度情報が含まれます
パラメータ:
parent_uid
: 子を検索するブロックのUID(下方向に検索する場合は必須)child_uid
: 親を検索するブロックのUID(上方向を検索する場合は必須)page_title_uid
: 検索するページのタイトルまたはUID(オプション)max_depth
: 検索する深さのレベル数(オプション、デフォルト: 1、最大: 10)
戻り値:
エラー処理
サーバーは、一般的なシナリオに対して包括的なエラー処理を提供します。
- 構成エラー:
- APIトークンまたはグラフ名がありません
- 無効な環境変数
- API エラー:
- 認証失敗
- 無効なリクエスト
- 失敗した操作
- ツール固有のエラー:
- ページが見つかりません(大文字と小文字を区別しない検索)
- 文字列一致でブロックが見つかりません
- 無効なマークダウン形式
- 必要なパラメータが不足しています
- アウトライン構造またはコンテンツが無効です
各エラー応答には次の内容が含まれます。
- 標準MCPエラーコード
- 詳細なエラーメッセージ
- 該当する場合の解決策の提案
発達
建物
サーバーを構築するには:
これにより、次のようになります。
- 必要な依存関係をすべてインストールする
- TypeScriptをJavaScriptにコンパイルする
- 出力ファイルを実行可能にする
開発中にnpm run watch
使用して、ファイルが変更されたときに自動的に再コンパイルすることもできます。
MCP Inspectorによるテスト
MCP Inspectorは、MCPサーバーのテストとデバッグに役立つツールです。サーバーをテストするには、次の手順に従います。
これにより、次のようになります。
- インスペクターモードでサーバーを起動する
- 次のインタラクティブなインターフェースを提供します:
- 利用可能なツールとリソースをリストする
- カスタムパラメータでツールを実行する
- ツールの応答とエラー処理を表示する
ライセンス
MITライセンス
You must be authenticated.
Tools
Roam ResearchのAPI機能への包括的なアクセスを提供します。このサーバーにより、ClaudeのようなAIアシスタントが標準化されたインターフェースを介してRoam Researchグラフと対話できるようになります。