[4.1.0] - 2026-03-02
Changed
- TOP: Breaking: Migrate from FastMCP v2 to v3 — adopt
call_toolfor tool invocation,
enable()/disable()visibility API for tool lifecycle, andlist_tools()for async tool discovery,
replacing removed_call_tool_middleware,_schedule_tool_disablement, andserver.toolsdict - Breaking: Require
fastmcp>=3.0.2,<4— drop all v2 compatibility shims and the_fastmcp_envmodule - Improve diagnostic tool discovery to use FastMCP v3 async
list_tools()API exclusively,
replacing the deprecatedserver.toolsdict andget_tools()method fallbacks - Sanitize upstream BitSight OpenAPI schema at load time to handle invalid
"properties": nullentries
without modifying the bundled spec - Update error messages in v1 bridge to be version-agnostic for clearer debugging
Added
- Add
_sanitize_null_propertiespre-processor to strip upstream schema quirks before OpenAPI validation - Add
_list_server_toolshelper centralising async tool enumeration for diagnostics - Add tests for schema sanitization, tool discovery assertions, and edge-case handling
Removed
- Remove
_fastmcp_env.pycompatibility shim (no longer needed with FastMCP v3) - Remove
FunctionToolimports from domain services (v3 auto-generates tool wrappers) - Remove v2
_call_tool_middlewareand_schedule_tool_disablementpatterns from server module - Remove fallback tool discovery via
server.toolsdict,get_tools(), and attribute probing
Fixed
- Fix unawaited coroutine in
_fetch_and_normalize_findingswherecall_v1_toolresult was not
properly awaited, causing findings to silently return empty — restore defensive conditional await
viainspect.isawaitable - Fix selftest reporting all tools as "not registered" after FastMCP v3 upgrade by migrating tool
discovery tolist_tools()API
Full Changelog: v4.0.0...v4.1.0