[讨论] 如何把现有服务改造支持 MCP - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
pppwww
V2EX    程序员

[讨论] 如何把现有服务改造支持 MCP

  •  
  •   pppwww 198 天前 3120 次点击
    这是一个创建于 198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景: 小弟所在的团队在考虑开放一部分现有项目中的接口,使其可以支持通过 MCP 协议来提供给其他团队的 AI Agent 进行调用。目前在考虑如何实现这个诉求

    目前网上能搜到的基本上是一些 demo 的验证,一般是从 0 开始,不涉及现有服务接口的迁移

    目前考虑了几种方案:

    1 、硬编码/注解驱动:对于每一个接口或者方法实现,都通过手动编码注册的方式,注册到 mcp server, mcp server 可以于现有服务在一起也可以单出部署;不过这种方式的问题就是每次有新功能要开放出去时,都需要手动编码注册。注解驱动的话,Java 可以很快支持,改动也较小,不过只支持 Java 项目,对 golang 不支持。

    2 、代码生成:通过解析原服务的 swagger 文档等方式,自动生成代理方法,这样后续有功能开放只需要提交 API 文档即可,感觉灵活性还是蛮高的。

    想问问大家是如何对现有服务的接口集成到 mcp server 的,小弟之前对 AI Agent 的了解不多,恳请大佬们赐教

    20 条回复    2025-03-27 15:35:44 +08:00
    moonlord
        1
    moonlord  
       198 天前
    给 AI 的接口怎么都要重新设计吧,AI 有这么智能?还知道调用哪个接口?
    gopheryi
        2
    gopheryi  
       198 天前
    看了一些客户端的实现,mcp server 的信息也是要加到提示词里的,如果用 2 方式实现,太多接口提示词很容易超出限制吧
    lambdaq
        3
    lambdaq  
       198 天前
    你向 AI 问这个问题吧。2333
    Depth
        4
    Depth  
       198 天前   1
    FriedRiceNoodles
        5
    FriedRiceNoodles  
       198 天前
    https://mcpify.ai/

    看看这个能不能解决你的问题,不对现有的服务和接口做改造,而是新起一个专门的 MCP 服务
    InkStone
        6
    InkStone  
       198 天前   1
    @moonlord MCP 的原理就是这个啊……AI 根据接口的描述(自然语言)决定是否调用以及怎么调用。只要中间做个适配 MCP 协议的 adapter 就可以。
    neptuno
        7
    neptuno  
       198 天前
    建议起一个 python 服务,转发一下接口
    neptuno
        8
    neptuno  
       198 天前
    就是公司内部做一个 mcp 网关,这样就不用管其他团队后端的架构了。
    Tink
        9
    Tink  
    PRO
       198 天前
    @moonlord 这不就是 mcp 解决的问题吗
    Tink
        10
    Tink  
    PRO
       198 天前
    我想知道的是 mcp 的 client 端怎么解决,现在主流的几个不都是集成到了编码工具或者 ai 聊天工具里面吗
    yrzs
        11
    yrzs  
       198 天前
    在现有服务的基础上实现一层 MCP 协议的 API Gateway,在 Gate 层实现 MCP 协议的支持,并且做鉴权和现有服务的对接、裁剪工作
    7gugu
        12
    7gugu  
       197 天前
    @moonlord AI 会根据上下文自动推断的,MCP 主要是给 AI 提供了一个标准化的操作接口,可以让 AI 操作后,拿到符合标准的上下文信息,便于后续的逻辑执行。
    pppwww
        13
    pppwww  
    OP
       197 天前
    @yrzs 这个是 client 调用 server 进行执行 tool 的时候么,这个我倒可以理解; mcp server 不是还要支持 toolList 这种的获取么,这种是如何把我们项目中的接口转换成 mcp server 认为的 tools 的呢
    pppwww
        14
    pppwww  
    OP
       197 天前   1
    @Tink 看了 openManus 中关于 client 端的调用实现以及官方给的使用示例( https://modelcontextprotocol.io/quickstart/client), 其实就是 client 向 server 查询 list_tools ,然后把这些 tools 转换成了 LLM 调用时的 tool 列表。对于不同的 LLM 模型,可能要自己做 adapter
    pppwww
        15
    pppwww  
    OP
       197 天前
    @yrzs 其实还一点困惑在于,sever 返回的 tools 列表,其中关于 input_schema 是不是没有严格要求,只要能返回 name, description 还有 inputSchema 的三元组就可以了,具体 inputSchema 的组织形式没有严格定义。因为还没看过 mcp 协议的原始论文规范,所以这一块有点模糊。
    pppwww
        16
    pppwww  
    OP
       197 天前
    @Depth 感谢 我看下一下
    pppwww
        17
    pppwww  
    OP
       197 天前
    @FriedRiceNoodles 感谢,我研究一下
    pppwww
        18
    pppwww  
    OP
       197 天前
    @lambdaq 就是问过了,然后感觉还是不太清晰,wwwww
    pppwww
        19
    pppwww  
    OP
       197 天前
    @neptuno 大佬你的想法应该和下面 yrzs 提出的类似?
    neptuno
        20
    neptuno  
       197 天前
    @pppwww 对呀,要做网关,不要侵入以前的业务了。而且你看 ai 现在的趋势,就是要有统一的协议。公司内部也要有统一的 ai 网关。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6091 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 02:19 PVG 10:19 LAX 19:19 JFK 22:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86