V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
itskingname
V2EX  ›  程序员

请大家分享一下写 MCP Client 时,你是怎么使用 resource 的。

  •  
  •   itskingname · 16 天前 · 1240 次点击

    我看目前网上的 MCP 相关教程,主要是教的写 MCP Server 的,很少讲到 MCP Client 。即使有,也只使用 call_tool 来做演示。甚至 claude 官方文档都对如何正确使用 resource 语焉不详:

    https://modelcontextprotocol.io/quickstart/client

    但其实 MCP 能够使用的除了 tools 还有 resourc/prompts 。分别需要使用下面的调用来获取。

    session.list_resource_templates()
    session.list_resources()
    session.list_prompts()
    

    请大家分享一下你是怎么使用 resource 的。

    如果你要实现一个全自动通用 client ,这个 client 事先不知道 server 的任何信息,只能通过先调用list_xx来获取。那么,tools 可以通过 tool calling 让大模型选择使用哪个工具,但怎么让大模型告诉你应该使用哪个 resource 呢?难道从返回的正文里面解析?

    注意前提是你提前不知道这个 MCP server 有什么功能。https://github.com/stuzero/pg-mcp-server/blob/main/example-clients/claude_cli.py 这个示例代码,明显是在写 client 的时候,已经知道 server 是一个数据库的服务了,所以几乎是 hardcode 来利用 resource ,这样并不通用。

    我能想到的方法,是自己再定义几个读取 resource 的函数,把他一起加到 tool call 里面:

    例如:

    def read_resource(uri):
        xxx = session.read_resource(uri)
        ...
    

    把这个 read_resource 加到 tool call 里面。

    但感觉这种方法有点笨,不知道大家有没有什么好办法。

    3 条回复    2025-04-11 15:45:34 +08:00
    hohoho
        1
    hohoho  
       15 天前
    我没有开发过,只是前天把协议粗略读了一遍,所以下面的回复有可能有误。

    狭义的 client 是 host 和 server 之间的一个桥梁,通过 jsonrpc 与 server 通信,获取到 server 的 tools/resources/prompts 列表,然后可以通过 client 调用。一个 client 只能根据配置和一个 server 建立连接,具体这个 server 是啥跟 client 没关系。

    广义的 client 其实是 host + clients ,类似于 cursor 、clients ,通过一堆 clients 获取各个 mcp 服务端的资源或工具列表,然后把获取到的 list 让 llm 根据输入自动选择对应的项及相关参数,然后再找到这个项对应的 client 调用,这个过程是一个循环迭代的过程,如果不设置上限,大模型可能会陷入一个死循环。

    我觉得 op 的困惑其实是 host 的开发。比如 `明显是在写 client 的时候,已经知道 server 是一个数据库的服务了`,实际场景应该是大模型根据 list 里的描述和用户的输入决定是否调用这个数据库 mcp server 。
    hohoho
        2
    hohoho  
       15 天前
    stormtrooperx5
        3
    stormtrooperx5  
       14 天前
    hardcode 只是为了给你展示,如何使用取决于 llm 自身的能力
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:03 · PVG 12:03 · LAX 21:03 · JFK 00:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.