mcpField
M
MCP SFTP Orchestrator

MCP SFTP Orchestrator

ローカル
github.com/fkom13クラウド・インフラ14 週間前に更新

MCP SFTP Orchestrator について

MCP SFTP Orchestratorは、サーバー群のSSH/SFTP操作を行うAIエージェント向けのstdio MCPサーバーです。リモート実行やファイル管理に加え、キュー、プロジェクト管理、インフラ確認、安全制御を備えています。

主な機能

  1. 01複数サーバーで同期・キュー実行
  2. 02SFTP転送とサーバー間転送
  3. 03安全なファイル読み取り・編集・比較
  4. 04プロジェクト、作業セッション、スナップショット管理
  5. 05読み取り専用設定、コマンド制限、監査

活用シーン

  1. 01サーバーグループで運用コマンドを実行
  2. 02ローカルとリモートのプロジェクトを比較
  3. 03サーバープロジェクトの保守作業を記録
  4. 04サーバー群の状態監視とインフラ確認

MCP 対応

stdio経由で82個のMCPツールをクライアントに提供し、サーバー接続、SSH/SFTP操作、タスク管理を可能にします。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"sftp-orchestrator": {
"command": "npx",
"args": [
"-y",
"mcp-orchestrator-server"
]
}
}
}
起動コマンドnpx -y mcp-orchestrator-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmcp-orchestrator-server8.0.4

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

🚀 MCP Orchestrator — SSH/SFTP オーケストレーションサーバー

v11.8.0 Security Refresh — 82 個のツールが MCP 標準アノテーションを公開するようになりました。infra_overview は引数なしでは軽量なままですが、infra_overview { alias: "..." } を実行すると、ライブ検出を行い、Nginx/ドメイン、ポート、Docker/Compose、サービスを関連付けます。CHANGELOG.md をご覧ください。

バージョン:11.8.0
ツール:82
ライセンス:MIT
Node:>= 18.0.0
変更履歴:CHANGELOG.md

AI エージェントにサーバー群をオーケストレーションする機能を提供する、MCP(Model Context Protocol、stdio トランスポート)サーバーです。SSH、SFTP、ローカル/リモートのファイル編集(ハッシュセーフ)、サーバー間差分、シェル PTY、インフラスナップショット、プロトコルメモ、プロジェクト、作業セッション、インベントリ、SSH トラスト(pubkey)、エイリアスグループ、サーバー群の監査に対応します。


✨ 主な機能(v11.6)

分野機能
実行task_exec のマルチサーバー対応/group:oci/破壊的操作のドライラン/強制実行
ファイルfile_read/file_edit(精密編集)/file_write + ハッシュ + dryRun + バックアップ
サーバー群メモ、infra_audit、fleet_status、server_inventory
プロジェクトローカル↔リモートのレジストリ + project_diff
作業work_start → 編集 → work_end(作業メモを自動作成)
トラストssh_authorize_key(pubkey のみ、デフォルトで dry_run)
セキュリティシークレットのマスキング、グローバル RO + エイリアスごとの RO、ブロックリスト、堅牢な SSH プール

📦 インストール

git clone https://github.com/fkom13/mcp-sftp-orchestrator.git
cd sftp-mcp   # ou tools/sftp-mcp
npm install
cp .env.example .env
# Éditer MCP_DATA_DIR et chemins de clés

前提条件:Node.js >= 18


⚙️ 設定(.env)

すべての変数は任意です。

変数デフォルト説明
MCP_DATA_DIR~/.config/mcp-orchestratorデータフォルダー(JSON、スナップショット、プロジェクトなど)
MCP_SYNC_TIMEOUT_S120タスクがバックグラウンドに移行するまでの時間(秒)
MCP_DEFAULT_CMD_TIMEOUT_S600SSH コマンドのタイムアウト(秒)。0 = 無制限
MCP_INTERACTIVE_CMD_TIMEOUT_S300インタラクティブコマンドのタイムアウト(秒)。0 = 無制限
MCP_MAX_WAIT_TIMEOUT_S600task_wait の最大タイムアウト(秒)
MAX_CONNECTIONS_PER_SERVER5サーバーごとの SSH プール最大数
MIN_CONNECTIONS_PER_SERVER1サーバーごとの SSH プール最小数
IDLE_TIMEOUT300000アイドル状態の接続を閉じるまでの時間(ミリ秒)
KEEP_ALIVE_INTERVAL30000SSH キープアライブ間隔(ミリ秒)
MAX_QUEUE_SIZE1000ジョブキューの最大サイズ
SAVE_INTERVAL5000キューの自動保存間隔(ミリ秒)
MCP_ALLOWED_ROOTS(空)ローカルパスで許可されるルート(CSV)
MCP_READONLYfalse1 = 書き込み/変更を伴う実行を拒否(グローバル)
MCP_COMPACTfalse1 = 応答を切り詰める(エージェントのトークン用)
MCP_DEBUGfalsestderr に詳細ログを出力
MCP_DATA_DIR 内のファイル
ファイル内容
servers.jsonSSH エイリアス(host、user、keyPath/password、port?、readonly?)
apis.jsonAPI カタログ(ツールで読み取る際にシークレットをマスキング)
queue.json / queue.backup.jsonジョブ
history.jsonタスク履歴
server_notes.jsonサーバーごとのプロトコル/メモ
server_groups.jsonエイリアスグループ
projects.jsonプロジェクトレジストリ
work_sessions.json作業セッション
policies.jsonコマンドのブロックリスト
tunnels.json / tunnel_allowlist.jsonSSH トンネル
infra_snapshots/コンテンツアドレス方式のスナップショット

🔌 MCP クライアント接続

Grok / config.toml
[mcp_servers.orchestrator]
command = "node"
args = ["/chemin/absolu/sftp-mcp/server.js"]
# optionnel:
# env = { MCP_DATA_DIR = "/chemin/absolu/sftp-mcp/data" }
OpenCode / Claude Desktop(JSON)
{
  "mcpServers": {
    "orchestrator": {
      "command": "node",
      "args": ["/chemin/absolu/sftp-mcp/server.js"],
      "env": {
        "MCP_DATA_DIR": "/chemin/absolu/sftp-mcp/data"
      }
    }
  }
}

コードを変更した後は、MCP サーバーを再読み込みしてください(/mcps → r またはセッションを再起動)。system_diagnostics → version: "11.8.0" を確認してください。


🧰 ツールリファレンス(82)

診断と監査
ツール説明
helpツールガイド + .env + ヒント
guideAI マニュアル(ワークフロー、チートシート、落とし穴、監査、セキュリティ)
system_diagnosticsキュー、プール、サーバー/API 非表示、バージョン、readOnly
infra_auditサーバー群 + プロジェクト + メモ + クラッシュの概要
infra_overviewサーバー + メモ(簡易ビュー)
fleet_statusSSH 並列 ping(レイテンシ、負荷、ディスク)
server_inventory簡易インベントリ(pm2/docker/disk/home、キャッシュ 10 分)
サーバーとグループ
ツール説明
server_addエイリアスの CRUD(keyPath または password、port、readonly)
server_list一覧(パスワードは非表示)
server_removeエイリアスを削除
server_group_list/set/removeグループ(oci、contabo など)。使用方法:group:oci またはグループ名
プロジェクト(v11.6)
ツール説明
project_list / project_get / project_set / project_removeレジストリ
project_resolve→ { local, remote, ignore, runtime }
project_diffプロジェクトのローカル↔リモート差分

project_set の例:

{
  "name": "p-image",
  "local": { "path": "/home/.../dev-serveur/p-image" },
  "servers": {
    "prod": {
      "alias": "fkomprodmini2_prod",
      "path": "/home/ubuntu/p-image",
      "runtime": { "pm2": "p-image", "port": 5002 },
      "url": "https://pruna.esprit-artificiel.com"
    }
  },
  "ignore": ["node_modules", ".git", "data"]
}
作業セッション(v11.6)
ツール説明
work_startログを開始します(alias、project、tag、任意のスナップショット)
work_logイベント(file_edit、task_exec など)
work_listアクティブなセッション(+ 履歴)
work_endセッションを終了し、server_note に last_intervention を記録
SSH 信頼(v11.6)
ツール説明
ssh_authorize_keyリモートの authorized_keys に公開鍵を追加します。デフォルトは dry_run。ソース:string | local_path | alias
{
  "target_alias": "fkomprodmini1_prod",
  "source": { "type": "alias", "alias": "vps_contabo" },
  "comment": "fleet-from-contabo",
  "dry_run": true
}
ポリシー
ツール説明
policy_blocklist_list/add/removeコマンドのブロックリスト(shell + sequences にも適用)
API カタログ
ツール説明
api_add / api_list / api_remove / api_checkモニタリング(一覧ではキーを非表示)
タスク実行
ツール説明
task_execSSH;alias | 配列 | all | group:x;破壊的操作には dry_run/force
task_exec_interactiveyes/no のプロンプト、メニュー
task_exec_sequence1 台のサーバーでシーケンスを実行(各ステップでポリシーを適用)
task_transferSFTP による upload/download/server_to_server
task_transfer_multi複数転送 + glob
ファイル / 差分 / Shell / スナップショット
分類ツール
ファイルfile_read, file_write, file_edit
差分diff_files, diff_folders, compare_all_sources
Shellshell_create, shell_exec(+ skip_policy), shell_list, shell_close
スナップショットsnapshot_create/list/diff/restore/delete

安全な編集:file_read → hash → file_edit + expectedHash(+ dryRun / backup)。

サーバーメモ
ツール説明
server_note_set/get/list/remove手順(説明、サービス、警告、介入)
モニタリングとログ
ツール説明
get_system_resourcesCPU / RAM / ディスク
get_services_statussystemd / Docker / PM2
get_fail2ban_statusFail2Ban
check_api_healthSSH+curl 経由の HTTP
get_pm2_logs / get_docker_logs / tail_fileログ
キュー
ツール説明
task_queue / task_status / task_history / task_wait / task_logs追跡
task_retry / task_retry_all再実行
task_purge消去(デフォルトは dry_run)
queue_stats / pool_stats統計
Tmux とトンネル
ツール説明
tmux_create/exec/read/list/killリモート tmux セッション
tunnel_create/list/closeローカル/リモート/socks の SSH トンネル
tunnel_allowlist_add/removeトンネルで許可するポート

📖 推奨エージェントワークフロー

セッション開始時
infra_audit  (ou infra_overview)
fleet_status
project_list / project_resolve
プロジェクトでの作業
work_start { project: "p-image", alias: "fkomprodmini2_prod", tag: "fix-x", message: "…" }
file_read → file_edit (expectedHash, dryRun puis apply)
work_log { type: "file_edit", path: "…" }
work_end { summary: "…" }   → note serveur mise à jour
project_diff { name: "p-image" }
長時間実行コマンド
task_exec { timeout: 0, … }  → si > syncTimeout → task_wait { id }
複数サーバーのターゲット
task_exec { alias: "group:oci", cmd: "hostname" }
task_exec { alias: "all", cmd: "uptime" }

🏗️ アーキテクチャ

Client MCP (stdio)
    │
server.js ─── 82 tools
    │
    ├── queue.js          File d’attente persistante + purge/retry
    ├── ssh.js / sshPool  Exécution + pool (retry safe, port configurable)
    ├── sftp.js           Transferts (server_to_server via sourceAdapter/pool)
    ├── sourceAdapter.js  Local fs | remote SFTP pool
    ├── fileOps.js        Read/write/edit + hash + dryRun + backup
    ├── diffEngine.js / compareEngine.js / diffFormatter.js
    ├── shellSessions.js  PTY persistants + policy
    ├── snapshotManager.js
    ├── projects.js / workSession.js / inventory.js / groups.js / fleet.js
    ├── sshTrust.js       authorized_keys (pubkey only)
    ├── servers.js / apis.js / notes.js / policies.js / tunnels.js
    ├── history.js / guide.js / config.js / utils.js
ジョブのライフサイクル
pending → running → completed | failed | partial
                      ↓ (redémarrage MCP pendant running)
                    crashed → task_retry → pending

🔒 セキュリティ

メカニズム詳細
シークレットapi_list / 診断ではマスクされます(*** + 末尾4文字)
シェルエスケープcurl、ログ、パスに escapeShellArg を適用
ブロックリストpolicies.json;shell + sequence を含む;強制するには skip_policy を指定
全体の読み取り専用MCP_READONLY=1
エイリアスの読み取り専用servers.json で "readonly": true を指定
破壊的操作危険なパターンが含まれ、force:true が指定されていない場合、task_exec はドライランを実行
信頼公開鍵のみ;デフォルトで dry_run
キーSSH には keyPath を推奨;API シークレットには Vaultwarden を使用

🧪 テスト

npm test:unit    # p0 + p1 + p16 (43 tests)
npm test         # unit + smoke MCP + features
node diagnose.js # diagnostic local optionnel
ファイルカバレッジ
test_p0_unit.jsutils、policies、redact、time-outs、version
test_p1_unit.jsgroups、purge、destructive、RO env
test_p16_unit.jsprojects、work session、compact、sshTrust
test_mcp.jsSDK のスモークテスト
test_features.jsqueue / pool / globs / prompts

🛣️ 最近のバージョン

バージョン内容gencodedoc スナップショット
11.6.1マルチエージェントの強化:全体的な読み取り専用、サーバー間の dossiers/force、シンボリックリンク対策の許可ルート、shell/tmux の引用、queue + アトミックな JSON ストア—
11.6.0プロジェクト、作業セッション、インベントリ、ssh_authorize_key、エイリアスの読み取り専用、compact#23(最終ドキュメント)
11.4.0fleet、infra_audit、groups、retry_all、purge、pool の書き換え#21
11.3.0シークレットのマスク、shell/seq ポリシー、SSH ポート、一部完了の待機#20
10.4–10.0ファイル操作、diff、shell、スナップショット、メモ、ガイド#17–19
9.x / 8.xSFTP force、タイムアウト、インタラクティブ機能、基本的なセキュリティ—

詳細:CHANGELOG.md · 過去の計画:ROADMAP.md、ROADMAP_EXTENDED.md。


📄 ライセンス

MIT — Copyright (c) 2025-2026 Franck (fkom13)

コメント

MCP は初めてですか?

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

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