一个模型上下文协议(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秒以上。
使用这种扩展格式,你还可以指定
execute_command_1。执行shell命令:pwd。mcp-cli.json文件的位置。工具特定路径相对于顶级路径,如果有。默认为VS Code启动的文件夹。{
"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
]
}