<div align="center">
安全的远程命令执行JSON-RPC API
<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT 许可证"></a> <a href="https://www.rust-lang.org/"><img src="https://img.shields.io/badge/使用-Rust-orange" alt="使用 Rust"></a> <a href="docker-compose.yml"><img src="https://img.shields.io/badge/Docker-准备就绪-blue" alt="Docker"></a> <a href="https://www.jsonrpc.org/specification"><img src="https://img.shields.io/badge/API-JSON--RPC%202.0-lightgrey" alt="JSON-RPC"></a> </p> <p align="center"> MCP 命令服务器提供了一个安全、容器化的接口用于远程命令执行,内置模式匹配的安全验证机制,全面的API文档以及企业级部署配置。 </p> </div>MCP 命令服务器提供一个符合 JSON-RPC 2.0 标准的 API 来执行服务器上的 shell 命令。它设计时考虑了安全性,包括基于模式的命令过滤以防止潜在有害的操作。服务器完全容器化,并且使用 Docker 包含了全面的 API 文档,可以直接通过 API 访问。
/context 端点提供 Markdown 文档flowchart TB
客户端[客户端] -->|HTTP POST JSON-RPC| 服务器[MCP 命令服务器]
客户端 -->|HTTP GET| 上下文["/context" 文档]
subgraph 服务器["MCP 命令服务器 (端口 3030)"]
API[JSON-RPC API] --> 验证器[命令验证器]
验证器 -->|如果安全| 执行器[命令执行器]
验证器 -->|如果不安全| 拒绝[拒绝命令]
上下文
end
验证器 --> 排除YAML[exclude.yaml]
上下文 --> 上下文MD[.context]
执行器 -->|执行| Shell[Shell]
Shell --> 结果[命令结果]
结果 --> API
classDef container fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;
classDef component fill:#fff,stroke:#000,stroke-width:1px,color:#000;
classDef config fill:#f9f,stroke:#333,stroke-width:1px,color:#333;
class 服务器,Shell container;
class API,验证器,执行器,上下文,拒绝,结果 component;
class 排除YAML,上下文MD config;
sequenceDiagram
参与者 客户端
参与者 服务器 as MCP 命令服务器
参与者 验证器
参与者 执行器
参与者 Shell
客户端->>服务器: POST / {JSON-RPC 请求}
服务器->>验证器: 验证命令
alt 命令匹配排除模式
验证器->>服务器: 拒绝 (安全违规)
服务器->>客户端: 错误响应
else 命令是安全的
验证器->>执行器: 执行命令
执行器->>Shell: 运行 shell 命令
Shell->>执行器: 命令输出
执行器->>服务器: 处理结果
服务器->>客户端: JSON-RPC 响应
end
客户端->>服务器: GET /context
服务器->>客户端: Markdown 文档
克隆仓库:
git clone https://github.com/yourusername/mcp_command_server.git
cd mcp_command_server
使用 Docker Compose 启动服务器:
docker-compose up -d
服务器将在 http://localhost:3030 可用
确保已安装 Rust (推荐 1.74+):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
克隆并构建项目:
git clone https://github.com/yourusername/mcp_command_server.git
cd mcp_command_server
cargo build --release
运行服务器:
./target/release/mcp_command_server
执行一个简单的命令:
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "command/get",
"params": {
"command": "echo \"Hello World\""
}
}' http://localhost:3030/
响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"stdout": "Hello World\n"
}
}
获取 API 文档的 Markdown 格式:
curl http://localhost:3030/context
MCP 命令服务器通过 /context 端点提供全面的文档。这些文档以 Markdown 格式提供,并包含:
API 遵循 JSON-RPC 2.0 规范:
http://localhost:3030/{
"jsonrpc": "2.0",
"id": "<唯一ID>",
"method": "command/get",
"params": {
"command": "<shell命令>"
}
}
| 方法 | 描述 | 参数 |
|---|---|---|
command/get | 执行一个 shell 命令 | command: 字符串 |
成功响应:
{
"jsonrpc": "2.0",
"id": "<请求ID>",
"result": {
"stdout": "<命令输出>"
}
}
错误响应:
{
"jsonrpc": "2.0",
"id": "<请求ID>",
"error": {
"code": "<错误码>",
"message": "<错误消息>"
}
}
| 代码 | 消息 | 描述 |
|---|---|---|
| -32602 | 缺少 'command' 参数 | 必需的 'command' 参数未提供 |
| -32000 | 命令执行错误 | 命令无法执行或被拒绝 |
| -32601 | 方法未找到 | 指定的方法不存在 |
🚨 安全更新: 版本 0.1.1 修复了一个关键的空格注入漏洞 (CVE-2024-XXXX),该漏洞允许绕过命令过滤器。所有用户应立即更新。
MCP 命令服务器实现了多个安全措施:
服务器使用基于模式的排除系统来防止潜在有害命令被执行。这通过 exclude.yaml 文件进行配置,其中包含:
rm -rf,sudo,apt)regex:.*\.\.\/.*)flowchart LR
命令[命令输入] --> 验证器[命令验证器]
排除YAML[exclude.yaml] --> 验证器
验证器 --> 检查{安全?}
检查 -->|是| 执行[执行命令]
检查 -->|否| 拒绝[拒绝并报错]
subgraph 模式
纯文本[纯文本模式]
正则[正则表达式模式]
end
排除YAML --> 模式
命令排除系统阻止了几类潜在有害命令:
apt,yum 等)rm -rf 等)shutdown,reboot 等)chmod,sudo 等)wget,curl 等)&&,| 等)bash,python 等)../ 等)服务器在 Docker 容器中作为非 root 用户运行,以限制潜在的安全漏洞造成的损害。
mcp_command_server/
├── .context # API 文档 Markdown
├── Cargo.toml # Rust 依赖
├── Dockerfile # 多阶段 Docker 构建
├── exclude.yaml # 命令排除模式
├── docker-compose.yml # Docker Compose 配置
├── src/
│ ├── main.rs # 主服务器代码
│ ├── command.rs # 命令执行逻辑
│ ├── rpc.rs # JSON-RPC 处理
│ └── validator.rs # 命令验证逻辑
└── docs/
├── README.md # Postman 集合文档
└── mcp_command_server.postman_collection.json # Postman 集合
在 docs/ 目录中包含了一个全面的 Postman 集合用于测试 API:
docs/mcp_command_server.postman_collection.json 导入到 Postman使用 curl 测试基本功能:
# 测试 context 端点
curl http://localhost:3030/context
# 执行一个简单命令
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "command/get",
"params": {
"command": "echo \"Hello World\""
}
}' http://localhost:3030/
欢迎贡献!请随时提交 Pull Request。
git checkout -b feature/amazing-feature)git commit -m '添加一些精彩的功能')git push origin feature/amazing-feature)此项目根据 MIT 许可证发布 - 查看 LICENSE 文件了解详情。
使用 Rust 和 Docker 制作 ❤️