mcp 2.0.0 moved mcp.server.fastmcp to mcp.server.mcpserver, renamed FastMCP
to MCPServer, and drops the [fastmcp] extra this file requests. With no upper
bound, the next image rebuild resolves to 2.0.0 and the server crash-loops on
import.
That is not hypothetical: it happened to zerto-docs on 2026-08-11 at 02:27
UTC and took the server down until the host was rolled back. This repo shares
the same unpinned line and would fail identically on its next rebuild.
A ceiling, not a migration. The 2.x port is small (the import, the
constructor, and stateless_http moving from the constructor to run()) but it
changes how tool schemas are emitted, which is what decides tool routing, so
it wants a before/after tools/list diff rather than a version bump.
Phase 1: scrape User Manual (8.1.0/.1/.2), Release Notes (8.1.0/.1/.2),
and the unversioned Deployment Guide. Total ~1,160 pages, 9.7 MB markdown.
Discovers via the anonymous JSON API at /hpesc/public/api/document/{docId}:
/toc walks the page tree (for TOC-paginated docs), /render?page=GUID
fetches per-page HTML, /document/{docId} returns the whole body for
single-doc shapes like Release Notes.
Runner converts DITA-source HTML to clean markdown (strips Notices/
Acknowledgments/Abstract boilerplate), writes corpus/<bundle>/<page>.{md,json},
then a finalize pass synthesizes topic_cluster.clustered_topics by GUID
overlap across versions (HPE GUIDs are stable cross-version — confirmed
374/376/376 with 100% overlap on shared pages).
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>