05 May 2025

IMG-THUMBNAIL

基于官方提供的Inspector学习 Resource 相关内容,并用 Go 在服务端搭一个 Demo。

概述

MCP 协议提供了标准协议来让服务端向客户端暴露资源内容,例如文件、数据库,每个资源使用唯一标识URI来区分。

本文介绍最新版本2025-03-26

协议消息

  • Listing Resources

客户端发送resources/list请求查询可用的资源,该操作支持分页。

  • Reading Resources

发送resources/read请求检索资源内容。

  • Resource Templates

resources/templates/list允许向客户端暴露参数化资源。

  • List Changed Notification

当资源发生变更时,服务器会发送notifications/resources/list_changed通知。

  • Subscriptions

协议支持订阅资源变更,可以支持订阅指定资源当发生变更时会收到通知。

数据流

IMG-THUMBNAIL

资源类型

资源定义

  • uri: 资源的唯一标识符
  • name: 资源的名称
  • description: 【可选】资源描述
  • mimeType: 【可选】资源的MIME类型,常见的有:text/plaintext/htmlimage/jpegimage/pngapplication/jsonapplication/pdfapplication/octet-stream
  • size: 【可选】资源大小,单位为字节

URI Scheme

  • https://
  • file://
  • git://

错误码

  • 资源不存在: -32002
  • 内部错误:-32603

Go 实现

func registerAllGoResources(mcpServer *server.Server) {
	for _, item := range items {
		mcpServer.RegisterResource(&protocol.Resource{
			URI:      item.Link,
			Name:     item.Title,
			MimeType: "text/html",
		}, resourceHandler)
	}
}

func resourceHandler(ctx context.Context, r *protocol.ReadResourceRequest) (*protocol.ReadResourceResult, error) {
	for _, item := range items {
		if item.Link == r.URI {
			res := protocol.NewReadResourceResult([]protocol.ResourceContents{
				protocol.TextResourceContents{
					URI:      item.Link,
					Text:     item.Description,
					MimeType: "text/html",
				},
			})
			return res, nil
		}
	}
	return nil, fmt.Errorf("resource not found")
}

测试工具

MCP官方提供的Inspector,支持本地部署调试,启动命令:

npx @modelcontextprotocol/inspector https://www.cyeam.com/sse

IMG-THUMBNAIL

原文链接:MCP Resource学习,用Go搭建一个Demo,转载请注明来源!

EOF