Azure / Azure/azure-functions-java-worker

[MCP Tool] Implement ability to specify outputSchema on tools

Open
#858 0 comments 0 reactions 1 assignee View on GitHub

@ahmedmuhsin is already working on this.

Since Apr 14, 2026.

mcp-extension
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 via McpInputSchemaJsonUtilities.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 ResolveToolOutputSchemaExtensionMcpBindingBuilder (worker) outputSchema
Host reads from binding attr McpToolTriggerAttribute.OutputSchema (host) outputSchema
Host validates + registers McpToolTriggerBinding.GetOutputSchema() (host)
Host advertises to MCP client McpToolListenertools/list response (host) outputSchema in tool descriptor

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.