使用说明
MCP交互式终端服务器
概述
MCP交互式终端服务器允许代理与命令行驱动的提示进行交互。这对于自动化和管理交互式终端命令(如gdb、UART控制台或任何其他基于REPL的工具)非常有用。它使用FastMCP包构建,提供了管理交互式终端会话的工具,并符合最新的MCP标准。该服务器支持FastMCP提供的三种传输选项:stdio(默认)、sse和流式http,使其适用于各种用例。
安装
先决条件
-
Python 3.12或更高版本 确保您的系统上安装了Python 3.12或更高版本。
-
UV星光包管理器 UV Astral是一个可选的包管理器,用于处理依赖关系。如果你使用它,它只会为Python提供你需要的依赖项。如果调用需要其他依赖项的命令,可以将它们添加到UV依赖项中,以便它们也被加载。如果环境设置为直接提供所有包装,则最好在下游包装中这样做,或者不使用紫外线。
使用以下方法之一安装UV:
- 独立安装程序:
curl -LsSf https://astral.sh/uv/install.sh | sh - 管道安装:
pip install uv
验证安装:
uv --version - 独立安装程序:
为UV星光添加依赖关系
如果您使用UV Astral作为包管理器,则可以选择将Python和其他依赖项添加到其配置中。有关管理UV Astral依赖关系的详细说明,请参阅 UV Astral官方文档.
克隆存储库
将存储库克隆到本地计算机:
git clone https://github.com/danielp370-msft/mcp_interactive_terminal
cd mcp_interactive_terminal
用法
运行服务器
使用VS代码
-
在VS Code中打开项目。
-
确保
.vscode/mcp.json文件配置正确。您可以使用以下示例之一:示例1:使用uv(包管理器)
{ "servers": { "interactive-terminal-server": { "type": "stdio", "command": "uv", "args": ["run", "${workspaceFolder}/interactive/server.py"] } } }示例2:直接使用python(当前默认)
{ "servers": { "interactive-terminal-server": { "type": "stdio", "command": "python3.13", "args": ["${workspaceFolder}/interactive/server.py"] } } }示例3:使用流式http传输
{ "servers": { "interactive-terminal-server": { "type": "http", "url": "http://localhost:8070/mcp/" } } } -
使用VS Code中的MCP接口启动服务器。
使用命令行
注: 如果使用非stdio传输选项(如
streamable-http)或者如果你想在VS Code之外运行它。对于stdio,VS Code MCP接口可以自动启动服务器。
-
标准传输(默认):
uv run python -m interactive.server您也可以在没有
uv如果你想使用运行时环境提供的包:python -m interactive.server -
可流式HTTP传输:
uv run python -m interactive.server --transport streamable-http --port 8070或者没有
uv:python -m interactive.server --transport streamable-http --port 8070
交互式终端工具
服务器提供以下工具:
-
开始会话:
- 描述:通过调用shell命令启动新的交互式会话。
- 参数:
command(str):启动会话的命令(例如。,python).args(list):命令的参数。log_file(str,可选):将写入会话输出的日志文件的路径。如果不提供,则不会进行日志记录。
- 退货:带有会话ID的消息。
-
等待输出或提示:
- 描述:等待特定输出、提示或在超时内收集输出。
- 参数:
session_id(int):要监视的会话的ID。prompts(list):输出中要检测的字符串列表(例如,提示或特定文本)。timeout(int):等待输出的最长时间,以秒为单位。
- 退货:指示检测到的输出的消息,或者如果找不到匹配项,则显示超时消息。
- 备注:此函数也可用于检索当前输出缓冲区。
-
发送命令:
- 描述:向交互式会话发送命令。
- 参数:
session_id(int):会话ID。command(str):要发送的命令。
- 退货:表示成功或失败的消息。
-
退出会话:
- 描述:终止交互会话。
- 参数:
session_id(int):要终止的会话的ID。
- 退货:指示会话终止状态的消息。
-
获取活动会话:
- 描述:检索所有活动交互会话的列表。
- 退货:包含会话ID及其状态的字典。
开始会话
您可以使用启动新会话 start_session 工具。
start_session(command: str, args: list, log_file: str = None)
command:启动交互式会话的命令(例如“python”)。args:要传递给命令的参数列表。log_file:用于写入会话输出的可选日志文件。
例子:
start_session("python", ["-i"])
这将启动一个Python交互式会话。
测试
运行单元测试以验证服务器的功能:
uv run python3 -m unittest
参考文献
致谢
该产品是在Daniel Potts的帮助下编写的,他特别感谢AI不断地进行交互式测试,他是质量保证(和耐心)的拥护者。没有人直接编写任何代码、文档,甚至懒得帮助推进这个项目的PR。所有代码和文档都是在GitHub Copilot(OpenAI GPT-4)的帮助下生成的。
