Skip to main content
Glama

@reachpad/mcp

reachpad を使うと、Claude、Codex、その他のコーディングエージェントが、永続的なワークスペースでフルスタックアプリを構築し、個別のデプロイなしでリンク共有できるようになります。ワークスペースとは、エージェント自身が操作するクラウド開発コンピュータです。リポジトリ、ファイルシステム、インストール済みの依存関係、ビルド状態がすべて呼び出し間で保持され、忘れてしまうような一時的なサンドボックスではありません。プロセスは例外です。後述します。

これは MCP サーバーです。Claude、ChatGPT、Cursor、OpenCode、または独自のエージェントが、環境を作成し、その中でコマンドを実行し、フォークし、後で戻ってくることができます。開発者がノートパソコンを開いたままにする必要はありません。

  • 永続化します。 一時停止するとディスクは封印され、次の呼び出しはその封印から起動し、ファイル、インストール、git 状態が再構築ではなくそのまま保持されます。プロセスは例外です。起動は常にコールドブートです。

  • フォークします。 準備された1つの状態からの20回の試行は、20回の再構築ではなく、それぞれデルタのコストです。環境はスナップショットチェーンであり、マシンではないからです。

  • シークレットを箱の外に保つことができます。 仲介された認証情報は、あなたの代わりに境界で呼び出され、その値は環境、ログ、ストアに入ることはありません。代わりに環境に書き込まれた認証情報は、設計上、そこで読み取り可能です。

  • エージェントに依存しません。 REST API が正規のものであり、このサーバー、SDK、CLI はその翻訳です。独自のエージェントを持ち込んでください。

API は製品の境界であり、Web UI ではありません: reachpad.dev

インストール

npx -y @reachpad/mcp          # stdio, for a local client

Claude Code の場合:

claude mcp add reachpad -e REACHPAD_IDENTITY_CREDENTIAL=… -- npx -y @reachpad/mcp

Related MCP server: Nolane Habitat

2つのトランスポート、1つの実装

npx @reachpad/mcp                                  # stdio
REACHPAD_MCP_HTTP_PORT=8722 npx @reachpad/mcp      # streamable http

stdio はローカルクライアントが話すもので、Streamable HTTP はリモートコネクタが話すものです。同じツール、同じ動作です。フォークではなく追加されています。1つのサーフェスの2つの実装は、そうやってドリフトするからです。

HTTP 側は GET に対して 405 を返します。ここにあるすべてのツールはリクエスト/レスポンスであり、仕様では、来ないトラフィックのために接続を開いたままにするのではなく、サーバーが開始するストリームを拒否することが許可されています。セッションはありません — 再起動で再構築できないものが呼び出し間で保持されることはありません。また、独自の認証情報を持ちません — HTTP リクエストを認証するものが reachpad を認証するものです。

設定

変数

意味

REACHPAD_ENDPOINT

あなたの reachpad ホスト。ループバック以外への平文 http:// は、ソケットが開く前に拒否されます。

REACHPAD_IDENTITY_CREDENTIAL

ユーザーごとの認証情報。1つのアカウントを指定し、他のアカウントのために動作することはできません。サーバーは、リクエストからではなく、認証情報自体のレコードから ID を取得します。

REACHPAD_API_KEY

オプションで、環境ごとにスコープされ、失効可能です。設定すると、run_command はそれを使用し、ID 交換を必要としません。

REACHPAD_MCP_HTTP_PORT

stdio の代わりに HTTP を提供します。

REACHPAD_MCP_HTTP_HOST

デフォルトは 127.0.0.1。このプロセスは、あなたの認証情報を持つコントロールプレーンにブリッジするため、ワールドにバインドすることは、TLS を終了するプロキシの背後で、意図的に行う決定です。

REACHPAD_MCP_HTTP_TOKEN

ベアラートークン。定数時間で比較されます。ない場合、ポートに到達できるすべての呼び出し元が認証され、サーバーは stderr にその旨を出力します。

REACHPAD_MCP_ALLOWED_ORIGINS

カンマ区切り。リストにない Origin を持つリクエストは拒否されます。ブラウザはそれを偽造できないため、DNS リバインディングを防ぎます。Origin がない場合は非ブラウザクライアントであり、許可されます。

複数の認証情報が設定されている場合、最も狭いものが優先され、拒否された認証情報がより広いものの下で再試行されることはありません — フォールバックは、誰も実行することを選択していない権限昇格になるからです。

ツール

ツール

機能

get_credit_balance()

残りのコンピュートクレジット。1クレジットで、標準環境を1分間実行できます。

create_environment(repo?, ref?, name?)

新しい環境。オプションで、リポジトリが $HOME/work にクローンされます。省略時は reachpad が表示名を生成します。

list_environments()

あなたの環境と、それぞれのフォーク数

get_environment(environment)

起動元: ヘッドスナップショット、ログ位置、フォークツリー

run_command(environment, argv, cwd?, env?, timeout_ms?)

1つのコマンド、その終了コード、出力。一時停止中の環境は、それを提供するために再開します。

checkpoint_environment(environment, name?)

最後に封印されたスナップショットからフォークします。元の環境は変更されません

expose_port(environment, port, check?)

ポートを Web に公開し、そこに到達するリンクを取得します。ポートごとに冪等です。

list_ports(environment)

この環境が開いているポートを、古い順に、リンク付きで表示します

revoke_port(environment, port)

1つのポートを閉じます。後で再度開くと、異なるリンクが発行されます。

delete_environment(environment)

アーカイブし、プランスロットを解放します。何も削除されません — スナップショットと履歴は残ります。

意図的にここにはありません: 環境内でエージェントを起動すること。これは reachpad のロードマップにあり、まだフリートにはありません。常に失敗するツールは、モデルのターンを消費し、残りを信頼しないように学習させるため、このサーバーは提供できないものを宣伝しません。

ポートリンクが何であるか、何でないか

誰かに渡す前に読む価値があります。URL からは何も発見できないからです:

  • リンクを持っている Reachpad にサインインしている人は誰でも開くことができます。 これはプライベート URL でも安全な URL でもありません。プレビューデプロイのように扱ってください。

  • リンクはアドレスであり、コピーではありません。 同じポートでアプリを再起動すると、同じリンクが新しいバージョンを提供します。

  • 実行中のプロセスは一時停止を生き延びません。 環境はファイルをそのままにしてコールドブートし、何も実行されていないため、一時停止後、そのポートで何かがリッスンするまでリンクはエラーで応答します。訪問者のリクエストは一時停止中の環境を起動しますが、その中の何かを再起動するわけではありません。

  • expose_port はその後ポートにダイヤルし、何も応答しなかった場合はその旨を伝えます。何も提供していないポートへのリンクは、機能しているリンクとまったく同じように見えるからです。check: false を渡すとスキップできます — ダイヤルは一時停止中の環境を再開します。

  • REACHPAD_API_KEY のみの場合、キーは --role owner である必要があります。 collaborator キーは拒否されます。リストはライブトークンを返し、トークンはケイパビリティだからです。

それが構築されているルール

これらは、ストリーミング exec API のナイーブなクライアントがモデルを誤解させる方法と、この API が代わりに行うことです。

  • 終了していないストリームは UNKNOWN であり、成功ではありません。 応答が終端イベントなしで終了した場合、ツールはその言葉でそう言います。これはゼロ終了ではなく、エージェントはその強さで非冪等コマンドを再試行してはなりません。

  • その期限はサーバーより緩いため、サーバー側の応答が常に競争に勝ちます。先に諦めるクライアントは「ビルドが完了しました」を「不明」に変え、数値は推測ではなくサーバーからミラーリングされます。

  • 拒否にはコードではなく救済策が含まれます。 プラン制限に達すると、制限、現在の数、および何をすべきかが得られます。数値はサーバーから来ます。クライアントにハードコードされた制限は、プランが変更された瞬間に嘘になるからです。

  • 結果はハンドルであり、ペイロードではありません。 出力は、ドロップされたバイト数が指定されてテールされます。ビルドログはメガバイトになる可能性があり、そのサイズの MCP 結果は呼び出し元のコンテキストウィンドウを破壊します。

  • 拒否は結果であり、トランスポートエラーではありません。モデルがそれを読んで行動できるようにするためです。未知の ツール だけがプロトコルエラーです。

テスト

node --test 'test/*.test.mjs'

ネットワークも認証情報もありません。プロトコルスイートは、出荷されたサーバーを子プロセスとして起動し、実際のソケット上のスタブコントロールプレーンに対して、その stdio 上で実際の JSON-RPC を話します。テスト対象のものは内部インポートではありません。1つのテストは、実際の reachpad に対して同じアークを実行し、エンドポイントが設定されていない場合はスキップします。

リポジトリ

このリポジトリがソースです。これは意図的に reachpad バックエンドから分離されています: このコードは公開されており、npm に公開され、そのリリースワークフローは公開権限を保持しています。これらはどれもコントロールプレーンと同じリポジトリに属しません。ここにあるものはバックエンドのソースを読むことができず、バックエンドのジョブがここにファイルをコピーすることもありません。

2つのサーバー定数が src/client.js にミラーリングされています — exec 猶予期間とデフォルトの exec タイムアウトです。ミラーリングされた定数は通常腐敗しますが、これは腐敗しません。バックエンド自身の CI がこの公開パッケージを取得し、それらが一致しない場合に失敗するからです。チェックは数値が変更される場所にあります。

Related MCP Connectors

Related MCP Servers

View all related MCP servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Reachpad/reachpad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server