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)的帮助下生成的。
