ssh-inspector-mcp
Provides structured read-only SSH/SFTP and AWS operations on a single RHEL host, with path allowlisting, output limits, and IAM-based authorization.
README
SSH Inspector MCP
固定した1台のRHEL系hostへSSH接続し、参照操作だけを構造化MCP toolsとして提供するstdio serverです。Kiro、Claude Code/Desktop、VS Codeから同じ単一bundleを利用できます。
raw command、shell、PTY、sudo、port forwarding、agent forwarding、任意environmentは公開しません。SSH filesystemは起動設定のpath allowlistで制限し、AWS resourceはSSH先のIAMで認可します。file本文、CloudWatch Logs event、S3 object、DynamoDB itemはread-onlyでも機密情報になり得るため、metadata操作とは別toolに分離して件数・時間・byte上限を適用します。
必要条件
- build環境: Node.js 20以上、npm
- SSH先: OpenSSH SFTP subsystem、RHEL標準command、利用する場合はAWS CLI v2
- 認証: pin留めしたSSH host key fingerprintと、private keyまたは環境変数経由password
- AWS: SSH先にread-only IAM roleまたは最小権限credential
Build
npm ci
npm run verify
配布物は dist/ssh-inspector-mcp.mjs だけです。設定JSONと任意のAWS拡張specはbundle外で管理します。
node dist/ssh-inspector-mcp.mjs --config /absolute/path/to/config.json
stdioのstdoutはJSON-RPC専用です。警告と起動errorはstderrへ出力します。
設定
examples/config.example.json を基に、host、user、host key、参照root、任意のAWS拡張spec pathを設定します。未知key、相対remote path、host key未指定、参照rootなし、上限外の値は起動時に拒否されます。
host key fingerprintは管理者から別経路で確認してください。初回接続時の値を無条件に信頼しないでください。
ssh-keyscan -t ed25519 rhel.example.internal 2>/dev/null | ssh-keygen -lf - -E sha256
private key認証ではlocal key fileを0600以下にします。暗号化keyのpassphraseやpasswordはJSONへ書かず、設定した環境変数名から渡します。
{
"authentication": {
"method": "password",
"passwordEnv": "SSH_INSPECTOR_PASSWORD"
}
}
allowAllReadablePaths はSSH userが読める広い範囲を公開する危険なopt-inです。利用には acknowledgeBroadReadRisk: true が必要ですが、productionでは用途別rootを指定してください。.ssh、.aws、/proc/*/environ はこのmodeでも拒否します。
Tools
| 分類 | tools |
|---|---|
| SSH/SFTP | ssh_health_check, ssh_list_directory, ssh_read_file_head, ssh_read_file_tail |
| RHEL | ssh_find_files, ssh_search_text, ssh_system_info |
| CloudWatch | aws_cloudwatch_describe_alarms, aws_cloudwatch_list_metrics, aws_cloudwatch_get_metric_data |
| CloudWatch Logs metadata | aws_cloudwatch_logs_describe_log_groups, aws_cloudwatch_logs_describe_log_streams |
| CloudWatch Logs data | aws_cloudwatch_logs_filter_log_events, aws_cloudwatch_logs_get_log_events |
| S3 metadata | aws_s3_list_buckets, aws_s3_list_objects, aws_s3_head_object |
| S3 data | aws_s3_get_object_text |
| DynamoDB metadata | aws_dynamodb_list_tables, aws_dynamodb_describe_table |
| DynamoDB data | aws_dynamodb_get_item, aws_dynamodb_query |
AWS resourceとregionの参照可否はSSH先のIAM policyで制御します。S3 data toolはIAMで参照可能な無圧縮UTF-8 textだけをbyte rangeで取得します。CloudWatch Logsは最大24時間・100 events、DynamoDB queryは最大100 itemsに制限し、DynamoDB scan は標準toolとして公開しません。data toolsのauto-approveは推奨しません。
ssh_find_files の modifiedAfter はtimezone付きISO 8601日時を受け取り、固定した find -newermt 条件として扱います。ssh_search_text の compression は none、gzip、bzip2、xz を選択でき、圧縮時の既定globはそれぞれ *.gz、*.bz2、*.xz です。includeGlob で対象名をさらに限定できます。
aws_cloudwatch_logs_describe_log_groups は logGroupNamePrefix または logGroupNamePattern でlog groupを最大50件検索します。両条件は同時指定できず、続きは nextToken で取得します。
AWS拡張
examples/aws-tools.example.json のversion 1 specを、設定の aws.extensionSpecPaths へ明示指定します。directoryの自動探索はしません。
拡張はread-only operation allowlist、region形式、timeout、output bytes、型付きparameterを起動時に検証します。resource認可は標準toolと同じくIAMへ委ねます。DynamoDB scan は明示specで最大100の必須limitを宣言した場合だけ登録できます。
Client設定
すべてのpathはabsolute pathへ置き換えてください。秘密値はclient設定の env か、client processを起動する環境から渡します。
VS Code
.vscode/mcp.json にstdio設定があります。build後、MCP server一覧から ssh-inspector をstartしてtool discoveryを確認できます。
Kiro
.kiro/settings/mcp.json:
{
"mcpServers": {
"ssh-inspector": {
"command": "node",
"args": ["/absolute/path/ssh-inspector-mcp.mjs", "--config", "/absolute/path/config.json"],
"disabled": false,
"autoApprove": [
"ssh_health_check",
"ssh_list_directory",
"ssh_read_file_head",
"ssh_read_file_tail",
"ssh_find_files",
"ssh_search_text",
"ssh_system_info",
"aws_cloudwatch_describe_alarms",
"aws_cloudwatch_list_metrics",
"aws_cloudwatch_get_metric_data",
"aws_cloudwatch_logs_describe_log_groups",
"aws_cloudwatch_logs_describe_log_streams",
"aws_cloudwatch_logs_filter_log_events",
"aws_cloudwatch_logs_get_log_events",
"aws_s3_list_buckets",
"aws_s3_list_objects",
"aws_s3_head_object",
"aws_s3_get_object_text",
"aws_dynamodb_list_tables",
"aws_dynamodb_describe_table",
"aws_dynamodb_get_item",
"aws_dynamodb_query"
]
}
}
}
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"ssh-inspector": {
"command": "node",
"args": ["/absolute/path/ssh-inspector-mcp.mjs", "--config", "/absolute/path/config.json"]
}
}
}
Claude Code
claude mcp add --transport stdio --scope user ssh-inspector -- node /absolute/path/ssh-inspector-mcp.mjs --config /absolute/path/config.json
運用
- hardening: docs/rhel-hardening.md
- security modelとincident対応: SECURITY.md
- host key rotation時は新fingerprintを別経路で確認し、停止中に設定を更新する
- auditにはoperation ID、duration、終了状態を残し、秘密、file本文、AWS dataを残さない
- AWS CLI errorにはresource名が含まれる場合があるため、stderrログの閲覧権限を制限する
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。