\uD83D\uDD0C

插件与扩展

Claude Code 的三大扩展机制 —— Plugins、Skills、MCP,打造无限可能的 AI 编程生态

核心架构

扩展系统概述

三大机制构建可扩展的 AI 编程平台

Claude Code 的扩展性建立在三大核心机制之上:Plugins(插件系统)提供结构化的扩展能力,Skills(技能系统)支持可复用的提示词模板,MCP(Model Context Protocol)实现标准化的外部工具连接。 三者协同工作,让 Claude Code 从一个封闭的 AI 工具变成一个开放的编程平台。

这三种机制各司其职:插件系统负责注册新的工具和命令,技能系统让用户共享最佳实践, MCP 协议则打通了 AI 与外部世界的数据通道。通过组合使用这些机制, 开发者可以打造完全定制化的 AI 编程体验。

扩展系统架构

PluginsSkillsPlugin RegistrySkill RegistryHooks SystemExecution EngineMCP ProtocolMCP Server Registry

插件系统

结构化的扩展能力与沙箱执行

插件是 Claude Code 最强大的扩展机制。每个插件都可以注册自定义工具、命令、钩子和技能, 拥有完整的生命周期管理。插件在沙箱环境中执行,配合细粒度的权限控制, 确保扩展代码不会影响系统的稳定性和安全性。

1
load加载阶段

从文件系统或注册表加载插件代码,解析元数据和依赖声明

2
initialize初始化阶段

执行插件的初始化逻辑,注册工具、命令、钩子等扩展点,建立运行时上下文

3
execute执行阶段

在沙箱环境中运行插件注册的工具和命令,受权限系统约束,支持并发安全调度

4
cleanup清理阶段

卸载插件时执行清理逻辑,释放资源、移除注册的扩展点、恢复系统状态

Plugin 生命周期与扩展点

registerregistername / versionLifecycle HooksExtension PointsonLoad()onInit()onCleanup()tools[]commands[]hooks[]skills[]SandboxPermissions
沙箱执行

插件代码在受限的沙箱环境中运行,隔离文件系统和网络访问,防止恶意操作

权限控制

每个插件操作都经过权限检查,用户可以细粒度控制插件的能力范围

内置插件

Claude Code 捆绑了多个官方插件,开箱即用,涵盖常见开发场景

技能系统

可复用的提示词模板与工作流

技能(Skills)是 Markdown 格式的提示词模板,包含元数据头部和提示词正文。 用户可以通过斜杠命令(如 /commit)快速触发技能执行。 技能系统支持变量替换和模板语法,让提示词可以根据上下文动态调整。

技能的核心价值在于将最佳实践封装为可复用的单元。开发者可以创建自己的技能, 也可以与团队和社区共享。一个精心设计的技能可以将复杂的操作流程简化为一条命令。

Skill 结构:Frontmatter → Prompt → 变量替换

skill.mdYAML Frontmattername: committrigger: /commitPrompt Bodygit statusgit diff --staged分析变更生成 commit msg$FILE_PATHVariable SubstitutionExecution Engine
Markdown 格式

技能使用 Markdown 编写,元数据通过 YAML front matter 定义。开发者无需学习新语法,上手成本极低。提示词正文支持所有 Markdown 格式,包括代码块、列表和标题。

变量替换

技能模板支持变量占位符,在执行时动态替换为实际值。例如 $FILE_PATH、$SELECTION 等内置变量,让同一个技能可以在不同上下文中复用。

用户创建与共享

任何用户都可以创建自定义技能,放入 .claude/skills/ 目录即可生效。技能可以通过 Git 仓库分享,团队可以维护共享的技能库以确保一致性。

斜杠命令触发

技能通过斜杠命令触发,Claude 会自动匹配技能名称并执行对应的提示词。用户也可以通过 Tab 键自动补全可用的技能列表。

MCP 协议

Model Context Protocol —— 连接 AI 与外部世界的标准化协议

MCP(Model Context Protocol)是 Claude Code 连接外部工具和数据源的标准化协议。 它定义了一套统一的通信规范,让 Claude 能够通过一致的接口访问数据库、API、文件系统等外部资源, 而无需为每种外部服务编写专门的集成代码。

MCP 的核心思想是将 AI 与外部世界的连接标准化。任何实现了 MCP 协议的服务端都可以被 Claude Code 直接发现和使用,就像 USB 协议让任何设备都能连接到计算机一样。 这极大地降低了扩展 Claude Code 能力边界的技术门槛。

MCP 通信架构

stdio/SSEClaude CodeMCP ClientMCP ServerExternal APIsDatabasesFile Systems

MCP 配置与服务器管理

MCP 服务器通过配置文件声明式注册。每个服务器指定启动命令、参数和环境变量, Claude Code 会在需要时动态加载并管理这些服务器的生命周期。 新增的 MCP 服务器需要经过用户审批才能启用,确保安全性。

MCP 服务器配置

commandcommandcommandsettings.jsonmcpServersfilesystemgithubpostgresnpx server-filesystemnpx server-githubnpx server-postgresenv / args
动态加载

MCP 服务器按需启动,不需要时自动关闭。Claude Code 负责管理服务器的完整生命周期,包括启动、健康检查、重连和关闭。

审批流程

新增的 MCP 服务器需要用户明确批准才能启用。审批信息包括服务器的来源、请求的权限和提供的工具列表,确保用户知情并同意。

OAuth 与 API Key

MCP 支持 OAuth 2.0 和 API Key 两种认证方式。敏感凭据通过环境变量注入,不会出现在对话历史中,保障安全性。

官方注册表

Anthropic 维护了官方 MCP 服务器注册表,用户可以一键发现和安装经过验证的 MCP 服务器,无需手动编写配置。

MCP Resources 与 MCP Tools

MCP 定义了两种核心能力:Resources(资源) 和 Tools(工具)。 Resources 让 Claude 能够读取外部数据源的内容(如数据库记录、API 响应), Tools 则让 Claude 能够调用外部函数执行操作(如写入数据库、发送通知)。

MCP Resources

只读的数据访问接口。Claude 可以通过 Resources 读取外部系统的数据,如数据库表结构、API 文档、文件内容等。Resources 的内容会作为上下文注入到对话中。

示例: 数据库 Schema、API 响应、配置文件、日志文件
MCP Tools

可执行的函数调用接口。Claude 可以通过 Tools 调用外部系统的功能,如创建 GitHub Issue、发送 Slack 消息、执行 SQL 查询等。每个 Tool 都有明确的输入 Schema。

示例: 创建 Issue、发送消息、执行查询、触发部署

钩子系统

工具调用的前置/后置拦截器

钩子(Hooks)是 Claude Code 的拦截器机制,允许在工具调用前后执行自定义逻辑。 每个钩子可以匹配特定的工具,在工具执行前进行安全检查或参数验证(PreToolUse), 在工具执行后进行格式化或触发后续操作(PostToolUse)。 钩子通过外部命令实现,与 Claude Code 的核心逻辑完全解耦。

Hook 类型与匹配规则

commandcommandcommandcommandhooks configPreToolUsePostToolUsematcher: BashToolmatcher: FileWritesecurity-checkvalidate-pathmatcher: FileWritematcher: FileEditeslint --fixprettier --write

钩子执行流程

工具调用触发1. 匹配钩子按事件类型 + 工具名2. 执行钩子命令子进程 + 环境变量注入3. 处理结果exitCode != 0 → denyexitCode == 0 → allow4. 超时保护 (30s)

创建自定义扩展

从零开始构建你的第一个插件

创建一个 Claude Code 插件只需要实现 Plugin 接口并导出。 以下流程展示了从定义到注册的完整过程,涵盖元数据声明、生命周期钩子、 工具注册和命令注册四个核心环节。

插件创建流程

创建项目结构.claude/plugins/my-plugin/实现 Plugin 接口name + versiononLoad / onInit / onCleanup注册工具与命令Tool + Zod SchemaCommand + handler配置与测试settings.json 注册验证插件功能

开发步骤

1
创建项目结构

在 .claude/plugins/ 目录下创建插件文件夹,包含 index.ts 入口文件和 package.json 配置

2
实现 Plugin 接口

导出一个满足 Plugin 接口的对象,声明插件名称、版本,并实现需要的生命周期方法和扩展点

3
注册工具与命令

在 tools 和 commands 数组中定义插件提供的工具和命令,每个工具需要提供 Zod 输入 Schema 和执行函数

4
配置与测试

在 settings.json 中注册插件路径,重启 Claude Code 加载插件,通过调用工具验证功能是否正常

插件配置结构

settings.jsonpluginsmy-pluginpath: ./plugins/...enabled: truepermissionsallowTools: [my_tool]allowCommands: [my-cmd]

MCP 协议交互流程

从初始化到工具调用的完整通信序列

MCP 协议采用请求-响应模式,Claude Code 与 MCP Server 之间通过 stdio(子进程管道)或 SSE(HTTP Server-Sent Events)进行通信。 整个交互流程从握手初始化开始,经过能力协商、工具发现,最终完成工具调用。

MCP 完整交互流程

请求响应请求Claude CodeMCP Server1. initialize2. capabilities3. tools/list4. tool 列表5. tools/call6. 执行结果stdio / SSE
stdio 通信

通过子进程的标准输入/输出进行通信,适用于本地 MCP Server。Claude Code 启动 Server 子进程,通过 stdin 发送请求、stdout 接收响应。低延迟、简单可靠。

SSE 通信

通过 HTTP Server-Sent Events 进行通信,适用于远程 MCP Server。客户端通过 POST 发送请求,服务器通过 SSE 流推送响应。支持网络部署和负载均衡。

Skills + Plugins + MCP 关系

三大扩展机制的协作关系

Plugins、Skills 和 MCP 构成了 Claude Code 扩展体系的三层架构。Plugins 是最强大的扩展方式,可以注册工具、命令和钩子;Skills 是轻量级的提示词模板,通过斜杠命令触发;MCP 则是标准化的外部工具协议。 三者之间可以组合使用:Plugin 可以注册 Skills,也可以包装 MCP Servers,而 Skills 执行时可以调用底层 Tools。

扩展机制关系图

可以注册可以包装调用PluginsSkillsMCP注册 tools注册 commands注册 hooks注册 skills包装 MCP Servers/command 触发Markdown 模板stdioSSE外部工具Skills 通过 Tools 执行
Plugin → Skills

插件可以在初始化时注册多个 Skills,将复杂功能封装为斜杠命令,用户无需了解底层实现细节。

Plugin → MCP

插件可以包装一个或多个 MCP Server,为外部工具提供统一的权限控制和生命周期管理。

Skills → Tools

Skills 执行时通过底层 Tools 完成实际操作,提示词模板 + 工具调用 = 强大的自动化工作流。

源码参考

核心接口与配置示例

Plugin 接口定义

interface Plugin {
  /** 插件元数据 */
  name: string;
  version: string;
  description?: string;

  /** 生命周期钩子 */
  onLoad?(): Promise<void>;
  onInit?(ctx: PluginContext): Promise<void>;
  onCleanup?(): Promise<void>;

  /** 扩展点声明 */
  tools?: ToolDefinition[];
  commands?: CommandDefinition[];
  hooks?: HookDefinition[];
  skills?: SkillDefinition[];
}

MCP Server 注册配置

// claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@anthropic/server-filesystem", "/path/to/dir"],
      "env": { "NODE_ENV": "production" }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@anthropic/server-github"],
      "env": { "GITHUB_TOKEN": "ghp_xxx" }
    }
  }
}

Skill 文件格式示例

---
# .claude/skills/commit.md
name: commit
description: 生成规范的 Git commit message
trigger: /commit
---

## Commit Message 生成

1. 运行 `git status` 查看变更文件
2. 运行 `git diff --staged` 查看暂存内容
3. 分析变更类型 (feat|fix|docs|refactor|test)
4. 按照约定式提交规范生成 message

格式: <type>(<scope>): <subject>

变量: $FILE_PATH, $BRANCH_NAME