内容
<div align="center">
# 基础设施管理控制平台
[](https://pypi.org/project/infra-mcp/)
[](https://glama.ai/mcp/servers/esp4ce/infra-mcp)
[](LICENSE)
*只读MCP访问本地Linux虚拟机和PostgreSQL数据库,支持SSH连接。*
```
agent ──stdio──▶ infra-mcp ──SSH──▶ 虚拟机 (journald · 日志文件)
└──▶ 数据库 (只读PostgreSQL)
```
</div>
---
代理可以检查服务健康状况、检索日志、检查数据库状态和探索表结构 - 无需终端访问。所有远程操作都经过允许列表验证,并写入追加审计日志。
## 安装
```bash
uv tool install infra-mcp
# 或
pip install infra-mcp
```
## 配置
将 `infra-mcp.yaml.example` 复制到 `~/.infra-mcp/infra-mcp.yaml` 并编辑。
```bash
# 从 ~/.ssh/config 生成启动配置
infra-mcp generate-config -o ~/.infra-mcp/infra-mcp.yaml
# 创建只读PostgreSQL角色
infra-mcp setup
# 检查虚拟机可达性
infra-mcp test
# 刷新发现的服务、日志目录和数据库(更新配置)
infra-mcp discover --in-place
```
使用 `--config` 或 `INFRA_MCP_CONFIG` 重写配置路径。
## 运行
```bash
infra-mcp run
```
在客户端(如Claude Code、Cursor等)中注册为 **stdio** MCP服务器,命令为 `infra-mcp run`。
## 更新
`infra-mcp` 每天检查PyPI是否有新版本,并在发现新版本时打印一行提示,告诉您如何升级:
```bash
uv tool upgrade infra-mcp # 或:pip install --upgrade infra-mcp
```
检查在后台运行,不会阻塞启动,也不会影响stdout。打印安装版本使用 `infra-mcp --version`。通过设置 `INFRA_MCP_NO_UPDATE_CHECK=1` 禁用检查。
## 工具
### 虚拟机和服务
| 工具 | 用途 |
|------|---------|
| `list_vms` | 所有虚拟机及其可达性和监视服务 |
| `get_infra_overview` | 一个虚拟机的服务状态 + 数据库健康状况 |
| `get_service_status` | systemd状态、运行时间、最后5行日志 |
| `get_service_logs` | 有界限的journald日志,按严重程度过滤 |
| `get_log_file` | 允许的日志文件的最后N行,可选grep |
### 数据库
| 工具 | 用途 |
|------|---------|
| `get_db_status` | 连接数、等待锁、长运行查询数 |
| `query_db` | 有界限的调用者提供的`SELECT` |
| `list_tables` | 数据库中的表(模式 + 名称),上限200 |
| `describe_table` | 表的列、类型、主键、外键 |
### 元数据
| 工具 | 用途 |
|------|---------|
| `get_audit_log` | 本地审计日志的最近记录 |
所有输出都在服务器端有界限(200行日志、100行数据库记录、200个表/列)。截断始终使用 `-- TRUNCATED:` 标记。`list_tables` 和 `describe_table` 缓存结果在内存中(TTL:`schema_cache_ttl_hours`,默认为24小时);传递 `refresh: true` 以强制实时重新读取。
## 安全模型
- SSH命令和systemd服务在任何网络调用之前都会针对每个虚拟机的允许列表进行检查。
- 所有数据库查询都在 `READ ONLY` 事务中作为只读角色运行。
- 日志文件路径针对每个虚拟机的目录允许列表(阻止 `..` 遍历)进行解析。
- 每个远程操作都会追加到本地JSONL审计日志中。