内容
# fleet-mcp
一款统一的MCP服务器,集成了您日常使用的工具来管理您的托管集群 — **SSH/Plesk, WordPress (wp-cli), Cloudflare, MySQL, GitHub, Docker, 和 Coolify** — 这样您可以通过Claude使用自然语言驱动所有这些工具。
## 工具
| 分组 | 工具 |
|-------|-------|
| **SSH** | `run_ssh` |
| **网站** | `site_status`, `check_all_sites`, `ssl_expiry`, `disk_usage` |
| **WordPress** | `wp`, `wp_update_plugins`, `wp_purge_lscache`, `wp_health`, `wp_php_handler`, `wp_search_replace`, `wp_integrity`, `wp_core_update`, `wp_maintenance`, `wp_backup` |
| **Cloudflare** | `cf_zone_status`, `cf_dns_list`, `cf_dns_add`, `cf_toggle_proxy`, `cf_export_records`, `cf_zone_restore`, `cf_purge_cache` |
| **MySQL** | `mysql_query`, `mysql_table_sizes`, `mysql_create_user`, `mysql_dump` |
| **GitHub** | `gh`, `gh_pr_list`, `gh_create_issue` |
| **Docker** | `docker_ps`, `docker_logs`, `docker_restart`, `docker_raw` |
| **Coolify** | `coolify_servers`, `coolify_apps`, `coolify_deploy`, `coolify_resources` |
| **OJS** | `ojs_install`, `ojs_create_journal`, `ojs_status` |
| **开发** | `dev_check`, `scaffold_nextjs`, `scaffold_go`, `scaffold_ts_lib`, `dockerize` |
| **Plesk** | `plesk_list_domains`, `plesk_domain_info`, `plesk_create_subdomain`, `plesk_set_php_handler`, `plesk_create_db`, `plesk_issue_le` |
| **fail2ban** | `f2b_status`, `f2b_check_ip`, `f2b_unban`, `f2b_ignore_add` |
| **Moodle** | `moodle_cron`, `moodle_purge_caches`, `moodle_maintenance`, `moodle_upgrade`, `moodle_cli` |
**资源:** `fleet://inventory` — 一个Plesk域名和可用PHP处理器的实时列表,可以在不调用工具的情况下被模型读取。
**测试/CI:** `npm test` 运行节点测试套件(纯函数 — 凭证,配置,结果助手,OJS脚本构建器);GitHub Actions在每次推送时运行构建+测试。
## 安装
```bash
cd fleet-mcp
npm install
cp .env.example .env # 然后填写您的值
npm run build
```
运行服务器的机器上的要求:
- **Node ≥ 18** (使用全局`fetch`;`--env-file` 需要 Node ≥ 20.6)。
- **ssh** 带有密钥认证到fleet服务器(推荐使用密码)。
- **curl**,**openssl** 用于网站/SSL工具。
- **gh** CLI 用于GitHub工具(运行 `gh auth login` 一次,或设置 `GITHUB_TOKEN`)。
- **docker** 本地,或设置 `DOCKER_SSH_TARGET` 以通过SSH运行它。
## 注册Claude代码
传递所有凭证的最简单方法是使用Node的 `--env-file`:
```bash
claude mcp add fleet-mcp -- \
node --env-file=/absolute/path/to/fleet-mcp/.env \
/absolute/path/to/fleet-mcp/dist/server.js
```
然后在Claude中:
- "检查 example.com, blog.example.com 和 shop.example.com 的状态"
- "journal.example.com 的SSL证书还有多少天到期?"
- "列出 shop.example.com 的活跃插件并清除其LiteSpeed缓存"
- "显示二级Cloudflare账户中 example.org 的DNS记录"
- "备份 myapp_db 数据库"
## 安装OJS期刊
`ojs_install` 运行经过验证的配方,并返回生成的管理员+数据库凭证。有两种模式:
- **`provision: true`** — 完整的从头开始:创建Cloudflare A记录(灰色),创建Plesk子域名,部署文件,创建数据库+用户,CLI安装,修补 `config.inc.php` (`allowed_hosts`/`base_url`/`trust_x_forwarded_for`),设置权限+PHP处理器,颁发Let's Encrypt证书,然后将记录翻转到代理。需要 `parentDomain` + `originIp`。
- **`provision: false`** (默认)— 安装到现有的网络空间(子域名,文档根目录和DNS已经设置)。
> "从头开始在 journal.example.com 上安装一个OJS期刊(父域名 example.com,源站 203.0.113.10),创建期刊,英文名称 'New Journal',阿拉伯语 'مجلة جديدة',缩写 NJ"
它可以选择在同一运行中创建第一个期刊(`createJournal`),应用三个已知的CLI问题(loadAllPlugins throw,missing default section,per-context theme enable),以便公共前端立即工作。`ojs_create_journal` 只在现有安装上执行期刊步骤。
## 开发工具(TypeScript / Go / Next.js)
- `dev_check` — 自动检测堆栈并运行vet/build/test(Go)或install/tsc/lint/build/test(Node/TS)。
- `scaffold_nextjs`,`scaffold_go`,`scaffold_ts_lib` — 新的项目骨架。
- `dockerize` — 编写生产多阶段Dockerfile,准备使用 `docker_*` 构建并使用 `coolify_*` 部署。
## 在团队的域名上运行(远程模式)
相同的工具可以在域名后面作为共享的HTTP服务器运行:
```bash
export MCP_AUTH_TOKEN="$(openssl rand -hex 32)" # 共享的团队密钥
npm run build && npm run start:http # 在 :8787 上提供 POST /mcp
```
或者通过附带的 [Dockerfile](Dockerfile) — 在您的Coolify主机上部署它,放在 `mcp.example.com` 后面(Cloudflare代理,完整),每个队友添加它作为远程MCP服务器,带有 bearer token:
```bash
claude mcp add --transport http fleet-mcp https://mcp.example.com/mcp \
--header "Authorization: Bearer <MCP_AUTH_TOKEN>"
```
安全性:HTTP模式如果没有 `MCP_AUTH_TOKEN` 则拒绝启动。任何拥有该令牌的人都可以运行每个工具(包括 `run_ssh` )— 将其视为根密码,保持端点Cloudflare代理,并轮换令牌以撤销访问。
## 配置
所有配置都通过环境变量进行 — 请参阅 [.env.example](.env.example)。启动时不需要任何配置;每个工具在第一次调用时都会验证其自己的设置,因此您可以一次启用一个集成。
## 安全注意事项
- `run_ssh` 和 `mysql_query` (使用 `allowWrite=true`)可以更改服务器状态。`mysql_query` 默认情况下**只读**,除非您明确选择加入,否则阻止写入/DDL语句。
- 机密仅存储在 `.env` (git-ignored)中 — 绝不硬编码。优先使用SSH **密钥**身份验证和范围的 **Cloudflare API令牌** (不是全局密钥)。
- 一些集成也有官方的MCP服务器(GitHub,Docker)。此统一服务器用一个地方替换它们来管理您的整个舰队;如果您愿意,可以稍后交换单个组。
## 项目布局
```
src/
createServer.ts # 构建并注册每个工具组(与传输无关)
server.ts # 本地入口点(stdio)
http.ts # 远程入口点(Streamable HTTP + bearer auth)
config.ts # 基于环境的配置 + 延迟加载*助手
lib/
exec.ts # 安全的本地 + SSH命令执行
result.ts # MCP响应助手 + 错误包装器
creds.ts # 加密随机密码 + 标签助手
cloudflare.ts # CF API客户端
coolify.ts # Coolify API客户端
ojs-scripts.ts # OJS安装 + 期刊创建脚本构建器
tools/
ssh.ts sites.ts wordpress.ts cloudflare.ts mysql.ts
github.ts docker.ts coolify.ts ojs.ts dev.ts
```