MCP协议和API的区别

接入与开发

从工具调用角度看MCP和普通API的定位差异,帮开发者在动手接之前判断该用哪条路、需要额外处理哪些工程问题。

你在给一个Agent接外部能力时,大概率会卡在同一个岔路口:是直接调一个HTTP API,还是把能力做成MCP服务器挂上去?两者都能让模型用上外部功能,但请求在哪一层发起、鉴权归谁管、超时和并发谁来兜,完全是两回事。这篇不给结论式的「谁更好」,只讲清定位差异,再给一份判断流程和落地时要补的工程清单,让你少走一遍返工。

你在给Agent接外部能力时,大概率会卡在同一个岔路口:是直接调一个HTTP API,还是把能力做成MCP服务器挂上去?两者都能让模型用上外部功能,但请求在哪一层发起、鉴权归谁管、超时和并发谁来兜,完全是两回事。

这篇不给结论式的“谁更好”,只讲清定位差异,再给一份判断流程和落地时要补的工程清单。你可以拿它当一张对照表,动手前先过一遍,少走一次返工。

先分清「谁在调用」这件事

普通API是写在你代码里的:你的服务发请求、你的服务处理响应,模型只是被调用的一环。MCP是把一个能力暴露成工具,由模型侧的客户端去发现和调用,调用发起方变成了宿主程序。这个差别决定了后续所有的工程重心。

  • 一个判断口径:这段逻辑的业务状态由谁维护?由你自己的后端维护,通常直接API更顺;由模型在对话里临时决定要不要用,MCP更自然。
  • 不适用的情况:如果你的Agent只是一次性脚本、调用次数极少,专门起一个MCP服务器属于给自己加运维负担,直接包一层函数调用更省事。
  • 再补一条:如果这个能力需要被多个不同客户端复用,MCP的“发现”机制比API的文档更直接。

能力的「描述方式」不一样

API需要你写文档、写SDK、写参数校验,使用方是人或者其他代码。MCP把工具名、参数结构、返回形态以约定格式暴露出来,客户端可以自动列出来给模型看。这带来一个实际差别:API的入参设计可以随意,MCP的工具参数要尽量扁平、字段名要能被模型读懂,否则模型很容易在参数上犯错。

维度普通APIMCP工具
谁看描述开发者、调用方代码模型、宿主客户端
参数风格可以嵌套、可以复杂尽量扁平、字段名直白
发现方式翻文档或SDK客户端自动列出工具列表
常见报错参数类型、鉴权失败参数类型、多包一层、必填缺失

需要补的活:参数类型不符、多包一层、必填缺失这几类报错在MCP里更常见。接之前先把参数结构收敛一遍,别把API那套嵌套对象直接搬过去。

传输与鉴权落在哪一层

API的鉴权在你手里:Key怎么存、走网关还是直连、要不要按调用方分配额度,都是你自己定。MCP的鉴权往往要跟着宿主客户端的配置走,凭证放哪、能不能被别的会话读到,是安全侧要先想清楚的。接之前先确认传输方式:本地进程方式和远程方式在部署、权限、排错步骤上完全不同,别到上线才发现环境跑不起来。

  • 本地进程方式:适合单机调试,权限边界清晰,但多客户端共享时难管理。
  • 远程方式:适合团队或产品化,但要额外处理网络、TLS、凭证分发。
  • 在站内可以对照 /mcp 里的服务器条目,看看同类能力别人是怎么暴露接口的,再决定自己要不要照抄结构。

落地前必须补的工程动作

  1. 超时与重试无论是API还是MCP,都要分开设连接、读取和整体超时,并约定重试次数;工具调用重试要确认动作是否幂等,否则一次超时会变成两次扣费。
  2. 并发与排队按你的实际额度分档设置并发上限,超出就排队或降级,不要在模型侧并发调用多个工具时把额度打爆。
  3. 降级路径工具不可用时要有一条“返回一句人话”的兜底,而不是把异常直接抛给模型让它瞎猜。
  4. 日志与复盘至少记下工具名、入参摘要、耗时、结果状态和 token 用量,否则一次慢调用和一次贵调用事后完全没法复盘。
  5. 验证顺序先用一个最小用例跑通“模型决定调用→参数正确→结果回填→回答成形”,再去做多工具编排。

这几条跟选API还是MCP无关,是两条路都得补的工程动作。区别在于:MCP多了一层客户端与服务器之间的约定,排查时你要先确定是模型没选对工具,还是参数传错了,还是服务器本身没起来。

什么时候选哪条路:一份判断清单

先把“优先直接API”和“优先MCP”的场景分开看,再决定你要不要为了可插拔多付一层复杂度。

  • 优先直接API:能力是固定流程、调用时机由你的代码决定、需要复用已有的鉴权和监控体系。
  • 优先MCP:多个客户端要复用同一批能力、需要让模型自己发现可用工具、团队里希望把能力做成可插拔的模块。
  • 两边都可以:先按直接API实现核心逻辑,等确认这套能力会被多个Agent反复用到,再包一层MCP,避免一上来就过度设计。
  • 判断会变:同一套能力在不同阶段答案可能不同,先跑通再重构,比一开始就选“终极方案”划算。
场景建议路径额外要做的
单Agent、内部调用直接API函数封装、超时重试
多客户端共享能力MCP做工具描述、凭证管理
需要模型自动发现工具MCP参数扁平化、错误兜底
调用量小、一次性脚本直接API别起服务器,省运维

如果你还在犹豫,可以先到 /tools 看看同类工具在站内是怎么被归类的,再回到自己的场景里判断。

下一步站内 /mcp 页面整理了不同服务器的接入方式和结构参考,对照看一遍比闷头写省时间。

常见问题

MCP是不是要取代普通API?

不是同层的东西。API是能力本身怎么被调用,MCP是让模型侧能发现并调用这个能力的一种约定方式。很多MCP服务器底层还是在调HTTP API。你可以把MCP理解成一层外壳,壳里面的实现照样是接口、鉴权和数据库。

只做MCP不写API可以吗?

技术上可行,但通常不划算。一旦你要做监控、限流、按调用方算账,这些能力最终还是要落在一个有鉴权的接口上。比较稳的做法是把核心逻辑做成服务,再在外面分别暴露成HTTP接口和MCP工具,两边的行为保持一致。

接MCP最容易踩的坑是什么?

工具参数和权限。模型填参数的能力取决于描述写得清不清楚,字段名含糊或嵌套过深就会频繁报错;权限上,如果工具能碰文件系统或内网,一定要提前划好范围。先按 /tools/verify 的思路做一次最小连通验证,再扩大调用面。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。