Fixed
- Tools/list wire format:
inputSchemawas being published as a serialized Zod object instead of valid JSON Schema. Combined with the move tozod@^4.1.12in v0.8.4, this caused MCP clients to receive empty schemas ({ properties: {} }) and strip all arguments before sending — every tool call hit the server with no inputs, surfacing asexpected string, received undefinederrors. See #29 for the full diagnosis.
Changed
- SDK Upgrade:
@modelcontextprotocol/sdk0.7.0 → ^1.29.0 (~1.5 years of protocol/security updates). - Migrated to
McpServer.registerTool(): replaced the low-levelServer+setRequestHandlerpattern. The SDK now owns Zod → JSON Schema conversion, validation, and dispatch — removed ~200 lines of hand-rolled boilerplate. - Tool input schemas now defined as raw Zod shapes (e.g.
{ url: z.string().url() }) so the SDK can emit proper JSON Schema on the wire.
Added
tests/test-tools-schema.mjs— spawn-based wire-level regression test that asserts every tool publishes valid JSON Schema with non-emptypropertiestotools/list. Guards against this class of bug recurring.
Documentation
- README and CLAUDE.md now document all 10 registered tools (added the missing
ytdlp_get_video_comments/ytdlp_get_video_comments_summaryentries).
Thanks to @johnnyshankman for the precise diagnosis (#29) and the PR (#28), and to @antonkushpil for the parallel fix in #27.
Install / upgrade:
npx @kevinwatt/yt-dlp-mcp@0.8.5