The second 4.2 alpha carries every fix from 4.1.5 plus the ones that only land on 4.2: Skills discovery through proxies pages its backends with a bound, pre-4.2 Prefab backend addresses rebind through 4.2 proxies, large tool catalogs expand their schemas faster, and kept-alive stdio transports respect each client's timeout. Before tagging, this build ran against pydantic-ai, langchain, agno, Microsoft Agent Framework, and the OpenAI Agents SDK. Skills support remains experimental; this prerelease is intended for integration testing.
Behavior changes since a1: JSON Schema const and enum compare by JSON equality, so true no longer passes for 1; prompts/get with a missing argument returns invalid params (-32602); OpenAPI upstream errors are cut to 1 KB with HTML bodies dropped, and strict input validation rejects undeclared OpenAPI arguments; a later client with a different timeout restarts an idle kept-alive stdio subprocess, while one nested inside a live client shares its session's timeout and logs a warning.
Thanks to our 22 contributors, including 13 first-time contributors.
What's Changed
Breaking Changes ⚠️
- Make Skill a storage-neutral object with folders as one loader by @zzstoatzz in #6065
Enhancements ✨
- Rename the resource-era list_skills helper to list_skill_summaries by @zzstoatzz in #6051
- Discover skills through mounted servers by @zzstoatzz in #6067
- Share Prefab renderer resources across equivalent tools by @jlowin, @fprieto14, and @keremoktener in #6077
- Export Skill from fastmcp by @zzstoatzz in #6071
- Add skills discovery to ClientGroup by @zzstoatzz in #6072
- Add --skills to fastmcp list by @zzstoatzz in #6073
- Add Client.read_skill and tighten skills docs by @zzstoatzz in #6087
- Verify and export skills with resource-manifest fallback by @zzstoatzz in #6086
- Forward Skills discovery through proxies by @jakekaplan in #5788
- Share strict skill snapshot projection by @zzstoatzz in #6089
- Use scoped local tests and leave full suites to CI by @zzstoatzz in #6094
- Share ClientGroup skill client lookup by @zzstoatzz in #6101
- Share filesystem skill supporting-file reads by @zzstoatzz in #6102
- Deliver concurrent triage reviews, draft fixes and mutation proposals by @zzstoatzz in #6116
- Post Marvin's dedupe and too-long comments from workflow steps by @gaker in #6170
- Remove the unused triage mutation batch by @zzstoatzz in #6208
- Restore the status site by @zzstoatzz in #6216
- Add agno, Agent Framework, and OpenAI Agents SDK to downstream smoke by @zzstoatzz in #6222
Security 🔒
- Verify advertised skill frontmatter when reading content by @zzstoatzz in #6090
- Check skill limits before reading directory and remote files by @zzstoatzz in #6092
- fix: preserve _list_query_params in FastMCPProviderResourceTemplate.wrap by @RS-ITACHI in #6130
- Read composite action inputs from env and pin actions by digest by @gaker in #6168
- Scope the /marvin App token to the permissions it uses by @zzstoatzz in #6206
Fixes 🐞
- Make the version-check InvalidURL regression independent of proxy parsing by @HootRock in #6048
- Build the Prefab renderer page on read, not on resources/list by @adam-zovos in #6039
- Install mounted skills under their own name in sync_skills by @zzstoatzz in #6078
- Stage skill exports before replacing installed files by @zzstoatzz in #6091
- fix: Prefix backend hash addresses with double underscores by @jlowin and @BlueX888 in #6100
- Rebind pre-4.2 Prefab backend addresses through 4.2 proxies by @jakekaplan in #6108
- Isolate and bound triage verification by @zzstoatzz in #6109
- Improve OpenAPI upstream error details by @zzstoatzz and @mssaleh in #6141
- Compare JSON const and enum values by JSON equality by @prassu017 and @alpaylan in #6126
- Bound Skills proxy backend pagination by @prassu017 and @Yash-Tripath1 in #6104
- fix: forward script arguments in FastMCPStdioTransport by @KashifManzer and @BlueX888 in #6119
- Return invalid params for prompts/get with a missing required argument by @asasemahmed and @xubenqiang in #6027
- Fix kept-alive stdio transports ignoring client timeouts by @HootRock and @BlueX888 in #6156
- perf(schema): skip unnecessary reference sibling restoration by @andreivince in #6161
- fix(cli): prefer Claude Code project servers by @mikamikasuki in #5522
- fix(cli): preserve JSON content block fields by @mikamikasuki in #5530
- Keep schema definitions when hydrating a wrapped tool result by @asasemahmed in #5927
- Reject undeclared OpenAPI tool arguments under strict input validation by @prassu017 and @mssaleh in #6140
- fix(resources): reverse hostless URIs through Namespace unchanged by @serhiizghama and @andreivince in #5230
- fix(openapi): preserve timeouts so the server maps them to the actionable message by @BlueX888 in #5847
- Keep posted review receipts on partial delivery and reject differing reviews by @zzstoatzz in #6178
- Drop client context holds left by finished tasks by @zzstoatzz in #6205
- Let clients with different timeouts share a kept-alive stdio session by @zzstoatzz in #6223
Docs 📚
- Consolidate skills docs into one Skills over MCP page by @zzstoatzz in #6049
- Rewrite skills docs around Skill and SkillCatalogProvider by @zzstoatzz in #6066
- Tighten skills docs examples by @zzstoatzz in #6070
- Shorten the skills docs page by @zzstoatzz in #6079
- Badge the skills page as 4.2.0 by @zzstoatzz in #6083
- Consolidate skills examples around verified Skill values by @zzstoatzz in #6093
- Add v4.2.0a1 changelog entries by @zzstoatzz in #6105
- Add MCP tool annotations to get_file example by @gl1tchdust in #5976
- Fix dead links in current documentation by @zzstoatzz in #6142
- docs: rename Horizon to FastMCP Gateway in current docs by @parkedwards in #5653
- Document strict-mode handling of undeclared OpenAPI arguments by @zzstoatzz in #6169
New Contributors
- @adam-zovos made their first contribution in #6039
- @gl1tchdust made their first contribution in #5976
- @RS-ITACHI made their first contribution in #6130
- @prassu017 made their first contribution in #6126
- @KashifManzer made their first contribution in #6119
- @serhiizghama made their first contribution in #5230
- @gaker made their first contribution in #6168
- @fprieto14 made their first contribution in #6077
- @keremoktener made their first contribution in #6077
- @mssaleh made their first contribution in #6141
- @alpaylan made their first contribution in #6126
- @xubenqiang made their first contribution in #6027
- @Yash-Tripath1 made their first contribution in #6104
Full Changelog: v4.1.4...v4.2.0a2