fastmcp/tests/server
d 🔹 68e76fea2e
fix: forward custom_route endpoints from mounted servers (#3462)
* fix: forward custom_route endpoints from mounted servers

When a child server with custom HTTP routes (registered via
@server.custom_route()) is mounted onto a parent, the routes were
silently dropped because _get_additional_http_routes() only returned
self._additional_http_routes without recursing into mounted providers.

This caused 404s for endpoints like /readyz health checks that worked
in v2 but broke in v3 (regression).

The fix updates _get_additional_http_routes() to traverse providers,
unwrap _WrappedProvider layers (from namespace transforms), find
FastMCPProvider instances, and recursively collect their server's
custom routes.

Fixes #3457

* fix: narrow type annotation from BaseRoute to Route

All items in _additional_http_routes are Route objects (created via
Route(...) in custom_route()). Using list[Route] instead of
list[BaseRoute] fixes the ty type checker failure where .path is
accessed on BaseRoute which doesn't have that attribute.

Removes unused BaseRoute imports from both server.py and transport.py.

* fix: revert route type to list[BaseRoute] to fix ty errors

The previous commit narrowed _additional_http_routes from list[BaseRoute]
to list[Route], which broke:
- component_manager appending Mount objects (Mount is BaseRoute, not Route)
- tests assigning list[BaseRoute] variables (generics are invariant)

Revert to list[BaseRoute] and use isinstance(r, Route) guards in tests
for type-safe .path access.

* fix: remove unused import and fix import grouping

- Remove unused `Route` import from server.py
- Fix import grouping in test_advanced.py (ruff check)

* Address review: move imports to module root, type Provider, add collision note

* fix: sort imports in transport.py

---------

Co-authored-by: voidborne-d <voidborne-d@users.noreply.github.com>
Co-authored-by: d 🔹 <258577966+voidborne-d@users.noreply.github.com>
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2026-03-13 20:37:22 -04:00
..
auth fix: resolve ty 0.0.23 type-checking errors and bump pin (#3481) 2026-03-13 19:45:14 -04:00
http Fix ty 0.0.17 diagnostics and bump lockfile 2026-02-16 16:13:38 -05:00
middleware Re-hash response cache keys 🤖 Generated with GPT-5.2-Codex (#3414) 2026-03-07 11:40:53 -05:00
mount fix: forward custom_route endpoints from mounted servers (#3462) 2026-03-13 20:37:22 -04:00
providers Cache component lists in ProxyProvider (#3479) 2026-03-13 19:44:45 -04:00
sampling Add helpers for converting FunctionTool and TransformedTool to SamplingTool (#3062) 2026-02-11 19:43:03 -06:00
tasks fix: shield lifespan teardown from cancellation (#3480) 2026-03-13 19:47:42 -04:00
telemetry Fix ty 0.0.17 diagnostics and bump lockfile 2026-02-16 16:13:38 -05:00
transforms Set readOnlyHint=True on ResourcesAsTools generated tools 2026-03-13 17:32:21 -05:00
versioning Fix get_* returning None when latest version is disabled (#3439) 2026-03-07 11:55:10 -05:00
__init__.py restore 1.x code 2025-04-09 11:54:42 -04:00
test_app_state.py Update docs and test 2025-06-20 13:06:48 -04:00
test_auth_integration.py Split large test files to comply with loq line limit (#3328) 2026-02-28 11:21:11 -05:00
test_auth_integration_errors.py Split large test files to comply with loq line limit (#3328) 2026-02-28 11:21:11 -05:00
test_context.py Support non-serializable values in Context.set_state (#3171) 2026-02-12 15:06:42 -06:00
test_dependencies.py Replace vendored DI with uncalled-for (#3301) 2026-03-02 16:35:15 -05:00
test_dependencies_advanced.py Replace vendored DI with uncalled-for (#3301) 2026-03-02 16:35:15 -05:00
test_event_store.py Replace type: ignore[attr-defined] with isinstance assertions in tests (#2665) 2025-12-21 16:37:20 -05:00
test_file_server.py Add MCP-compliant pagination for list operations 2026-01-17 19:30:24 -05:00
test_icons.py Implement icon support (#2121) 2025-10-17 17:28:08 -04:00
test_input_validation.py Replace type: ignore[attr-defined] with isinstance assertions in tests (#2665) 2025-12-21 16:37:20 -05:00
test_log_level.py Refactor server.py into mixins (#2939) 2026-01-19 11:36:00 -05:00
test_logging.py Refactor server.py into mixins (#2939) 2026-01-19 11:36:00 -05:00
test_pagination.py Bound client auto-pagination loops to prevent unbounded list fetches (#3411) 2026-03-06 17:43:47 -05:00
test_providers.py fix: resolve ty 0.0.23 type-checking errors and bump pin (#3481) 2026-03-13 19:45:14 -04:00
test_run_server.py Update tests for prompts 2025-06-04 16:37:41 -04:00
test_server.py Expose local_provider property, deprecate FastMCP.remove_tool() (#3155) 2026-02-11 19:37:19 -06:00
test_server_docket.py Make pydocket optional and unify DI systems (#2835) 2026-01-10 16:23:32 -05:00
test_server_lifespan.py fix: shield lifespan teardown from cancellation (#3480) 2026-03-13 19:47:42 -04:00
test_session_visibility.py Fix session visibility marks leaking across sessions (#3132) 2026-02-10 11:42:43 -05:00
test_streamable_http_no_redirect.py Improve redirect handling to address 307's (#1387) 2025-08-08 11:55:30 -04:00
test_tool_annotations.py Unify discovery API: deduplicate at protocol layer only (#2919) 2026-01-18 21:01:53 -05:00
test_tool_transformation.py Normalize repo references to PrefectHQ/fastmcp casing (#3218) 2026-02-18 14:51:18 -05:00