RootMind について
RootMind は、PDF、Office ファイル、テキスト文書から出典付きで情報を探したい人向けのローカル検索・質問応答ツールです。SQLite の全文検索でモデルの取得処理を導き、ページ、スライド、シートまで出典を示します。
主な機能
- 01ローカル文書フォルダーのインデックス作成
- 02SQLite 全文検索
- 03ファイルとページ位置を示す回答
- 04文書の必要箇所を読み取り
- 05Windows と Linux 向けデスクトップアプリ
活用シーン
- 01複数文書から特定の情報を探す
- 02回答の根拠となるページやシートを確認
- 03API キーなしでインデックス済みファイルを検索
MCP 対応
stdio と HTTP 経由で読み取り専用の MCP ツールを提供し、Claude Desktop、Claude Code、n8n などのクライアントやエージェントから利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
RootMind
English | Deutsch
インストール · MCP クライアントへの接続 · 仕組み · ツールループを採用する理由 · セキュリティ · 制限事項
ドキュメントに質問すると、該当ページを示した回答が得られます。
RootMind は、お使いのコンピューター上で選択したフォルダー内のファイル(PDF、Word、Excel、PowerPoint、CSV、Markdown、テキストファイル)をインデックス化します。質問すると、言語モデルがそのインデックスを検索し、必要な箇所を読み取ってから、ページ、スライド、シート単位の出典を示して回答します。埋め込みモデルもベクトルデータベースも使用しません。インデックス化には SQLite の通常の全文検索を使い、検索対象の取得はモデルが行います。
https://github.com/user-attachments/assets/d3cc0249-a550-4de5-ae6b-55c1291a282f
- 出典付きの回答。 すべての回答でファイル名を示し、特定できる場合はページ、スライド、シートも示します。
- ファイルはコンピューター上に保存されたままです。 インデックス化と検索はローカルで行われ、LLM も API キーも必要ありません。質問に回答する際は、質問とモデルが読み取る抜粋を、設定したプロバイダー(Anthropic、OpenAI、xAI)に送信します。プロバイダーとしてローカルの Ollama サーバーを使う場合、データがコンピューターの外に送信されることはありません(Ollama を使ったローカルモデルをご覧ください)。
- 読み取るだけで、詰め込みません。 ドキュメント全体をチャットに貼り付けるのではなく、モデルが対象を絞った範囲を検索して読み取り、その各手順をツール呼び出しとして確認できます。その代わり、従来の RAG よりもモデルとのやり取りが増えます。詳しくは埋め込み RAG ではなくツールループを採用する理由をご覧ください。
- 他のツールからも利用できます。 同じ読み取り専用ツールを MCP 経由で提供しており、Claude Desktop、Claude Code、n8n、その他のエージェントから利用できます。
- Windows と Linux に対応。 デスクトップアプリは英語とドイツ語に対応しており、ライセンスは MIT です。
数分で試す
- RootMind-Setup-x64.exe(Windows 10 または 11)、または .deb、.rpm、AppImage(Linux)をダウンロードします。
- RootMind を起動し、Folders からドキュメントの入ったフォルダーを追加します。
- Chat を開き、Search only にチェックを入れて検索します。API キーは不要です。回答を得るには、Settings でキーを追加し、Search only のチェックを外します。
詳しくはクイックスタートをご覧ください。
これは何か
このリポジトリは、次の2つの要素で構成されています。
- バックエンド(Python、FastAPI):インデクサー、全文検索、エージェントループ、localhost REST API、stdio および HTTP 経由の MCP サーバーです。
- デスクトップアプリ(Tauri 2、React、TypeScript、Rust シェル):Windows と Linux 向けのチャットおよび検索 UI で、英語とドイツ語に対応しています。Windows では、インストーラーがバックエンドを Windows サービスとして設定します。Linux では、アプリがユーザーアカウントの systemd ユーザーサービスとして設定します。アプリはそのサービスと通信します。
**ステータス:**これは個人プロジェクトです。商用の保守は行っておらず、サポートをお約束するものではありません。Issue やプルリクエストは歓迎しており、可能な範囲で対応します。
インストール
各リリースには、Windows(x64)向けに以下のダウンロードがあります。Linux パッケージについてはLinux へのインストールをご覧ください。
- RootMind-Setup-x64.exe、
Windows 10 または 11 をお使いのほとんどのユーザー向け:デスクトップアプリと Windows サービスです。実行して、管理者の確認を一度承認してください。Python は不要です。アプリを
%ProgramFiles%\RootMindにインストールし、Windows にサインインしているアカウント用にRootMind サービスをセットアップします。 - rootmind-backend-windows-x64.zip、 コマンドラインおよびサーバー向け:アプリを含まないバックエンド単体です(開発者およびサーバー向けのインストールをご覧ください)。
- rootmind.mcpb、 Claude Desktop 向けの RootMind です。アプリのインストール後にインストールしてください(Claude Desktop で RootMind を使うをご覧ください)。
インストールには管理者アカウントが必要です。サービスは RootMind を使用するアカウントに属するため、インストーラーは Windows にサインインしているアカウントとして実行された場合にのみサービスをセットアップします。インストール先は常に %ProgramFiles%\RootMind です。このフォルダーを変更できるのは管理者だけであり、インストーラーは別の場所(たとえば /D=)を指定すると拒否します(終了コード 10)。
サイレントインストールと管理対象インストール。 winget、Intune、Configuration Manager などのツールは、インストーラーを SYSTEM としてサイレント実行(/S)することがよくあります。その場合や、別のアカウントでサインインしているときに管理者が確認を承認した場合、インストーラーはアプリをインストールしますが、サービスはセットアップせず、終了コード 0 を返します。RootMind を使用するアカウントが初めて起動すると、サービスがセットアップされます。RootMind に「The RootMind service is not set up yet」と表示され、Set upを選ぶと、管理者の確認を一度承認するだけで、そのアカウント用にサービスがセットアップされます。標準アカウントではセットアップできません。RootMind 自体を使用する管理者アカウントが必要です。ほかの理由でインストーラーがサービスをセットアップできなかった場合も、終了コード 0 を返し、RootMind に問題とRepairが表示されます。結果は、アンインストール情報 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\RootMind(RootMindServiceSetup:installed、skipped、または failed。RootMindServiceSetupReason、失敗時には RootMindServiceSetupCode も記録)に保存されます。SYSTEM として実行される更新では、既存のサービスがその場で更新されます。
インストーラーにはまだコード署名がありません。Windows SmartScreen に「Windows protected your PC」と表示されることがあります。その場合は、More infoを選び、続けてRun anywayを選択してください。Smart App Control が有効な場合、この選択肢が表示されず、インストーラーまたは RootMind のサービスプログラムがブロックされることがあります。Smart App Control には個別のアプリ向けの例外設定がありません。予定されている署名付きリリースでは、この問題を回避できます(コード署名ポリシーをご覧ください)。
続いて RootMind を起動し、Foldersでフォルダーを追加してください。約 1 分以内にインデックス作成が始まり、フォルダーのインデックス作成が完了すると、API キーなしで検索できます。質問するには、Settingsで Anthropic、OpenAI、または xAI の API キーを追加して保存するか、ローカルモデルを使うためにOllamaを選択してください。アプリを閉じている間も、サービスがインデックスを最新の状態に保ちます。
アプリは Windows の表示言語(英語またはドイツ語)に従います。Settings → Appearance → Languageで変更できます。Settings → Aboutには、アプリとバックエンドのバージョン、リリースおよびイシューへのリンクが表示されます。
Linux へのインストール
各リリースには、glibc 2.35 以降(Ubuntu 22.04、Debian 12、Fedora 38、openSUSE Tumbleweed 以降)を搭載した x86-64 向けの Linux アプリも含まれています。 お使いのディストリビューションに対応するパッケージを選んでください。
| ディストリビューション | ダウンロード | インストール |
|---|---|---|
| Ubuntu、Debian および派生ディストリビューション | RootMind-amd64.deb | sudo apt install ./RootMind-amd64.deb |
| Fedora、openSUSE Tumbleweed | RootMind-x86_64.rpm | sudo dnf install ./RootMind-x86_64.rpm(openSUSE:sudo zypper install ./RootMind-x86_64.rpm) |
| その他のディストリビューション | RootMind-x86_64.AppImage | chmod +x RootMind-x86_64.AppImage を実行してから、起動します |
パッケージはアプリとバックエンドを /usr/lib/RootMind にインストールし、WebKitGTK 4.1 を取り込みます。root 権限が必要なのはこの手順だけです。AppImage はインストール不要ですが、FUSE 2(Ubuntu 24.04 では libfuse2t64、それ以外では libfuse2 パッケージ)が必要です。
sha256sum --check --ignore-missing SHA256SUMS.txt でダウンロードを確認してください(ダウンロードの検証を参照)。
起動するには、アプリメニューから RootMind を選ぶか、ターミナルで次のコマンドを実行します。
rootmind-desktop
.deb と .rpm はインストール時にこのコマンドを表示します。AppImage はファイルを実行すると起動します。
Windows Subsystem for Linux。 Windows 11 では RootMind は WSL でも動作し、ウィンドウは Windows デスクトップ(WSLg)に表示されます。サービスには WSL の systemd が必要です。/etc/wsl.conf に次の内容を追加し、Windows で wsl --shutdown を実行してから、ディストリビューションを再度開いてください。systemd がない場合、RootMind はサービスをセットアップできないと表示します。
[boot]
systemd=true
初回起動時の動作。 RootMind は確認を求めず、root 権限も使わずに、アカウントのバックグラウンドサービスをセットアップします。ユーザーの systemd サービスが 2 つ、rootmind-backend.service(REST API とインデックス作成)と rootmind-mcp-http.service(HTTP 経由の MCP)として、~/.config/systemd/user/ に作成されます。これらはバックエンドのコピーを ~/.local/share/rootmind/runtime/ から実行するため、AppImage を閉じたり移動したりしてもサービスは動作し続け、データは ~/.local/share/rootmind に保存されます。新しいバージョンのアプリを起動すると、サービスはアプリと同じバージョンに更新されます。セットアップに失敗すると、RootMind は理由を表示し、セットアップ(または修復)から再試行できます。設定 → RootMind サービス → 詳細では、サービスの状態と logs/install.log の末尾を確認できます。その後、Windows の場合と同様に、フォルダーでフォルダーを追加してください。
サービスはログイン時に起動し、最後のセッションが終了すると停止します。たとえば同じコンピューターで n8n を使う場合など、誰もログインしていない間もサービスを実行し続けるには、アカウントの linger を一度有効にしてください。
loginctl enable-linger "$USER"
更新するには、新しいバージョンのパッケージをインストールするか(上記の手順、または sudo dnf upgrade ./RootMind-x86_64.rpm)、AppImage を置き換えてください。RootMind は起動時にサービスを更新します。
アンインストールするには、まずサービスをアンインストールしてから、アプリをアンインストールします。
# the .deb and .rpm (from the AppImage: ~/.local/share/rootmind/runtime/*/rootmind-backend)
/usr/lib/RootMind/backend/rootmind-backend service uninstall
sudo apt remove root-mind # or: sudo dnf remove root-mind
service uninstall は 2 つのユーザーサービスとプログラムのコピーを停止して削除し、設定、API キー、インデックス、MCP トークンは ~/.local/share/rootmind に保持します。service uninstall --purge を実行すると、これらも削除されます。
チャットは ~/.local/share/io.github.cgaeking.rootmind に保存されています。
1.x からのアップグレード
RootMind 1.x はアカウントごとにインストールされ、バックグラウンドサービスが有効になっていない場合は、アプリ内でバックエンドを実行していました。2.0 のインストーラーは、アカウントにインストールされている 1.x を自動的に削除します。1.x に組み込まれていたバックエンドのフォルダー、設定、API キー、インデックスは引き継がれないため、フォルダーと API キーを再度追加してください。1.x でバックグラウンドサービスが有効になっていた場合は、そのサービスが更新され、フォルダー、設定、インデックスも引き継がれます。どちらの場合も、チャットは保持されます。
ダウンロードの検証
各リリースのノートにはインストーラーのサイズが記載されており、すべてのファイルに対する SHA256SUMS.txt とビルド来歴のアテステーションが付属しています。ハッシュは、SHA256SUMS.txt 内の該当ファイルの行と一致する必要があります。
(Get-FileHash .\RootMind-Setup-x64.exe -Algorithm SHA256).Hash.ToLower()
sha256sum --check --ignore-missing SHA256SUMS.txt
gh attestation verify RootMind-Setup-x64.exe --repo cgaeking/rootmind
更新とアンインストール
更新するには、新しいバージョンのインストーラーを実行し、プロンプトを承認します。インストーラーは追加の確認なしでインストール済みのバージョンをその場で置き換え、サービスも更新します。ポート、トークン、設定、インデックス、チャットは保持されます。アプリが実行中の場合、インストーラーは先にアプリを終了するよう求めます。
Windows の「設定」→「アプリ」から RootMind をアンインストールします。これにより RootMind のサービスが削除されます。サービスのデータ(設定、API キー、インデックス、トークン、ログ)は、アプリケーションデータを削除するにチェックを入れない限り、%ProgramData%\RootMind に残ります。チェックを入れると、データとチャットも削除されます。サイレントアンインストール(パッケージマネージャーが実行する /S)でもサービスは削除されますが、データは削除されません。後からデータを削除するには、管理者権限のプロンプトから %ProgramData%\RootMind を削除します。
RootMind サービス
RootMind のバックエンドは、Windows サービス RootMind-Backend として実行されます。アプリを閉じている間もインデックスを最新の状態に保ち、Windows の起動時に開始します。アプリはこのサービスのクライアントです。設定 → RootMind サービス では、状態、アドレス、バージョンを確認できます。また、サービスがまだセットアップされていない場合(サイレントインストールまたは管理者によるインストール後)は セットアップ が表示され、停止している、または応答しない場合は 修復 が表示されます(それぞれ管理者の承認が1回必要です)。サービスのバージョンがアプリより古い場合、サービスを更新 するとアプリと同じバージョンになります。どちらも、アプリと一緒にインストールされたバックエンドを %ProgramFiles%\RootMind\backend から実行します。この場所を変更できるのは管理者だけです。
- このサービスは RootMind をインストールしたアカウントに属します。同じコンピューター上の他のアカウントは利用できません。RootMind を別のアカウントに移すには、アンインストールしてから、そのアカウントで再インストールしてください。
- LocalSystem として実行されますが、お使いのアカウントが管理者権限なしで開けるフォルダーとファイルのみを読み取ります。ネットワークドライブや共有、システムフォルダー、他のユーザーのプロファイルにはアクセスできません。読み取れないフォルダーは「フォルダー」画面に表示されます。
- REST API にはトークンが必要です。トークンは
%ProgramData%\RootMind\data\rest_token.txtにあり、お使いのアカウント、SYSTEM、管理者だけが読み取れます。アプリは、サービス自身のプロセスがそのポートで待ち受けていることを確認してからのみ、このトークンを使用します。 - 2つ目のサービス
RootMind-MCP-HTTPは、独自のベアラートークンを使用して 127.0.0.1 上で HTTP 経由の MCP を提供します(MCP クライアントの接続 を参照)。既定で有効です。チェックボックス HTTP 経由で MCP を提供 で無効化または再有効化できます(管理者の承認が1回必要です)。その下の リモートアクセス(ngrok) では、クラウドアシスタント用のパブリック HTTPS アドレスを設定できます(既定では無効です。リモートアクセス を参照)。 - サービスは
%ProgramFiles%\RootMind Service\の独自のプログラムコピーから実行されます。この場所を変更できるのは管理者だけです。データは%ProgramData%\RootMindに保存されます。
Linux の場合、同じサービスはお使いのアカウントの2つの systemd ユーザーサービスとして動作します(Linux へのインストール を参照)。root 権限も承認も必要ありません。
- お使いのアカウントとして実行され、お使いのアカウントが読み取れるものを読み取ります。マウント済みのネットワーク共有も含まれます。コンピューター上の他のアカウントにも、RootMind を起動すると、それぞれ独自のサービスが別のポートで作成されます。
- REST トークンは
~/.local/share/rootmind/data/rest_token.txtにあり、お使いのアカウントだけが読み取れます(ファイルのモードは 0600、フォルダーのモードは 0700)。アプリは、ユニット自身のプロセスがそのポートで待ち受けていることを確認してからのみ、このトークンを使用します。 - HTTP 経由の MCP とリモートアクセスは Windows と同様に動作します。HTTP 経由で MCP を提供 を切り替えると、プロンプトなしで
rootmind-mcp-http.serviceが追加または削除されます。 systemctl --user status rootmind-backendとjournalctl --user -u rootmind-backendで、ユニットとその systemd ログを確認できます。RootMind 独自のログは~/.local/share/rootmind/logsにあります。
設定 → 詳細設定 では、代わりに別のアドレスにある RootMind バックエンドへアプリを接続できます。SECURITY.md でセキュリティモデルについて説明しています。
MCP クライアントの接続
MCP クライアントは、アプリのエージェントと同じ読み取り専用ツールを利用し、それぞれ独自のモデルを使用します。HTTP 経由の MCP サービスに接続してください。設定 → RootMind サービスには MCP エンドポイント が表示され、エンドポイントとトークンをコピーできます(トークンをコピー)。Claude Desktop 用には、どちらも必要ないバンドルが用意されています(Claude Desktop で RootMind を使用する を参照)。Claude Code:
claude mcp add --transport http rootmind http://127.0.0.1:<port>/mcp \
--header "Authorization: Bearer <token>"
ポート 3000 が空いている場合はそれを使用し、使用中の場合は 18400~18499 のいずれかを使用します。トークンは更新後も保持され、サーバーは再起動なしでフォルダーの変更を反映します。
Claude Desktop で RootMind を使用する
- 最新リリースから rootmind.mcpbをダウンロードします。
- ダブルクリックします。Claude Desktop が開き、RootMind のツールを表示します。確認するとインストールされます。
設定は不要です。この拡張機能は、このコンピューター上の RootMind サービスを見つけ、そこから MCP のポートとトークンを読み取り、127.0.0.1 上の HTTP 経由で MCP に接続します。RootMind に Serve MCP over HTTP をオンにしてインストールしておく必要があります(デフォルト設定。Settings → RootMind service)。また、トークンを読み取れるのは RootMind を使用するアカウントだけなので、Claude Desktop もそのアカウントで実行する必要があります。Linux では、サービスを実行するプログラムのコピーを指定する(秘密情報は含まない)~/.local/share/rootmind/service.json を通じてサービスを見つけます。必要なものが見つからない場合、拡張機能のエラーに RootMind のインストールや MCP over HTTP の有効化など、必要な対処方法が表示されます。問題を解決すれば、拡張機能を再インストールしなくても、次のリクエストから動作します。修復後は、新しいポートにサービスが移動した場合も自動で追従します。更新するには、新しいリリースの rootmind.mcpb をインストールします。バンドルはまだ署名されていないため、Claude Desktop では未署名として表示されます。ソースと仕組みについては、packaging/mcpbを参照してください。
Claude Desktop が起動できるのはローカルの(stdio)MCP サーバーのみです。この拡張機能はそのようなサーバーとして動作し、サービスの HTTP エンドポイントに転送します。アプリのフォルダーにあるプログラム(rootmind-backend.exe mcp)は、インストール済みアプリの stdio サーバーとしては機能しません。サービスのインデックスを開けないためです。stdio サーバーは、独自の config.yaml を使うソースまたは uv のセットアップ向けです(3. MCP クライアントからツールを使用するを参照)。
n8n から MCP に接続する
n8n の MCP Client Tool ノードで、Settings → RootMind service に表示される値を使用します。n8n (MCP Client Tool) の横にある Copy をクリックすると、トークンが入力された状態でコピーされます。
| フィールド | 値 |
|---|---|
| エンドポイント | http://127.0.0.1:<port>/mcp |
| サーバートランスポート | HTTP Streamable |
| 認証 | Header Auth |
| ヘッダー名 | Authorization |
| ヘッダー値 | Bearer <token> |
- 同じマシン上の n8n: 表示されているエンドポイントを使用します。
- 同じマシン上の Docker 内の n8n: コンテナー内では、
127.0.0.1はコンテナー自体を指します。http://host.docker.internal:<port>/mcpを使用してください。Docker Desktop はこの名前をホストに転送します。接続が拒否される場合は、コンテナーから到達できるアドレスで待ち受け、127.0.0.1:<port>に転送するリバースプロキシをホスト上で実行し、そのアドレスが他のマシンからアクセスできないようにしてください。 - 別のマシン上の n8n:
127.0.0.1:<port>の前段に TLS 終端リバースプロキシまたはトンネル(リモートアクセスなど)を設置した場合に限り接続できます。平文 HTTP ポートを決して公開しないでください。サーバーは平文 HTTP を使用しており、トークンを持つ人は誰でも、インデックス化されたすべてのドキュメントを読み取れます。クラウドアシスタントから RootMind に接続するを参照してください。
クラウドアシスタントから RootMind に接続する
Grok Bot、クラウドホスト型 n8n、その他のウェブエージェントなど、他者のサーバー上で実行されるアシスタントは、あなたのコンピューター上の 127.0.0.1 に接続できません。MCP エンドポイントに転送する、公開 HTTPS アドレスが必要です。これは、あなたのコンピューター上でトンネルを実行して用意します。RootMind に組み込まれた Remote access(ngrok)を使うか、自分でトンネル(Tailscale Funnel、ngrok agent)を実行してください。いずれの場合も、トンネルは MCP に HTTP 経由でのみ転送し、クライアントは同じトークンを送信します。
リモートアクセス
RootMind はトンネルを自身で実行できます。RootMind サービスの MCP サーバー
(RootMind-MCP-HTTP)は、ngrok のオープンソース SDK を使ってトンネルを開くため、ngrok
プログラムをインストールする必要はありません。既定では無効です。
- ngrok.com で無料アカウントを作成し、ダッシュボードから authtoken をコピーします(Your Authtoken)。Domains では無料の固定ドメインを 予約できます。固定ドメインがない場合、ngrok が割り当てるアドレスは変更されることがあります。
- Settings → RootMind service の Remote access (ngrok) で、authtoken と、使用する場合は ドメインを貼り付けて、Save を選択します。authtoken は再表示されません。以降、この欄には Saved とだけ表示されます(Replace と Remove で変更できます)。
- Reach MCP from the internet through ngrok にチェックを入れて、確認します。ステータスが
Connected に変わり、Public MCP endpoint(
https://<domain>/mcp)と Copy が 表示されます。アシスタントで MCP トークン(Copy token)とともに使用してください。 アシスタントでの設定を参照してください。
リモートアクセスには Serve MCP over HTTP が必要です。これをオフにすると、リモートアクセスも オフになります。変更に管理者の承認は不要で、数秒以内に反映され、再起動や更新後も維持されます。 トンネルはサービスとともに起動します。チェックを外すと、公開アドレスはただちに閉じます。 ngrok との接続が切れると、サービスは再接続します。接続が拒否された場合(authtoken の誤り、 自分のものではないドメイン、またはすでに使用中のドメイン)、ngrok のメッセージとともに ステータスに表示され、間隔を徐々に延ばしながら(最長 5 分)再試行します。
- ngrok では、1 つのドメインにつき 1 つのエンドポイントしか使用できません。同じドメインで 独自の ngrok トンネルをすでに実行している場合は、リモートアクセスを有効にする前に停止してください。
- authtoken は
%ProgramData%\RootMind\data\ngrok_authtoken.txtに保存されます。このファイルを 読み取れるのは SYSTEM、管理者、MCP サービスアカウントのみです。config.yamlに書き込まれる ことはなく、アプリの API から返されることも、ログに記録されることもありません。 Delete the application data を選択せずにアンインストールした場合は、保持されます。 - ngrok の無料アカウントにはトラフィック制限があります。ngrok の料金ページを参照してください。
独自のトンネル
ngrok エージェントを使用する場合(無料アカウント、無料の固定ドメイン 1 つ):
-
ngrok.com でアカウントを作成し、エージェントをインストールして、 authtoken を追加します。
winget install ngrok.ngrok ngrok config add-authtoken <your-ngrok-authtoken> -
ngrok ダッシュボードの Domains で無料ドメインを確認し、MCP ポート(Settings に別の ポートが表示されていない限り 3000)へのトンネルを起動します。
ngrok http 3000 --url https://<your-free-domain>再起動後も実行し続けるには、ngrok の設定ファイルでトンネルを定義し、サービスとして インストールします(
ngrok service install。ngrok のドキュメントを参照してください)。
Tailscale Funnel を使用する場合(無料の Tailscale アカウントとアプリが必要です):
tailscale funnel --bg 3000
このコマンドは公開アドレス(https://<computer>.<tailnet>.ts.net)を出力し、再起動後も
バックグラウンドで Funnel を実行し続けます。初回は、tailnet で Funnel を許可するよう求められます。
アシスタントでの設定
次の内容でカスタム MCP コネクター(または n8n の MCP Client Tool)を追加します。
| 項目 | 値 |
|---|---|
| URL | https://<your-public-address>/mcp |
| トランスポート | HTTP Streamable |
| 認証 | ヘッダー Authorization: Bearer <token>(Settings → RootMind service → Copy token) |
OAuth サインインのみを提供し、ベアラートークンを送信できないクライアントは、この方法では 接続できません。
次の点に注意してください。
- トークンを持つ人は誰でも、トンネル経由ですべてのインデックス済みドキュメントを読み取れます。 トークンは秘密にしてください。トンネルを停止する(またはリモートアクセスをオフにする)と、 公開アクセスは閉じます。
- クラウドアシスタントが RootMind 経由で読み取る内容(検索結果とドキュメントのテキスト)は、 そのアシスタントのプロバイダーに送信されます。
- RootMind は、ウェブページがブラウザーから送信するリクエスト(
Originヘッダーがローカル以外の リクエスト)を拒否します。アシスタントからのサーバー間リクエストには影響しません。
仕組み
flowchart LR
desktop["Desktop app<br/>Tauri + React"]
mcpclient["MCP client<br/>e.g. Claude Desktop, Claude Code, n8n"]
subgraph backend["Backend (Python)"]
rest["REST API<br/>127.0.0.1 + bearer token"]
mcp["MCP servers<br/>stdio, HTTP + bearer token"]
engine["Agent loop<br/>rlm_engine/engine.py"]
tools["Tool layer<br/>tools.py"]
repo[("SQLite<br/>FTS5 + trigrams")]
indexer["Indexer + scheduler"]
end
folders[("Your folders")]
llm(["LLM provider<br/>Anthropic, OpenAI or xAI"])
desktop -- "/query, /search, /config" --> rest
mcpclient --> mcp
rest --> engine
rest -- "search, documents" --> repo
engine <--> llm
engine --> tools
mcp --> tools
tools --> repo
indexer -- "read files" --> folders
indexer -- "extracted text" --> repo
- インデックス作成にLLMは使いません。 コネクターが、設定された各フォルダーを巡回します。パーサーがPDF、DOCX、XLSX、PPTX、CSV、Markdownなどのテキストファイルからテキストを抽出します。テキストはSQLiteに保存されます。保存先は、documentsテーブル、FTS5インデックス、誤字を許容する検索用のトライグラムテーブルです。PDFのページ、スライド、シートを示すマーカーはテキスト内に保持されるため、検索結果を場所とともに引用できます。変更されていないファイルは、コンテンツハッシュによってスキップされます。
- 何を読むかはモデルが選びます。
POST /queryでは、エンジンがモデルに読み取り専用ツールを5つ提示します。search_documents、search_fuzzy、list_documents、read_document、get_statisticsです。一般的な処理は、検索し、ヒット箇所の前後を読み、必要に応じて別の語句で再度検索してから回答する、という流れです。 - ループには上限があります。 ツールをリクエストできるモデル呼び出しは、最大10回です。その後もモデルが検索を続けている場合は、ツールを無効にした最後の呼び出しを1回行い、見つかった情報に基づいて回答するよう求めます。モデルターンごとに実行できるツール呼び出しは最大8回で、1つの質問に対するツール結果は合計200,000文字までに制限されます。上限を超えた呼び出しは実行されず、代わりにエラー結果が返されます。すべてのLLM呼び出しにはタイムアウトが設定され、読み取りで返される文字数は最大50,000文字です。ツールのエラーはループを終了させず、エラー結果としてモデルに返されます。また、出力トークンの上限によって回答が途中で切れた場合は、その旨が示されます。
- 回答には情報源が付属します。 レスポンスには、モデルが読み取ったドキュメントの一覧と、特定できる場合はページ、スライド、シートの位置、実行したすべてのツール呼び出し、各LLM呼び出しが停止した理由が含まれます。
- MCPクライアントは独自のモデルを使用します。 MCP経由では、RootMindが同じツール定義を提供し、クライアントのモデルが判断を行います。検索とインデックス作成にはAPIキーは必要ありません。プロバイダーを呼び出すのは、質問(
POST /query)、チャットのタイトル、設定呼び出しでのモデル一覧のみです。
デスクトップアプリは、同じコンピューター上のRootMindサービス、または「設定」→「詳細設定」で入力したアドレスのカスタムバックエンドと通信します。開発用ビルドではサービスを使用せず、バックエンドのアドレスを求めます。 ARCHITECTURE.mdに詳しい説明があります。
埋め込みRAGではなくツールループを使う理由
一般的なRAGパイプラインでは、ドキュメントをチャンクに分割し、埋め込みを作成して、ベクトル類似度で上位の一致を取得し、それらのチャンクをプロンプトに入れます。モデルが見るのは、その検索ステップで選ばれた内容だけです。
RootMindは各ドキュメントの全文を全文検索インデックスに保持し、モデルが検索を進められるようにします。検索してスニペットを確認し、ヒット箇所の前後のテキストを読み、最初のクエリで見つからなかった場合は別の語句で再検索できます。これはRLM方式またはエージェント型検索と呼ばれることがあります。エンジンモジュールはこの考え方にちなんでrlm_engineという名前ですが、このコードベースで実装されているのは上限付きのツール使用ループであり、自分自身を再帰的に呼び出すモデルではありません。
| 得意なこと | あまり得意でないこと |
|---|---|
| 正確な語句:請求書番号、製品コード、名前、金額 | 同義語や言い換え:「vacation」は、モデルが別の語を試さない限り「paid time off」と一致しません |
| 埋め込みモデルやベクトルストアは不要で、インデックス作成ではテキストを解析するだけのため、オフラインで動作します | ドキュメントと異なる言語での質問 |
| 孤立したチャンクではなく、数値の上にある表の見出しなど、ヒット箇所の前後の文脈をモデルが読み取ります | 質問ごとにLLMとの往復が増えるため、遅延とトークンコストが増加します |
| 検索の各ステップがツール呼び出しとして表示されます | 回答の品質はモデルの検索戦略に左右されます |
トライグラムによるあいまい検索で対応できるのは誤字であり、同義語ではありません。評価ケースc09(同義語の落とし穴)では、この弱点が表面化するようにしています。
開発者およびサーバー向けのインストール
uv を使用する場合(Python 3.12 以降を搭載した任意の OS。必要に応じて uv がインストールします):
uv tool install "git+https://github.com/cgaeking/[email protected]#subdirectory=backend"
rootmind --help # api, index, rebuild-trigrams, mcp, mcp-http, service
これにより、rootmind、rootmind-mcp、rootmind-mcp-http コマンドがインストールされます。
Windows では、この方法でインストールした場合も rootmind service status と rootmind service uninstall は動作しますが、rootmind service install は拒否され、リリースビルドのダウンロード先が表示されます。サービスは SYSTEM として実行されるため、管理者だけが変更できるフォルダーにあるプログラムのみ実行できます。service install はリリースビルドをそのようなフォルダーにコピーしますが、uv または pip の環境はアカウントで変更できるフォルダーに置かれます。
Windows サーバー、またはアプリがインストールされていないマシンの場合。 リリースには、バックエンド単体の rootmind-backend-windows-x64.zip も含まれています。PowerShell でダウンロードして確認します。
$base = "https://github.com/cgaeking/rootmind/releases/latest/download"
Invoke-WebRequest "$base/rootmind-backend-windows-x64.zip" -OutFile rootmind-backend-windows-x64.zip -UseBasicParsing
Invoke-WebRequest "$base/SHA256SUMS.txt" -OutFile SHA256SUMS.txt -UseBasicParsing
$line = Select-String -Path SHA256SUMS.txt -SimpleMatch "rootmind-backend-windows-x64.zip"
$expected = ($line.Line -split '\s+')[0]
$actual = (Get-FileHash rootmind-backend-windows-x64.zip -Algorithm SHA256).Hash.ToLower()
if ($actual -ne $expected) { throw "Checksum mismatch: $actual" }
次に、RootMind がインデックスを作成するフォルダーを所有するアカウント(ローカル管理者である必要があります)の、管理者権限で起動した PowerShell から、管理者だけが変更できるフォルダーに解凍し、そこからサービスをインストールします。
service install は、ダウンロードフォルダーなど、ほかのアカウントも変更できるフォルダーにあるプログラムの場合、終了コード 10 でインストールを拒否します。
$dir = Join-Path $env:ProgramFiles "RootMind Backend"
Expand-Archive rootmind-backend-windows-x64.zip -DestinationPath $dir -Force
$exe = Join-Path $dir "rootmind-backend\rootmind-backend.exe"
# install, or update an installed service
& $exe service install
# state, port, version and token files (works without elevation)
& $exe service status
# remove the service; --purge also deletes its data
& $exe service uninstall
service install はプログラムを %ProgramFiles%\RootMind Service\<version>-<id>\ にコピーするため、解凍したフォルダーはその後不要になります。ポート 8000 と、HTTP 経由の MCP 用にポート 3000 を使用します。ポートが使用中の場合、--port auto と --mcp-port auto はそれぞれ 18300~18399 と 18400~18499 にフォールバックします。新規インストールでは HTTP 経由の MCP が有効になります。--no-mcp-http を指定すると無効になります。service install を再度実行すると、サービスが更新され、ポート、MCP の設定、トークン、データは維持されます。すべてのオプションは service install --help に表示されます。REST トークンは %ProgramData%\RootMind\data\rest_token.txt に、MCP トークンは %ProgramData%\RootMind\data\api_token.txt にあります。
新しいサービスにはフォルダーが設定されていません。%ProgramData%\RootMind\config.yaml の connectors にフォルダーを追加します(backend/config.example.yaml を参照。ファイルの変更には管理者権限で起動したプロンプトが必要です)。その後、Restart-Service RootMind-Backend でサービスを再起動するか、REST トークンを使ってサービスの REST API に POST /config を送信します。
zip はサービスを使わずに実行することもできます。たとえば、rootmind-backend.exe api --require-token または rootmind-backend.exe mcp-http を実行します。
Linux サーバー、またはアプリがインストールされていないマシンの場合。 リリースには、Linux バックエンド単体の rootmind-backend-linux-x64.tar.gz(x86-64、glibc 2.35 以降)が含まれています。RootMind がインデックスを作成するフォルダーを所有するアカウント(root 以外)として、本人だけが変更できるフォルダーに解凍し、そこからサービスをインストールします。
base=https://github.com/cgaeking/rootmind/releases/latest/download
curl -L -O "$base/rootmind-backend-linux-x64.tar.gz" -O "$base/SHA256SUMS.txt"
sha256sum --check --ignore-missing SHA256SUMS.txt
mkdir -p ~/opt && tar -xzf rootmind-backend-linux-x64.tar.gz -C ~/opt
exe=~/opt/rootmind-backend/rootmind-backend
"$exe" service install # install, or update the installed services
"$exe" service status # state, port, version and token files
"$exe" service uninstall # remove them; --purge also deletes the data
loginctl enable-linger "$USER" # keep them running without a login
service install はプログラムを ~/.local/share/rootmind/runtime/<version>-<id>/ にコピーし、2 つのユニットファイルを ~/.config/systemd/user/ に書き込みます。アカウントの systemd ユーザーマネージャーが必要です。これはデスクトップまたは SSH でのログイン時に起動します(存在しない場合は終了コード 11。たとえば su や sudo の使用時)。ポート、オプション、トークンは Windows と同じです。データは ~/.local/share/rootmind(config.yaml、data/rest_token.txt、data/api_token.txt)にあります。config.yaml を編集した後、systemctl --user restart rootmind-backend でサービスを再起動します。
Ollama によるローカルモデル
Settings → LLM で Ollama を選択するか、config.yaml の llm
の下に provider: ollama を設定すると、お使いのマシン上のモデルで質問ループを実行できます。API キーは不要です。ベース URL の既定値は
http://localhost:11434 で、ネットワーク上の別のコンピューターを指定することもできます。
llm:
provider: ollama
model: qwen3:8b # any model you pulled that supports tools
base_url: http://localhost:11434
- ローカルにとどまるデータ: このコンピューター上の Ollama を使う場合、質問、モデルが読む抜粋、回答が外部に送信されることはありません。別のコンピューターのベース URL を指定した場合、それらは暗号化されず、通常の
http://経由でそのコンピューターに送信されます。 - ツールのサポートが必要です。 Ollama がツールをサポートすると表示するモデル(
ollama show <model>)を選んでください。対応していないモデルでは、明確なメッセージが表示されて失敗します。 - コンテキスト長: このループではドキュメントのウィンドウを読み込みますが、Ollama の既定のコンテキストは短めです。値を増やしてください(たとえば、サーバーに
OLLAMA_CONTEXT_LENGTH=16384を設定するか、Modelfile にPARAMETER num_ctx 16384を設定します)。設定しない場合、長いドキュメントはエラーなしで途中までしか読み込まれません。 - 最初に検索: すべてのモデルがツールに対応しているわけではないため、Ollama モデルが最初のターンでツールを必ず呼び出すようにはしていません。最初の回答でドキュメントが参照されなかった場合、RootMind は明示的な指示を付けてもう一度尋ねます。
- 小型のローカルモデルは、ホスト型モデルよりもツールループに従う精度が低くなります。8 GB のグラフィックカードで
granite4.1:8bを測定した結果、16 件の評価ケースのうち、3 回すべての実行で合格したのは 10 件で、平均合格率は 71% でした(詳細はbackend/evalsを参照)。 使用するモデルはscripts/run_evals.py --mode live --provider ollama --model <name>で測定してください(backend/evalsを参照)。
ソースから実行する
uv が必要です。必要に応じて Python 3.12 がインストールされます。デスクトップアプリには Node 24、pnpm 11、Rust 1.96 以降も必要です。Windows では MSVC ビルドツールと WebView2 も必要です。
1. API キーなしでインデックス作成と検索を行う
cd backend
uv sync
cp config.example.yaml config.yaml # indexes the fictional demo corpus in evals/corpus
uv run rootmind index # builds data/index.db; no LLM involved
uv run rootmind api # REST API on http://127.0.0.1:8000, no token
別のターミナルで次を実行します。
curl "http://127.0.0.1:8000/search?q=total%20due&limit=3&snippets=true"
最初の検索結果は invoice_INV-2026-0142.pdf で、"page": "Page 2" と一致箇所の前後の抜粋が表示されます。snippets=true を指定しない場合、検索では順位付けされたリストだけが返されるため、大規模なインデックスでは処理が速くなります。
対話型 API ドキュメントは http://127.0.0.1:8000/docs にあります。API の実行中は、起動から約 30 秒後に再インデックスが行われ、その後は 24 時間ごとに実行されます(indexer.sync_interval_hours)。独自のファイルをインデックス化するには、config.yaml の connectors の下にエントリーを追加してください。絶対パスを使用してください。相対パスのコネクターは、作業ディレクトリを基準に解決されます。
この方法で起動した rootmind api ではトークンは不要です。トークンを必須にするには、RLM_API_TOKEN を設定するか、--require-token を渡します。これにより data/rest_token.txt が作成されます。各リクエストに Authorization: Bearer <token> を付けて送信してください。トークンが必須の場合、ドキュメントのページは無効になります。
2. 質問する
環境変数または backend/.env に、いずれか 1 つのプロバイダーのキー(ANTHROPIC_API_KEY、OPENAI_API_KEY、または
XAI_API_KEY。Ollama では不要です。詳細は
Ollama によるローカルモデル を参照)を設定します(.env.example を参照)。config.yaml の llm の下でプロバイダーとモデルを選択し、API を再起動してから、次を実行します。
curl -X POST http://127.0.0.1:8000/query \
-H "Content-Type: application/json" \
-d '{"question": "What is the total amount due on invoice INV-2026-0142?"}'
レスポンスには answer、sources(分かる場合は page を含みます)、tool_calls、tokens_used が含まれます。質問、検索スニペット、ドキュメントの抜粋は、設定したプロバイダーに送信されます。詳細は SECURITY.md を参照してください。
3. MCP クライアントからツールを使用する
MCP サーバーは REST API と同じ config.yaml とデータベースを読み取ります。
MCP サーバーは提供のみを行い、インデックス作成は行わないため、
rootmind index または実行中の REST API を使ってインデックスを最新の状態に保ってください。
Claude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"rootmind": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/rootmind/backend", "run", "rootmind-mcp"]
}
}
}
Claude Desktop が uv を見つけられない場合は、command に uv
実行ファイルの絶対パスを指定してください。Windows では、パスにスラッシュ
またはエスケープしたバックスラッシュ(C:\\...)を使用してください。
Claude Code:
claude mcp add --transport stdio rootmind -- \
uv --directory /absolute/path/to/rootmind/backend run rootmind-mcp
ローカルプロセスを起動できない MCP クライアント向けの HTTP 接続:
cd backend
uv run rootmind-mcp-http # http://127.0.0.1:3000/mcp
初回起動時にサーバーはトークンを生成し、data/api_token.txt に保存します
(RLM_HOME の下、または未設定の場合は作業ディレクトリ)。代わりに、
MCP_API_TOKEN を設定することもできます。サーバーはトークンの取得元と
短いフィンガープリントを表示しますが、トークン自体は表示しません。続いて:
claude mcp add --transport http rootmind http://127.0.0.1:3000/mcp \
--header "Authorization: Bearer <token from data/api_token.txt>"
stdio サーバーは起動時にフォルダー一覧を読み取るため、フォルダーを追加または
削除した後はサーバー(MCP クライアント)を再起動してください。HTTP サーバーは
config.yaml が変更されるとフォルダー一覧を再読み込みします。HTTP サーバーは
127.0.0.1 にバインドし、プレーン HTTP で通信します。別のマシンからアクセスするには、
TLS 終端プロキシまたはトンネルの背後に配置し、プレーンなポートを決して公開しないでください。
rootmind-mcp-http --index を指定すると、そのプロセス内でバックグラウンドのインデックス作成も実行されます。
同じデータベースをインデックスする REST API がない場合に限り、これを使用してください。
各インデックス作成プロセスは、自身の設定コピーに存在しないフォルダーのドキュメントを削除します。
4. デスクトップアプリを実行する(開発)
# terminal 1: backend, with the Vite dev origin allowed by CORS
cd backend
RLM_DEV=1 uv run rootmind api # PowerShell: $env:RLM_DEV=1; uv run rootmind api
# terminal 2: desktop
cd desktop
pnpm install
pnpm tauri dev
開発ビルドは RootMind サービスを使用しないため、アプリはバックエンドのアドレスを尋ねます。
http://127.0.0.1:8000 を確認してください。詳しくは
desktop/README.md をご覧ください。
インストーラーを自分でビルドする
Windows では、リポジトリのルートから実行します:
# 1. Backend: PyInstaller onedir build -> backend/dist/rootmind-backend/
cd backend
uv sync --locked --no-dev --group build
uv run --no-sync pyinstaller packaging/rootmind-backend.spec --noconfirm --clean --distpath dist
cd ..
# 2. Copy it to desktop/src-tauri/binaries/rootmind-backend/ and check it
python scripts/prepare_backend.py
# 3. Installer with the release overlay, which adds the backend
cd desktop
pnpm install
pnpm tauri build --config src-tauri/tauri.release.conf.json
インストーラーは desktop/src-tauri/target/release/bundle/nsis/ に出力されます。
開発ツールを戻すには、その後 backend/ で uv sync を実行してください。
オーバーレイなしで pnpm tauri build を実行すると、バックエンドのないアプリがビルドされます。
リポジトリの構成
backend/
src/rootmind/
rlm_engine/engine.py agent loop
tools.py tool registry, argument validation, result formatting
mcp_stdio.py MCP server over stdio
mcp_http.py MCP server over HTTP with a bearer token
api/ REST API (FastAPI)
auth.py, access.py REST token handling; folder access policy interface
winaccess.py folder access policy of the Windows service (AuthZ)
service/ background service: install, uninstall, status, service host;
Windows services and Linux systemd user units (linux*.py, systemd.py)
database/ SQLite models, FTS5 and trigram search
indexer/ parsers, indexer, sync scheduler
connectors/ local folder connector
tests/ offline test suite with fake LLM clients; e2e/ service test
evals/ fictional corpus and eval cases
scripts/ eval runner and corpus generator
packaging/ PyInstaller spec, smoke test, tree hash
deploy/windows/ run-backend.bat: the REST API from source in a console window
desktop/
src/ React + TypeScript UI
src-tauri/ Rust shell: service connection and commands, chat history;
installer/ with the NSIS template and the service hooks;
linux/ and tauri.linux.conf.json for the Linux service and packages
scripts/ installer smoke test
packaging/winget/ winget manifest templates
packaging/mcpb/ Claude Desktop bundle (rootmind.mcpb): stdio-to-HTTP bridge, manifest, tests
scripts/ version check, release notes, backend preparation, winget rendering,
NSIS template refresh
.github/workflows/ CI and release
設計上の決定事項、ガードレール、トレードオフについては ARCHITECTURE.md に、脅威モデルについては SECURITY.md に、バージョンごとの変更については CHANGELOG.md に記載されています。
テストと評価
どちらもオフラインで実行でき、API キーは不要です:
cd backend
uv sync
uv run pytest -q # fake LLM clients, generated test corpus
uv run python scripts/run_evals.py # retrieval regression: scripted policy, no model
テスト。 autouse フィクスチャは Anthropic と OpenAI のクライアント
コンストラクターを例外を発生させる関数に置き換え、環境から API キーを削除します。
テストでは、エンジンの client パラメーターを通じて、スクリプト化された偽のクライアント
(tests/fakes.py)を注入します。各テストには専用の
RLM_HOME と作業ディレクトリが割り当てられます。ドキュメントが必要なテストでは、
PDF、DOCX、XLSX、PPTX、CSV、Markdown、テキストファイルをそれぞれ1つずつ含む
小規模なコーパスを生成します。Windows のフォルダーアクセス ポリシーとサービスの
フォルダー権限をテストするものは Windows でのみ実行され、Linux のファイルモードを
テストするものは Linux でのみ実行されます(偽の systemctl を使う Linux サービス
ロジック自体はどこでも実行されます)。実際のサービスのインストールは CI の
エンドツーエンドテストでのみ行います。
評価。 scripts/run_evals.py は、
backend/evals/corpus/ にある架空のコーパスを
実際のインデクサーでインデックスし、実際のエンジンを通じて16個の質問を実行します。
- ライブモードは評価です。ケースごとに実際のモデルを複数回実行し、合格率(期待されるソースが引用されていること、必須文字列が含まれていること、禁止文字列が含まれていないこと)、ツール経路のばらつき、ツール呼び出し数、トークン数、レイテンシ、停止理由をレポートします。キーは環境変数からのみ読み取り、CIでは実行されません。
- ドライモードは検索のリグレッションテストであり、エージェントの評価ではありません。モデルの代わりにスクリプト化されたポリシーを使い、各ケース用に手書きされたクエリ(データセット内の
dry_search)で検索し、提案されたウィンドウを読み取って抜粋で回答します。インデックスとツールレイヤーが引き続き、適切なドキュメントを1位(hit@1)または上位5件(hit@5)に表示し、正しいページ、スライド、またはシートを引用することを確認します。手動で選定したクエリでは、ゲート対象の15ケースで1.0が期待値です。同義語の罠であるc09は既知の失敗ケースです。hit@5が1.0を下回るとCIは失敗します。回答の品質については何も示しません。
CI。 GitHub Actionsのワークフローでは、コミットSHAで固定したアクションを使用し、シークレットは使いません。リポジトリへの書き込みが可能なのはリリースジョブのみです。
| ワークフロー | 実行内容 |
|---|---|
backend.yml | ruffによるチェックとフォーマットチェック、バックエンド、デスクトップ、Claude Desktopバンドル間のバージョンチェック、UbuntuとWindowsでのリリーススクリプトのテスト、Ubuntu(Python 3.12および3.14)とWindows(Python 3.12)でカバレッジ付きのpytest、ドライ検索リグレッション |
backend-exe.yml | WindowsとUbuntu 22.04でのPyInstallerのonedirビルド、各実行ファイルのスモークテスト(REST、HTTPおよびstdio経由のMCP、すべてのファイル形式のインデックス作成)とツリーハッシュ、その後のサービスのエンドツーエンドテスト:昇格されたWindowsランナーではWindowsサービス(インストール、権限、トークン、読み取り範囲の制限、更新、アンインストール)、Ubuntuではランナーのアカウントのsystemdユーザーユニット(拒否動作、インストール、ファイルモード、トークン、インデックス作成、再起動、更新、MCPの無効化と有効化、アンインストール)。プルリクエストでは、サービス関連のコードが変更された場合にのみサービスのテストを実行します |
desktop.yml | ESLint、TypeScriptの型チェック、vitest、Viteビルド、Windowsでの cargo fmt、cargo clippy、cargo check、cargo test、Ubuntu 22.04での cargo clippy と cargo test |
release.yml | バージョンタグ v* に対し、backend-exe.ymlによるバックエンドの実行、そのバックエンドを含むマシンごとのインストーラー、再インストール画面を表示せずにインストール済みバージョンをその場で更新することの確認、昇格されたランナーでRootMindとWindowsサービスをインストール、更新、再インストール、アンインストールするスモークテスト、およびSYSTEMとしてサイレントインストール(アプリのみ)して、アプリと同じ方法でサービスをセットアップし、SYSTEMとして更新するテスト、wingetマニフェストのスキーマ検証、Claude Desktop用の rootmind.mcpb のテスト、検証、パッケージ化、Linuxバックエンドを含むLinuxパッケージ(.deb、.rpm、AppImage)の作成、ランナーへの.debのインストールと両方のパッケージ版バックエンドの起動、その後、インストーラー、Linuxパッケージ、バンドル、両方のバックエンドアーカイブ、SHA256SUMS.txt、アテステーションを含むGitHub Releaseの作成。手動実行と、パッケージングに変更を加えるプルリクエストでは、何も公開しないドライランを実行します |
mcpb.yml | Claude Desktopバンドル:UbuntuとWindowsでブリッジの node:test テストを実行し、その後、マニフェストを検証してmcpb CLIでバンドルをパッケージ化します |
secrets.yml | 監査済みベースライン .secrets.baseline を基準に、追跡対象のすべてのファイルでdetect-secretsを実行します |
Dependabot(.github/dependabot.yml)は、4つすべてのエコシステムについて、毎月の依存関係更新を提案します。
セキュリティモデルの概要
- RootMind は、個人が自分のコンピューターで使うことを想定して構築されています。REST API は 127.0.0.1 にバインドされ、ほかのマシンからの接続を拒否し、外部の
Hostヘッダーを拒否します。また、デスクトップアプリからのクロスオリジンリクエストのみを許可します。 - RootMind サービスの REST API にはベアラートークンが必要です。ソースから
rootmind apiを実行する場合、要求しない限りトークンなしで起動します。トークンがない場合、ローカルのすべてのプロセスから API を呼び出せます。 - サービスは LocalSystem として実行されますが、管理者権限がなくてもインストールしたアカウントが読み取れるものだけを読み取ります。インストールと修復には、管理者による承認が 1 回必要です。Linux では root 権限を使わず、自分のアカウントの systemd ユーザーサービスとして実行されます。ファイルのアクセス権により、データとトークンはそのアカウントだけがアクセスできます。
- MCP HTTP サーバーはデフォルトで有効です。ベアラートークンが必要で、127.0.0.1 にバインドされます。リモートアクセス(ngrok)はデフォルトで無効です。有効にすると、MCP トークンを持つ人は誰でも公開アドレスを通じて、インデックス化されたすべてのドキュメントを読み取れます。
- インデックス化はお使いのコンピューター上で行われます。質問に回答する際、質問、検索結果の抜粋、ドキュメントの抜粋が、設定した LLM プロバイダーに送信されます。
- インデックス化されたドキュメントは信頼できない入力です。すべてのツールは読み取り専用で、ドキュメントのテキストはデータとして扱われ、質問ごとのツール使用回数には上限がありますが、プロンプトインジェクションの問題は解決されていません。
脅威モデルの詳細は SECURITY.md をご覧ください。
制限事項
- デスクトップアプリと RootMind サービスは Windows と Linux(x86-64)で動作します。macOS 版はありません。バックエンドはクロスプラットフォーム対応の Python で、CI では Ubuntu と Windows 上でテストを実行します。
- リリースバイナリはまだコード署名されていません(インストールを参照)。RootMind はまだ winget リポジトリに登録されていません。初回の提出を進めています。
- OCR には対応していません。テキストレイヤーのないスキャン済み PDF からは、テキストを取得できません。
- レガシー形式の
.docおよび.xlsファイルは DOCX および XLSX 用のパーサーに渡されるため、通常は解析に失敗します。 - ストリーミングには対応していません。デスクトップアプリは回答がすべて完了するまで待機します。
- 全文検索では、同義語や言語をまたいだマッチングに対応していません(上記のトレードオフ表を参照)。
- Windows ではインストールに管理者アカウントが必要で、サービスが提供されるのはコンピューターごとに 1 つのアカウント、つまり RootMind をインストールしたアカウントです。Linux では、RootMind を起動した各アカウントにそれぞれ独自のサービスが作成されます。
- Windows サービスはネットワークドライブや共有フォルダーをインデックス化できません。
- Linux では、linger が有効(
loginctl enable-linger)でない限り、ログイン中のみサービスが実行されます。 - データベースごとにインデックス化を行うプロセスは 1 つだけにしてください。MCP サーバーはデフォルトではサービス提供のみを行います。同じデータベースを共有する追加の REST API には
RLM_DISABLE_SCHEDULER=1を設定してください。 - MCP stdio サーバーは起動時にフォルダー一覧を読み込みます。フォルダーを変更した場合は、サーバーを再起動してください。
- 増分同期では、設定されたすべてのフォルダー内の全ファイルをハッシュ化するため、非常に大きなフォルダーでは時間がかかります。
コントリビューション
開発環境のセットアップ、チェック、規約、リリース手順については CONTRIBUTING.md をご覧ください。セキュリティ上の問題は、SECURITY.md の説明に従って非公開で報告してください。
ライセンス
MIT、著作権 (c) 2026 Christian Gäking。
パッケージ化されたバックエンドとインストーラーにはサードパーティの依存関係が含まれており、それぞれ独自のライセンスが適用されます。
コード署名ポリシー
リリースはまだコード署名されていません。各リリースには代わりにチェックサムとビルド来歴の証明書が含まれます(ダウンロードの検証を参照)。署名対象、チームの役割、プライバシーポリシーについては CODE_SIGNING.md をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。