安全终端命令执行服务器

一个安全的MCP协议服务器,提供终端命令执行和文件读取功能,内置多重安全机制。

  • by iamtokarev
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 serverdaun/shell-mcp-server

使用说明

MCP外壳服务器

一种安全的模型上下文协议(MCP)服务器,提供具有内置安全机制的终端命令执行和文件读取功能。

特性

  • 安全命令执行:运行具有全面安全限制的终端命令
  • 文件资源访问:通过MCP资源端点读取特定文件
  • 安全第一:内置对危险命令和操作的保护
  • 异步/等待支持:完全异步实现,实现最佳性能
  • Docker支持:具有多阶段构建的容器化部署
  • 交叉平台的:适用于macOS、Linux和Windows

安全功能

服务器实施了多层安全措施,以防止危险操作:

  • 命令黑名单:阻止危险命令,如 rm, dd, format, fdisk
  • 模式检测:防止文件重定向和系统修改等风险模式
  • 执行超时:命令仅限于防止挂起进程
  • 错误处理:全面的错误处理和记录

已阻止的命令

  • 文件删除: rm, rmdir, del, unlink, shred
  • 磁盘操作: dd, format, fdisk, mkfs, wipefs
  • 危险模式: >, >>, /dev/null, sudo rm

安装

先决条件

  • Python 3.12或更高版本
  • 紫外线 包管理器(推荐)

地方发展

  1. 克隆存储库:

    git clone <repository-url>
    cd shellserver
    
  2. 使用uv安装依赖项:

    uv sync
    
  3. 或使用pip安装:

    pip install -r requirements.txt
    

Docker安装

  1. 构建Docker镜像:

    docker build -t mcp-shell-server .
    
  2. 运行容器:

    docker run -it mcp-shell-server
    

用法

运行服务器

带紫外线:

uv run server.py

使用Python:

python server.py

使用Docker:

docker run -it mcp-shell-server

可用工具

run_command

安全地执行终端命令。

参数:

  • command (string):要执行的shell命令

退货:

  • stdout (string):命令输出
  • stderr (string):错误输出
  • returncode (int):退出代码

示例:

{
  "name": "run_command",
  "arguments": {
    "command": "ls -la"
  }
}

可用资源

file://mcpreadme

读取位于以下位置的特定markdown文件的内容 ~/Desktop/ML/mcpreadme.md.

示例:

{
  "uri": "file://mcpreadme"
}

配置

默认情况下,服务器在标准I/O(stdio)传输上运行。您可以在 server.py 文件:

if __name__ == "__main__":
    mcp.run("stdio")  # or "sse" for Server-Sent Events

发展

项目结构

shellserver/
├── server.py          # Main MCP server implementation
├── pyproject.toml     # Project configuration
├── requirements.txt   # Python dependencies
├── Dockerfile         # Container configuration
├── uv.lock           # Dependency lock file
└── README.md         # This file

添加新工具

要添加新工具,请使用 @mcp.tool() 装饰师:

@mcp.tool()
async def your_new_tool(param: str) -> dict:
    """Your tool description"""
    # Tool implementation
    return {"result": "success"}

添加新资源

要添加新资源,请使用 @mcp.resource() 装饰师:

@mcp.resource("file://your-resource")
async def your_resource() -> str:
    """Resource description"""
    # Resource implementation
    return "resource content"

错误处理

服务器实现了全面的错误处理:

  • 违反安全规定:与危险模式匹配的命令会返回安全错误
  • 执行错误:失败的命令在stderr中返回错误详细信息
  • 文件访问错误:资源访问失败返回描述性错误消息
  • 超时处理:长时间运行的命令在30秒后终止

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

该项目根据MIT许可证获得许可。

您可以根据以下条款自由使用、修改和分发此软件 MIT许可证.

请参阅 LICENSE 存储库中的文件以获取完整的许可证文本。

支持

对于问题和疑问:

  • 在存储库中创建问题
  • 检查 MCP文件

依赖项

  • mcp[cli]:模型上下文协议实现
  • Python 3.12+:必需的Python版本
  • FastMCP:MCP服务器框架
  • 异步IO:异步编程支持