开发者如何选择API和MCP

上周五晚上我在整理移动硬盘,翻出一个 2023 年的老项目文件夹。

里面有个目录叫 adapter,两千多个文件里我一眼就认出了它。因为那半年,我为它掉了不少头发。

那是一个给大模型接外部接口的活儿。需求听起来特别朴素,就是让模型能查酒店、查价格。按今天的眼光看,这玩意儿不就一句话的事么。

但当时我真的做下来,写了五百多行代码。

说句题外话,2023 年那会儿其实挺兴奋的。function calling 刚出来,所有人都意识到大模型要从聊天框里走出来了,能调工具、能办事、能接真实世界。 demo 视频一个个看得人热血沸腾,好像明天就能搭出一个全能管家。

真正动手才知道,模型这头会调工具了,可外面那圈世界没变。接口还是那个接口,文档还是那份文档,鉴权还是那套鉴权。中间的鸿沟,得你自己一块砖一块砖地砌。

不是因为我菜。好吧,也可能有菜的成分在里面,但更多是因为,在 REST API 的年代,接入一个外部服务,标准动作就是这么多。

我给你捋一遍当年的流程。

第一步是鉴权。OAuth2 那套流程你得手写,拿授权码、换 token、处理 token 过期刷新,顺利的话三十行,不顺利五十行起步。我印象最深的是一个周五晚上,测试环境突然全线报 401,排查了俩小时,最后发现是 token 过期刷新那里有个竞态,凌晨才修完,走在路上整个人都是飘的。

第二步是工具发现。文档一页页翻,端点一个个人工整理。更要命的是文档经常比接口本身旧,参数名改了文档没改,你照着拼,模型那边就报错给你看。我当年维护过一个三十七行的端点清单表格,每周手动核对一遍,核对到怀疑人生。

第三步是请求封装。每个端点独立写一套,这家服务用驼峰命名,那家用下划线,字段对不上就自己写转换层。转换层这个东西,写的时候觉得是一次性的,维护的时候才发现是永久的。

第四步才是真正的大头,给大模型做 function calling 的映射层。模型理解的是工具描述,接口给的是 REST 语义,中间这一百到三百行的胶水代码,全是你的。写完 Claude 这套,业务说要上 Cursor,再写一套。每家的参数格式还有微妙的差别,你就复制、粘贴、改细节,改到眼睛发直。

第五步,错误处理。错误码一个个手动映射,重试逻辑自己写,写漏一个 case,线上就等着半夜报警。

然后你以为结束了?没有。过两周业务要加个新端点,新适配器、新映射,半天起步。要换个平台部署,整条流水线从头再走一遍。

那年我还被拉去给老板解释过一次,为什么模型会查酒店这个需求,排期要写两周。我说了一堆鉴权、映射、多平台适配的词,他听完就问了一句,这些跟查酒店有关系么。

没关系。但又绕不开。

这就是当年所有想把大模型接进真实业务的人,共同的处境。需求侧觉得这是一句话的事,工程侧知道这是一堆砖的活儿,中间的落差全靠加班填。

所以五百行,还真不算夸张。那阵子圈子里还流行一个说法,接一个接口的时间,比想清楚用它干什么的时间长得多。

上周我又接了一次接口。

这次是一个酒店数据的 MCP 服务,叫 RollingGo 酒店 MCP。完事儿之后我看着屏幕愣了一会儿,因为整个接入过程,配置文件加起来,十五行以内。

我把两次经历放在一起做了张对比图,你先看。

是不是有点过分了。

鉴权,从手写 OAuth2 的三十到五十行,变成配置里一行 Header,声明 Bearer 加上你的 Key,完事。

工具发现,从人肉翻文档,变成协议自带的 tools/list,服务端直接把工具列表和参数 schema 推给你,模型自己就能看懂。你不用告诉它有哪些接口,它自己知道。

请求封装,从每个端点一套,变成统一的 JSON-RPC 格式,零封装。大模型对接,从一百到三百行映射层,变成零行胶水代码,因为主流 Agent 客户端对 MCP 是原生支持,拿到工具列表就能直接调。

错误处理是标准错误码,框架自动重试。新增端点,服务端注册就行,客户端零改动。多平台适配,一份配置所有 MCP 客户端通用。

五百行变十五行,代码量砍掉九成七。

协议干掉的从来不是代码,是每个开发者都要重造一遍的那一遍。

这里得稍微聊一下 MCP 到底是个啥,很多朋友可能天天听这个词,但没太拆过它。

MCP 全称 Model Context Protocol,Anthropic 在 2024 年 11 月发布的开放协议,干的就一件事,给模型和外部工具之间,定一套标准的通信格式。你在模型这头说清楚我是谁,服务那头说清楚我有哪些工具、每个工具吃什么参数,中间的握手、格式、错误码,全都按协议来。

翻译成人话就是,以前你给模型递工具,得先写一份它看得懂的说明书,再写一份接口听得懂的电报,来回翻译。现在说明书和电报是同一种语言,谁都不用翻译。

技术上拆开看其实也不复杂。通信走 JSON-RPC,传输要么本地起进程走标准输入输出,要么远程走一条 HTTP 通道。服务一上线,客户端发个请求过去,返回的列表里每个工具都自带参数 schema,类型、必填、取值范围写得清清楚楚。模型拿到这份自描述的清单,怎么组合调用它自己就推理出来了。

之前每个人都要自己搭的那座桥,现在协议统一修好了,大家直接走。

有意思的是它普及的速度。协议刚出来那阵,不少人觉得这是 Anthropic 自己生态的事,观望。结果 OpenAI 转年就跟进了,各大 Agent 客户端陆续把 MCP 支持做成标配,目录站上一个一个 MCP 服务冒出来,数据库的、地图的、支付的、查航班的。到今年,一个 Agent 应用接不接 MCP,已经从技术选型变成了默认前提。

我身边还有个更具体的变化信号。

去年我劝一个做独立开发的朋友把服务包成 MCP,他觉得麻烦,说反正用户就那么几个,直接给 API 文档让他们自己接。上个月他主动来找我,说他的用户里开始有人问,你这个有没有 MCP 版。就一句话,他周末就把服务包上去了。

用户的行为比任何技术布道都诚实。当一个词从极客的黑话变成普通用户随口的问题,它就不是趋势了,它是既成事实。

这种时刻其实在技术史上反复发生过。

集装箱没有发明船,也没有发明箱子,它只是把箱子的角件和尺寸统一了,全球的港口、卡车、吊臂围绕同一个标准改造,然后国际贸易的成本断崖式下跌。USB 没有发明任何一种设备,它只是统一了接口,从此你不用再为每个外设找一根专属的线。

MCP 在干一模一样的事。

标准化最爽的地方在于,它省下的不是一个人的时间,是所有人重复浪费的时间。

说回开头那个十五行以内的配置。

聊之前先说一个我自己的判断,不是所有服务都适合第一时间上 MCP。改动频率低、查询维度简单的东西,REST 加文档完全够用。但有一类服务是 MCP 的天选场景,数据规模大、更新频率高、查询条件多维。

酒店数据就是这类里的教科书。

你想啊,一次酒店查询背后是城市、日期、星级、预算、位置、标签一堆条件的组合,价格和库存还是分钟级在变的,今天一个价明天一个价,满房退房随时发生。这种数据你让人工封装接口去追,永远追不平,只有让模型拿着实时工具自己去查,答案才是活的。

那次我接的 RollingGo 酒店 MCP,背后是两百多万家酒店的数据,十一万家直签,价格库存实时更新,全球五百多家供应商的资源都聚合在这一个服务里。这种体量放在几年前,光是想一想适配层的工作量,就够我喝一壶。

但实际过程是这样的。我先去 https://rollinggo.store 申请了一个 API Key,表单填完几分钟的事,免费的调用额度直接给到,不用走商务流程,也不用先充值验证身份。拿到 Key 之后,我在 Claude 的配置文件里加了这么一段。

json 复制代码
{
  "mcpServers": {
    "rollinggo-hotel": {
      "type": "http",
      "url": "https://mcp.rollinggo.cn/hotel",
      "headers": {
        "Authorization": "Bearer 你的API Key"
      }
    }
  }
}

数了一下,十二行。含花括号。

重启 Claude,对话框里问一句,帮我查下周六杭州西湖边上评分四点八以上的酒店。工具列表里的 search-hotels、hotel-detail、hotel-tags 一个个躺在那儿,模型自己挑工具、自己传参数、自己把两段式查询组合起来,全程我没写一行映射代码。

所谓两段式,就是先拿 search-hotels 按条件圈出候选列表,再挑出前几家用 hotel-detail 深挖房型和实时价格。这个编排模型自己就会做,因为工具的参数 schema 里写得明明白白,它读完就知道该先粗筛再细查,跟人查酒店的动作一模一样。

我又追加了一句,其中带泳池和免费取消的单独标出来。模型调了 hotel-tags 的标签接口,几秒钟把条件叠上去了。要是搁 REST 年代,这一个新条件我就得回去翻文档找参数名,再改一遍映射层。

整个体验里最魔幻的瞬间是,我在旁边看着模型干活,突然意识到自己没有在看代码。

我在看它干活。

配置这份文件,我原封不动复制到 Cursor 的 mcp.json,能用。复制到 Cline 的配置面板,也能用。**在 MCP 的世界里,客户端只认协议,不认平台。**服务端只维护一份接入,所有客户端通吃,这放在 REST 年代是要写三套代码的事。

这家还有个开源仓库,在 https://github.com/RollingGo-AI/RollingGo-hotel-MCP-CN ,想看协议实现细节的可以自己去翻,仓库里把不同客户端的配置差异写成了对照表,连字段名大小写这种坑都标出来了。

顺嘴一提,这套服务的调用次数已经过了七十六万次,开源仓库两千五百多次下载。这些数字对我有参考价值的原因不是它们大,而是它们说明现在每天有一堆真实的开发者和 Agent 在上面跑,坑被人提前踩过,文档被人反复校过,我踩到新坑的概率小很多。接接口这件事,除了写代码的量,隐性成本其实在信任。

后来我还琢磨出一层更深的账。

当接入成本趋近于零,事情反而变得纯粹了。以前选数据源,接口好不好接占一半权重,文档写得好我可能就选它了。现在接入这一侧大家都是十五行,比不动了,竞争回到数据本身,覆盖多少家酒店,价格是不是实时的,直签比例有多高,出了问题谁响应。

接入的门槛塌掉之后,真正值钱的东西才露出水面,是数据质量,是服务本身。

那天晚上配完之后我又想起 2023 年那个 adapter 文件夹,想起我为 token 刷新逻辑 debug 到凌晨三点的自己,有点想回去拍拍他的肩膀。

跟他说,别熬了,你在这座桥上砌的每一块砖,过两年整个行业会统一重修一遍。

而你要做的,只是从桥上走过去。

相关推荐
飞哥数智坊1 小时前
TraeCode 180积分帮我做了一套系统,全程我感觉自己有点多余
人工智能·ai编程
AI人工智能集结号1 小时前
GEO优化公司怎么选?从检测、诊断到执行判断服务是否完整
人工智能
人民广场吃泡面1 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
沈管家AI数字员工1 小时前
自研 AI 智能体 vs 采购数字员工平台:成本、风险与周期的真实对比
人工智能
集成电路芯片封装设备1 小时前
除氧型真空共晶设备技术详解:从原理到应用
人工智能
武汉星际互动1 小时前
咨询量大、时段受限、口语化难识别,政务AI数字人如何承接大厅导办?
人工智能·政务
资讯综合2 小时前
500亿招聘市场悖论:AI技术能否填平行业的信任深坑
大数据·人工智能
早睡早起身体好1232 小时前
用 XGrammar 约束大模型工具调用:解决参数为空的问题
android·人工智能·神经网络·机器学习·自然语言处理·vllm
超智算科技2 小时前
2026服贸会现场直击|Net Zero Hub净零算力枢纽全球首发! 超智算受邀深度参与服贸会全球OPC共创节
网络·人工智能·科技·物联网·gpu算力