MCP_SKILLS — MCP 技能发现
Feature Flag: FEATURE_MCP_SKILLS=1
实现状态:功能性实现(config 门控筛选器完整,核心 fetcher 为 stub)
引用数:9
一、功能概述
MCP_SKILLS 将 MCP 服务器暴露的资源(skill:// URI 方案)发现并转换为可调用的技能命令。MCP 服务器可以同时提供 tools、prompts 和 resources;启用此 feature 后,带有 skill:// URI 的资源被识别为技能。
核心特性
- 自动发现:MCP 服务器连接时自动获取
skill://资源 - 命令转换:将 MCP 资源转换为
prompt类型的 Command 对象 - 实时刷新:prompts/resources 列表变化时重新获取技能
- 缓存一致性:连接关闭时清除技能缓存
二、实现架构
2.1 数据流
2.2 技能筛选
文件:src/commands.ts:604-616
getMcpSkillCommands(mcpCommands) 过滤条件:
2.3 条件加载
文件:src/services/mcp/client.ts:129-133
fetchMcpSkillsForClient 通过 require() 条件加载,feature flag 关闭时不加载任何模块:
2.4 缓存管理
技能获取函数维护.cache(Map),在以下时机清除:
2.5 集成点
三、关键设计决策
- Feature gate 隔离:
feature('MCP_SKILLS')守护条件require()和所有调用点。关闭时无模块加载、无获取操作 - 资源到技能映射:技能从 MCP 服务器的
skill://URI 资源中发现。fetchMcpSkillsForClient负责转换(当前为 stub) - 循环依赖避免:
mcpSkillBuilders.ts作为依赖图叶节点,避免client.ts ↔ mcpSkills.ts ↔ loadSkillsDir.ts循环 - 服务器能力检查:技能获取还需要 MCP 服务器支持 resources (
!!client.capabilities?.resources)