Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #107
This PR adds full support for the
_metafield as specified in the MCP specification. Users can now attach metadata at three different levels: on tools/resources/prompts (in listings), on the result envelope (for execution metadata), and on individual content items.Why This Is Needed
The
_metafield is part of the official MCP specification, but Laravel MCP didn't support it. This is a problem because:_metasupport, Laravel MCP couldn't be used with these important toolsWhat This PR Adds
Three Levels of Metadata Support
Metadata that describes the tool, resource, or prompt itself. This appears in
tools/list,resources/list, andprompts/listresponses.Metadata about the execution or result. This appears at the top level of the response, alongside
contentandisError.Metadata specific to individual content items. This appears in each content object's
_metafield.How to Use It
Basic Content Metadata
Add metadata to individual response content:
Result-Level Metadata
Add metadata about the entire result using
ResponseFactory:Multiple Responses with Result Metadata
Return multiple content items with shared result metadata:
Streaming Responses with Metadata
Use generators to stream content with metadata:
Array of Responses with Individual Metadata
Return an array where each response has its own metadata:
Tool/Resource/Prompt Metadata (In Listings)
Define metadata directly on the class for it to appear in list responses:
This metadata will appear when clients call
tools/list.Backward Compatibility
This change is fully backward compatible. Existing tools that return
Responseobjects directly will continue to work. We automatically wraps them in aResponseFactoryinternally.