本文详细介绍 OpenCode 中三个核心概念的区别与使用方法:Agent(智能体)、Skills(技能)和 MCP(模型上下文协议),帮助你更好地理解和使用 OpenCode 的扩展能力。

# OpenCode 中 Agent、Skills 与 MCP 的区别与使用

在使用 OpenCode 进行开发时,我们经常会遇到三个核心概念:Agent、Skills 和 MCP。它们分别代表了不同的扩展机制,帮助 AI 助手获得更强的能力。本文将详细介绍这三者的区别与使用方法。

# 一分钟理解三者区别

概念 定位 作用 类比
Agent AI 助手 执行特定任务的智能体 员工 / 专家
Skills 指令集 提供任务相关的指导文档 手册 / 最佳实践
MCP 工具桥 连接外部服务和工具 USB 接口

# Agent(智能体)

# 权威定义

  • An AI agent 是一种以 large language model 作为推理引擎的 AI 系统,能够自主感知其环境、规划行动、使用工具,并执行多步任务以实现目标 —— 无需在每一步都有人类输入。
  • DeepMind(2022 ReAct 顶会论文):将大语言模型的推理能力与外部环境的行动能力结合,通过思考 - 行动 - 观察的迭代闭环,自主完成复杂目标的智能系统。
  • 核心定义:Agent 是具备感知、思考、决策、行动能力的自主智能实体,能够基于给定目标,自主调用工具和技能,完成复杂任务,不需要人类一步步指令。

# 底层本质

Agent 不是大模型本身,大模型只是 Agent 的「大脑」,Agent 是以 LLM 为核心的完整闭环系统。它解决了原生大模型的三大核心痛点:

  1. 知识截止:无法获取实时数据与最新信息
  2. 能力边界:无法与外部系统、数据源、硬件进行交互
  3. 复杂任务拆解:无法自主完成多步骤、长链路的确定性任务

# Agent 类型

OpenCode 中的 Agent 分为两类:

# Primary Agent(主智能体)

Primary Agent 是直接与用户交互的主要助手。OpenCode 内置两个 Primary Agent:

  • Build:默认的开发智能体,拥有所有工具权限,可以进行文件编辑、命令执行等操作
  • Plan:计划与分析智能体,默认限制编辑和 bash 权限,用于分析和规划而不实际修改代码

# Subagent(子智能体)

Subagent 是专门的助手,可以被主智能体调用执行特定任务。OpenCode 内置两个 Subagent:

  • General:通用任务智能体,可以执行多步骤的研究和任务
  • Explore:代码探查智能体,只能读取文件,用于快速搜索和理解代码库

# 使用 Agent

# 切换主智能体 - 使用 Tab 键循环切换
<Tab>
# 调用子智能体 - 使用 @ 提及
@explore 查找认证相关的代码

# 创建自定义 Agent

可以通过配置文件创建自定义 Agent:

{
  "agent": {
    "review": {
      "description": "代码审查智能体",
      "mode": "subagent",
      "tools": {
        "write": false,
        "edit": false,
        "bash": false
      }
    }
  }
}

或者创建 Markdown 格式的智能体(保存在 ~/.config/opencode/agents/.opencode/agents/ ):

---
description: 代码审查智能体
mode: subagent
tools:
  write: false
  edit: false
---
你是一个代码审查专家。专注于:
- 代码质量和最佳实践
- 潜在的 bug 和边缘情况
- 性能和安全问题

# Skills(技能)

# 权威定义

  • 官方定义(Agent Skills 官网)Agent Skills are folders of instructions, scripts, and resources that agents can discover and use to do things more accurately and efficiently.

# 底层本质

Skills 是 Agent 的「手脚」,是连接大模型语言理解能力与现实世界操作能力的唯一桥梁。没有 Skills 的 Agent,只能是「纸上谈兵」的文本生成器,无法完成任何需要实际操作的任务。

Skills 的 5 个核心标准特征(工业级落地必须严格遵守):

  1. 单一职责原则:一个 Skill 只完成一件明确的事,禁止复合功能封装。例如「查询指定城市实时天气」是合格的 Skill,「查天气 + 生成出行建议 + 发邮件」是不合格的复合 Skill。
  2. 标准化接口规范:必须有明确的入参、出参、异常处理规范,完全兼容 JSON Schema 与 OpenAI Function Calling 格式。
  3. 可被 LLM 理解:必须有清晰、无歧义的功能描述(Description),明确说明「该 Skill 的用途、适用场景、入参含义、限制范围」,这是 LLM 准确调度的核心前提。
  4. 可观测可追溯:必须包含完整的调用日志、执行耗时、结果状态、异常信息上报,支持 Agent 的决策闭环与问题排查。
  5. 无状态与幂等性:Skill 执行不依赖全局状态,相同入参多次执行的结果一致,避免 LLM 重试调用时出现数据不一致问题。

# Skill 文件位置

OpenCode 从以下位置发现 Skills:

  • 项目配置: .opencode/skills/<name>/SKILL.md
  • 全局配置: ~/.config/opencode/skills/<name>/SKILL.md
  • Claude 兼容: .claude/skills/<name>/SKILL.md~/.claude/skills/<name>/SKILL.md
  • Agent 兼容: .agents/skills/<name>/SKILL.md~/.agents/skills/<name>/SKILL.md

# 创建 Skill

创建 .opencode/skills/git-release/SKILL.md

---
name: git-release
description: 创建一致的发布和变更日志
license: MIT
compatibility: opencode
---
## 我能做什么
- 从合并的 PR 中起草发布说明
- 提出版本升级建议
- 提供可复制的 `gh release create` 命令
## 使用场景
当你准备标记发布时使用此技能。
如果目标版本方案不明确,请提出澄清问题。

# 使用 Skill

在对话中告诉 Agent 使用某个 Skill:

使用 git-release 技能帮我创建发布

# 配置 Skill 权限

可以在 opencode.json 中配置 Skill 权限:

{
  "permission": {
    "skill": {
      "*": "allow",
      "internal-*": "deny",
      "experimental-*": "ask"
    }
  }
}

权限说明:

  • allow :立即加载
  • deny :对 Agent 隐藏,拒绝访问
  • ask :加载前提示用户确认

# MCP(模型上下文协议)

# 权威定义

The Model Context Protocol(MCP) 是由 Anthropic 于 2024 年 11 月发布的一个开放标准,定义了连接 AI 模型到外部工具、数据源和服务的通用接口。在 MCP 之前,每个 AI 集成都需要定制的、一次性的实现。MCP 标准化了 AI 客户端与外部能力的通信方式 —— 因此一次集成即可适配任何兼容的 AI 系统。

  • 架构定义:MCP 是一种客户端 - 服务器协议 ——MCP 客户端是希望使用外部能力的 AI 系统(例如 Claude、Cursor、带 Copilot 的 VS Code),MCP 服务器是通过标准化 API 向外部能力(例如 GitHub、数据库、文件系统、浏览器)暴露这些能力的服务。
  • 官方定义MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems.

# 底层本质

MCP 不是工具、不是 Skill、不是插件,而是一套全球统一的「电网标准与插座规范」。

  • 类比:Skill 是电器,MCP 是国家统一的 220V 插座规范;无论你是哪个厂家、用什么技术生产的电器(Skill),只要符合插座规范(MCP),就能插到任何符合规范的插座(支持 MCP 的 Agent)上使用,无需单独适配。

MCP 诞生的核心背景:解决 Agent 生态的碎片化痛点

在 MCP 诞生之前,Agent 生态处于严重的碎片化状态:

  1. 每个 Agent 框架(LangChain、LlamaIndex、AutoGPT)都有自己的 Tool 定义规范,互不兼容
  2. Python 写的 Skill 无法被 Java 写的 Agent 调用,反之亦然,跨语言互操作成本极高
  3. 本地部署的 Skill 无法被云端 Agent 安全调用,环境隔离问题无法解决
  4. 开发者需要为每一个 Skill 单独编写适配代码,开发成本极高、扩展性极差

MCP 的出现,彻底解决了这些问题,为全球的 Agent 与 Skill 制定了一套统一的互操作标准。

# MCP 的核心设计原则(来自官方 v1.0 规范)

  1. 语言与运行时无关:无论 Skill 用 Java、Python、Go、Node.js 编写,只要符合 MCP 规范,就能被任何 Agent 调用
  2. 双向通信能力:既支持 LLM 向服务端发起 Skill 调用,也支持服务端向 LLM 推送事件、更新上下文
  3. 安全优先设计:内置细粒度权限控制、沙箱隔离、调用审计、签名校验,解决工具调用的核心安全问题
  4. 标准化能力模型:统一了 Tool(Skill)、上下文提示(Prompts)、资源(Resources)的定义规范,完全兼容 OpenAI Function Calling
  5. 轻量易实现:基于 JSON-RPC 2.0 标准,传输层支持 STDIO、HTTP、WebSocket,兼容性极强,开发成本极低

# MCP 的核心组件

  1. MCP Client:部署在 Agent 端,负责向 MCP Host 发起能力发现、Skill 调用请求,接收执行结果
  2. MCP Host:部署在 Skill 提供端,负责 Skill 的注册、暴露、请求校验、权限控制,转发请求给对应 Skill 执行
  3. MCP Protocol:基于 JSON-RPC 2.0 的标准化通信规范,定义了所有请求、响应、事件的格式

# MCP 能做什么?

通过 MCP,OpenCode 可以连接各种外部服务:

  • GitHub:Issue 管理、PR 操作、代码搜索
  • Playwright:浏览器自动化
  • Sentry:错误监控
  • Context7:文档搜索
  • 数据库:数据查询和操作
  • 等等

# MCP 类型

# Local(本地部署)

本地部署 MCP Server:

{
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

# Remote(远程部署)

连接远程 MCP Server:

{
  "mcp": {
    "github": {
      "type": "remote",
      "url": "https://api.githubcopilot.com/mcp/",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {file:~/.config/opencode/.secrets/github-pat}"
      }
    }
  }
}

# 使用 MCP

配置完成后,可以通过以下方式使用:

使用 github 列出我的所有仓库

或者在 AGENTS.md 中设置默认行为:

当你需要搜索文档时,使用 `context7` 工具。

# 常用 MCP Server

# GitHub MCP

{
  "mcp": {
    "github": {
      "type": "remote",
      "url": "https://api.githubcopilot.com/mcp/",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {file:~/.config/opencode/.secrets/github-pat}"
      }
    }
  }
}

# Context7 文档搜索

{
  "mcp": {
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp",
      "enabled": true
    }
  }
}

# Sentry 错误监控

{
  "mcp": {
    "sentry": {
      "type": "remote",
      "url": "https://mcp.sentry.dev/mcp",
      "enabled": true,
      "oauth": {}
    }
  }
}

认证 Sentry:

opencode mcp auth sentry

# 三者对比与选择

# 什么时候用 Agent?

  • 需要长期存在的任务执行单元
  • 需要指定不同的模型
  • 需要独立的工具权限控制

示例:创建一个代码审查 Agent,专门用于代码质量检查

# 什么时候用 Skills?

  • 提供任务相关的指导文档
  • 需要在多个 Agent 间共享的指令
  • 轻量级的任务描述

示例:创建一个 Git 发布 Skill,提供发布流程指导

# 什么时候用 MCP?

  • 需要连接外部服务或 API
  • 需要扩展工具能力
  • 需要访问第三方数据

示例:配置 GitHub MCP 来管理仓库

# 各层级的核心职责

# 1. 顶层:Agent 智能体层

  • 唯一的决策主体,负责理解用户目标、拆解任务、制定执行计划
  • 自主决策:基于推理结果,决策「什么时候、调用哪个 Skill、传入什么参数」
  • 迭代推理:接收 Skill 执行结果,迭代推理,直到完成用户目标,形成完整闭环
  • 异常处理:处理异常情况,执行重试、降级、终止等操作

# 2. 中间层:MCP 协议层

  • 能力注册与发现:Agent 通过 MCP 获取所有可用的 Skill 列表
  • 通信协议转换:将 Agent 的决策指令转换为标准化的 Skill 调用请求
  • 全链路管控:负责请求校验、权限控制、限流熔断、调用审计
  • 结果标准化返回:将 Skill 的执行结果封装为统一格式,返回给 Agent

# 3. 底层:Skills 能力层

  • 唯一执行主体:负责完成具体的、单一的操作任务
  • 外部交互:与外部环境、系统、数据源进行交互,完成实际操作
  • 结果返回:处理执行过程中的异常,返回标准化的执行结果或错误信息
  • 被动执行:不具备决策能力,只负责被动执行指令

# 总结

概念 选择场景
Agent 需要独立执行单元、专属模型、权限控制时
Skills 需要指导文档、多 Agent 共享指令时
MCP 需要连接外部服务、扩展工具能力时

在实际使用中,这三者常常配合使用。例如:你可以通过 Agent 创建专门的代码审查智能体,使用 Skills 来提供审查标准,并通过 MCP 来连接代码库获取信息。

通过灵活运用这三个概念,你可以将 OpenCode 打造成最适合自己工作流程的 AI 开发助手。


参考文档:

  • OpenCode 官方文档
  • OpenCode Agents
  • OpenCode Skills
  • OpenCode MCP Servers