内容
# Beget托管MCP
**语言:** 简体中文
[](https://github.com/BelyaevAD/beget-hosting-mcp/actions/workflows/ci.yml)
[](LICENSE)
[](pyproject.toml)
[](https://modelcontextprotocol.io/)
Beget官方API的MCP服务器。它为兼容MCP的客户端和自动化代理提供了一个可控的接口,用于管理Beget账户、域名、DNS、网站、FTP、MySQL、邮件、Cron、备份和统计信息。
该项目为MCP客户端和代理提供了一个受控的工具接口,用于管理Beget托管的相关信息。
API文档保存在`docs/`目录中;MCP服务器使用基于文档生成的可机器读取的方法元数据。
## 链接
- 首页: https://belyaevad.github.io/beget-hosting-mcp/
- 仓库: https://github.com/BelyaevAD/beget-hosting-mcp
- 发布: https://github.com/BelyaevAD/beget-hosting-mcp/releases
- 文档: [docs/README.md](docs/README.md)
- 操作员指南: [docs/operator-guide.md](docs/operator-guide.md)
- Beget API设置: https://cp.beget.com/settings/security/api
- Beget官方API文档: https://beget.com.cn/kb/api/beget-api
## 状态
Alpha版本。最初只支持只读模式。写操作被故意限制了额外的保护措施。
## 安装
从本地仓库复制:
```powershell
python -m pip install .
```
通过`pipx`进行全局系统安装:
```powershell
pipx install .
```
安装后,可用命令:
```powershell
beget-hosting-mcp
```
不需要额外的Python依赖。
## 凭证
MCP使用stdio传输。MCP客户端启动服务器作为本地进程,通过stdin/stdout交换数据。
Beget凭证属于进程配置,而不是MCP传输认证。在MCP客户端配置或系统账户环境中设置它们:
```powershell
BEGET_LOGIN=your-login
BEGET_API_PASSWORD=your-api-password
```
在`BEGET_API_PASSWORD`中,需要指定单独的Beget API密码,而不是控制面板的主密码。在Beget控制面板中打开`https://cp.beget.com/settings/security/api`页面,设置API密码,并明确允许通过API进行身份验证,然后再使用服务器。
不要在提交中添加凭证,也不要在聊天中发送它们。
如果未设置以下内容,则写操作将被禁用:
```powershell
BEGET_ALLOW_WRITE=true
```
即使启用写操作,每个副作用调用也需要`confirm_write=true`。
## MCP客户端配置
已安装命令的配置:
```json
{
"mcpServers": {
"beget-hosting": {
"type": "stdio",
"command": "beget-hosting-mcp",
"args": [],
"env": {
"BEGET_LOGIN": "your-login",
"BEGET_API_PASSWORD": "your-api-password"
}
}
}
}
```
从本地复制进行开发:
```powershell
python -m pip install -e .
```
对于启用写入的配置文件,请添加:
```json
{
"BEGET_ALLOW_WRITE": "true"
}
```
对于写入操作,建议使用单独的MCP配置文件。
### Windows中的Cursor
Cursor从`%USERPROFILE%\.cursor\mcp.json`读取全局MCP服务器。图形应用程序不总是获得与交互式终端相同的`PATH`,因此最可靠的Windows配置使用Python解释器的绝对路径来安装此包:
```powershell
py -0p
python -m pip install --upgrade .
```
```json
{
"mcpServers": {
"beget_hosting": {
"type": "stdio",
"command": "C:\\Path\\To\\python.exe",
"args": ["-u", "-m", "beget_mcp.server"],
"env": {
"BEGET_LOGIN": "your-login",
"BEGET_API_PASSWORD": "your-api-password"
}
}
}
}
```
将`command`替换为`py -0p`显示的解释器路径,该路径用于安装。`-u`标志启用无缓冲的stdio。不需要通过`cmd.exe`或`run.cmd`进行包装:Cursor直接将`env`值传递给进程,包括具有特殊shell字符的密码。
0.1.1版本修复了检测Cursor中的工具的问题,使用所需的MCP逐行JSON-RPC格式在stdio中。如果Cursor继续显示`Loading tools`,请检查已安装的版本并运行协议测试:
```powershell
python -m pip show beget-hosting-mcp
python -m unittest discover -s tests -v
```
服务器跟踪中应出现`initialize`,然后是`tools/list`。重复的`serve_stdio_start`和`serve_stdio_eof`事件,没有请求,通常意味着仍然安装了0.1.1之前的版本。
## 工具
- `beget_list_methods`:返回已文档化的方法列表。
- `beget_get_method_docs`:返回单个Beget API方法的已保存文档。
- `beget_call`:调用任何已文档化的Beget API方法。
- `beget_get_account_info`:`user.getAccountInfo`的简写。
MCP客户端应通过标准请求`tools/list`检测这些工具。为了在客户端(如Cursor)之外验证工具元数据,服务器还支持`beget-hosting-mcp --list-tools`命令。
stdio传输为每个请求写入一个紧凑的JSON-RPC消息,如MCP要求。对于较旧的客户端,服务器还接受`Content-Length`格式的传入消息,并以相同格式回复。
## 安全模型
- 凭证仅从环境变量加载。
- 请求通过`POST`方法发送。
- 机密被隐藏在dry-run结果和错误消息中。
- 没有`BEGET_ALLOW_WRITE=true`,带有副作用的方法被阻止。
- 对于带有副作用的调用,还需要`confirm_write=true`。
- 在执行写操作之前,建议先在dry-run模式下运行。
- 服务器检查Beget响应和嵌套方法结果的错误。
## 检查更改的延迟
某些Beget方法的成功响应意味着请求已接受,但相关系统仍需要时间来应用或查看更改。DNS更改可能在Beget上显示比递归DNS服务器和浏览器看到的更快;在确认公共检查失败之前,请等待权威DNS服务器刷新和TTL范围内的通常传播。恢复和备份加载创建后台作业,因此在检查恢复的数据之前,请查询`backup.getLog`。网站、域名绑定、PHP、邮件、MySQL和Cron的更改可能还需要短暂的延迟或等待下一个预定运行。
## 快速检查
```powershell
beget-hosting-mcp --check-docs
beget-hosting-mcp --list-tools
python -m unittest discover -s tests -v
```
在不访问Beget的情况下测试请求:
```powershell
$env:BEGET_LOGIN = "demo-login"
$env:BEGET_API_PASSWORD = "demo-password"
beget-hosting-mcp --dry-run-account-info
```
## 文档正文
- `docs/source-pages/`:完整的Beget API文档Markdown副本。
- `docs/beget-hosting-api.md`:规范的技术参考。
- `docs/method-index.md`:方法索引。
- `docs/operator-guide.md`:使用规则和典型场景。
- `docs/schema/methods.json`:方法的机器可读信息。
- `scripts/build_beget_docs.py`:文档主体生成器。
## Beget文档中的歧义
在统计页面标题中提到的方法是`stat.getSiteListLoad`,但在示例端点中使用的是`getSitesListLoad`。服务器将此功能保存为`method=getSiteListLoad`和`endpoint_method=getSitesListLoad`。