Skill-Embedded MCP 按需加载
Skill-Embedded MCP 按需加载
学习目标
- 理解 Skill-Embedded MCP 与传统常驻 MCP 的对比
- 掌握 MCP 生命周期管理机制
- 识别 MCP 启动失败的降级策略
前置知识
本章涉及 MCP 协议和 Skill 设计的通用原理,建议先阅读:
下文假设你已理解 MCP 协议和 Skill 概念,直接聚焦 Oh-My-OpenAgent 的具体实现。
项目实践
三层 MCP 系统
Oh-My-OpenAgent 的 MCP 系统分为三层:
| 层级 | 来源 | 生命周期 | 示例 |
|---|---|---|---|
| 内置远程 MCP | 插件注入 | 常驻 | websearch (Exa)、context7 (官方文档)、grep_app (GitHub 搜索) |
.mcp.json 加载 | 用户配置 | 常驻 | Playwright、自定义工具 |
| Skill-Embedded MCP | SKILL.md frontmatter | 按需 | git-master 的 commit 分析、playwright 的浏览器控制 |
Skill-Embedded MCP 的工作流程
- 声明:Skill 的
SKILL.mdfrontmatter 中声明所需 MCP 服务器 - 解析:Skill MCP Manager 在 Skill 激活时解析 MCP 声明
- 启动:按需启动 MCP 服务器进程
- 注入:将工具注入当前 session 的工具集
- 执行:Agent 使用 Skill 工具完成工作
- 关闭:任务完成后关闭 MCP 服务器,从工具集移除
关键组件:
src/features/skill-mcp-manager/:生命周期管理src/tools/skill-mcp/:Skill MCP 工具定义
上下文预算节省
传统常驻 MCP 的问题:每个 MCP 服务器的工具描述(名称 + 描述 + 参数 schema)都注入到系统提示中。10 个 MCP 服务器可能增加数千 token 的开销。
Skill-Embedded MCP 的优势:仅激活 Skill 时,对应 MCP 的工具描述出现。非激活 Skill 的工具描述为零开销。
内置 Skill 及其 MCP
| Skill | MCP 服务器 | 触发场景 |
|---|---|---|
| git-master | 内置 git 工具 | commit、rebase、squash、历史查询 |
| playwright | Playwright MCP | 浏览器自动化、截图、测试 |
| agent-browser | agent-browser CLI | 导航、快照、网络检查 |
| frontend-ui-ux | 无(纯 prompt 注入) | UI/UX 设计任务 |
| review-work | 后台 Agent 编排 | 实施后审查 |
问题与规避
MCP 启动延迟
问题:首次激活 Skill 时需要启动 MCP 服务器,增加响应延迟。
规避:
- MCP 服务器启动超时设置(默认 30 秒)
- 启动失败时降级为 Skill 可用但 MCP 工具不可用
进程泄漏
问题:任务完成后 MCP 服务器进程未被正确关闭,持续占用资源。
规避:
- Skill MCP Manager 跟踪所有活跃的 MCP 进程
- 定时清理超时的进程
- session 结束时关闭所有 MCP 服务器
设计取舍
按需启动 vs 预热启动
| 方案 | 优势 | 代价 |
|---|---|---|
| 按需启动 | 零闲置资源、上下文干净 | 首次激活有延迟 |
| 预热启动 | 响应快 | 闲置资源、上下文膨胀 |
Oh-My-OpenAgent 的选择:按需启动,因为 Skill 的使用频率通常较低,预热的收益有限。