客户端将每个 Function 的执行结果和用户的提问等信息,一起再次提交给 AI 模型服务器。
户端将每个 Function 的执行结果和用户的提问等信息,一起再次提交给 AI 模型服务器。

由于高德接口并发限制,有部分接口调用失败,那么客户端可能会来回请求多次,最后输出 AI 的回答。

到这里,读者应该明白 MCP Tool、Plugin、Function Call 的关系了吧!
实现 Mcp Server
前面笔者介绍了 MCP Tool,但是 MCP Server 还可以提供很多很有用的功能,MCP 协议定义了以下核心模块:
- Core architecture
- Resources
- Prompts
- Tools
- Sampling
- Roots
- Transports
作为当前社区中最关注的 Tools,本文已经单独介绍,接下来将会以继续讲解其它功能模块。
实现 Resources
示例项目参考:ResourceServer、ResourceClient。
Resources 定义:Resources 是 Model Context Protocol (MCP) 中的一个核心原语,它允许服务器暴露可以被 clients 读取并用作 LLM 交互上下文的数据和内容。
Resources 代表 MCP server 想要提供给 clients 的任何类型的数据,在使用上,MCP Server 可以给每种资源定义一个 Uri,这个 Uri 的协议格式可以是虚拟的,这不重要,只要是能够定位资源的一段 Uri 字符串即可。
只看定义,读者可能不理解什么意思,没关系,等后面动手做的时候就知道了。
Resources 可以包括:
- 文件内容
- 数据库记录
- API 响应
- 实时系统数据
- 屏幕截图和图像
- 日志文件
- 等等
每个 resource 都由一个唯一的 URI 标识,并且可以包含文本或二进制数据。
Resources 使用以下格式的 URIs 进行标识:
[protocol]://[host]/[path]
例如:
file:///home/user/documents/report.pdfpostgres://database/customers/schemascreen://localhost/display1
Resources 的文件类型,主要是文本资源和二进制资源。
文本资源
文本资源包含 UTF-8 编码的文本数据。这些适用于:
- 源代码
- 配置文件
- 日志文件
- JSON/XML 数据
- 纯文本
二进制资源
二进制资源包含以 base64 编码的原始二进制数据。这些适用于:
- 图像
- PDFs
- 音频文件
- 视频文件
- 其他非文本格式
Resources Server、Client 实现
客户端使用 Resources 服务时,有以下 Api,那么在本节的学习中,将会围绕这这些接口讲解如何在服务段实现对应的功能。

实现 Resources 时,主要有两种提供 Resources 的方式,一种是通过模板动态提供 Resource Uri 的格式,一种是直接提供具体的 Resource Uri。
Resource Uri 格式示例:
"test://static/resource/{README.txt}"
MCP Server 提供的 Resource Uri 格式是可以随意自定义的,这些 Uri 并不是直接给 Client 读取的,Client 在需要读取 Resource 是,把 Uri 发送给 MCP Server,MCP Server 自行解析 Uri 并定位对应的资源,然后把资源内容返回给 Client。
也就是说,该 Uri 的协议其实就是字符串,只要在当前 MCP Server 和 Client 之间能用即可。
MCP Server 可以通过模板提供某类资源,这类资源的的地址是动态的,要根据 id 实时获取。
builder.Services.AddMcpServer()
.WithListResourceTemplatesHandler(async (ctx, ct) =>
{
return new ListResourceTemplatesResult
{
ResourceTemplates =
[
new ResourceTemplate { Name = "Static Resource", Description = "A static resource with a numeric ID", UriTemplate = "test://static/resource/{id}" }
]
};
});更多推荐
所有评论(0)