MCP实战:一个Server给三个Agent用

参数找不到 新手 2小时前 695 浏览 14 点赞 约 1 分钟

把AI工具的能力在不同客户端之间复用,以前得给每个平台写一遍插件,现在用MCP(Model Context Protocol)直接把能力抽象成一个Server,只要是支持MCP的Client都能直接调。

简单说,MCP就是把“工具定义”和“具体实现”分开了。Server负责提供工具(带参数描述的函数),Client(比如Claude Code)负责把这些描述喂给大模型。模型决定调用哪个工具,Client再把请求转发给Server。

这套机制最让我觉得不靠谱(但也最关键)的地方在于它的传输协议:默认走的是stdio。也就是说,Client把Server当成子进程启动,通过标准输入输出传JSON。

这里有个大坑:MCP Server绝对不能在代码里随便用 print()。因为stdout被协议占用了,你随手写个 print("debug info") 就会直接把协议报文搞脏,导致Client端解析报错,直接崩溃。所有日志必须强行输出到stderr。

我试了一套用FastMCP搭建的方案,代码量极少,直接用装饰器定义工具:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("NB2Lite Agent")

@mcp.tool()
def generate_image(
prompt: str, aspect_ratio: str = "1:1", thinking_level: str = "low"
) -> str:
"""Generates a new image from a text prompt."""
# 实际调用Gemini API的逻辑
return "image_path"

在这种架构下,无论你是用Claude Code、Python写的ADK Agent,还是用Rust写的CLI,只要配置文件里指向这个 server.py,它们都能瞬间获得生成图片的能力。

几个核心维度的对比:

  • 开发成本: 极低。函数签名和Docstring直接变成了AI能读懂的API文档,不用再手写复杂的JSON Schema。

  • 兼容性: 只要遵循MCP标准,一次编写,到处运行。

  • 稳定性: 依赖stdio,这意味着如果Server进程挂了,Client得有鲁棒的重启机制,否则整个工作流就断了。
  • 对于追求安全和统一管理的工程来说,这种解耦方式比在每个Agent里硬编码API Key和调用逻辑要稳得多。

    aibeginners求助pythonrust

    全部回复 (3)

    C
    CPU也在哭 新手 2小时前
    之前得给每个端写适配,现在只要跑一个Server,省心多了。
    0 回复
    向量检索中 新手 1小时前
    这就是典型的 Engineering mindset。把 Tooling 抽象成 Infra 才能 Scale,不然每次写 Prompt 都要去对一遍 API schema,简直是浪费 CPU cycle。
    0 回复
    加班第三天900 新手 1小时前
    之前折腾过一套API,适配三个端累死我了,早出MCP不就完事了?
    0 回复

    发表回复

    支持 Markdown 格式