mcpField
R
reachpad-mcp

reachpad-mcp

リモート
reachpad.dev開発ツール38 週間前に更新
リポジトリ公式サイト

reachpad-mcp について

reachpad-mcp は、永続化されたクラウド開発ワークスペースを作成・操作するコーディングエージェント向け MCP サーバーです。コマンド実行やスナップショットの分岐、別途デプロイせずにリンクでアプリのプレビューを共有できます。

主な機能

  1. 01永続ワークスペースの作成
  2. 02ワークスペース内でのコマンド実行
  3. 03封印済みスナップショットからの分岐
  4. 04ポート公開と共有リンクの発行
  5. 05ワークスペースの一覧と管理
  6. 06stdio と Streamable HTTP に対応

活用シーン

  1. 01永続ワークスペースでのアプリ開発
  2. 02準備済みスナップショットからの実験の分岐
  3. 03稼働中アプリのプレビューをリンクで共有
  4. 04ワークスペースの一時停止後に作業を再開

MCP 対応

MCP クライアントに、ワークスペース作成、コマンド実行、スナップショット分岐、ポート公開、管理のツールを提供します。ローカルクライアント向けの stdio と、リモートコネクター向けの Streamable HTTP に対応します。

設定

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

エンドポイントhttps://reachpad.dev/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@reachpad/mcp0.4.2

ツール

25

このツールにパラメーターはありません。

詳細

@reachpad/mcp

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

これは MCP サーバーです。Claude、ChatGPT、Cursor、OpenCode、または独自のエージェントが、開発者がノートパソコンを開いたままにしておかなくても、ワークスペースを作成し、その中でコマンドを実行し、フォークして、後から再び利用できるようにします。

  • 状態を保持します。 一時停止するとディスクが封印され、次の呼び出しではその封印から起動し、ファイル、インストール内容、git の状態がそのまま保たれます。再構築は不要です。プロセスは例外で、起動時は常にコールドブートです。
  • フォークできます。 準備済みの状態から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

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

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

stdio はローカルクライアントが使用し、Streamable HTTP はリモートコネクターが使用します。ツールも動作も同じです。分岐ではなく追加方式にしています。同じインターフェースに対する実装が2つあると、乖離していくためです。

HTTP 側は GET に対して405を返します。ここにあるすべてのツールはリクエスト/レスポンス方式であり、仕様では、到着しないトラフィックを待って接続を維持する代わりに、サーバー起点のストリームを拒否できます。セッションはありません。再起動で再構築できない情報が、呼び出しをまたいで保持されることはありません。また、独自の認証情報もありません。HTTP リクエストを認可するものが、そのまま reachpad も認可します。

デフォルトで認証が有効です。 REACHPAD_MCP_HTTP_TOKEN を設定すると、それがベアラートークンになります。何も設定しない場合は実行ごとにトークンが生成され、標準エラー出力に表示されます。背後で run_command を使ってお客様のアカウントに接続するポートを、マシン上の他のすべてのプロセスに公開すべきではないためです。

reachpad mcp: streamable http on http://127.0.0.1:8722
reachpad mcp: no REACHPAD_MCP_HTTP_TOKEN was set, so this one was generated for this run:

    Authorization: Bearer 3Qk…

reachpad mcp: it changes every restart. Set REACHPAD_MCP_HTTP_TOKEN to pin it, or
reachpad mcp: REACHPAD_MCP_HTTP_NO_AUTH=1 to serve with no authentication at all.

認証なしでの提供も引き続き可能ですが、明示的に指定する必要があります:REACHPAD_MCP_HTTP_NO_AUTH=1。

設定

変数意味
REACHPAD_ENDPOINTReachpad のホストです。ループバック以外への平文の http:// 接続は、ソケットを開く前に拒否されます。
REACHPAD_IDENTITY_CREDENTIALユーザーごとの認証情報です。1 つのアカウントを指定し、そのアカウントの権限でのみ操作できます。サーバーはリクエストからではなく、認証情報自体のレコードから ID を取得します。
REACHPAD_API_KEYオプションの、ワークスペースごとにスコープが設定され、取り消し可能なキーです。設定すると、run_command はこのキーを使用し、ID の交換は不要です。
REACHPAD_MCP_HTTP_PORTstdio の代わりに HTTP を提供します。
REACHPAD_MCP_HTTP_HOSTデフォルトは 127.0.0.1 です。このプロセスはお客様の認証情報を使ってコントロールプレーンに接続するため、インターネットに公開するアドレスにバインドする場合は、TLS を終端するプロキシの背後で意図的に行ってください。
REACHPAD_MCP_HTTP_TOKENベアラートークンです。比較は定時間で行われます。指定されていない場合は、実行ごとに生成され、stderr に出力されます。指定がないからといって、エンドポイントが認証なしで公開されることはありません。
REACHPAD_MCP_HTTP_NO_AUTH1 を指定すると、認証なしで提供されます。ポートに接続できるすべての呼び出し元に権限が付与されます。これは意図的な選択であり、デフォルトではありません。
REACHPAD_MCP_ALLOWED_ORIGINSカンマ区切りで指定します。リストにない Origin を含むリクエストは拒否されます。ブラウザーはこれを偽装できないため、DNS リバインディングを防止できます。Origin がない場合はブラウザー以外のクライアントとして許可されます。

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

ツール

ツール機能
get_credit_balance()残りのコンピューティングクレジットを取得します。クレジット 1 つで、標準ワークスペースを 1 分間実行できます。
create_workspace(repo?, ref?, name?)新しいワークスペースを作成します。オプションでリポジトリを $HOME/work にクローンできます。名前を省略すると、Reachpad が表示名を生成します。
list_workspaces()お客様のワークスペースと、それぞれのフォーク数を一覧表示します
get_workspace(workspace)起動元の情報を取得します。ヘッドスナップショット、ログの位置、フォークツリーが含まれます
run_command(workspace, argv, cwd?, env?, timeout_ms?)コマンドを 1 つ実行し、終了コードと出力を返します。一時停止中のワークスペースは、実行に応じて再開されます。
checkpoint_workspace(workspace, name?)最後に確定したスナップショットからフォークします。元のワークスペースには変更を加えません
expose_port(workspace, port, check?)ポートをウェブに公開し、アクセス用リンクを取得します。ポートごとに冪等です。
list_ports(workspace)このワークスペースが公開しているポートを、古い順にリンクとともに一覧表示します
revoke_port(workspace, port)ポートを 1 つ閉じます。後で再公開すると、別のリンクが発行されます。
delete_workspace(workspace)ワークスペースをアーカイブしてプランの枠を解放します。何も削除されず、スナップショットと履歴は保持されます。

0.4.0 で名称を変更しました。 以前は 6 つのツール名が *_environment で、environment 引数を受け取っていましたが、CLI、マニュアル、ダッシュボードではすべて workspace と表記されていました。対象は最初から 1 つだけだったため、現在は表記も 1 つに統一しています。以前の名前と引数も引き続き機能し、案内には表示されません。そのため、すでにこれらを呼び出しているものに影響はありません。ただし、新しい呼び出しでは workspace の表記を使用してください。

意図的に含めていない機能: ワークスペース内でエージェントを起動する機能です。これは reachpad のロードマップにはありますが、まだフリートには含まれていません。必ず失敗するツールはモデルのターンを無駄にし、ほかの機能への信頼も損ないます。そのため、このサーバーは提供できない機能を案内しません。

ポートリンクとは何か、何ではないか

リンクを誰かに渡す前に、ぜひお読みください。URLからは次のことがわからないためです。

  • Reachpad にサインインしている人なら誰でも、リンクを知っていれば開けます。 プライベートな URL でも、安全な URL でもありません。プレビュー用のデプロイと同じように扱ってください。
  • リンクはアドレスであり、コピーではありません。 同じポートでアプリを再起動すると、同じリンクから新しいバージョンが表示されます。
  • 実行中のプロセスは一時停止後も存続しません。 ワークスペースはファイルを保持したまま、何も実行されていない状態でコールドブートするため、一時停止後はそのポートで何かが再び待ち受けるまで、リンクはエラーを返します。訪問者のリクエストによって一時停止中のワークスペースは起動しますが、その中の何かが再起動するわけではありません。
  • expose_port はその後にポートへ接続を試みます。何も応答しなかった場合に通知するためです。何も提供されていないポートへのリンクも、機能するリンクとまったく同じように見えてしまいます。接続を省略するには check: false を渡してください。接続を試みると、一時停止中のワークスペースが再開します。
  • REACHPAD_API_KEY しかない場合、キーは --role owner でなければなりません。 collaborator キーは拒否されます。一覧表示で有効なトークンが返されるためです。トークンは権限そのものです。

これを支えるルール

ストリーミング実行 API の単純なクライアントがモデルを誤解させる要因と、この実装での対処方法を示します。

  • 終了していないストリームは成功ではなく、UNKNOWN です。 終了イベントがないまま応答が終わると、ツールはその旨を明示します。終了コード 0 ではありません。エージェントは、その結果を根拠にして、べき等でないコマンドを再試行してはいけません。
  • 期限はサーバー側より長く設定されています。そのため、サーバー側の応答が常に競争に勝ちます。クライアントが先に諦めると、「ビルドが完了しました」が「不明」に変わります。また、数値は推測ではなくサーバーから取得した値と一致します。
  • 拒否時にはコードではなく、解決策が示されます。 プランの上限に達すると、上限、現在の件数、対処方法が返されます。数値はサーバーから取得します。クライアントに上限をハードコードすると、プランが変わった瞬間に虚偽になるためです。
  • 結果はペイロードではなく、ハンドルです。 出力は末尾部分のみ返し、破棄したバイト数も明示します。ビルドログは数メガバイトになることがあり、そのサイズの MCP 結果は呼び出し元のコンテキストウィンドウを圧迫します。
  • 拒否はトランスポートエラーではなく、結果です。そのため、モデルは内容を読んで対処できます。プロトコルエラーになるのは、ツール が不明な場合だけです。

テスト

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

ネットワークも認証情報も不要です。プロトコルテストスイートは、同梱のサーバーを子プロセスとして起動し、実際のソケット上にあるスタブのコントロールプレーンに対して、標準入出力経由で実際の JSON-RPC をやり取りします。そのため、テスト対象は内部インポートではありません。1 つのテストでは、実際の reachpad に対して同じ一連の処理を実行し、エンドポイントが設定されていない場合はスキップします。

リポジトリ

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

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

コメント

MCP は初めてですか?

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

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