Azure / Azure/azure-functions-java-worker
[MCP Tool] Implement ability to specify outputSchema on tools
@ahmedmuhsin is already working on this.
Since Apr 14, 2026.
- Dominant language
- Java
- Stars
- 103
- Forks
- 74
- Avg merge
- 4d 8h
- Merged PRs (30d)
- 2
Description
Implement support for specifying an outputSchema on MCP tool definitions. This allows tools to declare the JSON schema of their structured output, enabling clients to validate and better understand tool responses.
Background
The MCP specification allows tools to declare an output schema that describes the structure of the tool's return value. This is separate from the input schema (which describes the tool's parameters).
MCP Specification: https://modelcontextprotocol.io/specification/2025-06-18/server/tools#output-schema
Output Schema: Worker ↔ Host Contract (based off of this PR)
1. Worker side — configuration
The user calls the fluent builder:
builder.ConfigureMcpTool("MyTool")
.WithOutputSchema("""{ "type": "object", "properties": { ... } }""");
WithOutputSchema validates the JSON string and stores it as McpOutputSchema on ToolOptions.
2. Worker side — metadata emission
During function metadata transformation, ResolveToolOutputSchemaExtension reads ToolOptions.OutputSchema and writes its validated JSON string onto McpParsedBinding.OutputSchema. McpBindingBuilder.Build() then injects it into the raw binding JSON under the key:
"outputSchema": "<validated json string>"
No flag (analogous to useWorkerInputSchema) is needed — if the key is present there is a schema; if absent, there isn't.
3. Host side — reading the contract
McpToolTriggerAttribute exposes OutputSchema (string?) populated from the raw binding JSON. McpToolTriggerBinding.GetOutputSchema() parses and validates it, requiring:
- Valid JSON
- Root must be
type: "object"(validated viaMcpInputSchemaJsonUtilities.IsValidMcpToolJsonSchema)
The resulting JsonElement? is passed to McpToolListener, which advertises it as the tool's outputSchema in the MCP tools/list response.
Summary
| Step | Location | Binding key |
|---|---|---|
| User configures schema | McpToolBuilder.WithOutputSchema() (worker) |
— |
| Schema validated + stored | McpOutputSchema / McpToolSchemaValidator (worker) |
— |
| Schema written to raw binding | ResolveToolOutputSchemaExtension → McpBindingBuilder (worker) |
outputSchema |
| Host reads from binding attr | McpToolTriggerAttribute.OutputSchema (host) |
outputSchema |
| Host validates + registers | McpToolTriggerBinding.GetOutputSchema() (host) |
— |
| Host advertises to MCP client | McpToolListener → tools/list response (host) |
outputSchema in tool descriptor |
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.