Agent决定做什么,Skill定义怎么做,MCP让它能调用外部能力
在MCP架构中,Agent负责任务决策,Skill定义执行流程,MCP提供外部工具调用能力。以"Hello,World!"为例:Agent识别需求后调用hello-world Skill,该Skill通过MCP调用say_hello工具,返回结果。三者协同实现能力复用与解耦。虽非强制组合,但典型企业场景中,Agent通过Skill编排MCP工具,连接GitLab、Jira等系统,实现自动化工作流。
不同平台对 Skill 的命名与实现会不同;它不是 MCP 官方协议中的固定核心对象。
Hello World 示例
目标:用户对 Agent 说:
请输出 Hello, World!
1. Agent
Agent 收到请求后,判断:
这是"打招呼/文本输出"任务,
我可以使用 hello-world Skill。
它负责选择和编排,而不一定亲自实现具体能力。
2. Skill:hello-world
一个最简单的 Skill 可以定义成:
name: hello-world
description: 当用户要求简单问候或输出 Hello World 时使用
steps:
- 调用 say_hello 工具
- 将工具结果回复给用户
它的本质是可复用流程:
识别需求 → 调用工具 → 返回结果
3. MCP:暴露 say_hello 工具
MCP Server 可以向 Agent 暴露一个工具:
{
"name": "say_hello",
"description": "生成一条 Hello World 问候语",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
}
}
工具的实现可能很简单:
fun sayHello(name: String?): String {
return if (name.isNullOrBlank()) {
"Hello, World!"
} else {
"Hello, $name!"
}
}
三者协作过程
用户
│ "请输出 Hello, World!"
▼
Agent
│ 判断:匹配 hello-world Skill
▼
Skill
│ 规定:调用 say_hello 工具
▼
MCP Client ───────────────► MCP Server
│
▼
say_hello(name = null)
│
▼
返回 Hello, World!
◄─────────────────────────────┘
│
▼
Agent 回复用户:Hello, World!
极简伪代码
class HelloWorldAgent(
private val mcpClient: McpClient
) {
suspend fun handle(userInput: String): String {
// Agent:理解与决策
if (userInput.contains("Hello") || userInput.contains("你好")) {
// Skill:hello-world 的既定流程
val result = mcpClient.callTool(
name = "say_hello",
arguments = emptyMap()
)
return result.text
}
return "暂不支持该请求"
}
}
其中:
HelloWorldAgent = Agent
if + 调用工具流程 = Skill 的简化实现
mcpClient.callTool() = MCP 通信
say_hello = MCP Server 提供的 Tool
它们并非必须同时存在
不使用 MCP
Agent 可以直接输出:
Hello, World!
或直接调用本地 Kotlin 方法。此时:
有 Agent
可有 Skill
没有 MCP
不使用 Agent
普通程序直接调用接口:
sayHello(null)
此时:
有 MCP Tool(或普通 API)
没有 Agent 的规划与决策
最常见的企业组合
Agent
├─ Skill:代码审查
├─ Skill:查询构建日志
├─ Skill:创建缺陷单
└─ 通过 MCP 连接:
├─ GitLab
├─ Jira / 飞书
├─ 内部代码库
├─ 性能 Trace 分析服务
└─ 数据库、监控平台