Conversation
0xeb
added a commit
that referenced
this pull request
Apr 19, 2026
Addresses the CI failures on PR #41: - Format-check: clang-format pass across 26 files flagged by the workflow. Most are pre-existing drift (client/**, providers/search/**, server/streamable_http_server.*, mcp/handler.cpp, etc.) unrelated to F1-F9; the remainder are the F1-F9 surface itself. - base.hpp compile error on gcc/clang: splits BaseSearchTransform(Options opts = {}) into a defaulted no-arg delegating ctor + explicit Options ctor, fixing the "default member initializer needed within definition of enclosing class outside of member functions" diagnostic. Pre-existing on main since 2026-03-18. - streaming_sse and example_streaming_demo flakes: both handlers now return a proper JSON-RPC reply (jsonrpc/id/result) so the server's post-notification dispatch path no longer drops them as malformed. Pre-existing on main. No functional change to F1-F9 logic.
Squash of feature/parity-v3.1.0-post-sync (commit 6f5406c) onto main. Implements the seven parity gaps identified in the post-v3.1.0 review against Python fastmcp v3.1.0-89-g00ed31f2: - F1 typed query-param coercion on resource templates (mirrors Python 9ccaef2b); ValidationError on invalid bool/int/number. - F2 defensive read_fastmcp_metadata helper for _meta.fastmcp / _meta._fastmcp (mirrors 706b56d5). Not yet wired into any production path. - F3 URI-template regex guard rethrowing as ValidationError (hardening on top of 5ff64ce2). Runtime path currently unreachable via any template string given escape_regex() design. - F4 CatalogTransform::get_tool_catalog dedup with _meta.fastmcp.versions injection + Tool::meta()/set_meta() (mirrors 03673d9f + 0142fefe). New util/versions.hpp with dedupe_with_versions<T>(). - F5 preflight rename-collision detection in build_transformed_schema (mirrors d316f193). - F6 mount + query-params: N/A under fastmcpp's direct-dispatch mount, locked by mount_query_params.cpp regression test. - F7 FastMCP::add_custom_route / all_custom_routes + HttpServerWrapper::set_custom_routes (mirrors 68e76fea; ports the @server.custom_route API that didn't previously exist in fastmcpp). - F8 manual-redirect policy comment in StreamableHttpTransport (mirrors 226bfb49). - F9 version bump 3.1.0 -> 3.1.1. Bonus: fixes pre-existing assertion bug in tests/mcp/server_handler.cpp where the tools/list size assertion lagged behind the audio_tool addition in upstream a817ecf. Verification: - Submodule ctest Release suite: 101/103 passing (2 pre-existing flakes fail identically on clean 9afa99f: fastmcpp_streaming_sse and fastmcpp_example_streaming_demo). - Private monorepo interop (parent ports repo): 20/20 across F1/F2/F3/F4/F5/F7; stable over 5 back-to-back runs. See kb/sync/review_of_parity_branch.md in the parent ports repo for the full independent review.
Addresses the CI failures on PR #41: - Format-check: clang-format pass across 26 files flagged by the workflow. Most are pre-existing drift (client/**, providers/search/**, server/streamable_http_server.*, mcp/handler.cpp, etc.) unrelated to F1-F9; the remainder are the F1-F9 surface itself. - base.hpp compile error on gcc/clang: splits BaseSearchTransform(Options opts = {}) into a defaulted no-arg delegating ctor + explicit Options ctor, fixing the "default member initializer needed within definition of enclosing class outside of member functions" diagnostic. Pre-existing on main since 2026-03-18. - streaming_sse and example_streaming_demo flakes: both handlers now return a proper JSON-RPC reply (jsonrpc/id/result) so the server's post-notification dispatch path no longer drops them as malformed. Pre-existing on main. No functional change to F1-F9 logic.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the seven parity gaps surfaced by the independent post-v3.1.0 review
against Python
fastmcpatv3.1.0-89-g00ed31f2. Six mirror specific upstreamcommits; F6 is a regression lock (fastmcpp's direct-dispatch mount model
didn't carry the Python bug), and F7 adds a brand-new public API
(
FastMCP::add_custom_route) that previously didn't exist in the C++ port.The most user-visible change: resource templates with typed query parameters
now coerce values and reject malformed ones at the server instead of silently
passing strings through.
search://{q}{?verbose}withverbose=banananowsurfaces a
ValidationError/ JSON-RPC-32602rather than pass-through.New public interfaces
fastmcpp::resources::ParamKind,ResourceTemplate::build_typed_params()fastmcpp::util::read_fastmcp_metadata()fastmcpp::util::versions::dedupe_with_versions<T>()fastmcpp::tools::Tool::meta()/set_meta()fastmcpp::CustomRoute,FastMCP::add_custom_route(),FastMCP::all_custom_routes()HttpServerWrapper::set_custom_routes()ABI:
ToolandFastMCPgained tail-end fields only. Existing field orderand size unchanged.