internal/mcp: add resource conformance test

This uncovered a problem in how we represent resource results:
contents is a slice, not a single value.

I tried to use a file resource, but the server->client ListRoots
call didn't work because synthetic responses aren't supported.
Left a TODO.

I enhanced the hello example so I that could use the MCP Inspector to
work with resources.

The falseSchema change fixes a potential bug where schemas are
re-used, which is disallowed.

Change-Id: I1f0198043cb6221c2a03f4f83aa0bafbc71167f4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/677136
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Jonathan Amsterdam <jba@google.com>
This commit is contained in:
Jonathan Amsterdam 2025-05-29 07:57:10 -04:00 • committed by Gopher Robot
commit a627a4a2dd

View file

@ -143,7 +143,7 @@ var declarations = config{
Fields: config{"Params": {Name: "ReadResourceParams"}},
},
"ReadResourceResult": {
Fields: config{"Contents": {Substitute: "*ResourceContents"}},
Fields: config{"Contents": {Substitute: "[]*ResourceContents"}},
},
"Resource": {},
"ResourceListChangedNotification": {
@ -195,7 +195,7 @@ func main() {
log.Fatal(err)
}
// Resolve the schema so we have the referents of all the Refs.
if _, err := schema.Resolve("", nil); err != nil {
if _, err := schema.Resolve(nil); err != nil {
log.Fatal(err)
}