Skip to content

Conversation

@Kvadratni
Copy link
Contributor

Pull Request Description

Updates RMCP to latest version

@Kvadratni Kvadratni force-pushed the mnovich/upgrade-rmcp branch 4 times, most recently from 6b29202 to 6a9a698 Compare September 4, 2025 21:59
@Kvadratni Kvadratni force-pushed the mnovich/upgrade-rmcp branch from 6a9a698 to 50a8c25 Compare September 4, 2025 22:20
@Kvadratni Kvadratni marked this pull request as ready for review September 4, 2025 23:38
@jamadeo jamadeo requested a review from alexhancock September 5, 2025 01:33
Copy link
Collaborator

@jamadeo jamadeo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this!

cc @alexhancock

RawContent::Image(image) => {
MessageContent::Image(image.optional_annotate(content.annotations))
}
RawContent::ResourceLink(_link) => MessageContent::text("[Resource link]"),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we definitely need to do more here, but it's not clear to me exactly what that should be. Maybe just a JSON dump with the name, URI and description? then if the model decides to read it, we let it call read_resource?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. This implementation was literally just a cargo clippy satisfying minimal change. We might want to merge and decide later

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, I added resource_link support to the RCMP, but am unsure if I did it right. Or maybe the problem is what you are asking about @jamadeo?

I made this dummy tool

server.tool(
        "resource-link-demo",
        "A demo of a resource link that displays a fake demo text file.",
        {},
        async (): Promise<CallToolResult> => {
            return {
                content: [
                    {
                        type: "resource_link",
                        uri: "file:///project/src/fake-demo.txt",
                        name: "fake-demo.txt",
                        description:
                            "Fake demo text file to test for resource link data.",
                        mimeType: "text/plain",
                        annotations: {
                            audience: ["assistant"],
                            priority: 0.9,
                        },
                    },
                ],
            };
        }
    );

When I ran Goose from this PR branch, it looks like my tool is called but nothing is returned in the tool call output:
image

I would expect all data that conforms to the resource link spec to show in the output, like the MCP inspector is showing here:

image

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aharvard what I mean is, now that the support is there in rmcp (thank you!) it's up to Goose to do the right thing. In this PR it turns all resource links into some text "[Resource link]" which is surely not what we want.

It wasn't totally clear to me what Goose should do with it though. I think we want to show the link to the model, allowing the model to then call read_resource with the URL if it wants to? Should it also render something in the UI?

If the answer is that we're not sure yet, I'd say lets start by dumping the json, that way the model at least sees the whole result @Kvadratni

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this is an example of an interesting "what should the host do?" question when working with MCP.

I think something which provides the full json (including URI of the resource) with "audience": ["assistant"] in the message should be good?

Optionally we could render a little bubble inside the tool result similar to what inspector does showing the URI, but less critical than making sure the model sees it.

In any case, I think we should merge the package upgrade to get that in, then do this in a separate focused change. Two smaller changes not coupled to eachother is better.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexhancock & @jamadeo, I'm chatting with @kentcdodds about his POV for resource_link — he's got a really awesome MCP workshop that leverages the technique. Maybe we could start a new issue to discuss the topic?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Absolutely!

@kentcdodds if you have thoughts on how a host can make the best experience for resource links (or other data types we don't represent yet) we're all ears to incorporate emerging patterns.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I haven't used Goose with resources at all yet, but is there somewhere in Goose that shows a list of the available resources that a user can add to Context? That's what I think should happen: when a resource_link shows up, that resource should appear in the list of resources that the user can add to Context, so basically when a tool responds with a resource_link, give the user the option of whether they want to include that in Context.

@aharvard
Copy link
Collaborator

aharvard commented Sep 5, 2025

Nice! Happy to report _meta is now flowing thru as expected.
image

@alexhancock alexhancock merged commit 195f389 into main Sep 5, 2025
11 checks passed
@alexhancock alexhancock deleted the mnovich/upgrade-rmcp branch September 5, 2025 13:54
@aharvard
Copy link
Collaborator

aharvard commented Sep 5, 2025

.bundle

@github-actions
Copy link
Contributor

github-actions bot commented Sep 5, 2025

macOS ARM64 Desktop App (Apple Silicon)

📱 Download macOS Desktop App (arm64, unsigned)

Instructions:
After downloading, unzip the file and drag the Goose.app to a location you prefer. The app is unsigned, so to run it run xattr -r -d com.apple.quarantine '/path/to/Goose.app' and then open the app

@kentcdodds
Copy link

This is great! It successfully passes renderData through for me which allows me to send private data through to the UI for display 🎉

And resource_link not breaking stuff is a nice touch too :)

image

Thank you for this!

michaelneale added a commit that referenced this pull request Sep 8, 2025
* main:
  docs: social channels (#4552)
  feat: simplify navigation, make reload work (#4498)
  docs: new recipe warning (#4545)
  Add AGENTS.md for AI coding assistant support (#4539)
  docs: non-interactive compact now (#4543)
  fixed css classes and added some accessibility fixes (#4492)
  feat(acp): Read files (#4531)
  Add YouTube Short to Auto Visualiser Tutorial (#4536)
  Fix/settings page (#4520)
  update to RMCP 0.6.2 (#4523)
katzdave added a commit that referenced this pull request Sep 8, 2025
* 'main' of github.com:block/goose:
  docs: add ampersand to link (#4560)
  Add video link to README for user guidance (#4553)
  docs: social channels (#4552)
  feat: simplify navigation, make reload work (#4498)
  docs: new recipe warning (#4545)
  Add AGENTS.md for AI coding assistant support (#4539)
  docs: non-interactive compact now (#4543)
  fixed css classes and added some accessibility fixes (#4492)
  feat(acp): Read files (#4531)
  Add YouTube Short to Auto Visualiser Tutorial (#4536)
  Fix/settings page (#4520)
  update to RMCP 0.6.2 (#4523)
  docs: nested goosehints (#4528)
  feat: Agent Client Protocol implementation of goose (#4511)
  feat: make tests for rmcp based developer server consistent with former implementation (#4519)
  worlds simplest logging to see where things are blocked (#3888)
  docs: update quickstart and install topics (#4378)
  feat: Add configurable Bedrock retry parameters (#4316)
  remove localstorage getconfig fallbacks (#4432)
  chore(deps-dev): bump electron from 37.2.6 to 37.4.0 in /ui/desktop (#4516)
tiensi added a commit to tiensi/goose that referenced this pull request Sep 8, 2025
* main: (43 commits)
  feat: add auto-compact threshold configuration UI (block#4178)
  Add container detection to developer extension (block#4559)
  docs: add ampersand to link (block#4560)
  Add video link to README for user guidance (block#4553)
  docs: social channels (block#4552)
  feat: simplify navigation, make reload work (block#4498)
  docs: new recipe warning (block#4545)
  Add AGENTS.md for AI coding assistant support (block#4539)
  docs: non-interactive compact now (block#4543)
  fixed css classes and added some accessibility fixes (block#4492)
  feat(acp): Read files (block#4531)
  Add YouTube Short to Auto Visualiser Tutorial (block#4536)
  Fix/settings page (block#4520)
  update to RMCP 0.6.2 (block#4523)
  docs: nested goosehints (block#4528)
  feat: Agent Client Protocol implementation of goose (block#4511)
  feat: make tests for rmcp based developer server consistent with former implementation (block#4519)
  worlds simplest logging to see where things are blocked (block#3888)
  docs: update quickstart and install topics (block#4378)
  feat: Add configurable Bedrock retry parameters (block#4316)
  ...
This was referenced Sep 9, 2025
thebristolsound pushed a commit to thebristolsound/goose that referenced this pull request Sep 11, 2025
Signed-off-by: Matt Donovan <mattddonovan@protonmail.com>
HikaruEgashira pushed a commit to HikaruEgashira/goose that referenced this pull request Oct 3, 2025
Signed-off-by: HikaruEgashira <hikaru-egashira@c-fo.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants