fastmcp 2.10.5__tar.gz → 2.11.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/bug.yml +13 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/release.yml +0 -4
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/run-static.yml +2 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/run-tests.yml +26 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.pre-commit-config.yaml +6 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/PKG-INFO +4 -3
- {fastmcp-2.10.5 → fastmcp-2.11.0}/README.md +2 -2
- fastmcp-2.11.0/docs/.ccignore +2 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/changelog.mdx +185 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/auth/oauth.mdx +2 -1
- fastmcp-2.11.0/docs/clients/logging.mdx +111 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/prompts.mdx +29 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/resources.mdx +33 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/tools.mdx +29 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/transports.mdx +73 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/deployment/running-server.mdx +36 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/docs.json +27 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/anthropic.mdx +8 -8
- fastmcp-2.11.0/docs/integrations/authkit.mdx +103 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/claude-code.mdx +46 -6
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/claude-desktop.mdx +65 -6
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/cursor.mdx +65 -8
- fastmcp-2.11.0/docs/integrations/eunomia-authorization.mdx +130 -0
- fastmcp-2.11.0/docs/integrations/fastapi.mdx +446 -0
- fastmcp-2.11.0/docs/integrations/images/authkit/enable_dcr.png +0 -0
- fastmcp-2.11.0/docs/integrations/images/permit/abac_condition_example.png +0 -0
- fastmcp-2.11.0/docs/integrations/images/permit/abac_policy_example.png +0 -0
- fastmcp-2.11.0/docs/integrations/images/permit/policy_mapping.png +0 -0
- fastmcp-2.11.0/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/mcp-json-configuration.mdx +115 -49
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/openai.mdx +8 -8
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/openapi.mdx +57 -0
- fastmcp-2.11.0/docs/integrations/permit.mdx +353 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/cli.mdx +111 -26
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/tool-transformation.mdx +85 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-claude.mdx +2 -2
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-cli.mdx +80 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-__init__.mdx +9 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +71 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +58 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-cursor.mdx +81 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +49 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-shared.mdx +31 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-run.mdx +142 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +2 -2
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-auth-oauth.mdx +152 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-client.mdx +499 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-elicitation.mdx +18 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-logging.mdx +20 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-messages.mdx +107 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +5 -5
- fastmcp-2.11.0/docs/python-sdk/fastmcp-client-progress.mdx +25 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-roots.mdx +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-sampling.mdx +1 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-transports.mdx +111 -15
- fastmcp-2.11.0/docs/python-sdk/fastmcp-exceptions.mdx +65 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-mcp_config.mdx +188 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-prompts-prompt.mdx +114 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +89 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-resource.mdx +120 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +77 -7
- fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-template.mdx +143 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-resources-types.mdx +134 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-auth.mdx +30 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +152 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +2 -2
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +96 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-context.mdx +321 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-dependencies.mdx +3 -3
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-elicitation.mdx +54 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-http.mdx +8 -8
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-low_level.mdx +18 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +23 -3
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-logging.mdx +51 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +108 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +97 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-middleware-timing.mdx +105 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-openapi.mdx +91 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-server-proxy.mdx +324 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-server.mdx +246 -40
- fastmcp-2.11.0/docs/python-sdk/fastmcp-settings.mdx +78 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool.mdx +114 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool_manager.mdx +131 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-tools-tool_transform.mdx +286 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-cli.mdx +25 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-components.mdx +99 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-http.mdx +1 -1
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-inspect.mdx +94 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +1 -1
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +110 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-logging.mdx +2 -2
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-openapi.mdx +179 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-tests.mdx +12 -2
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-types.mdx +139 -0
- fastmcp-2.11.0/docs/servers/auth/authentication.mdx +167 -0
- fastmcp-2.11.0/docs/servers/auth/full-oauth-server.mdx +128 -0
- fastmcp-2.11.0/docs/servers/auth/remote-authentication.mdx +146 -0
- fastmcp-2.11.0/docs/servers/auth/token-verification.mdx +210 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/context.mdx +46 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/logging.mdx +45 -3
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/middleware.mdx +68 -4
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/prompts.mdx +9 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/proxy.mdx +11 -12
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/resources.mdx +73 -15
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/sampling.mdx +1 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/server.mdx +36 -34
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/tools.mdx +113 -50
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/rest-api.mdx +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/justfile +1 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/pyproject.toml +12 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/__init__.py +7 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/cli.py +128 -33
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/__init__.py +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_code.py +42 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_desktop.py +42 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/cursor.py +42 -1
- fastmcp-2.10.5/src/fastmcp/cli/install/mcp_config.py → fastmcp-2.11.0/src/fastmcp/cli/install/mcp_json.py +51 -7
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/run.py +127 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/__init__.py +2 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/oauth.py +68 -99
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/oauth_callback.py +18 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/transports.py +69 -15
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/example.py +2 -2
- fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/README.md +266 -0
- fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/__init__.py +38 -0
- fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/components.py +348 -0
- fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/routing.py +132 -0
- fastmcp-2.11.0/src/fastmcp/experimental/server/openapi/server.py +466 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/README.md +239 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/__init__.py +68 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/director.py +208 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/formatters.py +355 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +340 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/models.py +85 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/parser.py +618 -0
- fastmcp-2.11.0/src/fastmcp/experimental/utilities/openapi/schemas.py +538 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/mcp_config.py +125 -88
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt.py +11 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt_manager.py +1 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/resource.py +21 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/resource_manager.py +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/template.py +20 -1
- fastmcp-2.11.0/src/fastmcp/server/auth/__init__.py +19 -0
- fastmcp-2.11.0/src/fastmcp/server/auth/auth.py +197 -0
- fastmcp-2.11.0/src/fastmcp/server/auth/providers/bearer.py +25 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/in_memory.py +4 -2
- fastmcp-2.10.5/src/fastmcp/server/auth/providers/bearer.py → fastmcp-2.11.0/src/fastmcp/server/auth/providers/jwt.py +207 -142
- fastmcp-2.11.0/src/fastmcp/server/auth/providers/workos.py +170 -0
- fastmcp-2.11.0/src/fastmcp/server/auth/registry.py +52 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/context.py +110 -26
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/dependencies.py +9 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/http.py +62 -30
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/middleware.py +3 -23
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/openapi.py +26 -13
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/proxy.py +89 -8
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/server.py +170 -62
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/settings.py +83 -18
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool.py +41 -6
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool_manager.py +39 -3
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/tool_transform.py +122 -6
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/components.py +35 -2
- fastmcp-2.11.0/src/fastmcp/utilities/json_schema.py +213 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/json_schema_type.py +1 -3
- fastmcp-2.11.0/src/fastmcp/utilities/mcp_config.py +28 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/openapi.py +306 -30
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/tests.py +54 -6
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/types.py +89 -11
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_cli.py +210 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_cursor.py +3 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_install.py +94 -8
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_run.py +61 -0
- fastmcp-2.11.0/tests/cli/test_run_with_uv.py +240 -0
- fastmcp-2.11.0/tests/client/auth/test_oauth_client.py +128 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_client.py +12 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_logs.py +35 -5
- fastmcp-2.11.0/tests/client/test_openapi_experimental.py +201 -0
- fastmcp-2.11.0/tests/client/test_openapi_legacy.py +198 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_sampling.py +59 -4
- fastmcp-2.11.0/tests/client/transports/test_uv_transport.py +98 -0
- fastmcp-2.11.0/tests/conftest.py +9 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_component_manager.py +6 -7
- fastmcp-2.11.0/tests/deprecated/test_bearer_auth_provider.py +13 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_settings.py +2 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/__init__.py +1 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_comprehensive.py +706 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_deepobject_style.py +338 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_end_to_end_compatibility.py +323 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_openapi_features.py +391 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_parameter_collisions.py +215 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_performance_comparison.py +291 -0
- fastmcp-2.11.0/tests/experimental/server/openapi/test_server.py +340 -0
- fastmcp-2.11.0/tests/experimental/server/test_openapi_performance.py +142 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/__init__.py +1 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/conftest.py +222 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_director.py +462 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_legacy_compatibility.py +333 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_models.py +453 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_nullable_fields.py +245 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_parser.py +331 -0
- fastmcp-2.11.0/tests/experimental/utilities/openapi/test_schemas.py +532 -0
- fastmcp-2.11.0/tests/integration_tests/conftest.py +28 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/integration_tests/test_github_mcp_remote.py +1 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/prompts/test_prompt.py +15 -0
- fastmcp-2.11.0/tests/resources/test_resource_template_meta.py +25 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resources.py +20 -0
- fastmcp-2.10.5/tests/auth/providers/test_bearer.py → fastmcp-2.11.0/tests/server/auth/test_jwt_provider.py +61 -45
- fastmcp-2.11.0/tests/server/auth/test_static_token_verifier.py +89 -0
- fastmcp-2.11.0/tests/server/auth/test_workos.py +58 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_auth_setup.py +22 -20
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_bearer_auth_backend.py +15 -15
- fastmcp-2.11.0/tests/server/http/test_http_auth_middleware.py +78 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_middleware.py +166 -2
- fastmcp-2.11.0/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_basic_functionality.py +2 -2
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_path_parameters.py +148 -0
- fastmcp-2.11.0/tests/server/openapi/test_optional_parameters.py +100 -0
- fastmcp-2.11.0/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_client.py +59 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_server.py +51 -4
- fastmcp-2.11.0/tests/server/proxy/test_stateful_proxy_client.py +148 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_context.py +78 -24
- fastmcp-2.11.0/tests/server/test_experimental_openapi_feature_flag.py +98 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_mount.py +6 -4
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_server.py +213 -1
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_server_interactions.py +272 -1
- fastmcp-2.11.0/tests/server/test_tool_transformation.py +40 -0
- fastmcp-2.11.0/tests/test_mcp_config.py +586 -0
- fastmcp-2.11.0/tests/tools/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool.py +98 -0
- fastmcp-2.11.0/tests/tools/test_tool_future_annotations.py +170 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool_manager.py +80 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/tools/test_tool_transform.py +180 -2
- fastmcp-2.11.0/tests/utilities/openapi/test_nullable_fields.py +243 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_json_schema.py +59 -14
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_json_schema_type.py +55 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_types.py +75 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/uv.lock +478 -202
- fastmcp-2.10.5/docs/clients/logging.mdx +0 -76
- fastmcp-2.10.5/docs/integrations/eunomia-authorization.mdx +0 -108
- fastmcp-2.10.5/docs/integrations/fastapi.mdx +0 -229
- fastmcp-2.10.5/docs/python-sdk/fastmcp-cli-cli.mdx +0 -87
- fastmcp-2.10.5/docs/python-sdk/fastmcp-cli-run.mdx +0 -106
- fastmcp-2.10.5/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -102
- fastmcp-2.10.5/docs/python-sdk/fastmcp-client-client.mdx +0 -94
- fastmcp-2.10.5/docs/python-sdk/fastmcp-client-logging.mdx +0 -14
- fastmcp-2.10.5/docs/python-sdk/fastmcp-client-progress.mdx +0 -8
- fastmcp-2.10.5/docs/python-sdk/fastmcp-exceptions.mdx +0 -65
- fastmcp-2.10.5/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -84
- fastmcp-2.10.5/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -43
- fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-resource.mdx +0 -90
- fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-template.mdx +0 -104
- fastmcp-2.10.5/docs/python-sdk/fastmcp-resources-types.mdx +0 -83
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -10
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -69
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -15
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-context.mdx +0 -118
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -29
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -56
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -47
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -29
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-middleware.mdx +0 -56
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-openapi.mdx +0 -58
- fastmcp-2.10.5/docs/python-sdk/fastmcp-server-proxy.mdx +0 -101
- fastmcp-2.10.5/docs/python-sdk/fastmcp-settings.mdx +0 -59
- fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool.mdx +0 -68
- fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -58
- fastmcp-2.10.5/docs/python-sdk/fastmcp-tools-tool_transform.mdx +0 -139
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-cache.mdx +0 -30
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-components.mdx +0 -52
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -41
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -50
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -118
- fastmcp-2.10.5/docs/python-sdk/fastmcp-utilities-types.mdx +0 -112
- fastmcp-2.10.5/docs/servers/auth/bearer.mdx +0 -238
- fastmcp-2.10.5/src/fastmcp/server/auth/__init__.py +0 -4
- fastmcp-2.10.5/src/fastmcp/server/auth/auth.py +0 -60
- fastmcp-2.10.5/src/fastmcp/server/auth/providers/bearer_env.py +0 -63
- fastmcp-2.10.5/src/fastmcp/utilities/cache.py +0 -26
- fastmcp-2.10.5/src/fastmcp/utilities/json_schema.py +0 -175
- fastmcp-2.10.5/tests/auth/providers/test_bearer_env.py +0 -91
- fastmcp-2.10.5/tests/auth/providers/test_token_verifier.py +0 -179
- fastmcp-2.10.5/tests/auth/test_oauth_client.py +0 -267
- fastmcp-2.10.5/tests/client/test_openapi.py +0 -166
- fastmcp-2.10.5/tests/utilities/test_cache.py +0 -233
- fastmcp-2.10.5/tests/utilities/test_mcp_config.py +0 -286
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.ccignore +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/dependabot.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/labeler.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/labeler.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/.gitignore +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/AGENTS.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/CLAUDE.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/LICENSE +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/README_OPENAPI.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/Windows_Notes.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/favicon.svg +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/client.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/community/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/banner.css +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/style.css +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/css/version-badge.css +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/integrations/starlette.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/http-requests.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/docs/updates.mdx +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/complex_inputs.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/config_server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/desktop.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/echo.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/get_file.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/memory.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/mount_example.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/sampling.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/screenshot.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/serializer.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/simple_echo.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/smart_home/uv.lock +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/tags_example.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/examples/text_me.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.10.5/tests/auth → fastmcp-2.11.0/tests/client}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/client → fastmcp-2.11.0/tests/client/auth}/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_progress.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_roots.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_sse.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.10.5/tests/integration_tests → fastmcp-2.11.0/tests/client/transports}/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.10.5/tests/prompts → fastmcp-2.11.0/tests/experimental}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/resources → fastmcp-2.11.0/tests/experimental/server}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/server → fastmcp-2.11.0/tests/experimental/utilities}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/server/http → fastmcp-2.11.0/tests/integration_tests}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/server/middleware → fastmcp-2.11.0/tests/prompts}/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.10.5/tests/server/openapi → fastmcp-2.11.0/tests/resources}/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.10.5/tests/server/proxy → fastmcp-2.11.0/tests/server}/__init__.py +0 -0
- {fastmcp-2.10.5/tests/tools → fastmcp-2.11.0/tests/server/http}/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/http/test_http_middleware.py +0 -0
- /fastmcp-2.10.5/tests/conftest.py → /fastmcp-2.11.0/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/test_examples.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.10.5 → fastmcp-2.11.0}/tests/utilities/test_typeadapter.py +0 -0
|
@@ -7,6 +7,19 @@ body:
|
|
|
7
7
|
attributes:
|
|
8
8
|
value: Thank you for contributing to FastMCP! 🙏
|
|
9
9
|
|
|
10
|
+
- type: markdown
|
|
11
|
+
attributes:
|
|
12
|
+
value: |
|
|
13
|
+
## Before you submit 📝
|
|
14
|
+
|
|
15
|
+
To help us help you, please:
|
|
16
|
+
|
|
17
|
+
- 🔄 **Make sure you're testing on the latest version of FastMCP** - many issues are already fixed in newer versions
|
|
18
|
+
- 🔍 **Check if someone else has already reported this issue** or if it's been fixed on the main branch
|
|
19
|
+
- 📋 **You MUST include a copy/pasteable and properly formatted MRE** (minimal reproducible example) below or your issue may be closed without response
|
|
20
|
+
|
|
21
|
+
Thanks for helping make FastMCP better! 🚀
|
|
22
|
+
|
|
10
23
|
- type: textarea
|
|
11
24
|
id: description
|
|
12
25
|
attributes:
|
|
@@ -7,9 +7,6 @@ changelog:
|
|
|
7
7
|
- title: New Features 🎉
|
|
8
8
|
labels:
|
|
9
9
|
- feature
|
|
10
|
-
exclude:
|
|
11
|
-
labels:
|
|
12
|
-
- contrib
|
|
13
10
|
|
|
14
11
|
- title: Enhancements 🔧
|
|
15
12
|
labels:
|
|
@@ -17,7 +14,6 @@ changelog:
|
|
|
17
14
|
exclude:
|
|
18
15
|
labels:
|
|
19
16
|
- breaking change
|
|
20
|
-
- contrib
|
|
21
17
|
|
|
22
18
|
- title: Fixes 🐞
|
|
23
19
|
labels:
|
|
@@ -46,7 +46,31 @@ jobs:
|
|
|
46
46
|
- name: Install FastMCP
|
|
47
47
|
run: uv sync --locked
|
|
48
48
|
|
|
49
|
-
- name: Run tests
|
|
50
|
-
run: uv run pytest tests
|
|
49
|
+
- name: Run tests (excluding integration and client_process)
|
|
50
|
+
run: uv run pytest tests -m "not integration and not client_process"
|
|
51
|
+
|
|
52
|
+
- name: Run client process tests separately
|
|
53
|
+
run: uv run pytest tests -m "client_process" -x
|
|
54
|
+
|
|
55
|
+
run_integration_tests:
|
|
56
|
+
name: "Run integration tests"
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
timeout-minutes: 10
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: Install uv
|
|
64
|
+
uses: astral-sh/setup-uv@v6
|
|
65
|
+
with:
|
|
66
|
+
enable-cache: true
|
|
67
|
+
cache-dependency-glob: "uv.lock"
|
|
68
|
+
python-version: "3.10"
|
|
69
|
+
|
|
70
|
+
- name: Install FastMCP
|
|
71
|
+
run: uv sync --locked
|
|
72
|
+
|
|
73
|
+
- name: Run integration tests
|
|
74
|
+
run: uv run pytest tests -m "integration"
|
|
51
75
|
env:
|
|
52
76
|
FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.0
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers and clients.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -22,6 +22,7 @@ Requires-Dist: cyclopts>=3.0.0
|
|
|
22
22
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
23
23
|
Requires-Dist: httpx>=0.28.1
|
|
24
24
|
Requires-Dist: mcp>=1.10.0
|
|
25
|
+
Requires-Dist: openapi-core>=0.19.5
|
|
25
26
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
26
27
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
27
28
|
Requires-Dist: pyperclip>=1.9.0
|
|
@@ -38,7 +39,7 @@ Description-Content-Type: text/markdown
|
|
|
38
39
|
|
|
39
40
|
<strong>The fast, Pythonic way to build MCP servers and clients.</strong>
|
|
40
41
|
|
|
41
|
-
*
|
|
42
|
+
*Made with ☕️ by [Prefect](https://www.prefect.io/)*
|
|
42
43
|
|
|
43
44
|
[](https://gofastmcp.com)
|
|
44
45
|
[](https://pypi.org/project/fastmcp)
|
|
@@ -341,7 +342,7 @@ Learn more in the [**Composition Documentation**](https://gofastmcp.com/patterns
|
|
|
341
342
|
|
|
342
343
|
Automatically generate FastMCP servers from existing OpenAPI specifications (`FastMCP.from_openapi()`) or FastAPI applications (`FastMCP.from_fastapi()`), instantly bringing your web APIs to the MCP ecosystem.
|
|
343
344
|
|
|
344
|
-
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/
|
|
345
|
+
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
|
|
345
346
|
|
|
346
347
|
### Authentication & Security
|
|
347
348
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
<strong>The fast, Pythonic way to build MCP servers and clients.</strong>
|
|
7
7
|
|
|
8
|
-
*
|
|
8
|
+
*Made with ☕️ by [Prefect](https://www.prefect.io/)*
|
|
9
9
|
|
|
10
10
|
[](https://gofastmcp.com)
|
|
11
11
|
[](https://pypi.org/project/fastmcp)
|
|
@@ -308,7 +308,7 @@ Learn more in the [**Composition Documentation**](https://gofastmcp.com/patterns
|
|
|
308
308
|
|
|
309
309
|
Automatically generate FastMCP servers from existing OpenAPI specifications (`FastMCP.from_openapi()`) or FastAPI applications (`FastMCP.from_fastapi()`), instantly bringing your web APIs to the MCP ecosystem.
|
|
310
310
|
|
|
311
|
-
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/
|
|
311
|
+
Learn more: [**OpenAPI Integration**](https://gofastmcp.com/integrations/openapi) | [**FastAPI Integration**](https://gofastmcp.com/integrations/fastapi).
|
|
312
312
|
|
|
313
313
|
### Authentication & Security
|
|
314
314
|
|
|
@@ -2,6 +2,191 @@
|
|
|
2
2
|
icon: "list-check"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
<Update label="v2.10.6" description="2025-07-19">
|
|
6
|
+
|
|
7
|
+
## [v2.10.6: Hymn for the Weekend](https://github.com/jlowin/fastmcp/releases/tag/v2.10.6)
|
|
8
|
+
|
|
9
|
+
A special Saturday release with many fixes.
|
|
10
|
+
|
|
11
|
+
## What's Changed
|
|
12
|
+
### Enhancements 🔧
|
|
13
|
+
* Resolve #1139 -- Implement include_context argument in Context.sample by [@codingjoe](https://github.com/codingjoe) in [#1141](https://github.com/jlowin/fastmcp/pull/1141)
|
|
14
|
+
* feat(settings): add log level normalization by [@ka2048](https://github.com/ka2048) in [#1171](https://github.com/jlowin/fastmcp/pull/1171)
|
|
15
|
+
* add server name to mounted server warnings by [@artificial-aidan](https://github.com/artificial-aidan) in [#1147](https://github.com/jlowin/fastmcp/pull/1147)
|
|
16
|
+
* Add StatefulProxyClient by [@hopeful0](https://github.com/hopeful0) in [#1109](https://github.com/jlowin/fastmcp/pull/1109)
|
|
17
|
+
### Fixes 🐞
|
|
18
|
+
* Fix OpenAPI empty parameters by [@FabrizioSandri](https://github.com/FabrizioSandri) in [#1128](https://github.com/jlowin/fastmcp/pull/1128)
|
|
19
|
+
* Fix title field preservation in tool transformations by [@jlowin](https://github.com/jlowin) in [#1131](https://github.com/jlowin/fastmcp/pull/1131)
|
|
20
|
+
* Fix optional parameter validation in OpenAPI integration by [@jlowin](https://github.com/jlowin) in [#1135](https://github.com/jlowin/fastmcp/pull/1135)
|
|
21
|
+
* Do not silently exclude the "context" key from JSON body by [@melkamar](https://github.com/melkamar) in [#1153](https://github.com/jlowin/fastmcp/pull/1153)
|
|
22
|
+
* Fix tool output schema generation to respect Pydantic serialization aliases by [@zzstoatzz](https://github.com/zzstoatzz) in [#1148](https://github.com/jlowin/fastmcp/pull/1148)
|
|
23
|
+
* fix: _replace_ref_with_defs; ensure ref_path is string by [@itaru2622](https://github.com/itaru2622) in [#1164](https://github.com/jlowin/fastmcp/pull/1164)
|
|
24
|
+
* Fix nesting when making OpenAPI arrays and objects optional by [@melkamar](https://github.com/melkamar) in [#1178](https://github.com/jlowin/fastmcp/pull/1178)
|
|
25
|
+
* Fix `mcp-json` output format to include server name by [@jlowin](https://github.com/jlowin) in [#1185](https://github.com/jlowin/fastmcp/pull/1185)
|
|
26
|
+
* Only configure logging one time by [@jlowin](https://github.com/jlowin) in [#1187](https://github.com/jlowin/fastmcp/pull/1187)
|
|
27
|
+
### Docs 📚
|
|
28
|
+
* Update changelog.mdx by [@jlowin](https://github.com/jlowin) in [#1127](https://github.com/jlowin/fastmcp/pull/1127)
|
|
29
|
+
* Eunomia Authorization with native FastMCP's Middleware by [@tommitt](https://github.com/tommitt) in [#1144](https://github.com/jlowin/fastmcp/pull/1144)
|
|
30
|
+
* update api ref for new `mdxify` version by [@zzstoatzz](https://github.com/zzstoatzz) in [#1182](https://github.com/jlowin/fastmcp/pull/1182)
|
|
31
|
+
### Other Changes 🦾
|
|
32
|
+
* Expand empty parameter filtering and add comprehensive tests by [@jlowin](https://github.com/jlowin) in [#1129](https://github.com/jlowin/fastmcp/pull/1129)
|
|
33
|
+
* Add no-commit-to-branch hook by [@zzstoatzz](https://github.com/zzstoatzz) in [#1149](https://github.com/jlowin/fastmcp/pull/1149)
|
|
34
|
+
* Update README.md by [@jlowin](https://github.com/jlowin) in [#1165](https://github.com/jlowin/fastmcp/pull/1165)
|
|
35
|
+
* skip on rate limit by [@zzstoatzz](https://github.com/zzstoatzz) in [#1183](https://github.com/jlowin/fastmcp/pull/1183)
|
|
36
|
+
* Remove deprecated proxy creation by [@jlowin](https://github.com/jlowin) in [#1186](https://github.com/jlowin/fastmcp/pull/1186)
|
|
37
|
+
* Separate integration tests from unit tests in CI by [@jlowin](https://github.com/jlowin) in [#1188](https://github.com/jlowin/fastmcp/pull/1188)
|
|
38
|
+
|
|
39
|
+
## New Contributors
|
|
40
|
+
* [@FabrizioSandri](https://github.com/FabrizioSandri) made their first contribution in [#1128](https://github.com/jlowin/fastmcp/pull/1128)
|
|
41
|
+
* [@melkamar](https://github.com/melkamar) made their first contribution in [#1153](https://github.com/jlowin/fastmcp/pull/1153)
|
|
42
|
+
* [@codingjoe](https://github.com/codingjoe) made their first contribution in [#1141](https://github.com/jlowin/fastmcp/pull/1141)
|
|
43
|
+
* [@itaru2622](https://github.com/itaru2622) made their first contribution in [#1164](https://github.com/jlowin/fastmcp/pull/1164)
|
|
44
|
+
* [@ka2048](https://github.com/ka2048) made their first contribution in [#1171](https://github.com/jlowin/fastmcp/pull/1171)
|
|
45
|
+
* [@artificial-aidan](https://github.com/artificial-aidan) made their first contribution in [#1147](https://github.com/jlowin/fastmcp/pull/1147)
|
|
46
|
+
|
|
47
|
+
**Full Changelog**: [v2.10.5...v2.10.6](https://github.com/jlowin/fastmcp/compare/v2.10.5...v2.10.6)
|
|
48
|
+
|
|
49
|
+
</Update>
|
|
50
|
+
|
|
51
|
+
<Update label="v2.10.5" description="2025-07-11">
|
|
52
|
+
|
|
53
|
+
## [v2.10.5: Middle Management](https://github.com/jlowin/fastmcp/releases/tag/v2.10.5)
|
|
54
|
+
|
|
55
|
+
A maintenance release focused on OpenAPI refinements and middleware fixes, plus console improvements.
|
|
56
|
+
|
|
57
|
+
## What's Changed
|
|
58
|
+
### Enhancements 🔧
|
|
59
|
+
* Fix Claude Code CLI detection for npm global installations by [@jlowin](https://github.com/jlowin) in [#1106](https://github.com/jlowin/fastmcp/pull/1106)
|
|
60
|
+
* Fix OpenAPI parameter name collisions with location suffixing by [@jlowin](https://github.com/jlowin) in [#1107](https://github.com/jlowin/fastmcp/pull/1107)
|
|
61
|
+
* Add mirrored component support for proxy servers by [@jlowin](https://github.com/jlowin) in [#1105](https://github.com/jlowin/fastmcp/pull/1105)
|
|
62
|
+
### Fixes 🐞
|
|
63
|
+
* Fix OpenAPI deepObject style parameter encoding by [@jlowin](https://github.com/jlowin) in [#1122](https://github.com/jlowin/fastmcp/pull/1122)
|
|
64
|
+
* xfail when github token is not set ('' or None) by [@jlowin](https://github.com/jlowin) in [#1123](https://github.com/jlowin/fastmcp/pull/1123)
|
|
65
|
+
* fix: replace oneOf with anyOf in OpenAPI output schemas by [@MagnusS0](https://github.com/MagnusS0) in [#1119](https://github.com/jlowin/fastmcp/pull/1119)
|
|
66
|
+
* Fix middleware list result types by [@jlowin](https://github.com/jlowin) in [#1125](https://github.com/jlowin/fastmcp/pull/1125)
|
|
67
|
+
* Improve console width for logo by [@jlowin](https://github.com/jlowin) in [#1126](https://github.com/jlowin/fastmcp/pull/1126)
|
|
68
|
+
### Docs 📚
|
|
69
|
+
* Improve transport + integration docs by [@jlowin](https://github.com/jlowin) in [#1103](https://github.com/jlowin/fastmcp/pull/1103)
|
|
70
|
+
* Update proxy.mdx by [@coldfire-x](https://github.com/coldfire-x) in [#1108](https://github.com/jlowin/fastmcp/pull/1108)
|
|
71
|
+
### Other Changes 🦾
|
|
72
|
+
* Update github remote server tests with secret by [@jlowin](https://github.com/jlowin) in [#1112](https://github.com/jlowin/fastmcp/pull/1112)
|
|
73
|
+
|
|
74
|
+
## New Contributors
|
|
75
|
+
* [@coldfire-x](https://github.com/coldfire-x) made their first contribution in [#1108](https://github.com/jlowin/fastmcp/pull/1108)
|
|
76
|
+
* [@MagnusS0](https://github.com/MagnusS0) made their first contribution in [#1119](https://github.com/jlowin/fastmcp/pull/1119)
|
|
77
|
+
|
|
78
|
+
**Full Changelog**: [v2.10.4...v2.10.5](https://github.com/jlowin/fastmcp/compare/v2.10.4...v2.10.5)
|
|
79
|
+
|
|
80
|
+
</Update>
|
|
81
|
+
|
|
82
|
+
<Update label="v2.10.4" description="2025-07-09">
|
|
83
|
+
|
|
84
|
+
## [v2.10.4: Transport-ation](https://github.com/jlowin/fastmcp/releases/tag/v2.10.4)
|
|
85
|
+
|
|
86
|
+
A quick fix to ensure the CLI accepts "streamable-http" as a valid transport option.
|
|
87
|
+
|
|
88
|
+
## What's Changed
|
|
89
|
+
### Fixes 🐞
|
|
90
|
+
* Ensure the CLI accepts "streamable-http" as a valid transport by [@jlowin](https://github.com/jlowin) in [#1099](https://github.com/jlowin/fastmcp/pull/1099)
|
|
91
|
+
|
|
92
|
+
**Full Changelog**: [v2.10.3...v2.10.4](https://github.com/jlowin/fastmcp/compare/v2.10.3...v2.10.4)
|
|
93
|
+
|
|
94
|
+
</Update>
|
|
95
|
+
|
|
96
|
+
<Update label="v2.10.3" description="2025-07-09">
|
|
97
|
+
|
|
98
|
+
## [v2.10.3: CLI Me a River](https://github.com/jlowin/fastmcp/releases/tag/v2.10.3)
|
|
99
|
+
|
|
100
|
+
A major CLI overhaul featuring a complete refactor from typer to cyclopts, new IDE integrations, and comprehensive OpenAPI improvements.
|
|
101
|
+
|
|
102
|
+
## What's Changed
|
|
103
|
+
### New Features 🎉
|
|
104
|
+
* Refactor CLI from typer to cyclopts and add comprehensive tests by [@jlowin](https://github.com/jlowin) in [#1062](https://github.com/jlowin/fastmcp/pull/1062)
|
|
105
|
+
* Add output schema support for OpenAPI tools by [@jlowin](https://github.com/jlowin) in [#1073](https://github.com/jlowin/fastmcp/pull/1073)
|
|
106
|
+
### Enhancements 🔧
|
|
107
|
+
* Add Cursor support via CLI integration by [@jlowin](https://github.com/jlowin) in [#1052](https://github.com/jlowin/fastmcp/pull/1052)
|
|
108
|
+
* Add Claude Code install integration by [@jlowin](https://github.com/jlowin) in [#1053](https://github.com/jlowin/fastmcp/pull/1053)
|
|
109
|
+
* Generate MCP JSON config output from CLI as new `fastmcp install` command by [@jlowin](https://github.com/jlowin) in [#1056](https://github.com/jlowin/fastmcp/pull/1056)
|
|
110
|
+
* Use isawaitable instead of iscoroutine by [@jlowin](https://github.com/jlowin) in [#1059](https://github.com/jlowin/fastmcp/pull/1059)
|
|
111
|
+
* feat: Add `--path` Option to CLI for HTTP/SSE Route by [@davidbk-legit](https://github.com/davidbk-legit) in [#1087](https://github.com/jlowin/fastmcp/pull/1087)
|
|
112
|
+
* Fix concurrent proxy client operations with session isolation by [@jlowin](https://github.com/jlowin) in [#1083](https://github.com/jlowin/fastmcp/pull/1083)
|
|
113
|
+
### Fixes 🐞
|
|
114
|
+
* Refactor Client context management to avoid concurrency issue by [@hopeful0](https://github.com/hopeful0) in [#1054](https://github.com/jlowin/fastmcp/pull/1054)
|
|
115
|
+
* Keep json schema $defs on transform by [@strawgate](https://github.com/strawgate) in [#1066](https://github.com/jlowin/fastmcp/pull/1066)
|
|
116
|
+
* Ensure fastmcp version copy is plaintext by [@jlowin](https://github.com/jlowin) in [#1071](https://github.com/jlowin/fastmcp/pull/1071)
|
|
117
|
+
* Fix single-element list unwrapping in tool content by [@jlowin](https://github.com/jlowin) in [#1074](https://github.com/jlowin/fastmcp/pull/1074)
|
|
118
|
+
* Fix max recursion error when pruning OpenAPI definitions by [@dimitribarbot](https://github.com/dimitribarbot) in [#1092](https://github.com/jlowin/fastmcp/pull/1092)
|
|
119
|
+
* Fix OpenAPI tool name registration when modified by mcp_component_fn by [@jlowin](https://github.com/jlowin) in [#1096](https://github.com/jlowin/fastmcp/pull/1096)
|
|
120
|
+
### Docs 📚
|
|
121
|
+
* Docs: add example of more concise way to use bearer auth by [@neilconway](https://github.com/neilconway) in [#1055](https://github.com/jlowin/fastmcp/pull/1055)
|
|
122
|
+
* Update favicon by [@jlowin](https://github.com/jlowin) in [#1058](https://github.com/jlowin/fastmcp/pull/1058)
|
|
123
|
+
* Update environment note by [@jlowin](https://github.com/jlowin) in [#1075](https://github.com/jlowin/fastmcp/pull/1075)
|
|
124
|
+
* Add fastmcp version --copy documentation by [@jlowin](https://github.com/jlowin) in [#1076](https://github.com/jlowin/fastmcp/pull/1076)
|
|
125
|
+
### Other Changes 🦾
|
|
126
|
+
* Remove asserts and add documentation following #1054 by [@jlowin](https://github.com/jlowin) in [#1057](https://github.com/jlowin/fastmcp/pull/1057)
|
|
127
|
+
* Add --copy flag for fastmcp version by [@jlowin](https://github.com/jlowin) in [#1063](https://github.com/jlowin/fastmcp/pull/1063)
|
|
128
|
+
* Fix docstring format for fastmcp.client.Client by [@neilconway](https://github.com/neilconway) in [#1094](https://github.com/jlowin/fastmcp/pull/1094)
|
|
129
|
+
|
|
130
|
+
## New Contributors
|
|
131
|
+
* [@neilconway](https://github.com/neilconway) made their first contribution in [#1055](https://github.com/jlowin/fastmcp/pull/1055)
|
|
132
|
+
* [@davidbk-legit](https://github.com/davidbk-legit) made their first contribution in [#1087](https://github.com/jlowin/fastmcp/pull/1087)
|
|
133
|
+
* [@dimitribarbot](https://github.com/dimitribarbot) made their first contribution in [#1092](https://github.com/jlowin/fastmcp/pull/1092)
|
|
134
|
+
|
|
135
|
+
**Full Changelog**: [v2.10.2...v2.10.3](https://github.com/jlowin/fastmcp/compare/v2.10.2...v2.10.3)
|
|
136
|
+
|
|
137
|
+
</Update>
|
|
138
|
+
|
|
139
|
+
<Update label="v2.10.2" description="2025-07-05">
|
|
140
|
+
|
|
141
|
+
## [v2.10.2: Forward March](https://github.com/jlowin/fastmcp/releases/tag/v2.10.2)
|
|
142
|
+
|
|
143
|
+
The headline feature of this release is the ability to "forward" advanced MCP interactions like logging, progress, and elicitation through proxy servers. If the remote server requests an elicitation, the proxy client will pass that request to the new, "ultimate" client.
|
|
144
|
+
|
|
145
|
+
## What's Changed
|
|
146
|
+
### New Features 🎉
|
|
147
|
+
* Proxy support advanced MCP features by [@hopeful0](https://github.com/hopeful0) in [#1022](https://github.com/jlowin/fastmcp/pull/1022)
|
|
148
|
+
### Enhancements 🔧
|
|
149
|
+
* Re-add splash screen by [@jlowin](https://github.com/jlowin) in [#1027](https://github.com/jlowin/fastmcp/pull/1027)
|
|
150
|
+
* Reduce banner padding by [@jlowin](https://github.com/jlowin) in [#1030](https://github.com/jlowin/fastmcp/pull/1030)
|
|
151
|
+
* Allow per-server timeouts in MCPConfig by [@cegersdoerfer](https://github.com/cegersdoerfer) in [#1031](https://github.com/jlowin/fastmcp/pull/1031)
|
|
152
|
+
* Support 'scp' claim for OAuth scopes in BearerAuthProvider by [@jlowin](https://github.com/jlowin) in [#1033](https://github.com/jlowin/fastmcp/pull/1033)
|
|
153
|
+
* Add path expansion to image/audio/file by [@jlowin](https://github.com/jlowin) in [#1038](https://github.com/jlowin/fastmcp/pull/1038)
|
|
154
|
+
* Ensure multi-client configurations use new ProxyClient by [@jlowin](https://github.com/jlowin) in [#1045](https://github.com/jlowin/fastmcp/pull/1045)
|
|
155
|
+
### Fixes 🐞
|
|
156
|
+
* Expose stateless_http kwarg for mcp.run() by [@jlowin](https://github.com/jlowin) in [#1018](https://github.com/jlowin/fastmcp/pull/1018)
|
|
157
|
+
* Avoid propagating logs by [@jlowin](https://github.com/jlowin) in [#1042](https://github.com/jlowin/fastmcp/pull/1042)
|
|
158
|
+
### Docs 📚
|
|
159
|
+
* Clean up docs by [@jlowin](https://github.com/jlowin) in [#1028](https://github.com/jlowin/fastmcp/pull/1028)
|
|
160
|
+
* Docs: clarify server URL paths for ChatGPT integration by [@thap2331](https://github.com/thap2331) in [#1017](https://github.com/jlowin/fastmcp/pull/1017)
|
|
161
|
+
### Other Changes 🦾
|
|
162
|
+
* Split giant openapi test file into smaller files by [@jlowin](https://github.com/jlowin) in [#1034](https://github.com/jlowin/fastmcp/pull/1034)
|
|
163
|
+
* Add comprehensive OpenAPI 3.0 vs 3.1 compatibility tests by [@jlowin](https://github.com/jlowin) in [#1035](https://github.com/jlowin/fastmcp/pull/1035)
|
|
164
|
+
* Update banner and use console.log by [@jlowin](https://github.com/jlowin) in [#1041](https://github.com/jlowin/fastmcp/pull/1041)
|
|
165
|
+
|
|
166
|
+
## New Contributors
|
|
167
|
+
* [@cegersdoerfer](https://github.com/cegersdoerfer) made their first contribution in [#1031](https://github.com/jlowin/fastmcp/pull/1031)
|
|
168
|
+
* [@hopeful0](https://github.com/hopeful0) made their first contribution in [#1022](https://github.com/jlowin/fastmcp/pull/1022)
|
|
169
|
+
* [@thap2331](https://github.com/thap2331) made their first contribution in [#1017](https://github.com/jlowin/fastmcp/pull/1017)
|
|
170
|
+
|
|
171
|
+
**Full Changelog**: [v2.10.1...v2.10.2](https://github.com/jlowin/fastmcp/compare/v2.10.1...v2.10.2)
|
|
172
|
+
|
|
173
|
+
</Update>
|
|
174
|
+
|
|
175
|
+
<Update label="v2.10.1" description="2025-07-02">
|
|
176
|
+
|
|
177
|
+
## [v2.10.1: Revert to Sender](https://github.com/jlowin/fastmcp/releases/tag/v2.10.1)
|
|
178
|
+
|
|
179
|
+
A quick patch to revert the CLI banner that was added in v2.10.0.
|
|
180
|
+
|
|
181
|
+
## What's Changed
|
|
182
|
+
### Docs 📚
|
|
183
|
+
* Update changelog.mdx by [@jlowin](https://github.com/jlowin) in [#1009](https://github.com/jlowin/fastmcp/pull/1009)
|
|
184
|
+
* Revert "Add CLI banner" by [@jlowin](https://github.com/jlowin) in [#1011](https://github.com/jlowin/fastmcp/pull/1011)
|
|
185
|
+
|
|
186
|
+
**Full Changelog**: [v2.10.0...v2.10.1](https://github.com/jlowin/fastmcp/compare/v2.10.0...v2.10.1)
|
|
187
|
+
|
|
188
|
+
</Update>
|
|
189
|
+
|
|
5
190
|
<Update label="v2.10.0" description="2024-07-01">
|
|
6
191
|
|
|
7
192
|
## [v2.10.0: Great Spec-tations](https://github.com/jlowin/fastmcp/releases/tag/v2.10.0)
|
|
@@ -55,6 +55,7 @@ async with Client("https://fastmcp.cloud/mcp", auth=oauth) as client:
|
|
|
55
55
|
- **`client_name`** (`str`, optional): Client name for dynamic registration. Defaults to `"FastMCP Client"`
|
|
56
56
|
- **`token_storage_cache_dir`** (`Path`, optional): Token cache directory. Defaults to `~/.fastmcp/oauth-mcp-client-cache/`
|
|
57
57
|
- **`additional_client_metadata`** (`dict[str, Any]`, optional): Extra metadata for client registration
|
|
58
|
+
- **`callback_port`** (`int`, optional): Fixed port for OAuth callback server. If not specified, uses a random available port
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
## OAuth Flow
|
|
@@ -72,7 +73,7 @@ If no valid tokens exist, the client attempts to discover the OAuth server's end
|
|
|
72
73
|
If the OAuth server supports it and the client isn't already registered (or credentials aren't cached), the client performs dynamic client registration according to RFC 7591.
|
|
73
74
|
</Step>
|
|
74
75
|
<Step title="Local Callback Server">
|
|
75
|
-
A temporary local HTTP server is started on an available port. This server's address (e.g., `http://127.0.0.1:<port>/callback`) acts as the `redirect_uri` for the OAuth flow.
|
|
76
|
+
A temporary local HTTP server is started on an available port (or the port specified via `callback_port`). This server's address (e.g., `http://127.0.0.1:<port>/callback`) acts as the `redirect_uri` for the OAuth flow.
|
|
76
77
|
</Step>
|
|
77
78
|
<Step title="Browser Interaction">
|
|
78
79
|
The user's default web browser is automatically opened, directing them to the OAuth server's authorization endpoint. The user logs in and grants (or denies) the requested `scopes`.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Server Logging
|
|
3
|
+
sidebarTitle: Logging
|
|
4
|
+
description: Receive and handle log messages from MCP servers.
|
|
5
|
+
icon: receipt
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import { VersionBadge } from '/snippets/version-badge.mdx'
|
|
9
|
+
|
|
10
|
+
<VersionBadge version="2.0.0" />
|
|
11
|
+
|
|
12
|
+
MCP servers can emit log messages to clients. The client can handle these logs through a log handler callback.
|
|
13
|
+
|
|
14
|
+
## Log Handler
|
|
15
|
+
|
|
16
|
+
Provide a `log_handler` function when creating the client. For robust logging, the log messages can be integrated with Python's standard `logging` module.
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
import logging
|
|
20
|
+
from fastmcp import Client
|
|
21
|
+
from fastmcp.client.logging import LogMessage
|
|
22
|
+
|
|
23
|
+
# In a real app, you might configure this in your main entry point
|
|
24
|
+
logging.basicConfig(
|
|
25
|
+
level=logging.INFO,
|
|
26
|
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Get a logger for the module where the client is used
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
# This mapping is useful for converting MCP level strings to Python's levels
|
|
33
|
+
LOGGING_LEVEL_MAP = logging.getLevelNamesMapping()
|
|
34
|
+
|
|
35
|
+
async def log_handler(message: LogMessage):
|
|
36
|
+
"""
|
|
37
|
+
Handles incoming logs from the MCP server and forwards them
|
|
38
|
+
to the standard Python logging system.
|
|
39
|
+
"""
|
|
40
|
+
msg = message.data.get('msg')
|
|
41
|
+
extra = message.data.get('extra')
|
|
42
|
+
|
|
43
|
+
# Convert the MCP log level to a Python log level
|
|
44
|
+
level = LOGGING_LEVEL_MAP.get(message.level.upper(), logging.INFO)
|
|
45
|
+
|
|
46
|
+
# Log the message using the standard logging library
|
|
47
|
+
logger.log(level, msg, extra=extra)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
client = Client(
|
|
51
|
+
"my_mcp_server.py",
|
|
52
|
+
log_handler=log_handler,
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Handling Structured Logs
|
|
57
|
+
|
|
58
|
+
The `message.data` attribute is a dictionary that contains the log payload from the server. This enables structured logging, allowing you to receive rich, contextual information.
|
|
59
|
+
|
|
60
|
+
The dictionary contains two keys:
|
|
61
|
+
- `msg`: The string log message.
|
|
62
|
+
- `extra`: A dictionary containing any extra data sent from the server.
|
|
63
|
+
|
|
64
|
+
This structure is preserved even when logs are forwarded through a FastMCP proxy, making it a powerful tool for debugging complex, multi-server applications.
|
|
65
|
+
|
|
66
|
+
### Handler Parameters
|
|
67
|
+
|
|
68
|
+
The `log_handler` is called every time a log message is received. It receives a `LogMessage` object:
|
|
69
|
+
|
|
70
|
+
<Card icon="code" title="Log Handler Parameters">
|
|
71
|
+
<ResponseField name="LogMessage" type="Log Message Object">
|
|
72
|
+
<Expandable title="attributes">
|
|
73
|
+
<ResponseField name="level" type='Literal["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]'>
|
|
74
|
+
The log level
|
|
75
|
+
</ResponseField>
|
|
76
|
+
|
|
77
|
+
<ResponseField name="logger" type="str | None">
|
|
78
|
+
The logger name (optional, may be None)
|
|
79
|
+
</ResponseField>
|
|
80
|
+
|
|
81
|
+
<ResponseField name="data" type="dict">
|
|
82
|
+
The log payload, containing `msg` and `extra` keys.
|
|
83
|
+
</ResponseField>
|
|
84
|
+
</Expandable>
|
|
85
|
+
</ResponseField>
|
|
86
|
+
</Card>
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
async def detailed_log_handler(message: LogMessage):
|
|
90
|
+
msg = message.data.get('msg')
|
|
91
|
+
extra = message.data.get('extra')
|
|
92
|
+
|
|
93
|
+
if message.level == "error":
|
|
94
|
+
print(f"ERROR: {msg} | Details: {extra}")
|
|
95
|
+
elif message.level == "warning":
|
|
96
|
+
print(f"WARNING: {msg} | Details: {extra}")
|
|
97
|
+
else:
|
|
98
|
+
print(f"{message.level.upper()}: {msg}")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Default Log Handling
|
|
102
|
+
|
|
103
|
+
If you don't provide a custom `log_handler`, FastMCP uses a default handler that emits a DEBUG-level FastMCP log for every log message received from the server, which is useful for visibility without polluting your own logs.
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
client = Client("my_mcp_server.py")
|
|
107
|
+
|
|
108
|
+
async with client:
|
|
109
|
+
# Server logs will be emitted at DEBUG level automatically
|
|
110
|
+
await client.call_tool("some_tool")
|
|
111
|
+
```
|
|
@@ -25,8 +25,37 @@ async with client:
|
|
|
25
25
|
print(f"Description: {prompt.description}")
|
|
26
26
|
if prompt.arguments:
|
|
27
27
|
print(f"Arguments: {[arg.name for arg in prompt.arguments]}")
|
|
28
|
+
# Access tags and other metadata
|
|
29
|
+
if hasattr(prompt, '_meta') and prompt._meta:
|
|
30
|
+
fastmcp_meta = prompt._meta.get('_fastmcp', {})
|
|
31
|
+
print(f"Tags: {fastmcp_meta.get('tags', [])}")
|
|
28
32
|
```
|
|
29
33
|
|
|
34
|
+
### Filtering by Tags
|
|
35
|
+
|
|
36
|
+
<VersionBadge version="2.11.0" />
|
|
37
|
+
|
|
38
|
+
You can use the `meta` field to filter prompts based on their tags:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
async with client:
|
|
42
|
+
prompts = await client.list_prompts()
|
|
43
|
+
|
|
44
|
+
# Filter prompts by tag
|
|
45
|
+
analysis_prompts = [
|
|
46
|
+
prompt for prompt in prompts
|
|
47
|
+
if hasattr(prompt, '_meta') and prompt._meta and
|
|
48
|
+
prompt._meta.get('_fastmcp', {}) and
|
|
49
|
+
'analysis' in prompt._meta.get('_fastmcp', {}).get('tags', [])
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
print(f"Found {len(analysis_prompts)} analysis prompts")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
<Note>
|
|
56
|
+
The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
|
|
57
|
+
</Note>
|
|
58
|
+
|
|
30
59
|
## Using Prompts
|
|
31
60
|
|
|
32
61
|
### Basic Usage
|
|
@@ -34,6 +34,10 @@ async with client:
|
|
|
34
34
|
print(f"Name: {resource.name}")
|
|
35
35
|
print(f"Description: {resource.description}")
|
|
36
36
|
print(f"MIME Type: {resource.mimeType}")
|
|
37
|
+
# Access tags and other metadata
|
|
38
|
+
if hasattr(resource, '_meta') and resource._meta:
|
|
39
|
+
fastmcp_meta = resource._meta.get('_fastmcp', {})
|
|
40
|
+
print(f"Tags: {fastmcp_meta.get('tags', [])}")
|
|
37
41
|
```
|
|
38
42
|
|
|
39
43
|
### Resource Templates
|
|
@@ -49,8 +53,37 @@ async with client:
|
|
|
49
53
|
print(f"Template URI: {template.uriTemplate}")
|
|
50
54
|
print(f"Name: {template.name}")
|
|
51
55
|
print(f"Description: {template.description}")
|
|
56
|
+
# Access tags and other metadata
|
|
57
|
+
if hasattr(template, '_meta') and template._meta:
|
|
58
|
+
fastmcp_meta = template._meta.get('_fastmcp', {})
|
|
59
|
+
print(f"Tags: {fastmcp_meta.get('tags', [])}")
|
|
52
60
|
```
|
|
53
61
|
|
|
62
|
+
### Filtering by Tags
|
|
63
|
+
|
|
64
|
+
<VersionBadge version="2.11.0" />
|
|
65
|
+
|
|
66
|
+
You can use the `meta` field to filter resources based on their tags:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
async with client:
|
|
70
|
+
resources = await client.list_resources()
|
|
71
|
+
|
|
72
|
+
# Filter resources by tag
|
|
73
|
+
config_resources = [
|
|
74
|
+
resource for resource in resources
|
|
75
|
+
if hasattr(resource, '_meta') and resource._meta and
|
|
76
|
+
resource._meta.get('_fastmcp', {}) and
|
|
77
|
+
'config' in resource._meta.get('_fastmcp', {}).get('tags', [])
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
print(f"Found {len(config_resources)} config resources")
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
<Note>
|
|
84
|
+
The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
|
|
85
|
+
</Note>
|
|
86
|
+
|
|
54
87
|
## Reading Resources
|
|
55
88
|
|
|
56
89
|
### Static Resources
|
|
@@ -25,8 +25,37 @@ async with client:
|
|
|
25
25
|
print(f"Description: {tool.description}")
|
|
26
26
|
if tool.inputSchema:
|
|
27
27
|
print(f"Parameters: {tool.inputSchema}")
|
|
28
|
+
# Access tags and other metadata
|
|
29
|
+
if hasattr(tool, '_meta') and tool._meta:
|
|
30
|
+
fastmcp_meta = tool._meta.get('_fastmcp', {})
|
|
31
|
+
print(f"Tags: {fastmcp_meta.get('tags', [])}")
|
|
28
32
|
```
|
|
29
33
|
|
|
34
|
+
### Filtering by Tags
|
|
35
|
+
|
|
36
|
+
<VersionBadge version="2.11.0" />
|
|
37
|
+
|
|
38
|
+
You can use the `meta` field to filter tools based on their tags:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
async with client:
|
|
42
|
+
tools = await client.list_tools()
|
|
43
|
+
|
|
44
|
+
# Filter tools by tag
|
|
45
|
+
analysis_tools = [
|
|
46
|
+
tool for tool in tools
|
|
47
|
+
if hasattr(tool, '_meta') and tool._meta and
|
|
48
|
+
tool._meta.get('_fastmcp', {}) and
|
|
49
|
+
'analysis' in tool._meta.get('_fastmcp', {}).get('tags', [])
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
print(f"Found {len(analysis_tools)} analysis tools")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
<Note>
|
|
56
|
+
The `_meta` field is part of the standard MCP specification. FastMCP servers include tags and other metadata within a `_fastmcp` namespace (e.g., `_meta._fastmcp.tags`) to avoid conflicts with user-defined metadata. This behavior can be controlled with the server's `include_fastmcp_meta` setting - when disabled, the `_fastmcp` namespace won't be included. Other MCP server implementations may not provide this metadata structure.
|
|
57
|
+
</Note>
|
|
58
|
+
|
|
30
59
|
## Executing Tools
|
|
31
60
|
|
|
32
61
|
### Basic Execution
|