交互式终端服务器

MCP交互式终端服务器允许代理与命令行驱动的提示符交互,适用于自动化和管理交互式终端命令,如gdb、UART控制台或其他基于REPL的工具。

  • by danielp370-msft
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 danielp370-msft/mcp_interactive_terminal

使用说明

MCP交互式终端服务器

概述

MCP交互式终端服务器允许代理与命令行驱动的提示进行交互。这对于自动化和管理交互式终端命令(如gdb、UART控制台或任何其他基于REPL的工具)非常有用。它使用FastMCP包构建,提供了管理交互式终端会话的工具,并符合最新的MCP标准。该服务器支持FastMCP提供的三种传输选项:stdio(默认)、sse和流式http,使其适用于各种用例。

安装

先决条件

  1. Python 3.12或更高版本 确保您的系统上安装了Python 3.12或更高版本。

  2. 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代码

  1. 在VS Code中打开项目。

  2. 确保 .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/"
        }
      }
    }
    
  3. 使用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
    

交互式终端工具

服务器提供以下工具:

  1. 开始会话:

    • 描述:通过调用shell命令启动新的交互式会话。
    • 参数:
      • command (str):启动会话的命令(例如。, python).
      • args (list):命令的参数。
      • log_file (str,可选):将写入会话输出的日志文件的路径。如果不提供,则不会进行日志记录。
    • 退货:带有会话ID的消息。
  2. 等待输出或提示:

    • 描述:等待特定输出、提示或在超时内收集输出。
    • 参数:
      • session_id (int):要监视的会话的ID。
      • prompts (list):输出中要检测的字符串列表(例如,提示或特定文本)。
      • timeout (int):等待输出的最长时间,以秒为单位。
    • 退货:指示检测到的输出的消息,或者如果找不到匹配项,则显示超时消息。
    • 备注:此函数也可用于检索当前输出缓冲区。
  3. 发送命令:

    • 描述:向交互式会话发送命令。
    • 参数:
      • session_id (int):会话ID。
      • command (str):要发送的命令。
    • 退货:表示成功或失败的消息。
  4. 退出会话:

    • 描述:终止交互会话。
    • 参数:
      • session_id (int):要终止的会话的ID。
    • 退货:指示会话终止状态的消息。
  5. 获取活动会话:

    • 描述:检索所有活动交互会话的列表。
    • 退货:包含会话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)的帮助下生成的。