mcpField
R
Replit SSH

Replit SSH

ローカル
github.com/mindstone開発ツール13今日更新

Replit SSH について

Replit SSH は、SSH/SFTP 経由で Replit プロジェクトのファイルにアクセスするローカル MCP サーバーです。ファイル操作と SSH 設定に対応し、接続先の制限、アトミック書き込みの検証、安全な SSH 設定の解析を備えています。

主な機能

  1. 01SSH と SFTP の接続確認
  2. 02プロジェクトファイルの一覧表示、読み取り、検索
  3. 03ファイルメタデータの確認
  4. 04ファイルの書き込み、移動、削除
  5. 05SSH キーと設定ブロックの生成

活用シーン

  1. 01プロジェクトファイルや package スクリプトの確認
  2. 02ソースファイル内の文字列検索
  3. 03Replit プロジェクト内のファイル更新や移動
  4. 04ローカルから Replit への SSH 接続設定

MCP 対応

SSH 接続確認、SFTP によるファイル操作、SSH 設定のための 9 種類のツールを MCP ホストに公開します。操作者のマシンから `*.replit.dev` ホストへ接続し、ローカルの SSH キーを使用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mindstone-mcp-server-replit-ssh": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-replit-ssh"
],
"env": {
"REPLIT_SSH_REQUEST_TIMEOUT_MS": "<REPLIT_SSH_REQUEST_TIMEOUT_MS>",
"MCP_REPLIT_SSH_STRICT_HOST_KEY": "<MCP_REPLIT_SSH_STRICT_HOST_KEY>",
"MCP_REPLIT_SSH_KNOWN_HOSTS_PATH": "<MCP_REPLIT_SSH_KNOWN_HOSTS_PATH>"
}
}
}
}
起動コマンドnpx -y @mindstone/mcp-server-replit-ssh
設定が必要な環境変数
REPLIT_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@mindstone/mcp-server-replit-ssh0.2.2

ツール

9

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
hoststringはいSSH ホスト(例:"<uuid>-00-<hash>.riker.replit.dev")
userstringはいSSH ユーザー名—"Connect manually" SSH コマンドで @ より前にある値(UUID)
verbosebooleanいいえ詳細な診断を有効にします—ハンドシェイク、認証の試行、キーの検証、所要時間を記録します。接続または認証の失敗をトラブルシューティングする場合に使用します。

詳細

@mindstone/mcp-server-replit-ssh

npm version License: FSL-1.1-MIT

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 を読み取り、定義されているスクリプトを教えてください。」

ホストが呼び出すツール:

  1. replit_check_connection — SSH 接続と SFTP サポートを確認し、遅延を返します。
  2. replit_list_files — . にあるファイルとディレクトリを一覧表示します。
  3. 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 を一度実行して生成してください。

ワンクリックインストール

Cursor に追加 VS Code に追加 VS Code Insiders に追加

ボタンをクリックすると、ホストから次の値を入力するよう求められます: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 では icacls ACL)で公開鍵/秘密鍵ファイルを書き込み、~/.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ライセンスへ移行します。

コメント

MCP は初めてですか?

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

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