CLI工具包

一个交互式、功能丰富的CLI工具,通过Gemini AI代理连接多个MCP服务器,规划工具调用并生成结构化答案。

  • by ozanunsal
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ozanunsal/pipeline-toolkit

使用说明

管道工具包

一个交互式、富功能的CLI,连接到多个MCP服务器(SSE和stdio),使用Gemini AI代理计划工具调用,执行所选工具,并合成有用的结构化答案。

特性

  • 多服务器MCP客户端(SSE和stdio传输)
  • 通过Gemini(谷歌generativeai)自动规划工具
  • 从用户查询中提取参数(领域无关:测试农场、酿造、Jira、勘误表等)
  • 漂亮的CLI,有历史记录、自动补全、微调器和表格
  • 日志文件重定向(stdio stderr路由到文件,重新启动时被截断)
  • 内置命令:
    • list servers, list tools
    • show logs
    • clear, help, exit/quit

项目结构

repo/
  ├─ config/
  │   ├─ config.json             # your active configuration
  │   └─ config.json.example     # example configuration (copy to config.json)
  ├─ logs/
  │   └─ pipeline_bot.log        # log file (truncated on each start)
  ├─ src/
  │   ├─ ai_agent.py             # Gemini agent (planning + answer synthesis)
  │   ├─ cli.py                  # Interactive CLI (entry module for scripts)
  │   ├─ config.py               # Config loader & validation
  │   └─ mcp_client.py           # MCP client for SSE & stdio
  ├─ pyproject.toml              # packaging and entry points
  └─ README.md

需求

  • Python 3.13+
  • MCP Python客户端(mcp)
  • 丰富、快捷的工具包
  • 谷歌生成人工智能(google-generativeai)双子座特工

安装

在可编辑模式下安装:

pip install -e .
# or with uv
uv pip install -e .

这将安装CLI命令:

  • pipeline-toolkit
  • ptk

环境变量

设置所需的环境变量:

# Required for Gemini AI integration
export GEMINI_API_KEY="your-gemini-api-key-here"

您还可以创建 .env 在项目根目录中创建文件,或将这些文件添加到shell配置文件中(.bashrc, .zshrc等等)。

配置

创建 config/config.json (或从以下示例中复制)。该配置支持:

  • log_file (可选):绝对或 ~ 日志文件的路径。如果未设置,则默认为 logs/pipeline_bot.log.
  • gemini (可选):用于工具规划和答案生成的模型配置。从读取API密钥 GEMINI_API_KEY 环境变量。
  • mcp_servers:具有以下任一项的MCP服务器条目列表 sse 或 stdio 运输。

例子: config/config.json.example

{
  "log_file": "~/pipeline-toolkit.log",
  "gemini": {
    "_comment": "API key is read from GEMINI_API_KEY environment variable",
    "model": "gemini-2.0-flash-exp"
  },
  "mcp_servers": [
    {
      "name": "Testing Farm MCP Server",
      "connection_type": "sse",
      "url": "http://localhost:8000",
      "enabled": true,
      "description": "SSE-based Testing Farm MCP server"
    },
    {
      "name": "Errata MCP Server",
      "connection_type": "stdio",
      "command": "podman",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "MCP_TRANSPORT=stdio",
        "localhost/errata-mcp:latest"
      ],
      "working_directory": "/abs/path/to/errata-mcp",
      "enabled": false,
      "description": "Errata operations MCP server"
    },
    {
      "name": "Jira MCP Server",
      "connection_type": "stdio",
      "command": "podman",
      "args": [
        "run",
        "-i",
        "--rm",
        "--env-file",
        "~/.jira-mcp.env",
        "localhost/jira-mcp:latest"
      ],
      "enabled": false,
      "description": "Query Jira issues via MCP"
    },
    {
      "name": "Brew MCP Server",
      "connection_type": "stdio",
      "command": "python",
      "args": ["-m", "brew_mcp_server"],
      "enabled": false,
      "description": "Query Brew tags/builds"
    }
  ]
}

笔记:

  • ~ 和 $VARS 在……里面 command, args,以及 working_directory 自动扩展。
  • 对于容器化的stdio服务器,确保映像在本地可用,并使用绝对路径 --env-file.

用法

启动CLI:

pipeline-toolkit
# or
ptk

示例查询:

  • 信息请求:

    • “列出最新勘误表产品”
    • “brew标签rhel-9.4.0中的abc-1.2.3版本是否正确?”
    • “获取项目X的最新管道运行”
  • 故障分析:

    • “分析作业123e4567-e89b-12d3-a456-426614174000在测试场中失败的原因”
    • “根据此日志调查Jenkins管道错误: "

内置命令:

  • list servers –显示连接的MCP服务器
  • list tools –显示从服务器发现的工具
  • show logs –在控制台中显示当前日志文件
  • clear, help, exit/quit

在处理过程中,CLI会显示所选的服务器/工具(当代理计划时):

Calling tool: <Server Name> :: <tool_name>

日志记录

  • 每次启动时,日志文件都会被截断。
  • 默认路径: logs/pipeline_bot.log (自动创建)。覆盖:
    • log_file 在……里面 config.json,或
    • PIPELINE_TOOLKIT_LOG_DIR 环境变量(包含默认文件名的目录)。
  • Stdio服务器stderr被重定向到日志文件,而不是终端。

故障排除

  • “没有名为'src'的模块”:确保安装可编辑(pip install -e .).入口点期望在以下位置发现模块 src/ 通过 tool.setuptools.package-dir.
  • Stdio服务器未启动:
    • 验证 command 存在并且图像可用(podman run ...).
    • 使用绝对路径 --env-file 和 working_directory.
    • 检查 logs/pipeline_bot.log 对于错误。
  • 代理未计划工具:
    • 确保 GEMINI_API_KEY 设置环境变量。
    • 验证服务器是否公开工具(通过 list tools).

发展

更改后重新安装:

pip install -e .

构建(uv):

uv build

建筑

flowchart LR
  U["User"] -->|queries & commands| CLI["Interactive CLI (Rich + prompt-toolkit)"]
  CLI --> CFG["Config Loader (config.json)"]
  CLI --> AI["GeminiAgent (planning + answer synthesis)"]
  CLI --> MCP["MCP Client (SSE / stdio)"]

  subgraph Servers
    SSE["SSE Server(s)"]
    STDIO["stdio Server(s)"]
  end

  MCP -->|discover tools| CLI
  MCP -->|SSE| SSE
  MCP -->|stdio| STDIO

  AI <-->|tools inventory| CLI
  AI -->|plan server/tool/args| CLI
  CLI -->|call_tool server/tool/args| MCP
  MCP -->|tool result| CLI
  AI -->|final answer| CLI
  CLI -->|render answer| U

  subgraph Logging
    LOG[("Log File<br/>logs/pipeline_bot.log or config.log_file")]
  end

  CLI --> LOG
  STDIO -. "stderr" .-> LOG
  • CLI加载配置、连接到MCP服务器、列出工具并编排调用。
  • Gemini代理计划调用哪个工具,并从工具输出中生成最终答案。
  • stdio服务器stderr被重定向到日志文件;日志在每次开始时都会被截断。