English | 中文
Claude Code 的扩展点为什么不是一个单一“插件接口”,而是 MCP、hooks、builtin plugins 三套机制并存?
l3-tool-systeml6-advanced
main.tsxplugins/builtinPlugins.tsutils/hooks/hookHelpers.tsutils/hooks/execAgentHook.tscomponents/mcp/*
mcpcreateStructuredOutputToolregisterStructuredOutputEnforcementgetBuiltinPluginsexecAgentHook
- MCP 解决的是“把外部能力接进来”
- hooks 解决的是“在生命周期节点插入行为”
- plugins 解决的是“把 skills/hooks/mcp 作为一组可开关功能分发”
main.tsx:大量 MCP 初始化与 CLI 入口逻辑plugins/builtinPlugins.ts:builtin plugin registry 与启用/禁用策略utils/hooks/hookHelpers.ts:createStructuredOutputTool与 structured output enforcementutils/hooks/execAgentHook.ts:hook 通过query()运行一个受限 agent
这层的重点不是“Claude Code 支持很多扩展”,而是“不同扩展问题用不同抽象”。如果都压成一个 plugin API,系统会更统一,但边界会更糊;Claude Code 选择了把能力按职责拆开。
- MCP、hook、plugin 三者分别像“能力接入”“生命周期拦截”“功能打包”中的哪一种?
- 为什么 hook 也会用到
SyntheticOutputTool? - 如果你要接入一个外部服务,优先考虑 MCP 还是 plugin,为什么?