MCP Command Server

MCP Command Server

MCP 命令服务器提供了一个安全的、容器化的接口,用于远程命令执行,它具有内置的基于模式的安全验证、全面的 API 文档以及企业级的部署配置。

copyleftdev

开发者工具
访问服务器

README

<div align="center">

MCP 命令服务器

<img src="https://img.icons8.com/fluency/96/000000/command-line.png" width="96" height="96" alt="命令行图标"/>

用于远程命令执行的安全 JSON-RPC API

<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a> <a href="https://www.rust-lang.org/"><img src="https://img.shields.io/badge/Built%20with-Rust-orange" alt="使用 Rust 构建"></a> <a href="docker-compose.yml"><img src="https://img.shields.io/badge/Docker-Ready-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 文档。

✨ 功能特性

  • JSON-RPC 2.0 API: 用于命令执行的标准化接口
  • 命令安全性: 基于模式的命令过滤,以阻止潜在的有害操作
  • 自文档化: 内置的 /context 端点,提供 markdown 文档
  • 容器化: 即用型 Docker 配置
  • 生产就绪: 以安全为中心的设计,采用非 root 用户执行
  • 开发者友好: 完整的 Postman 集合,用于测试

🏗️ 架构

flowchart TB
    Client[客户端] -->|HTTP POST JSON-RPC| Server[MCP 命令服务器]
    Client -->|HTTP GET| Context["/context 文档"]
    
    subgraph Server["MCP 命令服务器 (端口 3030)"]
        API[JSON-RPC API] --> Validator[命令验证器]
        Validator -->|如果安全| Executor[命令执行器]
        Validator -->|如果不安全| Reject[拒绝命令]
        Context
    end
    
    Validator --> ExcludeYAML[exclude.yaml]
    Context --> ContextMD[.context]
    
    Executor -->|执行| Shell[Shell]
    Shell --> Results[命令结果]
    Results --> 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 Server,Shell container;
    class API,Validator,Executor,Context,Reject,Results component;
    class ExcludeYAML,ContextMD config;

组件流程

sequenceDiagram
    participant Client as 客户端
    participant Server as MCP 命令服务器
    participant Validator as 验证器
    participant Executor as 执行器
    participant Shell as Shell
    
    Client->>Server: POST / {JSON-RPC 请求}
    Server->>Validator: 验证命令
    
    alt 命令匹配排除模式
        Validator->>Server: 拒绝 (安全违规)
        Server->>Client: 错误响应
    else 命令安全
        Validator->>Executor: 执行命令
        Executor->>Shell: 运行 shell 命令
        Shell->>Executor: 命令输出
        Executor->>Server: 处理结果
        Server->>Client: JSON-RPC 响应
    end
    
    Client->>Server: GET /context
    Server->>Client: Markdown 文档

🚀 安装

前提条件

  • Docker 和 Docker Compose
  • Git (用于克隆存储库)

使用 Docker (推荐)

  1. 克隆存储库:

    git clone https://github.com/yourusername/mcp_command_server.git
    cd mcp_command_server
    
  2. 使用 Docker Compose 启动服务器:

    docker-compose up -d
    
  3. 服务器将在 http://localhost:3030 上可用

从源代码构建

  1. 确保已安装 Rust (建议 1.74+):

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. 克隆并构建项目:

    git clone https://github.com/yourusername/mcp_command_server.git
    cd mcp_command_server
    cargo build --release
    
  3. 运行服务器:

    ./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 格式的 API 文档:

curl http://localhost:3030/context

📚 API 文档

MCP 命令服务器通过 /context 端点提供全面的文档。此文档以 markdown 格式提供,包括:

  • API 概述
  • 可用方法
  • 请求/响应格式
  • 错误代码
  • 使用示例
  • 安全注意事项

JSON-RPC 规范

该 API 遵循 JSON-RPC 2.0 规范:

  • 端点: http://localhost:3030/
  • 方法: POST
  • Content-Type: application/json
  • Body 格式:
{
  "jsonrpc": "2.0",
  "id": "<unique_id>",
  "method": "command/get",
  "params": {
    "command": "<shell_command>"
  }
}

可用方法

方法 描述 参数
command/get 执行 shell 命令 command: string

响应格式

成功响应:

{
  "jsonrpc": "2.0",
  "id": "<request_id>",
  "result": {
    "stdout": "<command_output>"
  }
}

错误响应:

{
  "jsonrpc": "2.0",
  "id": "<request_id>",
  "error": {
    "code": "<error_code>",
    "message": "<error_message>"
  }
}

错误代码

代码 消息 描述
-32602 缺少 'command' 参数 未提供必需的 'command' 参数
-32000 命令执行错误 无法执行命令或命令被拒绝
-32601 方法未找到 指定的方法不存在

🔒 安全性

MCP 命令服务器实现了多种安全措施:

命令排除系统

服务器使用基于模式的排除系统来防止执行潜在的有害命令。这通过 exclude.yaml 文件进行配置,该文件包含:

  • 纯文本模式 (例如, rm -rf, sudo, apt)
  • 正则表达式模式 (例如, regex:.*\.\.\/.*)
  • 用于区分大小写和匹配行为的选项
flowchart LR
    Command[命令输入] --> Validator[命令验证器]
    ExcludeYAML[exclude.yaml] --> Validator
    
    Validator --> Check{安全?}
    Check -->|是| Execute[执行命令]
    Check -->|否| Reject[拒绝并报错]
    
    subgraph Patterns[模式]
        Plain[纯文本模式]
        Regex[正则表达式模式]
    end
    
    ExcludeYAML --> Patterns

阻止的命令类别

命令排除系统阻止了几类潜在的有害命令:

  • 系统修改 (apt, yum 等)
  • 文件删除/修改 (rm -rf 等)
  • 系统控制 (shutdown, reboot 等)
  • 用户/权限更改 (chmod, sudo 等)
  • 网络操作 (wget, curl 等)
  • 命令链接以绕过过滤器 (&&, | 等)
  • 脚本执行 (bash, python 等)
  • 文件系统遍历 (../ 等)

Docker 安全性

服务器在 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 集合

依赖项

  • Rust: 主要编程语言
  • tokio: Rust 的异步运行时
  • warp: Web 服务器框架
  • serde & serde_json: 序列化/反序列化
  • serde_yaml: 用于排除模式的 YAML 解析
  • regex: 用于命令验证的正则表达式支持

🧪 测试

使用 Postman 集合

docs/ 目录中包含一个全面的 Postman 集合,用于测试 API:

  1. docs/mcp_command_server.postman_collection.json 导入到 Postman
  2. 运行单个请求或整个集合
  3. 该集合包括以下测试:
    • 基本命令
    • 错误处理
    • 命令执行
    • 文件操作
    • 安全验证

手动测试

使用 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。

  1. Fork 存储库
  2. 创建您的功能分支 (git checkout -b feature/amazing-feature)
  3. 提交您的更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开一个 Pull Request

📄 许可证

该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。


使用 Rust 和 Docker 构建 ❤️。

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript