Skip to content

Conversation

bzsurbhi
Copy link

@bzsurbhi bzsurbhi commented May 7, 2025

Add outputSchema support to MCP tools

Motivation and Context

Implemented changes in PR for outputSchema

Key implementation details:

  1. Added outputSchema field to the Tool class to store the JSON schema for tool outputs
  2. Enhanced func_metadata to extract return type annotations and generate JSON schemas
  3. Graceful error handling when schema generation fails (logs warning but doesn't break functionality)

How Has This Been Tested?

Added tests with tools using various return types including:

  • Simple types (string, int, bool)
  • Complex types (Pydantic models)
  • None return types
  • Collection types (lists, dictionaries)

Breaking Changes

No breaking changes. The outputSchema is optional and backward compatible with existing tools.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

@bzsurbhi bzsurbhi marked this pull request as draft May 13, 2025 22:16
@bzsurbhi bzsurbhi marked this pull request as ready for review May 23, 2025 00:16
@bzsurbhi bzsurbhi changed the title OutputSchema support to MCP tools OutputSchema support in MCP tools May 23, 2025
@ihrpr ihrpr added this to the r-06-25 milestone May 23, 2025
src/mcp/types.py Outdated
model_config = ConfigDict(extra="allow")


class DataContent(BaseModel):

Choose a reason for hiding this comment

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

Slightly confused didn't modelcontextprotocol/modelcontextprotocol#356 get paused awaiting more evidence extra complexity is worth while.

Copy link
Author

Choose a reason for hiding this comment

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

You're right. I updated the PR as per the new schema

@davemssavage
Copy link

Looks like I missed this merge request, I'm happy for maintainers to cherry pick from #685 the bits you want to keep, if you want any help in cherry picking let me know

@felixweinberger
Copy link
Contributor

Apologies for the time it took to get to this and thank you for your contribution.

I believe this would have already been implemented as part of #1005 which adds structured output support.

I'm therefore closing this PR but do feel free to re-open if there's a misunderstanding or you were intending to implement something different!

@felixweinberger felixweinberger added the duplicate This issue or pull request already exists label Sep 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

duplicate This issue or pull request already exists

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants