mcpField
R
remote-mcp

remote-mcp

github.com/garrytanクラウド・DevOps31.3k46 回インストール今日更新
リポジトリ

remote-mcp について

remote-mcpは、ローカルで動作するai-memory brainを公開し、他のデバイスやエージェントから利用できるようにするスキルです。tailnet内限定か明示的な公開かを選び、同意取得とクライアント単位の権限付与を案内します。

主な機能

  1. 01tailnet経由での公開がデフォルト
  2. 02Funnelによる明示的な公開
  3. 03ホスト変更前の同意取得
  4. 04クライアント単位の権限付与
  5. 05管理者トークンと認証情報の管理

活用シーン

  1. 01他のtailnetデバイスからローカルbrainに接続
  2. 02Funnel経由でクラウドエージェントを接続
  3. 03読み取り専用またはメモリ書き込み権限の付与
  4. 04既存のMCP公開状態の確認

MCP 対応

`gbrain mcp expose`などのコマンドを使い、ローカルMCPサーバーへのアクセスを設定・検証します。サーバーの到達性確認とクライアント側でのネイティブ有効化を区別します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/garrytan/gbrain --skill remote-mcp

インストール後、Claude Code で/remote-mcpを入力して読み込まれたか確認します。

同梱ファイルrouting-eval.jsonl

詳細

Remote MCP — どこからでも自分の脳を使う

脳はすでにユーザーのコンピューター上で動作しています。このスキルを使うと、データを移動したり、データベースをパブリックインターネットに公開したりすることなく、MCP 経由で他のデバイスや、別の場所で使っているエージェントからアクセスできるようになります。デフォルトの通信手段は Tailscale です。公開は 1 つのコマンドで、アクセスはクライアントごとにスコープを限定した許可を 1 つ付与します。

契約

このスキルでは、次のことを保証します。

  • デフォルトは Tailscale です。 gbrain mcp expose は tailscale serve でローカルサーバーを公開します(tailnet 内で HTTPS を使用し、パブリックには公開しません)。ngrok やクラウドホストも代替手段として説明しますが、最初の選択肢として提案することはありません。
  • Funnel の使用は明示的にします。 実行環境が tailnet 上にないクラウドエージェント(Grok Bot、Muse、ChatGPT、Claude.ai / Cowork、Perplexity)には --funnel が必要です。これにより、同じ *.ts.net 名がパブリックにアクセス可能になります。実行する前にそのことを伝えてください。エンドポイントはネットワークではなく、gbrain の OAuth / ベアラー認証とスコープ付き許可によって保護されます。
  • システム変更の前に同意を得ます。 Tailscale のインストール、tailscale up の実行、serve / funnel 設定の書き込み、ユーザーサービスの作成は、ホストの状態を変更します。表示された計画をオペレーターに提示し、--yes を渡す前に承認を得てください。
  • エンジンを使いません。 gbrain mcp expose はデータベースを開きません。PGLite の脳では、実行中のサーバーが単一書き込みロックを保持するため、その後のプロビジョニング手順はすべて、データベースに対する別プロセスではなく、認証済みの管理 API(--admin-token-file)経由で行います。
  • チャットにシークレットを含めません。 管理トークンはレシートの admin_token_file(通常は ~/.gbrain/serve/admin-token)に保存されます。マシン用 OAuth 資格情報と機密 OAuth 資格情報は、プライベートな --credentials-out ファイルに保存されます。パブリック PKCE にはシークレットがありません。レシートを引用する場合は、機密情報を伏せてください。リクエストされたオーナーのログインリンクは、プライベートに、開かずに渡してください。
  • オーナー権限は別扱いです。 expose 管理下のラッパーはトークンファイルを GBRAIN_ADMIN_BOOTSTRAP_TOKEN として読み込みます。このファイルは、そのサーバーに対する gbrain mcp admin と mcp grant を許可します。通常の MCP トークン、クライアントシークレット、OAuth の admin スコープでは許可されません。--no-service を指定する場合は、独立して稼働しているサーバーに実際に設定されたオーナー資格情報を使用してください。expose 用のトークンファイルを作成しても、そのプロセスの設定は変わりません。
  • 最小権限にします。 利用者ごとにクライアントを 1 つ作成し、通常のメモリ利用には memory-writer、読み取り専用アクセスには memory-reader を使用します。より広いアクセス権が必要な場合は、ユーザーのリクエストを受けてください。便宜上のチェックを通すために operator / full / admin を使ってはいけません。
  • サーバーのチェックは、ネイティブクライアントでの有効化を証明するものではありません。 gbrain mcp verify はプライベートなマシン間の引き継ぎ情報を受け取り、その許可で許されるアクセスを確認します。ネイティブ OAuth は、ネイティブクライアントの認証済み接続を通じて検証します。生成されたファイルやサーバーへのプローブだけでは、そのクライアントがツールを読み込んだことを証明できません。

接続するクライアントの判断表

クライアント接続形態コマンド
自分のデバイス:Claude Desktop、別のノート PC 上の Claude Code / Codex / opencode、tailnet に参加しているスマートフォンアプリtailnet のみの HTTPS(デフォルト)gbrain mcp expose --dry-run(プレビュー。実行自体は、同意を得た後のフェーズ 2 で行います)
ベンダーのクラウドで実行されるクラウドエージェント:Grok Bot、Muse、ChatGPT コネクター、Claude.ai / Cowork、Perplexity Computer同じ *.ts.net 名でのパブリック HTTPSgbrain mcp expose --funnel --dry-run(プレビュー。同意を得た後のフェーズ 2 で実行します)
ランタイムを tailnet に参加させられるクラウドエージェント(ユーザー空間の tailscaled、一時的な認証キー)tailnet のみ高度な方法で、検証されておらず、自動化もされていません。リモート MCP ガイドを参照してください
同じマシン上のローカルエージェント(Claude Code、Codex、opencode)ループバック — Tailscale は不要Postgres:gbrain bootstrap harness --yes --port 3131。PGLite:サービスの実行前(gbrain mcp expose の前、またはサービスを一時停止している間)にトークンを発行し(gbrain auth create local-agents --scopes read,write)、gbrain bootstrap harness --yes --port 3131 --token <value> を渡します。または、スコープを指定する方法として、gbrain mcp grant <name> --harness <id> --profile memory-writer --source default --url http://127.0.0.1:3131/mcp --admin-token-file ~/.gbrain/serve/admin-token --credentials-out /private/<name>.json を実行し、その後 gbrain connect http://127.0.0.1:3131/mcp --harness <id> --credentials-file /private/<name>.json --install を実行します(MCP の接続設定のみで、ターンごとのフックはありません)
シンクライアントのみ(このマシンに brain がない)—中止してください。このスキルは brain ホストで実行します

常時稼働するマシンを持たない Grok Bot と Muse のユーザーは、代替手段としてセットアップに記載されているエージェント内ローカルインストールを引き続き利用してください。

ネットワークへの到達性と認証は、別々に選択します。ベンダー名や tailnet/Funnel モードによって認証情報のフローが決まるわけではありません。フェーズ 3 で、対象クライアントのネイティブ OAuth 設定、またはサポートされているプライベートハンドオフアダプターを確認してください。

フェーズ 1 — 検出

gbrain engine status --json
gbrain mcp expose --status --json
  • thin_client: true → brain は別の場所にあります。中止し、このコマンドは brain ホストで実行すると伝えてください。
  • effective_engine: "pglite" → 続行する前に、シングルライターのルール(以下)を確認してください。"postgres" → ローカルでのコマンドは同時に実行しても問題ありません。
  • --status が status: "not_exposed"(--json では終了コード 2)を報告した場合 → フェーズ 2 に進みます。status: "exposed" の場合 → 出力された mcp_url を使ってフェーズ 3 に進みます。status: "pending" の場合 → 証明書またはサービスがまだ起動中です。何かを変更する前に、1 分後に --status を再実行してください。 reason: "leftovers_without_receipt"(終了コード 1)の場合 → 中断された実行によって、ラッパー、ユニット/サービス、または :443 ハンドラーが残っています。next_actions の正確な gbrain mcp expose --remove --yes … 行を実行してください(ハンドラーが単独で残っている場合に限り、--force が含まれます)。その後、フェーズ 2 に進みます。
  • ほかの手段ですでに brain に HTTPS で到達できる場合(ngrok/リバースプロキシの背後で既存の serve --http が動作している場合、または brain が別の場所でホストされている場合)→ gbrain mcp expose は実行しないでください。ホスト済みのアクセスに直接進みます。クライアントの接続方法を選び、そのエンドポイントに登録します(URL と所有者の権限を使ってフェーズ 3 を行います)。その後、クライアントを設定します(フェーズ 4)。
  • どのクライアントから brain にアクセスするかを確認してください(tailnet と --funnel のどちらを使うかは判断表に従います)。ユーザーがすでに回答した内容は尋ねないでください。

フェーズ 2 — 公開

まずプレビューし、その後、同意を得て実行します。

gbrain mcp expose --dry-run            # prints the plan; changes nothing
gbrain mcp expose --yes                # your own devices (tailnet only)
gbrain mcp expose --funnel --yes       # a cloud agent must reach it

オプション:--port N(デフォルトは 3131)、--surface verbs|starter|full(デフォルトは full。serve --http と同じ範囲を公開します)、--enable-dcr、--no-tailscale(何も公開せず、サービスだけをインストールします)、--no-service(公開のみ。運用者が自分で serve を実行します)、--no-install(Tailscale をインストールせずに失敗します)、--force(別のローカルポートを指す serve ハンドラーを引き継ぎます)、--json。 コマンドの実行順序は次のとおりです。plan(ポートで何かがすでにリッスンしている場合は、それが HTTP かどうかにかかわらず、また --no-service が指定されていない場合は、最初に処理を拒否します。また、ライブの tailnet マッピングを記録したレシートに対して --no-tailscale が渡された場合も拒否します)→ consent → tailscale バイナリを見つけるかインストール → 必要に応じてサインイン(Linux:sudo tailscale set --operator=$USER、続けて sudo tailscale up。システムにインストールされたバイナリの場合に限り、sudo を先頭に付けます。オペレーター設定は永続し、--remove では取り消されません。macOS:tailscale up)→ マシンの tailnet DNS 名を読み取り、HTTPS 証明書が有効になっていることを事前確認(--funnel を指定した場合は、ノードに Funnel 機能があることも確認)→ tailscale serve / funnel → 管理者トークンを確保 → ラッパーと launchd エージェント / systemd ユーザーユニットを書き込み → ローカルおよび tailnet の /health をポーリング → レシート ~/.gbrain/serve/expose.json を書き込みます。--json を指定すると、各ステップは名前付きチェック(plan、consent、tailscale.binary、tailscale.login、tailscale.identity、tailscale.publish、admin_token、service、verify.local、verify.tailnet、receipt)になります。ヘルスチェックの名前は verify ではなく、verify.local と verify.tailnet です。

コマンドが表示するすべてのプロンプトを中継します。

出力対応方法
tailscale up が出力する Tailscale のログイン URLユーザーに URL を伝え、サインインを待ちます。終了コード 2(tailscale_login_pending)の場合は、出力されたコマンドをそのまま再実行します
declined(終了コード 2、「Nothing changed.」)オペレーターがプロンプトで拒否しました。インストールも公開もされていません。出力された計画を確認してもらった後に限り、--yes を渡します
tailscale_https_not_enabled — 事前チェック、終了コード 2、未公開(CertDomains が空)https://login.tailscale.com/admin/dns で MagicDNS と HTTPS Certificates を有効にしてから、出力されたコマンドを再実行します。同じ理由で終了コード 1 の場合は、tailscale serve の呼び出し自体が同じ原因で拒否されています。対処方法は同じです
tailscale_funnel_not_enabled — 事前チェック、終了コード 2、未公開(ノードに Funnel 機能がありません)tailnet ポリシーで funnel ノード属性を有効にします(https://login.tailscale.com/admin/acls。詳細は https://tailscale.com/kb/1223/funnel)。その後、再実行します。この理由で終了コード 1 の場合は、funnel 後に分類された形式です。対処方法は同じです
tailscale_needs_operatorsudo tailscale set --operator=$USER を実行してから、再実行します
tailscale_unknown(終了コード 1)— tailscale serve --bg が 60 秒以内に完了しませんでしたCLI はオペレーターの操作を待っています(事前チェックでは検出できなかった有効化手順です)。出力された tailscale serve --bg <port> を手動で実行してプロンプトを確認してもらい、その後、再実行します
tailscale_needs_loginLinux:sudo tailscale set --operator=$USER の後に sudo tailscale up を実行します。macOS:tailscale up を実行するか、Tailscale アプリを開いてサインインします。その後、再実行します
tailscale_login_manual(終了コード 2)—「tailscale at is not a system install, so gbrain will not run it with sudo」PATH 上の tailscale はユーザーが書き込み可能です(例:~/.local/bin)。gbrain はこれを root として実行しません。出力されたコマンドにはそのパスが指定されています — sudo <path> set --operator=$USER && sudo <path> up(単に sudo tailscale としても、sudo の secure_path 外にあるバイナリは見つかりません)。これを実行することは、そのバイナリを信頼するというオペレーターの選択です。その旨を伝え、ユーザー自身で実行してもらってから、出力されたコマンドを再実行します
tailscale_receipt_present(終了コード 1、plan が失敗)—「This brain is already published on your tailnet at 」有効な Serve/Funnel マッピングが記録されている状態で、--no-tailscale が渡されました。先に gbrain mcp expose --remove --yes を実行するか、--no-tailscale を外します
tailscale_daemon_not_running(終了コード 2)macOS では open -a Tailscale、Linux では sudo systemctl enable --now tailscaled を実行してから、再実行します
foreign_serve_config —「tailscale serve already proxies :443 to …」(終了コード 1)既存のハンドラーがプロキシする対象をユーザーに提示します(tailscale serve status)。ユーザーが明示的に承認した場合に限り、--force を指定します。別のターミナルでフォアグラウンド実行中の tailscale serve セッションが所有するハンドラーは引き継げません。そのターミナルで停止する必要があります
foreign_listener —「Something already answers on 127.0.0.1: and no expose receipt claims it」(終了コード 1、何も公開される前に拒否。HTTP 以外のサービスからの TCP 接続の受け入れも、404 応答と同様に、すべてのリスナーが対象です)他のプロセスを停止するか、別の --port を選ぶか、--no-service を渡してそのまま公開します。中断された実行の gbrain サーバーが残っている場合は、先に gbrain mcp expose --remove --yes を実行します(レシートなしでの復旧)
no_brain_config(終了コード 1、plan が失敗)—「No brain is configured on this host (gbrain init first), so a service would only crash-loop」先にこのホストで gbrain init を実行してから再実行します。または --no-service を渡して、オペレーターが自分で起動するサーバーのみを公開します。brain がない状態でサービスをインストールしてはいけません
pglite_lock の警告 —「a live process holds this PGLite brain (pid N, …)」ロックを保持しているプロセスをユーザーに伝えます。そのプロセスが終了するまでサービスは起動できません。プロセスを停止するか(並行使用の場合は postgres-adopt に案内してください)、その後 gbrain mcp expose --status を実行します
「could not read tailscale serve status」— tailscale.publish が失敗(公開:終了コード 1 tailscale_<kind>、未公開。--status:終了コード 1。--remove:終了コード 1 tailscale_serve_status_unreadable — レシートがある場合は、レシートとラッパーを保持します。レシートがない場合は、サービスは削除されますが、再実行に必要な裏付けとしてラッパーは保持されます)推測して処理を続行せず、安全側に倒してコマンドは失敗します。tailscale serve status --json を実行し、分類された原因への対処(オペレーター/デーモン/ログイン)を行ってから、同じコマンドを再実行します
handler_not_removed(--remove、終了コード 1)—「the tailscale handler for port is still present」/「could not be confirmed gone」off は実行されましたが、gbrain のハンドラーが残っています(または再読み込みに失敗しました)。サービスはすでに削除されています。レシートとラッパーは意図的に保持されています。tailscale serve status を実行して報告された問題を解決し、gbrain mcp expose --remove --yes を再度実行します — serve reset は決して実行しないでください
verify.tailnet: warn —「this host cannot resolve 」(終了コード 0)brain ホスト自体で MagicDNS がオフです。tailscale set --accept-dns=true を実行してから、gbrain mcp expose --status を実行します。他のデバイスからはすでにサーバーにアクセスできる場合があります。証明書の発行待ちとして扱わないでください
service: manual(スーパーバイザーなし:クラウドサンドボックス、コンテナー)出力されたフォアグラウンドコマンドと nohup … & コマンドを伝えます。これは文書化された結果であり、失敗ではありません
verify.local: warn(終了コード 2、local_health_timeout)ハンドラーは公開され、サービスはインストール済みで、レシートも書き込まれています — この終了コード 2 は「何も公開されていない」という意味ではありません。--status/--remove でこれらを確認できます。待機時間内に /health が応答しませんでした。~/.gbrain/serve/serve.err を確認してから、gbrain mcp expose --status を実行します
verify.tailnet: pending(終了コード 2、tailnet_health_pending。--status では終了コード 1 で報告)同様に、ハンドラー、サービス、レシートはすでに設定されています。初回の証明書発行には 1 分ほどかかる場合があります。後で gbrain mcp expose --status を実行します
confirmation_required(終了コード 2)--yes を指定していない非 TTY 実行です。変更はありません。出力された計画を提示し、ペイロードの user_message を伝え、オペレーターが同意した場合に限り、その fix.command(--yes を追加します)を実行します
tailscale_no_dns_name(終了コード 1)— ノードに MagicDNS 名がありませんhttps://login.tailscale.com/admin/dns で MagicDNS と HTTPS Certificates を有効にしてから、再実行します。何も公開されていません
tailscale_missing(終了コード 1、--no-install)/tailscale_unsupported_platform/tailscale_install_failed(終了コード 1)Tailscale はインストールされていないか、インストールされませんでした(またはインストールできませんでした)。出力されたインストールコマンドまたは https://tailscale.com/download を伝え、ユーザーにサインインしてもらってから、再実行します
tailscale_publish_unconfirmed(終了コード 1)— serve --bg は終了コード 0 で終了しましたが、再読み込みでハンドラーが見つかりません(または読み込めませんでした)tailscale serve status を実行します。gbrain mcp expose --remove --yes を実行すると、レシートがないポートのハンドラーが削除されます(gbrain のラッパーもサービスもまだ存在しない場合は --force を指定)。その後、再実行します
service_install_failed(終了コード 1)ハンドラーは公開済みで、service.state: stopped のレシートも書き込まれています。エラーと ~/.gbrain/serve/serve.err を確認して問題を解決し、再実行します。または gbrain mcp expose --remove --yes を実行します
status_unhealthy(--status、終了コード 1)名前が示されたチェック(tailscale.publish、service、verify.local)が失敗しました。該当する行の対処を行ってから、gbrain mcp expose --yes を実行して修復します
recovered_without_receipt(--remove、終了コード 0)レシートなしでの復旧が完了しました。削除されたものと残されたものを報告します(管理者トークンは残ります)
分類されたエラーを回避するために、Tailscale の状態を手動で編集しないでください。表示された修正を適用して、再実行してください。

フェーズ 3 — クライアントのフローとオーナー権限を選択する

成功した公開レシートの mcp_url と admin_token_file を使用し、カスタマイズした GBRAIN_HOME を使用する場合も含め、以下のサンプル URL/デフォルトパスを置き換えてください。オーナーコマンドは、ホスト上、またはそのサーバーの保護された認証情報を持つ、別途認可された管理用ハーネスで実行します。通常の接続クライアントは、これらの手順を管理者に引き継いでください。クライアントの OAuth スコープではオーナー権限を付与できません。オーナー操作と復旧については、mcp-access および MCP administration に従ってください。

ダッシュボードを開くには、次を実行します。

gbrain mcp admin login-link --url https://your-machine.your-tailnet.ts.net/mcp \
  --admin-token-file ~/.gbrain/serve/admin-token --json

単回使用リンクは取得せず、非公開で共有してください。管理者向けの通常の URL では認証されません。保留中のネイティブ同意の場合は、クライアントのブラウザーリクエストから取得した正確な不透明 ID を指定して --oauth-request ID を追加します。その後、オーナーが同意を別途確認します。リクエストの有効期限が切れた場合、または再起動した場合は、ネイティブクライアントで認可を再開する必要があります。

想定する接続登録共有
ネイティブの公開 PKCEmcp admin register、メソッド none、正確なクライアントコールバックネイティブ OAuth メタデータ。クライアントシークレットなし
ネイティブの機密 PKCE実際の client_secret_post または client_secret_basic、正確なコールバックで mcp admin register--credentials-out による非公開の OAuthClientSetup
マシン認証情報/管理対象のベアラー設定mcp grant --harness IDgbrain connect 用の非公開マシン引き継ぎ

ネイティブ OAuth の場合は、想定するハーネスから実際のリダイレクト URI と認証方式を取得してください。以下の CLIENT_REDIRECT_URI は、その正確な URI に置き換える必要があります。推奨されるコールバック URI ではありません。

gbrain mcp admin register native-example --redirect-uri 'CLIENT_REDIRECT_URI' \
  --token-endpoint-auth-method none --profile memory-writer --source default \
  --url https://your-machine.your-tailnet.ts.net/mcp \
  --admin-token-file ~/.gbrain/serve/admin-token --dry-run --json

プレビューを確認してから、--dry-run を付けずに再実行してください。機密 PKCE の場合は、クライアントの実際の POST/Basic メソッドを使用し、作成前に --credentials-out PRIVATE_FILE を追加してください。ネイティブ登録で作成されるのは認可コードと更新用のグラントであり、マシントークンではありません。返された ID を使って手順を取得してください。

gbrain mcp admin setup CLIENT_ID --harness generic --flow authorization-code \
  --url https://your-machine.your-tailnet.ts.net/mcp \
  --admin-token-file ~/.gbrain/serve/admin-token --json

サポートされているアダプター ID が分かっている場合は、それを使用してください。generic を指定すると、ネイティブ設定の手動手順が表示されます。ネイティブクライアントが OAuth を開始し、ベリファイアを管理します。OAuthClientSetup は、gbrain connect や gbrain mcp verify 用のマシン引き継ぎ情報ではありません。オーナーが明示的に選択しない限り、DCR はオフのままにしてください。--enable-dcr を指定しなくても、オーナーによる手動登録は可能です。

非公開のマシン引き継ぎ情報を使うクライアントの場合は、同じ稼働中サーバーの管理 API を使ってプレビューしてください。

gbrain mcp grant agent-example --harness grok-bot --profile memory-writer \
  --source default \
  --url https://your-machine.your-tailnet.ts.net/mcp \
  --admin-token-file ~/.gbrain/serve/admin-token \
  --credentials-out /private/agent-example.json --dry-run --json
  • --harness は実際のアダプター ID です(gbrain mcp adapters)。例:grok-bot、muse、claude-desktop、codex、claude-code、opencode、…
  • プレビューを確認してから、--dry-run を付けずに再実行してクライアントを作成してください。
  • プロファイル(memory-reader、memory-writer、coding-agent、operator、delegating-agent、full)と委任の上限は、hosted harness access で定義されています。デフォルトは memory-writer とし、読み取りのみの場合は memory-reader を使用してください。
  • レシートは秘匿化されています。認証情報ファイルの権限は 0600 です。クライアントへの移動には非公開のチャネルを使用し、チャットでは共有しないでください。

フェーズ 4 — クライアント内で選択した接続を設定する

クライアントインストール
サポート対象のデスクトップ/クラウドコネクターを含む、任意のネイティブ OAuth クライアントネイティブ登録で実際に使用するエンドポイント、クライアント ID、コールバック、方式を、クライアントの対応する設定に入力します。機密クライアントには、非公開の OAuth シークレットも渡します。そのクライアントで認可を開始し、所有者の同意を得ます。クライアントの手動設定ができない場合は、そのクライアントの docs/mcp/ ガイドに従ってください。マシンの認証情報で代用しないでください。
プライベートなマシンパスを使用する Grok BotBot 内で、gbrain connect https://your-machine.your-tailnet.ts.net/mcp --harness grok-bot --credentials-file /private/agent-example.json --install --root /workspace/gbrain を実行します。生成された指示をネイティブスキルとして有効にします(別途、目に見える手順です)。
プライベートなマシンパスを使用する Muse同様に、gbrain connect … --harness muse … --install --root <verified durable root> を実行します。まず永続的なユーザーファイルの場所を確定してください。/tmp や、実在を確認していないパスは使用しないでください。
別のマシンで管理されたプライベート設定を使用する Claude Code/Codex/opencodegbrain connect https://your-machine.your-tailnet.ts.net/mcp --harness codex --credentials-file /private/agent-example.json --install を実行し、実際に使用するアダプターを選択します。
brain ホスト上のローカルエージェントPostgres:gbrain bootstrap harness --yes --port 3131。PGLite:稼働中の serve の下では、--token が渡されない限り bootstrap harness は拒否されます。サービスの稼働前(gbrain mcp expose の実行前、またはサービスを一時停止している間)にトークンを作成し(gbrain auth create local-agents --scopes read,write)、gbrain bootstrap harness --yes --port 3131 --token <value> に渡してください。または、フックを使わず、スコープ付きの gbrain mcp grant … --url http://127.0.0.1:3131/mcp --admin-token-file ~/.gbrain/serve/admin-token --credentials-out /private/<name>.json と gbrain connect http://127.0.0.1:3131/mcp --harness <id> --credentials-file /private/<name>.json --install のパスを使用します(MCP 接続設定のみ)。
ChatGPT/Perplexity/その他のクラウド OAuth クライアントランタイムが tailnet の外部にある場合は、--funnel を明示的に指定する必要があります。ネイティブ OAuth パスと、docs/mcp/ にあるクライアントごとのページに記載された手順に従い、公開 URL を使用してください。

tailnet 専用のエンドポイントにアクセスできるのは、同じ tailnet にサインインしているデバイスのみです。デバイスが your-machine.your-tailnet.ts.net を名前解決できない場合は、そこに Tailscale をインストールしてサインインしてください。その場合に --funnel に切り替えないでください。

フェーズ 5 — 検証

プライベートマシン経由の場合は、クライアントの環境から実行します。

gbrain mcp verify --client CLIENT_ID --harness grok-bot \
  --url https://your-machine.your-tailnet.ts.net/mcp \
  --credentials-file /private/agent-example.json --json

server_status: "passed" は、許可されたサーバー検査に合格したことを示します。書き込み可能な許可では、ランダム化した書き込み/読み戻しとクリーンアップも実行されます。ネイティブでの有効化は別途行います。終了コード 2(partial)は、ネイティブ検証が完了していないことを示します。

ネイティブ OAuth の場合は、gbrain://capabilities と、そのハーネスの認証済み MCP 接続を介した許可済みの呼び出しを確認します。プライベートハンドオフ検証ツールに OAuth セットアップのエクスポートを渡さないでください。どちらの方法でも、想定しているハーネスで呼び出しを確認し、メモリテストの前に公開されたスキーマを調べてください。書き込み可能な許可が承認されている場合は、そのソースの許可範囲内で、出典情報と明示的な visibility: "world" を伴う無害な合成データのみを使用し、返された ID を保持してください。新しい会話で想起を確認し、内容を訂正してから撤回してください。プライベートな情報は、これらのリモート操作を通じて想起または撤回できません。テストに合格するために、実際のプライベートな情報を変更してはいけません。読み取り専用アクセスの場合は、書き込み権限を追加せずに、認証済みの読み取りを確認してください。登録、セットアップの配信、サーバー検査、ネイティブ呼び出し、クリーンアップはそれぞれ分けて報告してください。

ホスト側の確認はいつでも実行できます:gbrain mcp expose --status(レシートがない場合は、残存物を leftovers_without_receipt として報告し、正確なクリーンアップコマンドとともに終了コード 1 を返します)。公開とホストサービスを削除するには、次を実行します: gbrain mcp expose --remove(サービスを停止して削除します。レシートにスキップ済みと記載されていてもユニットが存在する場合も同様です。gbrain のサーブ/ファンネルハンドラーのみを --https=443 --set-path=/ off で解除し、インストール済みでサインイン済みの Tailscale はそのまま維持します(Linux のオペレーター設定も維持します)。管理トークンは --force を指定しない限り保持します。レシートがない場合、つまり公開が中断されていた場合は、ディスク上にあるものを基に復旧します。ラッパー、ユニット、--port(既定値は 3131)の :443 ハンドラーを確認し、トークンは保持します。ハンドラーは、ラッパー、ユニット、またはサービスによってその存在が裏付けられる場合にのみオフにします。ハンドラーしか存在しない場合は報告して、--force が指定されるまでそのまま残します)。off を実行してもハンドラーが残る場合、削除済みとして報告されることはありません。終了コード 1 と handler_not_removed を返し、再実行に備えてレシートとラッパーを保持します。tailscale serve status が読み取れない場合は、両方の処理を終了コード 1 と tailscale_serve_status_unreadable で停止します(サービスはすでに削除済みで、レシートおよび/またはラッパーは保持されます)。Tailscale を修復し、表示されたコマンドを再実行してください。確認プロンプトで拒否すると、「何も変更されませんでした。」と表示して終了コード 2 を返します。--no-service を指定して再実行した場合、既存のサービスは保持されます。

公開を削除しても、クライアント登録は取り消されず、脳データも消去されません。影響とリビジョンを確認したうえで、MCP 管理にあるオーナー用のライフサイクルコマンドを使い、トークンの無効化、アクセス権の取り消し、または選択したクライアントの削除を行ってください。

PGLite の単一ライターに関する注意

公開サーバーの実行中は、PGLite のロックが保持されます。データベースを開くホスト側のコマンド(オーナーファイルまたは保護された GBRAIN_ADMIN_BOOTSTRAP_TOKEN を指定しない gbrain doctor、gbrain mcp grant、--token を指定しない gbrain bootstrap harness)は live_serve ですぐに失敗し、待機しません。代わりに、実行中のサーバーを通じて管理してください。例外は gbrain sync と gbrain sweep --once で、これらは自動的に実行中のサーブに処理を委任します。プロビジョニングには必ず --admin-token-file を使用してください。ユーザーがローカルコマンドを並行して実行する必要がある場合は、サーバーを停止せずに postgres-adopt に案内してください。

失敗した場合

gbrain のエラー code、終了コード、[AGENT] ブロック、通知ブロックが発生した場合は、エージェントオペレータープロトコルに従ってください。このスキルに固有の事項は次のとおりです。

  • gbrain mcp expose --status が not_exposed(終了コード 2)または pending を報告した場合は、ステータスの説明に従って証明書またはサービスを待ちます。leftovers_without_receipt(終了コード 1)は実行が中断されたことを意味するため、その fix に従ってください。
  • Tailscale またはサービスのインストールに --yes を使う前に、ユーザーの同意が必要です。確認が必要な場合、gbrain mcp expose は引き続き終了コード 2 を返します(旧仕様として文書化されています)。終了コードだけでなく、ブロックの内容を確認してください。
  • クライアントで invalid_token/insufficient_scope が発生した場合は、そのクライアント用にスコープを限定した許可を発行してください。接続させるために管理者資格情報を渡してはいけません。

アンチパターン

  • ngrok やクラウドホストを最初に勧めてはいけません。デフォルトは Tailscale であり、代替手段はそれを明示的に希望する人向けです。
  • この構成で gbrain serve --http --bind 0.0.0.0 を実行してはいけません。Tailscale Serve が TLS を終端し、ループバックに転送します。デフォルトのバインド設定が正しい値です。
  • --funnel を黙って渡してはいけません。エンドポイントがパブリックに到達可能になることと、このクライアントでそれが必要な理由を説明してください。
  • 管理者トークンや資格情報ファイルを会話、コミット、またはハーネスに記録されるコマンド引数に貼り付けてはいけません。
  • クリーンアップのために tailscale serve reset、tailscale logout を実行したり、Tailscale をアンインストールしたりしてはいけません。gbrain mcp expose --remove が操作するのは gbrain のハンドラーだけです。
  • ヘルスチェックに失敗したからといって、operator/full/admin を付与してはいけません。
  • OAuth の admin スコープをオーナー権限として扱ったり、ネイティブ OAuth セットアップファイルをプライベートなマシン間引き継ぎに使ったりしてはいけません。
  • mcp verify に合格したからといって、クライアントが接続済みだと主張してはいけません。ネイティブでの有効化と新しい会話での想起は、クライアント内で確認します。
  • プロビジョニングのために、別プロセスから稼働中の PGLite データベースを開いてはいけません。

出力形式

ホストの状態と、クライアントごとに1行を報告してください。

MCP URL   https://your-machine.your-tailnet.ts.net/mcp   (reach: tailnet only | public via Funnel)
Service   launchd com.gbrain.serve, running   (log: ~/.gbrain/serve/serve.log)
Engine    pglite — provision via --admin-token-file
Client    agent-example (grok-bot, memory-writer): granted, installed, verify passed, native activation pending
Pending   <exact next command, or "nothing">

gbrain mcp expose --status と gbrain mcp verify の出力を(どちらも秘匿情報を削除したうえで)そのまま引用してください。確認できていない手順はすべて明示してください。サーバーのチェックに合格しても、クライアント内で想起が確認されたことの代わりにはなりません。

コメント