Tool result structuredContent dropped on the wire (TypeScript)
A TypeScript tool handler that returns McpToolResponse with structuredContent populated produces a JSON-RPC response that's missing the structuredContent field. The content blocks come through correctly; only structuredContent is stripped.
Reproducer
Standalone repo: https://github.com/YuanboXue-Amber/functions-mcp-structuredcontent-repro
Versions
| Component |
Version |
@azure/functions (npm) |
4.14.0 |
Microsoft.Azure.Functions.Extensions.Mcp |
1.5.0 (via extensionBundle 4.35.0) |
| Extension bundle pin |
[4.0.0, 5.0.0) |
| Node |
22.x |
| Azure Functions Core Tools |
4.9.0 |
Steps to reproduce
// src-ts/functions/echoStructured.ts
import functionsPkg from "@azure/functions";
const { app, McpToolResponse, McpTextContent } = functionsPkg;
app.mcpTool("echoStructured", {
toolName: "echo-structured",
description:
'Returns hello in content[0] and { foo: "bar" } in structuredContent.',
toolProperties: {},
handler: async () =>
new McpToolResponse({
content: [new McpTextContent("hello")],
structuredContent: { foo: "bar" },
}),
});
func start, then call the tool:
SID=$(curl -s -i -X POST http://localhost:7071/runtime/webhooks/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"repro","version":"0.0.1"}}}' \
| grep -i 'mcp-session-id:' | tr -d '\r' | sed 's/.*: //')
curl -s -X POST http://localhost:7071/runtime/webhooks/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "mcp-session-id: $SID" \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"echo-structured","arguments":{}}}'
Expected
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "hello" }],
"structuredContent": { "foo": "bar" }
}
}
Actual
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "hello" }]
}
}
structuredContent is absent from the wire response.
Tool result
structuredContentdropped on the wire (TypeScript)A TypeScript tool handler that returns
McpToolResponsewithstructuredContentpopulated produces a JSON-RPC response that's missing thestructuredContentfield. Thecontentblocks come through correctly; onlystructuredContentis stripped.Reproducer
Standalone repo: https://github.com/YuanboXue-Amber/functions-mcp-structuredcontent-repro
Versions
@azure/functions(npm)Microsoft.Azure.Functions.Extensions.McpextensionBundle4.35.0)[4.0.0, 5.0.0)Steps to reproduce
func start, then call the tool:Expected
{ "jsonrpc": "2.0", "id": 2, "result": { "content": [{ "type": "text", "text": "hello" }], "structuredContent": { "foo": "bar" } } }Actual
{ "jsonrpc": "2.0", "id": 2, "result": { "content": [{ "type": "text", "text": "hello" }] } }structuredContentis absent from the wire response.