当调用方从程序变成 Agent,数据接口需要多写清楚哪些东西?

MCP:把数据接口变成 Agent 工具

约 11 分钟6 道自测更新于 2026-10-30

一句话记住MCP 用统一的 JSON-RPC 协议描述工具、资源和提示,让 AI 应用能够发现并调用外部能力。

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常见误区

  1. 把 REST 接口逐个机械转换成大量工具,让模型难以选择。
  2. 只写“查询日 K”,不写范围、单位、参数格式和限制条件。
  3. 把协议错误和业务错误混在一起,导致调用方无法决定是否重试。
  4. 把 readOnlyHint 等注解当成真正的权限控制。
  5. 把 resources、tools、prompts 当成同一种能力。
  6. 把某个版本 SDK 的示例代码当成永久不变的协议细节。

08延伸阅读

09一分钟讲给别人

试着用自己的话讲一遍MCP 像一个统一插座。Host 里的 Client 连接 Server,先用 `tools/list` 看有哪些工具,再用 `tools/call` 调用具体工具。工具要写清参数和返回结构,错误要区分协议错误和执行错误。Resources 是应用选择的上下文,Prompts 是可复用模板。本地进程用 stdio,远程服务用 Streamable HTTP;注解不能代替服务端安全控制。

想一想

6 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01MCP Server 可以提供哪三类能力?

  2. 02`tools/list` 和 `tools/call` 分别做什么?

  3. 03`inputSchema` 的作用是什么?

  4. 04协议错误和工具执行错误如何返回?

  5. 05stdio 与 Streamable HTTP 分别适合什么场景?

  6. 06工具注解能否代替权限控制?

已看 0/6 题

练动手练习

任务:为一个日 K 查询接口设计一个 MCP 工具定义:写清日期格式、代码参数、复权方式、返回单位和分页字段;分别设计一个参数错误和一个上游暂时不可用的工具执行错误。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。