Replit SSH について
Replit SSH は、SSH/SFTP 経由で Replit プロジェクトのファイルにアクセスするローカル MCP サーバーです。ファイル操作と SSH 設定に対応し、接続先の制限、アトミック書き込みの検証、安全な SSH 設定の解析を備えています。
主な機能
- 01SSH と SFTP の接続確認
- 02プロジェクトファイルの一覧表示、読み取り、検索
- 03ファイルメタデータの確認
- 04ファイルの書き込み、移動、削除
- 05SSH キーと設定ブロックの生成
活用シーン
- 01プロジェクトファイルや package スクリプトの確認
- 02ソースファイル内の文字列検索
- 03Replit プロジェクト内のファイル更新や移動
- 04ローカルから Replit への SSH 接続設定
MCP 対応
SSH 接続確認、SFTP によるファイル操作、SSH 設定のための 9 種類のツールを MCP ホストに公開します。操作者のマシンから `*.replit.dev` ホストへ接続し、ローカルの SSH キーを使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @mindstone/mcp-server-replit-sshREPLIT_SSH_REQUEST_TIMEOUT_MSOptional per-request timeout in milliseconds (default 60000, max 600000).MCP_REPLIT_SSH_STRICT_HOST_KEYシークレットSet to 1 to require pre-populated known-hosts entries. When unset (default), unknown hosts are recorded on first contact (OpenSSH `accept-new` behaviour); a fingerprint mismatch always fails closed.MCP_REPLIT_SSH_KNOWN_HOSTS_PATHExplicit path to the connector's SSH known-hosts file. Defaults to $MCP_WORKSPACE_PATH/.replit-ssh-known-hosts, then $HOME/.replit-mcp/known_hosts.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| host | string | はい | SSH ホスト(例:"<uuid>-00-<hash>.riker.replit.dev") |
| user | string | はい | SSH ユーザー名—"Connect manually" SSH コマンドで @ より前にある値(UUID) |
| verbose | boolean | いいえ | 詳細な診断を有効にします—ハンドシェイク、認証の試行、キーの検証、所要時間を記録します。接続または認証の失敗をトラブルシューティングする場合に使用します。 |
詳細
@mindstone/mcp-server-replit-ssh
Replit SSH MCP サーバー — SSH/SFTP 経由で Replit プロジェクト上のファイルの読み取り、書き込み、一覧表示、検索、情報取得、移動、削除を行い、ローカル SSH キーと ~/.ssh/config のブロックを一度だけ生成します。
ローカルで動作する Replit SSH MCP です。オペレーターのマシンから *.replit.dev ホストのみに接続し、書き込みは SHA-256 による読み戻しで検証するアトミック処理です。また、~/.ssh/config の書き換えでは Match exec のシェル評価ではなく AST 解析を使用します。
ステータス
- バージョン: 0.2.2 · npm
- 認証: ディスク上のローカル SSH キー(デフォルトは
~/.ssh/rebel-replit。~/.ssh/configにIdentityFileが設定されている場合はその値を使用します)。環境変数経由のシークレットは使用しません。 - ツール: 9(接続、ファイル、ssh-setup)
- サーフェス: ローカルプロトコル
- 機械可読情報:
STATUS.json
このプロジェクトの目的
Replit にはホスト型の「Agent」機能がありますが、Core ユーザーが利用できる SSH/SFTP サーフェス向けの MCP サーバーは公開されていません。このプロジェクトを構築した当時のコミュニティ製の選択肢は、システムの ssh バイナリを呼び出すもの(そのため、接続の失敗は汎用的なゼロ以外の終了コードとして表示されます)か、アップストリームの [email protected] パッケージで ~/.ssh/config を解析するものでした。後者は Match exec "<cmd>" ブロックをシェル経由で実行して評価するため、ユーザー制御の設定ファイルを読み込むすべての利用者に対してローカルコードを実行することになります。そこで、ホストアプリケーションがオペレーター自身のマシンから Replit プロジェクト上のファイルを読み取り、一覧表示し、アトミックに書き込めるよう、独自に開発しました。ホストの許可リストは *.replit.dev に限定し、安全な AST のみの設定評価、書き込みごとの SHA-256 読み戻し検証、すべてのツールエラーに対する構造化された復旧契約を備えています。
インタラクション例
「Replit プロジェクト内のファイルを一覧表示してから、
package.jsonを読み取り、定義されているスクリプトを教えてください。」
ホストが呼び出すツール:
replit_check_connection— SSH 接続と SFTP サポートを確認し、遅延を返します。replit_list_files—.にあるファイルとディレクトリを一覧表示します。replit_read_file— プロジェクトのルートからpackage.jsonを UTF-8 テキストとして読み取ります。
応答(一部省略):
{
"ok": true,
"files": [
{ "name": "package.json", "type": "file", "size": 612 },
{ "name": "src", "type": "directory" }
],
"package": {
"scripts": {
"dev": "node src/index.js",
"test": "vitest run"
}
}
}
要件
- Node.js 20+
- npm
- SSH アクセスが可能な Replit アカウント(Replit Core 以上)
- Replit プロジェクトの稼働中の
*.replit.devホスト(プロジェクトを開き、SSH → Connect → Connect manually をクリックして、ホストとユーザー名をコピーします) - replit.com/account#ssh-keys で Replit に登録した SSH キー。まだキーがない場合は、
replit_setup_sshを一度実行して生成してください。
ワンクリックインストール
ボタンをクリックすると、ホストから次の値を入力するよう求められます:REPLIT_SSH_REQUEST_TIMEOUT_MS。
Claude Desktop / Claude Code / Goose / Continue.dev(Replit SSH)の手動設定
{
"mcpServers": {
"Replit SSH": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-replit-ssh"
],
"env": {
"REPLIT_SSH_REQUEST_TIMEOUT_MS": "60000"
}
}
}
}
クイックスタート
インストールとビルド
cd <path-to-repo>/connectors/replit-ssh
npm install
npm run build
npx(公開後)
npx -y @mindstone/mcp-server-replit-ssh
ローカル
node dist/index.js
設定
このサーバーに必須の環境変数はありません。認証には、~/.ssh/config を通じて解決されるローカルの SSH キーを使用します。
任意の環境変数
REPLIT_SSH_REQUEST_TIMEOUT_MS— リクエストごとのタイムアウトをミリ秒単位で指定します(デフォルト:60000、最大:600000)。SFTP 操作用のツールレベルのタイムアウトです。より低レベルの TCP/SSH ハンドシェイクには、別途 30 秒の時間枠が設定されています。MCP_REPLIT_SSH_STRICT_HOST_KEY— 事前に登録された known-hosts エントリを必須にするには、1に設定します。未設定の場合(デフォルト)、不明なホストは初回接続時に記録されます(OpenSSH のStrictHostKeyChecking=accept-newと同じ動作です)。以降の接続でフィンガープリントが一致しない場合、このフラグの設定にかかわらず接続は必ず拒否されます。下記の セキュリティに関する注意事項 にある SSH ホストキーの検証 の項目を参照してください。MCP_REPLIT_SSH_KNOWN_HOSTS_PATH— コネクターの SSH known-hosts ファイルへの明示的なパスです。デフォルトでは$MCP_WORKSPACE_PATH/.replit-ssh-known-hostsを使用し、設定されていない場合は$HOME/.replit-mcp/known_hostsにフォールバックします。ファイルの作成モードは0o600、親ディレクトリの作成モードは0o700です。
ホスト設定例
Claude Desktop / Cursor
{
"mcpServers": {
"ReplitSSH": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-replit-ssh"]
}
}
}
ローカル開発(npm への公開は不要)
{
"mcpServers": {
"ReplitSSH": {
"command": "node",
"args": ["<path-to-repo>/connectors/replit-ssh/dist/index.js"]
}
}
}
ホストがサーバーを起動したら、replit_setup_ssh を一度実行してローカルキーを生成し、表示された公開鍵を replit.com/account#ssh-keys に追加します。
ツール(9)
読み取り
replit_check_connection— SSH 接続、作業ディレクトリ、SFTP サポートを確認します。ハンドシェイク/認証の診断情報を表示するには、verbose=trueを設定します。replit_list_files— 指定したパス(プロジェクトのルートからの相対パス)にあるファイルとディレクトリを一覧表示します。デフォルトのパスは.です。エントリーの種類はfile/directory/symlinkです(シンボリックリンクはリンクとして報告され、追跡されません。replit_statと同じ動作です)。replit_read_file— ファイルを読み取ります(上限は 1 MiB です。これを超えるファイルは、黙って切り詰められるのではなく、FILE_TOO_LARGEで失敗します)。デフォルトでは UTF-8 テキストとして読み取ります。バイナリファイル(ヌルバイトのスキャンで検出)は base64 として返されます。replit_search_files— ファイル名の部分文字列、および/またはテキスト内容の部分文字列で再帰的に検索します(大文字と小文字は区別しません)。結果数の上限(max_results、デフォルトは 50)と深さの上限(max_depth、デフォルトは 4)があります。内容検索では、バイナリファイルと 1 MB を超えるファイルはスキップされます。一致したパスと、内容が一致した場合はファイルごとに一致する行を最大 5 行、行番号付きで返します(ファイルにそれ以上の一致行がある場合、lineMatchesTruncated: trueになります)。replit_stat— 内容を読み取らずに、ファイル/ディレクトリのメタデータ(種類、サイズ、権限、mtime/atime)を返します。シンボリックリンクは追跡されず、lstatにより種類symlinkとして報告されます。
書き込み
replit_write_file— SHA-256 の読み戻し検証を伴うtemp + ext_openssh_renameによるアトミック書き込みを行います。サーバーがアトミックな上書きをサポートしておらず、対象がすでに存在する場合は、フェイルクローズで失敗します(データ損失につながる可能性があるため、unlink + renameは決して行いません)。replit_move— ファイルまたはディレクトリを移動または名前変更します。上書きは決して行いません。移動先のパスがすでに使用されている場合は、DESTINATION_EXISTSで失敗します。移動先の親ディレクトリは、すでに存在している必要があります。replit_delete_file— ファイルを完全に削除します(ファイルのみが対象で、ディレクトリは対象外です)。Replit での削除は取り消せず、ゴミ箱もありません。そのため、このツールにはdestructiveHint: trueが設定され、ホスト側のツール承認レイヤーが実行のゲートとなります。replit_setup_ssh—~/.ssh/rebel-replitに Ed25519 キーペアを生成し、モード0600(Windows ではicaclsACL)で公開鍵/秘密鍵ファイルを書き込み、~/.ssh/configに*.replit.devブロックを追加します。デフォルトでは冪等です。既存の鍵を置き換えるにはforce_regenerate=trueを渡します(新しい公開鍵を Replit に再登録する必要があります)。
セキュリティに関する注意事項
- ホストの許可リスト。
*.replit.devホストのみが受け入れられ、大文字と小文字を区別しないサフィックス一致で判定されます。その他のホストは、SSH 接続を開く前に拒否されます。 ~/.ssh/の変更対象。replit_setup_sshはオペレーターのホームディレクトリ(~/.ssh/rebel-replit、~/.ssh/rebel-replit.pub、~/.ssh/config)に書き込みます。設定の書き換えには、Match execブロックを完全にスキップする安全な AST のみの評価器を使用します。これは、シェル経由でブロックをspawnSyncする上流のssh-config.compute()とは異なります。- パストラバーサル。 SFTP のファイルパスは、絶対パスおよび
..セグメントを拒否したうえで POSIX 正規化されます。相対パスのみが許可され、プロジェクトのルート外には移動できません。 - アトミック書き込みの不変条件。
replit_write_fileはランダムな一時ファイル名に書き込み、OpenSSH の POSIX rename 拡張機能(ext_openssh_rename)を使って名前を変更し、最終ファイルの SHA-256 が期待されるハッシュと一致することを検証します。サーバーがこの拡張機能に対応しておらず、対象ファイルがすでに存在する場合、unlink + renameにフォールバックせず、書き込みは失敗します。 - 読み戻し検証。 すべての
replit_write_fileは、verified: trueを返す前に最終ファイルを再読み込みし、SHA-256 が一致することを確認します。 - SSH ホスト鍵の検証。 すべての送信 SSH 接続では、ユーザーごとの known-hosts ファイル(モード
0o600)にサーバーのフィンガープリントを固定するため、ssh2 に明示的なhostVerifierを渡します。デフォルトの動作は OpenSSH のStrictHostKeyChecking=accept-newと同様です。コネクターがホストに初めて接続すると、SHA-256 フィンガープリントが記録され、stderr に通知が出力されます。以後の接続では、不一致があると安全側に倒して失敗し、HOST_KEY_MISMATCHが返されます。Replit は再起動のたびにプロジェクトごとのホスト名を変更するため、固定情報のキーには安定したプロキシサフィックス(最初の DNS ラベルを除去したもの。例:riker.replit.dev)を使用します。ホスト名が変更され、記録済みのサフィックス固定情報と異なる鍵が提示された場合は、安全側に倒して失敗します。ラベルの除去は 3 ラベルで停止します。3 ラベルのホストは完全なホスト名で固定され、裸のreplit.devエントリーは固定情報として参照されないため、単一のエントリーがすべての Replit ホストに対する共通の固定情報として機能することはありません。known-hosts ファイルは、ネイティブ形式の<host> SHA256:…行と、OpenSSH のssh-keyscan出力(<host> <keytype> <base64-key>)の両方を受け入れます。また、OpenSSH と同様に@revokedマーカーを有効な拒否指定(HOST_KEY_REVOKED)として扱います。鍵が有効なものとして固定されていても、失効した鍵は安全側に倒して拒否されます。初回接続時から失敗側に倒す必要があるオペレーターは、MCP_REPLIT_SSH_STRICT_HOST_KEY=1を設定し、信頼できるネットワークから known-hosts ファイルを別経路で事前に用意してください(例:ssh-keyscan riker.replit.dev > "$MCP_WORKSPACE_PATH/.replit-ssh-known-hosts")。監査指摘replit-ssh-001への対応として 0.1.2 で追加されました。 - 信頼できないコンテンツのエンベロープ。
replit_read_fileの内容、replit_list_filesのディレクトリエントリー名、replit_search_filesの一致したパス/行、そしてreplit_check_connectionの相手側が作成したフィールド(サーバーバージョン、作業ディレクトリ、サーバーバナーやキーボードインタラクティブプロンプトなどの診断イベントの詳細)は、AGENTS.md の不変条件 #6 に従って<untrusted-content source="…">…</untrusted-content>エンベロープで囲まれます。ホストは、ツールの出力をモデルに提示する際に、エンベロープをそのまま維持する必要があります。監査指摘replit-ssh-006への対応として 0.1.2 で追加されました。接続確認への対応は後に追加されました。 - 削除は元に戻せません。承認はホストの責任です。
replit_delete_fileは元に戻せない削除を実行します(Replit にはゴミ箱がありません)。このツールはデフォルトで有効になっており、destructiveHint: trueが設定されています。承認の制御はホストのツール承認レイヤーが担います。ディレクトリは削除されません。 - 移動時に上書きしません。
replit_moveは移動先を事前に確認し、既存ファイルを上書きせず、DESTINATION_EXISTSを返して失敗します。 - アルゴリズムの許可リスト。 送信 SSH 接続では、ネゴシエーション対象の KEX/ホスト鍵/暗号/HMAC アルゴリズムを、curve25519-sha256 + ssh-ed25519/rsa-sha2-* + ChaCha20-Poly1305/AES-GCM + ETM HMAC に制限します。プロキシの設定に誤りがあった場合でも、より弱い暗号スイートへのダウングレードネゴシエーションを防ぎます。
ライセンス
FSL-1.1-MIT — Functional Source License Version 1.1(将来的にMITライセンスに移行)。このソフトウェアは2030-04-08にMITライセンスへ移行します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。