Structured Tool Outputs
All MCP tools now return structured output via the MCP structuredContent channel, with auto-generated outputSchema for each tool. Previously, tools returned JSON-encoded strings as plain text — valid but not machine-parseable without extra deserialization.
What this means in practice:
- MCP clients that support
structuredContent (the current spec) get typed, schema-validated JSON objects directly
- Older clients still work — FastMCP automatically includes a serialized JSON
TextContent fallback alongside structured output
- Tools that genuinely return text (
easter_egg, get_step_code) remain as plain text content
Other improvements in this release:
- Hardened error detection: Structured error envelopes use full shape validation (
{"error": {"tool", "message", "type"}}) to avoid false positives when successful results contain an "error" field
- Better analytics: Error types from structured envelopes are now preserved in analytics instead of a generic
"ToolReturnedError" label
- Robust smoke tests: Tests now check
structuredContent, handle both camelCase and snake_case MCP field names, and have explicit TimeoutError handling with increased timeouts for CI stability
- Compatibility note: ZenML >= 0.93.0 is recommended. For older ZenML versions, use earlier MCP server releases
Migration notes
This is a non-breaking change for LLM-based consumers (Claude, GPT, etc.) — they receive the same information via the text fallback. Programmatic clients gain the new structuredContent field they didn't have before. The 16 list tools that previously returned invalid Python repr() output (single-quoted strings) now return valid JSON.
What's Changed
- chore(deps): bump the all-actions group with 3 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/34
- Migrate all MCP tools to structured output (
structuredContent) by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/35
Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.3.0...v1.4.0
What's Changed
- chore(deps): bump the all-actions group with 3 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/34
- Migrate all MCP tools to structured output (
structuredContent) by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/35
Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.3.0...v1.4.0