管道工具包
一个交互式、富功能的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-toolkitptk
环境变量
设置所需的环境变量:
# 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: :: 日志记录
- 每次启动时,日志文件都会被截断。
- 默认路径:
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
logs/pipeline_bot.log or config.log_file")]
end
CLI --> LOG
STDIO -. "stderr" .-> LOG- CLI加载配置、连接到MCP服务器、列出工具并编排调用。
- Gemini代理计划调用哪个工具,并从工具输出中生成最终答案。
- stdio服务器stderr被重定向到日志文件;日志在每次开始时都会被截断。
