命令行工具安全执行服务

MCPShell是一款通过模型上下文协议(MCP)让大型语言模型(LLM)安全执行命令行工具的服务,提供灵活的配置和安全约束机制。

  • by inercia
  • Go
  • 本地部署
  • 72 星标
  • 更新于
在 GitHub 查看 inercia/mcpshell

使用说明

MCPShell

这 MCPShell 是一种允许LLM安全执行的工具 命令行工具 通过 模型上下文协议(MCP). 它在LLM和操作系统命令之间提供了一个安全的桥梁。

特性

  • 灵活的命令执行:将任何shell命令作为MCP工具运行, 通过模板进行参数替换。
  • 基于配置的工具定义:在YAML中用参数定义工具, 约束和输出格式。
  • 通过约束实现安全:使用CEL表达式验证工具参数 执行前,以及可选 沙盒环境 用于运行命令。
  • MCP工具的快速预测:只需添加一些shell代码并将其用作 LLM中的MCP工具。
  • 简单集成:适用于支持MCP协议的任何LLM客户端 (即光标、VSCode、Witsy……)

快速开始

想象一下,你希望Cursor(或其他MCP客户端)帮助你 硬盘空间问题。

  1. 创建配置文件 /my/example.yaml 定义你的工具:

    mcp:
      description: |
        Tool for analyzing disk usage to help identify what's consuming space.
      run:
        shell: bash
      tools:
        - name: "disk_usage"
          description: "Check disk usage for a directory"
          params:
            directory:
              type: string
              description: "Directory to analyze"
              required: true
            max_depth:
              type: number
              description: "Maximum depth to analyze (1-3)"
              default: 2
          constraints:
            - "directory.startsWith('/')"  # Must be absolute path
            - "!directory.contains('..')"  # Prevent directory traversal
            - "max_depth >= 1 && max_depth <= 3"  # Limit recursion depth
            - "directory.matches('^[\\w\\s./\\-_]+$')"  # Only allow safe path characters, prevent command injection
          run:
            command: |
              du -h --max-depth={{ .max_depth }} {{ .directory }} | sort -hr | head -20
          output:
            prefix: |
              Disk Usage Analysis (Top 20 largest directories):
    

    看看 示例目录 以获取更复杂和有用的示例。 也许你更喜欢让LLM知道你的Kubernetes集群 kubectl 的? 或者让它运行一些 AWS-CLI 命令?

  2. 在Cursor(或任何其他支持MCP的LLM客户端)中配置MCP服务器

    例如,对于Cursor,创建 .cursor/mcp.json:

    {
        // you need the "go" command available
        "mcpServers": {
            "mcp-cli-examples": {
                "command": "go",
                "args": [
                   "run", "github.com/inercia/MCPShell@v0.1.8",
                   "mcp", "--tools", "/my/example.yaml",
                   "--logfile", "/some/path/mcpshell/example.log"
                ]
            }
        }
    }
    

    您还可以使用相对路径并省略 .yaml 扩展名:

    {
        "mcpServers": {
            "mcp-cli-examples": {
                "command": "go",
                "args": [
                   "run", "github.com/inercia/MCPShell@v0.1.8",
                   "mcp", "--tools", "example",
                   "--logfile", "/some/path/mcpshell/example.log"
                ]
            }
        }
    }
    

    这将寻找 example.yaml 在工具目录中(~/.mcpshell/tools/ 默认情况下)。

    查看有关如何配置的更多详细信息 光标 或 Visual Studio Code其他支持MCP的LLM 应该以类似的方式配置。

  3. 确保您的MCP客户端已刷新(Cursor应自动识别它) 第一次,但配置文件中的任何更改都需要刷新)。

  4. 问你的法学硕士一些问题,它应该能够用新工具回答。例如: “我的硬盘空间不足。你能帮我找到问题吗?”.

使用和配置

查看中的所有命令 本文件.

配置文件使用定义的YAML格式 这里. 请参阅 这个目录 举几个例子。

要在容器和Kubernetes中部署MCPShell,请参阅 容器部署指南.

代理模式

有关将LLM直接连接到工具的AI代理功能,请参阅 唐 项目。唐提供:

  • 无需单独的MCP客户端即可直接连接LLM
  • RAG(检索增强生成)支持
  • 多代理架构
  • 使用MCPShell的工具配置格式

安全考虑

所以你可能会觉得 “这个人工智能帮助我找到了所有这些大文件。如果我创建另一个删除文件的工具呢?”. 不要那样做!.

  • 将这些工具的范围限制在 只读操作,不要赋予法学硕士改变事物的权力。
  • 使用 约束 将命令执行限制为安全参数
  • 考虑使用 沙盒环境 用于运行命令。
  • 检查所有命令模板是否存在潜在的注入漏洞
  • 仅暴露可安全外部使用的工具
  • 以上所有!

请阅读 安全考虑 在使用此软件之前,请先记录。

贡献

欢迎投稿!看看 开发指南. 请在GitHub上打开问题或提交拉取请求。

许可证

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