fastmcp 2.10.6__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.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/bug.yml +13 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/release.yml +0 -4
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/run-tests.yml +5 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/PKG-INFO +4 -3
- {fastmcp-2.10.6 → fastmcp-2.11.0}/README.md +2 -2
- fastmcp-2.11.0/docs/.ccignore +2 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/changelog.mdx +46 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/auth/oauth.mdx +2 -1
- fastmcp-2.11.0/docs/clients/logging.mdx +111 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/prompts.mdx +29 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/resources.mdx +33 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/tools.mdx +29 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/transports.mdx +73 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/deployment/running-server.mdx +36 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/docs.json +14 -22
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/anthropic.mdx +8 -8
- fastmcp-2.11.0/docs/integrations/authkit.mdx +103 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/claude-code.mdx +46 -6
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/claude-desktop.mdx +65 -6
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/cursor.mdx +65 -8
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/eunomia-authorization.mdx +17 -21
- 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.6 → fastmcp-2.11.0}/docs/integrations/mcp-json-configuration.mdx +56 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/openai.mdx +8 -8
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/openapi.mdx +57 -0
- fastmcp-2.11.0/docs/integrations/permit.mdx +353 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/cli.mdx +91 -8
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/tool-transformation.mdx +85 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-cli.mdx +10 -9
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +4 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +4 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +4 -1
- fastmcp-2.10.6/docs/python-sdk/fastmcp-cli-install-mcp_config.mdx → fastmcp-2.11.0/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +10 -7
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-run.mdx +42 -8
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-transports.mdx +3 -3
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-mcp_config.mdx +73 -35
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-context.mdx +52 -24
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-proxy.mdx +58 -33
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-server.mdx +68 -50
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-settings.mdx +25 -12
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool.mdx +15 -15
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +37 -10
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +51 -6
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +1 -1
- fastmcp-2.11.0/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +28 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-openapi.mdx +15 -16
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-tests.mdx +2 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-types.mdx +19 -17
- 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.6 → fastmcp-2.11.0}/docs/servers/context.mdx +46 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/logging.mdx +45 -3
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/middleware.mdx +68 -4
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/prompts.mdx +9 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/proxy.mdx +11 -12
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/resources.mdx +73 -15
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/server.mdx +36 -34
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/tools.mdx +113 -50
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/rest-api.mdx +2 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/justfile +1 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/pyproject.toml +3 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/cli.py +128 -33
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_code.py +42 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/claude_desktop.py +42 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/cursor.py +42 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/mcp_json.py +41 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/run.py +127 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/__init__.py +2 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/oauth.py +68 -99
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/oauth_callback.py +18 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/transports.py +69 -15
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/src/fastmcp/mcp_config.py +125 -88
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt.py +11 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/resource.py +21 -1
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/in_memory.py +4 -2
- fastmcp-2.10.6/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.6 → fastmcp-2.11.0}/src/fastmcp/server/context.py +107 -26
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/dependencies.py +9 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/http.py +62 -30
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/middleware.py +3 -23
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/openapi.py +1 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/proxy.py +50 -11
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/server.py +168 -59
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/settings.py +73 -6
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool.py +36 -3
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool_manager.py +38 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/tool_transform.py +112 -3
- {fastmcp-2.10.6 → 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.6 → 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.6 → fastmcp-2.11.0}/src/fastmcp/utilities/openapi.py +240 -50
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/tests.py +54 -6
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/types.py +89 -11
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_cli.py +210 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_cursor.py +3 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_install.py +92 -6
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/tests/client/test_client.py +12 -0
- {fastmcp-2.10.6 → 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.6 → 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.10.6 → 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.6 → 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.10.6 → 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.6 → fastmcp-2.11.0}/tests/resources/test_resources.py +20 -0
- fastmcp-2.10.6/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.6 → fastmcp-2.11.0}/tests/server/http/test_auth_setup.py +22 -20
- {fastmcp-2.10.6 → 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.11.0/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/tests/server/openapi/test_basic_functionality.py +2 -2
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_optional_parameters.py +14 -14
- fastmcp-2.11.0/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_client.py +58 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_proxy_server.py +51 -4
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/proxy/test_stateful_proxy_client.py +28 -0
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/tests/server/test_mount.py +0 -1
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_server.py +213 -1
- {fastmcp-2.10.6 → 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.6 → fastmcp-2.11.0}/tests/tools/test_tool.py +16 -0
- fastmcp-2.11.0/tests/tools/test_tool_future_annotations.py +170 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/tools/test_tool_manager.py +80 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/tools/test_tool_transform.py +95 -2
- fastmcp-2.11.0/tests/utilities/openapi/test_nullable_fields.py +243 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_json_schema.py +59 -14
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_json_schema_type.py +55 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_types.py +75 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/uv.lock +478 -202
- fastmcp-2.10.6/docs/clients/logging.mdx +0 -76
- fastmcp-2.10.6/docs/integrations/fastapi.mdx +0 -229
- fastmcp-2.10.6/docs/python-sdk/fastmcp-server-middleware.mdx +0 -56
- fastmcp-2.10.6/docs/python-sdk/fastmcp-utilities-cache.mdx +0 -30
- fastmcp-2.10.6/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -50
- fastmcp-2.10.6/docs/servers/auth/bearer.mdx +0 -238
- fastmcp-2.10.6/src/fastmcp/server/auth/__init__.py +0 -4
- fastmcp-2.10.6/src/fastmcp/server/auth/auth.py +0 -60
- fastmcp-2.10.6/src/fastmcp/server/auth/providers/bearer_env.py +0 -63
- fastmcp-2.10.6/src/fastmcp/utilities/cache.py +0 -26
- fastmcp-2.10.6/src/fastmcp/utilities/json_schema.py +0 -175
- fastmcp-2.10.6/tests/auth/providers/test_bearer_env.py +0 -91
- fastmcp-2.10.6/tests/auth/providers/test_token_verifier.py +0 -179
- fastmcp-2.10.6/tests/auth/test_oauth_client.py +0 -267
- fastmcp-2.10.6/tests/client/test_openapi.py +0 -166
- fastmcp-2.10.6/tests/utilities/test_cache.py +0 -233
- fastmcp-2.10.6/tests/utilities/test_mcp_config.py +0 -286
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.ccignore +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/dependabot.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/labeler.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/labeler.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.gitignore +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/AGENTS.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/CLAUDE.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/LICENSE +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/README_OPENAPI.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/Windows_Notes.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/favicon.svg +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/client.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/community/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/banner.css +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/style.css +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/css/version-badge.css +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/integrations/starlette.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/http-requests.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-dependencies.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/docs/updates.mdx +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/complex_inputs.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/config_server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/desktop.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/echo.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/get_file.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/memory.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/mount_example.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/sampling.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/screenshot.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/serializer.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/simple_echo.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/smart_home/uv.lock +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/tags_example.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/examples/text_me.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/resource_manager.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.10.6/tests/auth → fastmcp-2.11.0/tests/client}/__init__.py +0 -0
- {fastmcp-2.10.6/tests/client → fastmcp-2.11.0/tests/client/auth}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_progress.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_roots.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_sse.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/client/test_streamable_http.py +0 -0
- {fastmcp-2.10.6/tests/integration_tests → fastmcp-2.11.0/tests/client/transports}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/conftest.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.10.6/tests/prompts → fastmcp-2.11.0/tests/experimental}/__init__.py +0 -0
- {fastmcp-2.10.6/tests/resources → fastmcp-2.11.0/tests/experimental/server}/__init__.py +0 -0
- {fastmcp-2.10.6/tests/server → fastmcp-2.11.0/tests/experimental/utilities}/__init__.py +0 -0
- {fastmcp-2.10.6/tests/server/http → fastmcp-2.11.0/tests/integration_tests}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.10.6/tests/server/middleware → fastmcp-2.11.0/tests/prompts}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.10.6/tests/server/openapi → fastmcp-2.11.0/tests/resources}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_resource_manager.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.10.6/tests/server/proxy → fastmcp-2.11.0/tests/server}/__init__.py +0 -0
- {fastmcp-2.10.6/tests/tools → fastmcp-2.11.0/tests/server/http}/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/test_examples.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.10.6 → fastmcp-2.11.0}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.10.6 → 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,8 +46,11 @@ jobs:
|
|
|
46
46
|
- name: Install FastMCP
|
|
47
47
|
run: uv sync --locked
|
|
48
48
|
|
|
49
|
-
- name: Run tests (excluding integration)
|
|
50
|
-
run: uv run pytest tests -m "not integration"
|
|
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
|
|
51
54
|
|
|
52
55
|
run_integration_tests:
|
|
53
56
|
name: "Run integration tests"
|
|
@@ -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,52 @@
|
|
|
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
|
+
|
|
5
51
|
<Update label="v2.10.5" description="2025-07-11">
|
|
6
52
|
|
|
7
53
|
## [v2.10.5: Middle Management](https://github.com/jlowin/fastmcp/releases/tag/v2.10.5)
|
|
@@ -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
|
|
@@ -180,6 +180,7 @@ FastMCP provides convenience transports that are thin wrappers around `StdioTran
|
|
|
180
180
|
|
|
181
181
|
- **`PythonStdioTransport`** - Uses `python` command for `.py` files
|
|
182
182
|
- **`NodeStdioTransport`** - Uses `node` command for `.js` files
|
|
183
|
+
- **`UvStdioTransport`** - Uses `uv` for Python packages (uses `env_vars` parameter)
|
|
183
184
|
- **`UvxStdioTransport`** - Uses `uvx` for Python packages (uses `env_vars` parameter)
|
|
184
185
|
- **`NpxStdioTransport`** - Uses `npx` for Node packages (uses `env_vars` parameter)
|
|
185
186
|
|
|
@@ -308,3 +309,75 @@ async with client:
|
|
|
308
309
|
answer = await client.call_tool("assistant_ask", {"question": "What?"})
|
|
309
310
|
```
|
|
310
311
|
|
|
312
|
+
### Tool Transformation with FastMCP and MCPConfig
|
|
313
|
+
|
|
314
|
+
FastMCP supports basic tool transformations to be defined alongside the MCP Servers in the MCPConfig file.
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
config = {
|
|
318
|
+
"mcpServers": {
|
|
319
|
+
"weather": {
|
|
320
|
+
"url": "https://weather.example.com/mcp",
|
|
321
|
+
"transport": "http",
|
|
322
|
+
"tools": { } # <--- This is the tool transformation section
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
With these transformations, you can transform (change) the name, title, description, tags, enablement, and arguments of a tool.
|
|
329
|
+
|
|
330
|
+
For each argument the tool takes, you can transform (change) the name, description, default, visibility, whether it's required, and you can provide example values.
|
|
331
|
+
|
|
332
|
+
In the following example, we're transforming the `weather_get_forecast` tool to only retrieve the weather for `Miami` and hiding the `city` argument from the client.
|
|
333
|
+
|
|
334
|
+
```python
|
|
335
|
+
tool_transformations = {
|
|
336
|
+
"weather_get_forecast": {
|
|
337
|
+
"name": "miami_weather",
|
|
338
|
+
"description": "Get the weather for Miami",
|
|
339
|
+
"arguments": {
|
|
340
|
+
"city": {
|
|
341
|
+
"name": "city",
|
|
342
|
+
"default": "Miami",
|
|
343
|
+
"hide": True,
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
config = {
|
|
350
|
+
"mcpServers": {
|
|
351
|
+
"weather": {
|
|
352
|
+
"url": "https://weather.example.com/mcp",
|
|
353
|
+
"transport": "http",
|
|
354
|
+
"tools": tool_transformations
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
#### Allowlisting and Blocklisting Tools
|
|
361
|
+
|
|
362
|
+
Tools can be allowlisted or blocklisted from the client by applying `tags` to the tools on the server. In the following example, we're allowlisting only tools marked with the `forecast` tag, all other tools will be unavailable to the client.
|
|
363
|
+
|
|
364
|
+
```python
|
|
365
|
+
tool_transformations = {
|
|
366
|
+
"weather_get_forecast": {
|
|
367
|
+
"enabled": True,
|
|
368
|
+
"tags": ["forecast"]
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
config = {
|
|
374
|
+
"mcpServers": {
|
|
375
|
+
"weather": {
|
|
376
|
+
"url": "https://weather.example.com/mcp",
|
|
377
|
+
"transport": "http",
|
|
378
|
+
"tools": tool_transformations,
|
|
379
|
+
"include_tags": ["forecast"]
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
```
|
|
@@ -53,12 +53,48 @@ You can specify transport options and other configuration:
|
|
|
53
53
|
fastmcp run server.py --transport sse --port 9000
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
+
### Dependency Management with CLI
|
|
57
|
+
|
|
58
|
+
When using the FastMCP CLI, you can pass additional options to configure how `uv` runs your server:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Run with a specific Python version
|
|
62
|
+
fastmcp run server.py --python 3.11
|
|
63
|
+
|
|
64
|
+
# Run with additional packages
|
|
65
|
+
fastmcp run server.py --with pandas --with numpy
|
|
66
|
+
|
|
67
|
+
# Run with dependencies from a requirements file
|
|
68
|
+
fastmcp run server.py --with-requirements requirements.txt
|
|
69
|
+
|
|
70
|
+
# Combine multiple options
|
|
71
|
+
fastmcp run server.py --python 3.10 --with httpx --transport http
|
|
72
|
+
|
|
73
|
+
# Run within a specific project directory
|
|
74
|
+
fastmcp run server.py --project /path/to/project
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
<Note>
|
|
78
|
+
When using `--python`, `--with`, `--project`, or `--with-requirements`, the server runs via `uv run` subprocess instead of using your local environment. The `uv` command will manage dependencies based on your project configuration.
|
|
79
|
+
</Note>
|
|
80
|
+
|
|
81
|
+
<Tip>
|
|
82
|
+
The `--python` option is particularly useful when you need to run a server with a specific Python version that differs from your system's default. This addresses common compatibility issues where servers require a particular Python version to function correctly.
|
|
83
|
+
</Tip>
|
|
84
|
+
|
|
56
85
|
For development and testing, you can use the `dev` command to run your server with the MCP Inspector:
|
|
57
86
|
|
|
58
87
|
```bash
|
|
59
88
|
fastmcp dev server.py
|
|
60
89
|
```
|
|
61
90
|
|
|
91
|
+
The `dev` command also supports the same dependency management options:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Dev server with specific Python version and packages
|
|
95
|
+
fastmcp dev server.py --python 3.11 --with pandas
|
|
96
|
+
```
|
|
97
|
+
|
|
62
98
|
See the [CLI documentation](/patterns/cli) for detailed information about all available commands and options.
|
|
63
99
|
|
|
64
100
|
### Passing Arguments to Servers
|
|
@@ -65,10 +65,7 @@
|
|
|
65
65
|
{
|
|
66
66
|
"group": "Essentials",
|
|
67
67
|
"icon": "cube",
|
|
68
|
-
"pages": [
|
|
69
|
-
"servers/server",
|
|
70
|
-
"deployment/running-server"
|
|
71
|
-
]
|
|
68
|
+
"pages": ["servers/server", "deployment/running-server"]
|
|
72
69
|
},
|
|
73
70
|
{
|
|
74
71
|
"group": "Core Components",
|
|
@@ -97,7 +94,10 @@
|
|
|
97
94
|
"group": "Authentication",
|
|
98
95
|
"icon": "shield-check",
|
|
99
96
|
"pages": [
|
|
100
|
-
"servers/auth/
|
|
97
|
+
"servers/auth/authentication",
|
|
98
|
+
"servers/auth/token-verification",
|
|
99
|
+
"servers/auth/remote-authentication",
|
|
100
|
+
"servers/auth/full-oauth-server"
|
|
101
101
|
]
|
|
102
102
|
}
|
|
103
103
|
]
|
|
@@ -108,10 +108,7 @@
|
|
|
108
108
|
{
|
|
109
109
|
"group": "Essentials",
|
|
110
110
|
"icon": "cube",
|
|
111
|
-
"pages": [
|
|
112
|
-
"clients/client",
|
|
113
|
-
"clients/transports"
|
|
114
|
-
]
|
|
111
|
+
"pages": ["clients/client", "clients/transports"]
|
|
115
112
|
},
|
|
116
113
|
{
|
|
117
114
|
"group": "Core Operations",
|
|
@@ -137,10 +134,7 @@
|
|
|
137
134
|
{
|
|
138
135
|
"group": "Authentication",
|
|
139
136
|
"icon": "user-shield",
|
|
140
|
-
"pages": [
|
|
141
|
-
"clients/auth/oauth",
|
|
142
|
-
"clients/auth/bearer"
|
|
143
|
-
]
|
|
137
|
+
"pages": ["clients/auth/oauth", "clients/auth/bearer"]
|
|
144
138
|
}
|
|
145
139
|
]
|
|
146
140
|
},
|
|
@@ -158,7 +152,9 @@
|
|
|
158
152
|
"integrations/mcp-json-configuration",
|
|
159
153
|
"integrations/openai",
|
|
160
154
|
"integrations/openapi",
|
|
161
|
-
"integrations/
|
|
155
|
+
"integrations/permit",
|
|
156
|
+
"integrations/starlette",
|
|
157
|
+
"integrations/authkit"
|
|
162
158
|
]
|
|
163
159
|
},
|
|
164
160
|
{
|
|
@@ -185,17 +181,12 @@
|
|
|
185
181
|
},
|
|
186
182
|
{
|
|
187
183
|
"anchor": "What's New",
|
|
188
|
-
"pages": [
|
|
189
|
-
"updates",
|
|
190
|
-
"changelog"
|
|
191
|
-
]
|
|
184
|
+
"pages": ["updates", "changelog"]
|
|
192
185
|
},
|
|
193
186
|
{
|
|
194
187
|
"anchor": "Community",
|
|
195
188
|
"icon": "users",
|
|
196
|
-
"pages": [
|
|
197
|
-
"community/showcase"
|
|
198
|
-
]
|
|
189
|
+
"pages": ["community/showcase"]
|
|
199
190
|
}
|
|
200
191
|
]
|
|
201
192
|
},
|
|
@@ -222,7 +213,7 @@
|
|
|
222
213
|
"python-sdk/fastmcp-cli-install-claude_code",
|
|
223
214
|
"python-sdk/fastmcp-cli-install-claude_desktop",
|
|
224
215
|
"python-sdk/fastmcp-cli-install-cursor",
|
|
225
|
-
"python-sdk/fastmcp-cli-install-
|
|
216
|
+
"python-sdk/fastmcp-cli-install-mcp_json",
|
|
226
217
|
"python-sdk/fastmcp-cli-install-shared"
|
|
227
218
|
]
|
|
228
219
|
},
|
|
@@ -333,6 +324,7 @@
|
|
|
333
324
|
"python-sdk/fastmcp-utilities-json_schema",
|
|
334
325
|
"python-sdk/fastmcp-utilities-json_schema_type",
|
|
335
326
|
"python-sdk/fastmcp-utilities-logging",
|
|
327
|
+
"python-sdk/fastmcp-utilities-mcp_config",
|
|
336
328
|
"python-sdk/fastmcp-utilities-openapi",
|
|
337
329
|
"python-sdk/fastmcp-utilities-tests",
|
|
338
330
|
"python-sdk/fastmcp-utilities-types"
|