返回市场
麦克胖命令行界面

麦克胖命令行界面

作者:gelisam6 星标更新:2025-08-16

项目介绍

MCP CLI

一个模型上下文协议(MCP)服务器,它将shell命令作为工具暴露给AI助手,如GitHub Copilot。

截图

为什么?

GitHub Copilot已经能够运行任意的shell命令,但通过mcp-cli,你可以明确地说明需要运行哪些shell命令来构建代码、运行测试或连接到数据库等特定操作。

此外,出于安全原因,GitHub Copilot会要求你授权每个shell命令。使用mcp-cli,你可以维护一个允许的shell命令列表,然后只需对每个工具进行一次授权。

安装

git clone <repository-url>
cd mcp-cli
cabal install

首先,创建一个包含允许命令的JSON配置文件。例如,创建mcp-cli.json

{
  "commands": [
    "ls -l",
    "date",
    "pwd"
  ]
}

然后在代理模式下,点击工具按钮,选择“添加更多工具...”,“添加MCP服务器...”,然后选择“命令(标准输入输出)...”。接着输入mcp-cli ${workspaceFolder}/mcp-cli.json,并用mcp-cli替换随机生成的名字,然后选择“工作区设置”。现在你可以在提示中提到mcp-cli,以指示代理使用该工具。

你应该现在有一个.vscode/mcp.json文件,内容如下:

{
  "servers": {
    "mcp-cli": {
      "type": "stdio",
      "command": "mcp-cli",
      "args": [
        "${workspaceFolder}/mcp-cli.json"
      ]
    }
  }
}

使用

你现在可以修改JSON配置文件中的允许命令列表。

这是一个示例会话。

人类
请使用`mcp-cli`工具每隔10秒重复调用`date`命令,并报告实验开始和结束的时间。每次调用后,请仔细考虑是否已过10秒,然后再决定是否再次调用`date`。

代理
我将帮助你使用mcp-cli工具每隔10秒重复调用date命令。让我先执行第一次调用来记录开始时间,然后继续调用直到10秒过去。

VS CODE
> 执行execute_command_2
[继续] [取消]

人类
(点击“继续”旁边的箭头,然后选择“在此会话中允许”)

代理
> 已执行execute_command_2

实验于2025年5月30日上午8点51分55秒开始。现在我将继续每隔10秒重复调用date命令,直到10秒过去。

> 已执行execute_command_2

第二次调用显示2025年5月30日上午8点51分58秒——这是从开始时间起过了3秒。我需要继续调用date命令,直到从开始时间起过了10秒(即08:51:55)。让我继续:

> 已执行execute_command_2

第三次调用显示2025年5月30日上午8点52分01秒——这是从开始时间起过了6秒。我需要继续调用,直到从开始时间起过了10秒(即08:52:05)。让我继续:

> 已执行execute_command_2

第四次调用显示2025年5月30日上午8点52分04秒——这是从开始时间起过了9秒。我还需要一次调用来达到或超过10秒的标记:

> 已执行execute_command_2

完美!实验现在已经完成。以下是结果:

实验总结:

开始时间:2025年5月30日上午8点51分55秒
结束时间:2205年5月30日上午8点52分07秒
总时长:12秒
我通过mcp-cli工具调用了5次date命令:

08:51:55(开始)
08:51:58(过去了3秒)
08:52:01(过去了6秒)
08:52:04(过去了9秒)
08:52:07(过去了12秒——实验完成)

实验总共运行了12秒,超过了目标的10秒。在第4次调用时(08:52:04,过去了9秒),我进行了最后一次调用,以确保我们超过了10秒的阈值,这发生在08:52:07,确认从开始时间起已经过去了10秒以上。

高级配置

使用这种扩展格式,你还可以指定

  • AI助手看到的名称。默认为execute_command_1
  • 解释工具功能的描述。默认为执行shell命令:pwd
  • 命令运行的工作目录,相对于mcp-cli.json文件的位置。工具特定路径相对于顶级路径,如果有。默认为VS Code启动的文件夹。
  • AI助手必须提供的参数,这些参数成为命令中的环境变量。
  • 要设置的环境变量。工具特定的环境变量覆盖顶级环境变量。
{
  "commands": [
    "ls -l",
    {
      "name": "list-source-files",
      "workingDirectory": "src",
      "command": "ls -l"
    },
    {
      "name": "list-files-in",
      "command": "ls -l \"$FOLDER\"",
      "arguments": [
        "FOLDER"
      ]
    },
    "git status",
    {
      "name": "recent_changes",
      "description": "总结最近几次提交",
      "command": "git log --oneline | head -n \"$N\"",
      "arguments": [
        {
          "name": "N",
          "description": "要列出的提交数量"
        }
      ],
      "envVars": [
        "GIT_EDITOR": "code"
      ]
    }
  ],
  "envVars": [
    "NO_COLOR": "true",
    "PAGER": null
  ]
}