01学完你能做到
- 区分 MCP Host、Client、Server,以及 tools、resources、prompts 的职责。
- 看懂
tools/list、tools/call、inputSchema和outputSchema。 - 区分协议错误与工具执行错误,并选择合适的传输方式。
02这课解决什么问题
前面的 API 已经能被程序调用,但 Agent 还需要知道“有哪些能力、什么时候用、参数怎么填、结果怎么读”。MCP(Model Context Protocol)提供了一套开放的协议约定,把外部数据和能力以统一方式交给 AI 应用。
03MCP 的角色与三类能力
MCP 基于 JSON-RPC 消息。Host 是承载 AI 应用的程序,Client 负责与某个 MCP Server 建立连接,Server 暴露外部能力。一个 Host 可以连接多个 Server。
Server 可以提供三类能力,但控制方不同:
- Tools:模型控制的可调用函数,例如查询数据或执行计算。客户端发现工具后,模型可以决定是否调用。
- Resources:应用控制的上下文数据,例如文件、数据库 schema 或其他可读取内容。Host 决定何时把资源纳入上下文。
- Prompts:服务器提供的可复用提示模板,应用可以发现并使用它们。
不要把 resources 当成“模型自动调用的工具”,也不要把 prompts 当成数据接口;三者的用途和控制方式不同。
04工具发现与调用
tools/list 用于发现工具。工具定义至少应包含唯一的 name、描述用途的 description 和非空的 JSON Schema inputSchema;title、outputSchema 与行为 annotations 是可选信息。列表支持分页,服务端应尽量稳定排序。
tools/call 带着工具名和参数调用工具。结果可以包含文本、图片、资源链接等 content,也可以包含符合 outputSchema 的 structuredContent。如果声明了 outputSchema,服务器必须返回符合 schema 的结构化结果,客户端应进行校验。
错误分两类:
- 协议错误:请求结构不合法、未知工具等,使用 JSON-RPC 的
error返回。 - 工具执行错误:参数值不合法、上游失败或业务条件不满足,放在工具结果中并设置
isError: true。这类结果应包含可操作的说明,方便模型修正参数后重试。
工具注解只是行为提示,不是权限控制或安全保证。服务器仍必须在服务端校验输入、鉴权、限流并清洗输出。
05两种标准传输方式
传输方式只规定消息如何发送,不改变 MCP 消息本身的语义:
- stdio:客户端启动本地子进程,通过标准输入输出传递换行分隔的 JSON-RPC 消息,适合本地工具。
- Streamable HTTP:通过一个 MCP HTTP 端点发送请求,客户端使用 HTTP POST;响应可以是 JSON,也可以是请求范围内的 SSE 流,适合远程服务。
早期的 HTTP+SSE 传输方式已由 Streamable HTTP 取代。课程不要把某个 SDK 的类名或启动命令当成协议本身;SDK 会变化,协议字段和官方规范才是接口依据。
06一个工具定义的最小轮廓
{
"name": "get_market_total",
"description": "查询指定交易日、指定市场的成交额汇总;返回金额单位为亿元",
"inputSchema": {
"type": "object",
"properties": {
"trade_date": {"type": "string", "description": "YYYYMMDD"},
"market": {"type": "string", "enum": ["SH", "SZ", "BJ"]}
},
"required": ["trade_date", "market"]
},
"outputSchema": {
"type": "object",
"properties": {
"trade_date": {"type": "string"},
"market": {"type": "string"},
"turnover_yi_yuan": {"type": "number"}
},
"required": ["trade_date", "market", "turnover_yi_yuan"]
}
}工具描述应写清数据范围、单位、日期格式、是否需要分页、常见错误和适用场景。返回结果应控制体积,优先提供筛选、汇总和明确的下一页信息,避免把无关的原始数据全部塞进模型上下文。
07常见误区
- 把 REST 接口逐个机械转换成大量工具,让模型难以选择。
- 只写“查询日 K”,不写范围、单位、参数格式和限制条件。
- 把协议错误和业务错误混在一起,导致调用方无法决定是否重试。
- 把
readOnlyHint等注解当成真正的权限控制。 - 把 resources、tools、prompts 当成同一种能力。
- 把某个版本 SDK 的示例代码当成永久不变的协议细节。
08延伸阅读
09一分钟讲给别人
试着用自己的话讲一遍MCP 像一个统一插座。Host 里的 Client 连接 Server,先用 `tools/list` 看有哪些工具,再用 `tools/call` 调用具体工具。工具要写清参数和返回结构,错误要区分协议错误和执行错误。Resources 是应用选择的上下文,Prompts 是可复用模板。本地进程用 stdio,远程服务用 Streamable HTTP;注解不能代替服务端安全控制。
6 道自测
先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。
01MCP Server 可以提供哪三类能力?
02`tools/list` 和 `tools/call` 分别做什么?
03`inputSchema` 的作用是什么?
04协议错误和工具执行错误如何返回?
05stdio 与 Streamable HTTP 分别适合什么场景?
06工具注解能否代替权限控制?
已看 0/6 题
练动手练习
任务:为一个日 K 查询接口设计一个 MCP 工具定义:写清日期格式、代码参数、复权方式、返回单位和分页字段;分别设计一个参数错误和一个上游暂时不可用的工具执行错误。
完成这一课
读完讲义、看完自测答案,这一课就算学完了。
- 读完讲义
- 看完全部自测
本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。