大模型应用
串联多个 MCP 工具做「研究→实现」流水线并容错降级时使用
需要把多个 MCP 工具按顺序串成端到端流水线、且希望个别工具不可用时仍能继续执行时,用这套链式调用 + 优雅降级模式。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
串联多个 MCP 工具做「研究→实现」流特定
解决思路
- 按 `server__tool` 命名约定依次串联 5 个步骤:`nia__search` 搜库文档 → `ast-grep__find_code` 查 AST 代码模式 → `morph__warpgrep_codebase_search` 快速搜索代码库 → `qlty__qlty_check` 做代码质量校验 → `git__git_status` 执行 Git 操作。
- 主流水线实现放在 `scripts/research_implement_pipeline.py`;测试用 `scripts/test_research_pipeline.py`(带隔离沙箱);测试样例代码放 `workspace/pipeline-test/sample_code.py`。
- 用 dry-run 预览计划而不改动任何东西:`uv run python -m runtime.harness scripts/research_implement_pipeline.py --topic "async error handling python" --target-dir "./workspace/pipeline-test" --dry-run --verbose`。
- 运行测试:`uv run python -m runtime.harness scripts/test_research_pipeline.py --test all`。
- 查看流水线脚本:`cat scripts/research_implement_pipeline.py`。
- 修复环境变量丢失问题:MCP SDK 的 `get_default_environment()` 只含 PATH、HOME 等基础变量,不含 `os.environ`;在 `src/runtime/mcp_client.py` 的 `_connect_stdio` 方法里改为传完整环境 `full_env = {**os.environ, **(resolved_env or {})}`,确保 `~/.claude/.env` 里的 API key 能到达子进程。
- 实现优雅降级:写 `async def check_tool_available(tool_id)`,用 `server_name = tool_id.split("__")[0]` 取服务名,再 `manager._config.get_server(server_name)` 取配置,若配置不存在或 `disabled` 就返回 False;在每个步骤函数开头判断,不可用则返回 `StepResult(status=StepStatus.SKIPPED, message="Nia not available")` 让流水线继续。
- 流水线架构:CLI 参数(topic、dir)→ `PipelineContext` 保存共享状态 → 各步骤并行/顺序执行 → 聚合为 `StepResult[]`。
- 错误处理:用 `try/except` 包住 `call_mcp_tool("nia__search", {"query": topic})` 之类的调用,捕获异常后把错误追加到 `ctx.errors`,并返回 `StepResult(status=StepStatus.FAILED, error=str(e))`,避免单步失败导致整条流水线中断。
- 自建流水线时:复制 `scripts/research_implement_pipeline.py` 的模式;把每个步骤定义成 async 函数;用 `check_tool_available()` 做降级;通过 `PipelineContext` 串联各步结果;用 `print_summary()` 聚合输出。
- 工具名参考:`nia` 提供 `nia__search`/`nia__nia_research`/`nia__nia_grep`/`nia__nia_explore`;`ast-grep` 提供 `ast-grep__find_code`/`ast-grep__find_code_by_rule`/`ast-grep__scan_code`;`morph` 提供 `morph__warpgrep_codebase_search`/`morph__edit_file`;`qlty` 提供 `qlty__qlty_check`/`qlty__qlty_fmt`/`qlty__qlty_metrics`/`qlty__smells`;`git` 提供 `git__git_status`/`git__git_diff`/`git__git_log`/`git__git_add`。
适用边界 · 注意事项
- 依赖 nia、ast-grep、morph、qlty、git 这些具体 MCP 服务器及 `~/.claude/.env` 中的 API key,未配置对应工具时无法直接照搬。
- 不适用于只调用单个工具的一次性任务,此时串联流水线只会增加复杂度。