mcpField
S
SSH MCP Server

SSH MCP Server

ローカル
github.com/uarlouski開発ツール3820 週間前に更新

SSH MCP Server について

SSH MCP Server は、AI アシスタントが SSH を通じてリモートサーバーでコマンドを実行し、SFTP によるファイル転送やポートフォワーディングを行えるようにする MCP サーバーです。DevOps 作業を対象とし、コマンドのホワイトリストや監査ログで操作範囲を制限します。

主な機能

  1. 01タイムアウト設定を伴うリモートコマンド実行
  2. 02パイプやチェーンを検証するコマンドホワイトリスト
  3. 03SFTP によるファイルの読み書きとディレクトリ一覧
  4. 04管理されたSSHポートフォワーディングトンネル
  5. 05パラメータ化されたコマンドテンプレート
  6. 06実行コマンドを記録する JSONL 形式の監査ログ

活用シーン

  1. 01AI アシスタントによる Docker コンテナや Kubernetes Pod のログ確認
  2. 02SFTP によるリモートの設定ファイルやログの取得
  3. 03ポートフォワーディングを使った内部データベースやダッシュボードへのアクセス

MCP 対応

本プロジェクトは MCP サーバーとして、SSH コマンド実行、SFTP、ポートフォワーディングのツールを Claude Desktop、Cursor、GitHub Copilot などの MCP クライアントに提供します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

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

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

詳細

AI アシスタント向け SSH MCP サーバー - リモートサーバーを安全に管理

SSH 経由で AI アシスタントがリモートインフラストラクチャを管理できる、安全で本番環境に対応した Model Context Protocol (MCP) サーバーです。

npm version npm downloads CI License Node.js Version TypeScript GitHub stars

SSH MCP Server は、LLM とインフラストラクチャの橋渡しをします。Claude Desktop、Cursor、GitHub Copilot などの AI アシスタントから、安全にコマンドを実行したり、SFTP でファイルを転送したり、ポートフォワーディングトンネルを管理したりできます。厳格なセキュリティ境界を保ちながら、サーバーのトラブルシューティング、デプロイ、監視を行える有能な DevOps アシスタントとして、AI を活用しましょう。

目次

SSH MCP Server を使う理由

  • DevOps の自動化:AI アシスタントに、Docker コンテナの状態確認、Kubernetes ポッドのログ取得、systemd サービスの再起動を任せられます。
  • インフラストラクチャのデバッグ:自然言語を使って、ログファイルをすばやく分析し、ディスク使用量を確認し、ネットワークの問題を調査できます。
  • 安全なファイル管理:チャット画面から離れることなく、SFTP 経由で設定ファイルを安全に読み込んだり、スクリプトを更新したり、ログを取得したりできます。
  • 複雑なワークフロー:複数のコマンドやツールを連携させて、1 つのプロンプトで複雑なメンテナンス作業を実行できます。

互換性

この MCP サーバーは、Model Context Protocol に対応する以下のようなあらゆるクライアントで動作するように設計されています。

  • Anthropic Claude Desktop
  • Cursor Editor
  • GitHub Copilot

機能

  • 🔐 安全な SSH コマンド実行 - 厳格な検証とタイムアウトを適用して、リモートサーバーでシェルコマンドを実行します。
  • 🛡️ きめ細かなアクセス制御 - 特定のコマンドや引数をホワイトリストに登録し、不正な操作を防ぎます(例:docker ps は許可し、docker stop はブロック)。
  • 📁 SFTP 統合 - リモートファイルシステム上のファイルの読み取り、書き込み、一覧表示を全面的にサポートします。
  • 🌉 スマートなポートフォワーディング - データベースやダッシュボードなどの内部サービスにアクセスするための SSH トンネルを自動的に管理します。
  • 🔄 堅牢なコネクションプーリング - 高いパフォーマンスを実現するため、複数の永続的な SSH 接続を効率よく管理します。
  • 🔑 鍵ベースの認証 - 標準的な SSH 鍵(Ed25519、RSA)を使用した、安全なパスワードレス認証に対応しています。
  • ⚙️ SSH 設定のインポート - 既存の ~/.ssh/config ファイルからホストをシームレスにインポートします。
  • 🎯 パラメーター化されたテンプレート - よく使うタスク向けに、安全で再利用可能なコマンドテンプレート(マクロ)を定義できます。
  • 📝 監査ログ - コンプライアンス対応やセキュリティレビューに役立つ、実行したすべてのコマンドの完全な JSONL 監査記録を作成します。

インストール

MCP サーバーとして使用する場合

このパッケージの推奨される使用方法は、GitHub Copilot などの AI アシスタントと連携する MCP サーバーとして使用することです。

前提条件:

  • Node.js 18.0.0 以降
  • 対象サーバーへの SSH アクセス
  • SSH 秘密鍵が設定済みであること

npx を使用する場合(推奨):

インストールは不要です。MCP クライアントの設定に追加してください。

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": [
        "@uarlouski/ssh-mcp-server@latest",
        "--configPath=/path/to/your/ssh-mcp-config.json"
      ]
    }
  }
}

グローバルインストール:

npm install -g @uarlouski/ssh-mcp-server

次に、以下のように設定します。

{
  "mcpServers": {
    "ssh": {
      "command": "ssh-mcp-server",
      "args": ["--configPath=/path/to/your/ssh-mcp-config.json"]
    }
  }
}

クイックスタート

1. SSH キーを作成する

サーバー用の SSH キーをまだ作成していない場合は、以下を実行してください。

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -C "[email protected]"
ssh-copy-id -i ~/.ssh/deploy_key.pub [email protected]
2. 設定ファイルを作成する

ssh-mcp-config.json ファイルを作成します。

{
  "allowedCommands": ["ls", "cat", "grep", "docker", "kubectl"],
  "servers": {
    "my-server": {
      "host": "example.com",
      "username": "deploy",
      "privateKeyPath": "~/.ssh/deploy_key"
    }
  }
}
3. MCP クライアントを設定する

サーバーを MCP クライアント(GitHub Copilot など)に追加します。

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": [
        "@uarlouski/ssh-mcp-server@latest",
        "--configPath=/Users/yourname/ssh-mcp-config.json"
      ]
    }
  }
}
4. MCP クライアントを再起動する

新しいサーバー設定を読み込むため、AI アシスタントを再起動します。

設定

基本設定

設定ファイルでは、以下のオプションを指定できます。

{
  "allowedCommands": ["ls", "pwd", "cat", "grep", "docker", "kubectl"],
  "servers": {
    "server-name": {
      "host": "hostname-or-ip",
      "port": 22,
      "username": "username",
      "privateKeyPath": "~/.ssh/private_key"
    }
  },
  "portForwardingServices": {
    "service-name": {
      "connectionName": "server-name",
      "localPort": 8080,
      "remoteHost": "localhost",
      "remotePort": 80,
      "description": "Optional description"
    }
  },
  "commandTemplates": {
    "k8s-pod-logs": {
      "command": "kubectl logs -n {{namespace}} {{pod}} --tail={{lines:100}}",
      "description": "Fetch Kubernetes pod logs with configurable tail size"
    },
    "app-deploy": {
      "command": "cd /var/www/{{app}} && git pull origin {{branch:main}} && npm install && pm2 restart {{app}}",
      "description": "Deploy application with git pull, npm install, and pm2 restart"
    },
    "docker-stats": "docker stats {{container:--all}} --no-stream --format 'table {{.Name}}\\t{{.CPUPerc}}'"
  },
  "commandTimeout": 30000,
  "maxConnections": 10
}
設定オプション
allowedCommands(任意)

実行を許可する基本コマンド名の配列です。

  • 指定した場合(空でない場合):厳密な検証が有効になります
    • リストにあるコマンドのみ実行できます
    • パイプ(|)、連結(&&、||、;)、置換($())を含む複雑なコマンドも検証します
    • ls | rm -rf / のような検証回避の試みをブロックします
  • 省略した場合、または空の場合:検証は無効になります(すべてのコマンドが許可されます。使用には注意してください!)

例:

"allowedCommands": ["ls", "cat", "grep", "docker", "kubectl", "systemctl"]
servers(必須)

名前付きの SSH サーバー設定です。各サーバーには以下が必要です。

  • host(必須):ホスト名または IP アドレス
  • username(必須):SSH ユーザー名
  • privateKeyPath(必須):SSH 秘密鍵へのパス(~ の展開に対応)
  • port(任意):SSH ポート(デフォルト:22)

例:

"servers": {
  "staging-api": {
    "host": "api-staging-01.example.com",
    "username": "deploy",
    "privateKeyPath": "~/.ssh/staging_deploy_key"
  },
  "staging-db": {
    "host": "db-staging-master.example.com",
    "port": 2222,
    "username": "dbadmin",
    "privateKeyPath": "~/.ssh/db_admin_key"
  }
}
sshConfigImport(任意)

既存の SSH 設定ファイル(例:~/.ssh/config)からサーバー設定をインポートします。この機能を使うと、既存の SSH 設定を MCP 設定ファイルに重複して記述せずに再利用できます。

メリット:

  • 🔄 既存の SSH 設定を再利用できます
  • 🎯 パターンマッチングを使って特定のホストをインポートできます
  • 🔒 クロスプラットフォームで動作します(macOS、Linux、Windows)

設定:

  • path(文字列、任意):SSH 設定ファイルへのパス(デフォルト:~/.ssh/config)
  • hosts(文字列の配列、任意):インポートするホストパターン(例:["prod-*", "staging-*"])
    • ワイルドカードに対応しています:*(任意の文字列に一致)、?(任意の1文字に一致)
    • 省略した場合、有効なホストをすべてインポートします(* のようなワイルドカードのみのホストは除外)

注意: 設定に sshConfigImport を定義するだけで、SSH 設定のインポートが有効になります。無効にするには、sshConfigImport フィールドを完全に削除してください。

例 — パターンマッチングで特定のホストをインポートする場合:

{
  "sshConfigImport": {
    "path": "/custom/path/to/ssh_config",
    "hosts": ["prod-*", "staging-*"]
  }
}

注意事項:

  • 必須フィールド(HostName、User、IdentityFile)がすべて設定されたホストのみインポートされます
  • ワイルドカードを使用した SSH 設定エントリ(Host *)は、その設定を特定のホストに適用しますが、独立したサーバーとしてはインポートされません
  • SSH 設定ファイルが存在しない場合、サーバーは手動で定義されたサーバーを使用して起動を続けます
  • 重要:手動設定と SSH 設定のインポートの両方に同じサーバー名が存在する場合、明確なエラーメッセージとともにサーバーの起動に失敗します。競合を避けるには、hosts のパターンフィルターを使用するか、いずれかの設定でサーバー名を変更してください。
portForwardingServices(任意)

一般的な用途向けの、事前設定済みの名前付きポートフォワーディングサービスです。

  • connectionName(必須):servers 設定にあるサーバー名
  • remoteHost(必須):転送先のリモートホスト
  • remotePort(必須):転送先のリモートポート
  • localPort(任意):バインドするローカルポート(省略した場合はランダム)
  • description(任意):人が読める説明

例:

"portForwardingServices": {
  "pg-staging-database": {
    "connectionName": "staging-db",
    "remoteHost": "db-internal-01.example.com",
    "remotePort": 5432,
    "description": "PostgreSQL database access"
  }
}
commandTemplates(省略可)

変数置換に対応した、再利用可能なパラメーター付きコマンドテンプレートです。

テンプレートは次の2つの形式で定義できます。

  • 文字列形式:「template-name」:「{{variables}}」を含むコマンド
  • オブジェクト形式:「template-name」:{ "command": "...", "description": "..." }

変数の構文:

  • {{variable}} - 必須の変数
  • {{variable:default}} - デフォルト値を持つ省略可能な変数
  • {{.field}} - Docker/Go テンプレート用に保持(置換されません)

例:

"commandTemplates": {
  "k8s-pod-logs": {
    "command": "kubectl logs -n {{namespace}} {{pod}} --tail={{lines:100}}",
    "description": "Fetch Kubernetes pod logs with configurable tail size"
  },
  "app-deploy": {
    "command": "cd /var/www/{{app}} && git pull origin {{branch:main}} && npm install && pm2 restart {{app}}",
    "description": "Deploy application"
  },
  "docker-stats": "docker stats {{container:--all}} --no-stream --format 'table {{.Name}}\\t{{.CPUPerc}}'",
  "nginx-reload": "sudo nginx -t && sudo systemctl reload nginx"
}

AI での使用方法:

"Get logs from the api-7d8f9 pod in the staging namespace"

AI はこれが k8s-pod-logs テンプレートに一致すると認識し、適切な変数を指定して実行します。

commandTimeout(省略可)

コマンド実行のタイムアウト時間をミリ秒で指定します。デフォルト:30000(30 秒)。

maxConnections(省略可)

同時に確立できる SSH 接続の最大数です。デフォルト:5。

auditLog(省略可)

SSH セッションの監査ログを設定します。

  • enabled(ブール値、省略可):監査ログを有効にします(デフォルト:false)
  • folder(文字列、省略可):監査ログの保存先パス(デフォルトは現在のディレクトリ)

例:

"auditLog": {
  "enabled": true,
  "folder": "~/ssh-audit-logs"
}
完全な例

設定例の全体は、config.example.json を参照してください。

利用可能なツール

ssh_execute_command

リモートサーバーでコマンドを実行します。

パラメーター:

  • connectionName(文字列、必須):設定に記載されているサーバー名
  • command(文字列、必須):実行するコマンド
  • commandTimeout(数値、省略可):コマンド実行のタイムアウト時間(ミリ秒単位。グローバルの commandTimeout を上書きします)

例:

{
  "connectionName": "staging-api",
  "command": "docker ps -a"
}

応答:

{
  "stdout": "CONTAINER ID   IMAGE     COMMAND   ...",
  "stderr": "",
  "exitCode": 0,
  "timedOut": false
}
ssh_list_servers

設定ファイルに設定されている、利用可能なすべての SSH サーバーを一覧表示します。

パラメーター: なし

例:

{}

応答:

{
  "success": true,
  "servers": [
    {
      "name": "production-api",
      "host": "api-prod-01.example.com",
      "port": 22,
      "username": "deploy"
    },
    {
      "name": "staging-db",
      "host": "db-staging.example.com",
      "port": 2222,
      "username": "admin"
    }
  ],
  "count": 2
}

このツールを使うと、AI アシスタントは設定ファイル全体を確認することなく、SSH 操作に利用できるサーバーを把握できます。

ssh_port_forward

SSH ポートフォワーディングを設定して、リモートサービスにアクセスします。

パラメーター:

  • connectionName(文字列、必須):設定に記載されているサーバー名
  • remoteHost(文字列、必須):転送先のリモートホスト
  • remotePort(数値、必須):転送先のリモートポート
  • localPort(数値、省略可):バインドするローカルポート(省略した場合はランダムに割り当てられます)

ローカルポートを指定する例:

{
  "connectionName": "staging-db",
  "localPort": 8080,
  "remoteHost": "internal-db.cluster.local",
  "remotePort": 5432
}

ポートを自動的に割り当てる例:

{
  "connectionName": "staging-db",
  "remoteHost": "internal-db.cluster.local",
  "remotePort": 5432
}

応答:

{
  "id": "a1b2c3d4",
  "localPort": 8080,
  "remoteHost": "internal-db.cluster.local",
  "remotePort": 5432,
  "status": "active"
}
ssh_close_port_forward

有効なポートフォワーディングを終了します。

パラメーター:

  • id(文字列、必須):終了する有効なポートフォワーディングの一意の ID

例:

{
  "id": "a1b2c3d4"
}
ssh_restart_port_forward

一意の ID を指定して、有効なポートフォワーディングを再起動します。

パラメーター:

  • id(文字列、必須):再起動する有効なポートフォワーディングの一意の ID

例:

{
  "id": "a1b2c3d4"
}
ssh_list_port_forwards

すべての接続で有効になっているポートフォワーディングを一覧表示します。

パラメーター: なし

応答:

{
  "forwards": [
    {
      "id": "a1b2c3d4",
      "sshConnection": "[email protected]:2222",
      "tunnel": "localhost:8080 -> internal-db.cluster.local:5432",
      "status": "active"
    }
  ]
}
ssh_port_forward_service

設定から、事前設定済みの名前付きポートフォワーディングサービスを開始します。

パラメーター:

  • serviceName(文字列、必須):portForwardingServices 設定に記載されているサービス名

例:

{
  "serviceName": "pg-staging-database"
}

これは、事前設定済みのパラメーターを使って ssh_port_forward を呼び出すのと同じです(返される結果には、生成された一意の id が含まれます)。

ssh_upload_file

SFTP を使って、ローカルシステムからリモートサーバーにファイルをアップロードします。

パラメーター:

  • connectionName(文字列、必須):設定に記載されているサーバー名
  • localPath(文字列、必須):アップロードするローカルファイルのパス
  • remotePath(文字列、必須):リモート側の保存先パス
  • permissions(文字列、省略可):8 進数形式のファイル権限(例:「0644」、「0755」)

例:

{
  "connectionName": "app-server",
  "localPath": "~/configs/app.json",
  "remotePath": "/var/www/app/config.json",
  "permissions": "0644"
}

応答:

{
  "success": true,
  "bytesTransferred": 1024,
  "message": "Successfully uploaded ~/configs/app.json to /var/www/app/config.json",
  "localPath": "~/configs/app.json",
  "remotePath": "/var/www/app/config.json"
}
ssh_download_file

SFTP 経由でリモートサーバーからローカルシステムにファイルをダウンロードします。

パラメーター:

  • connectionName(string、必須):設定ファイルに記載されたサーバー名
  • remotePath(string、必須):ダウンロードするリモートファイルのパス
  • localPath(string、必須):ローカルの保存先パス

例:

{
  "connectionName": "app-server",
  "remotePath": "/var/log/app/error.log",
  "localPath": "~/downloads/error.log"
}

レスポンス:

{
  "success": true,
  "bytesTransferred": 2048,
  "message": "Successfully downloaded /var/log/app/error.log to ~/downloads/error.log",
  "remotePath": "/var/log/app/error.log",
  "localPath": "~/downloads/error.log"
}
ssh_list_remote_files

SFTP 経由でリモートディレクトリ内のファイルを一覧表示します。

パラメーター:

  • connectionName(string、必須):設定ファイルに記載されたサーバー名
  • remotePath(string、必須):一覧表示するリモートディレクトリのパス
  • pattern(string、任意):ファイルを絞り込む glob パターン(例:"*.log"、"*.json")

例:

{
  "connectionName": "app-server",
  "remotePath": "/var/log/app",
  "pattern": ".*\\.log$"
}

レスポンス:

{
  "remotePath": "/var/log/app",
  "pattern": ".*\\.log$",
  "totalCount": 3,
  "files": [
    {
      "name": "error.log",
      "size": 10485760,
      "modified": "2024-12-04T12:00:00.000Z",
      "permissions": "100644",
      "isDirectory": false,
      "isFile": true
    }
  ]
}
ssh_delete_remote_file

SFTP 経由でリモートサーバー上のファイルを削除します。

パラメーター:

  • connectionName(string、必須):設定ファイルに記載されたサーバー名
  • remotePath(string、必須):削除するリモートファイルのパス

例:

{
  "connectionName": "app-server",
  "remotePath": "/tmp/old-backup.tar.gz"
}

レスポンス:

{
  "success": true,
  "message": "Successfully deleted /tmp/old-backup.tar.gz",
  "remotePath": "/tmp/old-backup.tar.gz"
}
ssh_execute_template

事前設定されたコマンドテンプレートを、変数を置換して実行します。

パラメーター:

  • connectionName(string、必須):設定ファイルに記載されたサーバー名
  • templateName(string、必須):コマンドテンプレート名
  • variables(object、任意):変数置換に使用するキーと値のペア
  • commandTimeout(number、任意):コマンド実行のタイムアウト時間(ミリ秒単位。グローバルのcommandTimeoutを上書きします)

例:

{
  "connectionName": "kubernetes-bastion",
  "templateName": "k8s-pod-logs",
  "variables": {
    "namespace": "staging",
    "pod": "api-7d8f9",
    "lines": "50"
  }
}

レスポンス:

{
  "success": true,
  "templateName": "k8s-pod-logs",
  "expandedCommand": "kubectl logs -n production api-7d8f9 --tail=50",
  "variables": {
    "namespace": "staging",
    "pod": "api-7d8f9",
    "lines": "50"
  },
  "result": {
    "stdout": "...",
    "stderr": "",
    "exitCode": 0,
    "timedOut": false
  }
}
ssh_list_templates

使用可能なすべてのコマンドテンプレートと、その説明および変数を一覧表示します。

パラメーター: なし

例:

{}

レスポンス:

{
  "success": true,
  "templates": [
    {
      "name": "k8s-pod-logs",
      "command": "kubectl logs -n {{namespace}} {{pod}} --tail={{lines:100}}",
      "description": "Fetch Kubernetes pod logs with configurable tail size",
      "variables": [
        { "name": "namespace", "required": true },
        { "name": "pod", "required": true },
        { "name": "lines", "required": false, "defaultValue": "100" }
      ]
    }
  ],
  "count": 1
}

セキュリティ

組み込みのセキュリティ機能
  1. コマンド検証

    • allowedCommandsが指定されると自動的に有効になります
    • パイプ(|)、連結(&&、||、;)、コマンド置換($()、バッククォート)を含むすべてのコマンドを検証します
    • ls | rm -rf /やcat $(whoami)のような回避の試みをブロックします
    • 堅牢な解析を使用して、コマンドインジェクションを防止します
  2. サーバー許可リスト

    • ssh-mcp-config.jsonで事前設定されたサーバーのみアクセスできます
    • 動的なサーバー接続は許可されません
    • インフラストラクチャへの不正アクセスを防止します
  3. SSH キー認証のみ

    • SSH キーベースの認証のみサポートしています
    • パスワード認証はありません
    • セキュリティのベストプラクティスに準拠しています
  4. 接続プーリング

    • maxConnectionsによって同時接続数を制限します
    • リソースの枯渇を防止します
    • アイドル状態の接続を自動的にクリーンアップします
  5. テンプレート検証

    • コマンドテンプレートは設定の読み込み時に検証されます
    • 展開されたテンプレートコマンドもallowedCommandsによる検証の対象となります
    • テンプレート構文によって、シェルの変数置換との競合を防ぎます
    • Docker/Go のテンプレートパターン({{.Field}})は保持され、置換されません
セキュリティに関する考慮事項

⚠️ 警告: このサーバーは強力な機能を提供します。以下の点を考慮してください。

  • AI アシスタントは、設定済みサーバーでコマンドを実行し、トンネルを作成できるようになります
  • 付与する機能を十分に理解してください
  • 制限の厳しいallowedCommandsから始め、必要に応じて拡張してください
  • MCP アクセスには専用の SSH キーを使用してください
  • コマンド実行ログを定期的に監査してください

例

例 1:Kubernetes の管理

設定:

{
  "allowedCommands": ["kubectl", "helm", "docker"],
  "servers": {
    "k8s-bastion": {
      "host": "k8s-bastion.example.com",
      "username": "k8s-operator",
      "privateKeyPath": "~/.ssh/kubernetes_operator_key"
    }
  }
}

使用方法: AI アシスタントに「staging 名前空間の Pod の状態を確認して」と尋ねます

アシスタントは次のコマンドを実行します:

{
  "connectionName": "k8s-bastion",
  "command": "kubectl get pods -n staging"
}
例 2:ポートフォワーディングによるデータベースアクセス

設定:

{
  "servers": {
    "db-bastion": {
      "host": "bastion.example.com",
      "username": "dbadmin",
      "privateKeyPath": "~/.ssh/db_key"
    }
  },
  "portForwardingServices": {
    "staging-db": {
      "connectionName": "db-bastion",
      "localPort": 5432,
      "remoteHost": "db-internal.example.com",
      "remotePort": 5432,
      "description": "Staging PostgreSQL database"
    }
  }
}

使用方法: AI アシスタントに「staging データベースのトンネルを開始して」と尋ねます

アシスタントは次のコマンドを実行します:

{
  "serviceName": "staging-db"
}

その後、ローカルから接続できます:psql -h localhost -p 5432 -U dbuser

例 3:Docker コンテナの管理

設定:

{
  "allowedCommands": ["docker", "docker-compose"],
  "servers": {
    "app-server": {
      "host": "app-01.example.com",
      "username": "deploy",
      "privateKeyPath": "~/.ssh/deploy_key"
    }
  }
}

使用方法: AI アシスタントに「app-server の nginx コンテナを再起動して」と尋ねます

アシスタントは次のコマンドを実行します:

{
  "connectionName": "app-server",
  "command": "docker restart nginx"
}
例 4:ファイル管理とログ分析

設定:

{
  "servers": {
    "app-server": {
      "host": "app-01.example.com",
      "username": "deploy",
      "privateKeyPath": "~/.ssh/deploy_key"
    }
  }
}

使用方法:

設定ファイルをアップロードする:

Ask your AI assistant: "Upload my local config.json to /var/www/app/config.json on app-server with 644 permissions"

アシスタントは次の処理を実行します:

{
  "connectionName": "app-server",
  "localPath": "~/config.json",
  "remotePath": "/var/www/app/config.json",
  "permissions": "0644"
}

分析用のログをダウンロードする:

Ask your AI assistant: "Download the error log from /var/log/app/error.log on app-server"

アシスタントは次の処理を実行します:

{
  "connectionName": "app-server",
  "remotePath": "/var/log/app/error.log",
  "localPath": "~/downloads/error.log"
}

ログファイルを一覧表示してフィルターする:

Ask your AI assistant: "Show me all .log files in /var/log/app on app-server"

アシスタントは次の処理を実行します:

{
  "connectionName": "app-server",
  "remotePath": "/var/log/app",
  "pattern": ".*\\.log$"
}

古いバックアップをクリーンアップする:

Ask your AI assistant: "Delete the old backup at /tmp/backup-2024-01-01.tar.gz on app-server"

アシスタントは次の処理を実行します:

{
  "connectionName": "app-server",
  "remotePath": "/tmp/backup-2024-01-01.tar.gz"
}

ライセンス

Apache 2.0 — 詳細については LICENSE ファイルを参照してください。


リポジトリ: github.com/uarlouski/ssh-mcp-server

課題: github.com/uarlouski/ssh-mcp-server/issues

npm パッケージ: @uarlouski/ssh-mcp-server

コメント

MCP は初めてですか?

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

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