fastmcp 2.11.2__tar.gz → 2.11.3__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.11.2 → fastmcp-2.11.3}/.github/ISSUE_TEMPLATE/bug.yml +13 -25
- fastmcp-2.11.3/.github/ISSUE_TEMPLATE/enhancement.yml +34 -0
- fastmcp-2.11.3/.github/copilot-instructions.md +1 -0
- fastmcp-2.11.3/.github/workflows/marvin.yml +52 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/workflows/run-static.yml +22 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/workflows/run-tests.yml +4 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.gitignore +5 -0
- fastmcp-2.11.3/AGENTS.md +134 -0
- fastmcp-2.11.3/CLAUDE.md +1 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/PKG-INFO +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/logging.mdx +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/docs.json +19 -6
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-run.mdx +14 -14
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-logging.mdx +5 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-transports.mdx +26 -26
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +12 -12
- fastmcp-2.11.3/docs/python-sdk/fastmcp-server-auth-auth.mdx +175 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +11 -11
- fastmcp-2.11.3/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +48 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-dependencies.mdx +16 -3
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-http.mdx +14 -24
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-proxy.mdx +42 -36
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-server.mdx +53 -47
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-tools-tool.mdx +13 -13
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +11 -11
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +12 -12
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-components.mdx +17 -9
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-inspect.mdx +10 -10
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-openapi.mdx +13 -13
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-types.mdx +10 -10
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/composition.mdx +6 -4
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/context.mdx +142 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/justfile +0 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/pyproject.toml +1 -1
- fastmcp-2.11.3/src/fastmcp/client/logging.py +50 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/transports.py +4 -3
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/server/openapi/routing.py +1 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/server/openapi/server.py +10 -23
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/__init__.py +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/formatters.py +34 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/models.py +5 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/parser.py +248 -70
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/schemas.py +135 -106
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/prompts/prompt_manager.py +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/resources/resource_manager.py +12 -6
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/__init__.py +9 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/auth.py +17 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/providers/jwt.py +3 -4
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/registry.py +1 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/dependencies.py +32 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/http.py +41 -34
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/server.py +9 -5
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/settings.py +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/tools/tool.py +7 -7
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/tools/tool_manager.py +3 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/tools/tool_transform.py +41 -27
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/components.py +19 -4
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/openapi.py +4 -4
- fastmcp-2.11.3/tests/client/test_logs.py +193 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_openapi_experimental.py +3 -3
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_openapi_legacy.py +3 -3
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_streamable_http.py +4 -8
- fastmcp-2.11.3/tests/experimental/README.md +3 -0
- fastmcp-2.11.3/tests/experimental/openapi_parser/README.md +5 -0
- fastmcp-2.11.3/tests/experimental/openapi_parser/conftest.py +11 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_end_to_end_compatibility.py +4 -2
- {fastmcp-2.11.2/tests/experimental/server → fastmcp-2.11.3/tests/experimental/openapi_parser/server/openapi}/test_openapi_performance.py +2 -2
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_performance_comparison.py +5 -5
- fastmcp-2.11.3/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +227 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_models.py +7 -5
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_parser.py +129 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_schemas.py +5 -3
- fastmcp-2.11.3/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +788 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_resource_manager.py +8 -8
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/auth/test_jwt_provider.py +14 -4
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/auth/test_remote_auth_provider.py +64 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/auth/test_static_token_verifier.py +26 -3
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/http/test_bearer_auth_backend.py +1 -1
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/http/test_http_auth_middleware.py +9 -9
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_import_server.py +38 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_mount.py +52 -0
- fastmcp-2.11.3/tests/server/test_streamable_http_no_redirect.py +85 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_tool_transformation.py +28 -0
- fastmcp-2.11.3/tests/tools/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/tools/test_tool.py +18 -12
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/tools/test_tool_manager.py +2 -2
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/tools/test_tool_transform.py +30 -22
- fastmcp-2.11.3/tests/utilities/test_components.py +438 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/uv.lock +4 -4
- fastmcp-2.11.2/.github/ISSUE_TEMPLATE/enhancement.yml +0 -38
- fastmcp-2.11.2/AGENTS.md +0 -67
- fastmcp-2.11.2/CLAUDE.md +0 -46
- fastmcp-2.11.2/docs/patterns/http-requests.mdx +0 -87
- fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -124
- fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +0 -22
- fastmcp-2.11.2/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -58
- fastmcp-2.11.2/src/fastmcp/client/logging.py +0 -26
- fastmcp-2.11.2/tests/client/test_logs.py +0 -90
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.ccignore +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/dependabot.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/labeler.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/release.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/workflows/labeler.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/LICENSE +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/README_OPENAPI.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/Windows_Notes.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/.ccignore +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/assets/favicon.svg +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/changelog.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/auth/oauth.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/client.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/tools.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/community/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/css/banner.css +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/css/style.css +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/css/version-badge.css +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/deployment/running-server.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/getting-started/installation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/authkit.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/fastapi.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/integrations/starlette.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-claude.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-cli.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-client.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-mcp_config.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-prompts-prompt.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-auth-registry.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-context.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-server-openapi.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/python-sdk/fastmcp-utilities-tests.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/auth/authentication.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/auth/token-verification.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/middleware.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/server.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/servers/tools.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/tutorials/rest-api.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/docs/updates.mdx +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/complex_inputs.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/config_server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/desktop.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/echo.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/get_file.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/memory.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/mount_example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/sampling.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/screenshot.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/serializer.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/simple_echo.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/smart_home/uv.lock +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/tags_example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/examples/text_me.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/cli.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/cursor.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/auth/oauth.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/director.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/mcp_config.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/auth/providers/workos.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/context.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/logging.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/middleware.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/server/proxy.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/json_schema.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/tests.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/src/fastmcp/utilities/types.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_cursor.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_install.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_run.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_run_with_uv.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/auth/test_oauth_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_elicitation.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_progress.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_roots.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_sse.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/conftest.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental/server → fastmcp-2.11.3/tests/experimental/openapi_parser}/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental/utilities → fastmcp-2.11.3/tests/experimental/openapi_parser/server}/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/server/openapi/test_server.py +0 -0
- {fastmcp-2.11.2/tests/integration_tests → fastmcp-2.11.3/tests/experimental/openapi_parser/utilities}/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.11.2/tests/experimental → fastmcp-2.11.3/tests/experimental/openapi_parser}/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.11.2/tests/prompts → fastmcp-2.11.3/tests/integration_tests}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.11.2/tests/resources → fastmcp-2.11.3/tests/prompts}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.11.2/tests/server → fastmcp-2.11.3/tests/resources}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.11.2/tests/server/http → fastmcp-2.11.3/tests/server}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/auth/test_workos.py +0 -0
- {fastmcp-2.11.2/tests/server/middleware → fastmcp-2.11.3/tests/server/http}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.11.2/tests/server/openapi → fastmcp-2.11.3/tests/server/middleware}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.11.2/tests/server/proxy → fastmcp-2.11.3/tests/server/openapi}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.11.2/tests/tools → fastmcp-2.11.3/tests/server/proxy}/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/proxy/test_proxy_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_context.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_logging.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_server.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_server_interactions.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/test_examples.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/test_mcp_config.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_json_schema_type.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.11.2 → fastmcp-2.11.3}/tests/utilities/test_types.py +0 -0
|
@@ -5,12 +5,12 @@ labels: [bug, pending]
|
|
|
5
5
|
body:
|
|
6
6
|
- type: markdown
|
|
7
7
|
attributes:
|
|
8
|
-
value:
|
|
8
|
+
value: Thanks for contributing to FastMCP! 🙏
|
|
9
9
|
|
|
10
10
|
- type: markdown
|
|
11
11
|
attributes:
|
|
12
12
|
value: |
|
|
13
|
-
|
|
13
|
+
### Before you submit
|
|
14
14
|
|
|
15
15
|
To help us help you, please:
|
|
16
16
|
|
|
@@ -18,7 +18,7 @@ body:
|
|
|
18
18
|
- 🔍 **Check if someone else has already reported this issue** or if it's been fixed on the main branch
|
|
19
19
|
- 📋 **You MUST include a copy/pasteable and properly formatted MRE** (minimal reproducible example) below or your issue may be closed without response
|
|
20
20
|
|
|
21
|
-
Thanks for helping make FastMCP better! 🚀
|
|
21
|
+
Thanks for helping to make FastMCP better! 🚀
|
|
22
22
|
|
|
23
23
|
- type: textarea
|
|
24
24
|
id: description
|
|
@@ -38,17 +38,20 @@ body:
|
|
|
38
38
|
description: >
|
|
39
39
|
If applicable, please provide a self-contained,
|
|
40
40
|
[minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example)
|
|
41
|
-
demonstrating the bug.
|
|
42
|
-
|
|
43
|
-
If possible, your example should be a single-file script. Instead of `.run()`-ing an MCP server, use a `Client` to directly interact with it (`async with Client(mcp) as client: ...`) and demonstrate the issue.
|
|
41
|
+
demonstrating the bug. If possible, your example should be a single-file script.
|
|
44
42
|
|
|
45
43
|
placeholder: |
|
|
44
|
+
import asyncio
|
|
46
45
|
from fastmcp import FastMCP, Client
|
|
47
46
|
|
|
48
47
|
mcp = FastMCP()
|
|
49
48
|
|
|
50
|
-
async
|
|
51
|
-
|
|
49
|
+
async def demo():
|
|
50
|
+
async with Client(mcp) as client:
|
|
51
|
+
... # show the bug here
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
asyncio.run(demo())
|
|
52
55
|
render: Python
|
|
53
56
|
|
|
54
57
|
- type: textarea
|
|
@@ -56,28 +59,13 @@ body:
|
|
|
56
59
|
attributes:
|
|
57
60
|
label: Version Information
|
|
58
61
|
description: |
|
|
59
|
-
Please
|
|
62
|
+
Please tell us about your FastMCP version, MCP version, Python version, and OS, as well as any other relevant details about your environment.
|
|
60
63
|
|
|
61
|
-
To get
|
|
64
|
+
To get the basic information, run the following command in your terminal and paste the output below:
|
|
62
65
|
|
|
63
66
|
```bash
|
|
64
67
|
fastmcp version --copy
|
|
65
68
|
```
|
|
66
|
-
|
|
67
|
-
*Note: if you're using FastMCP < 2.10.3, run `fastmcp version` instead.*
|
|
68
|
-
|
|
69
|
-
If there is other information that would be helpful, please include it as well.
|
|
70
69
|
render: Text
|
|
71
70
|
validations:
|
|
72
71
|
required: true
|
|
73
|
-
|
|
74
|
-
- type: textarea
|
|
75
|
-
id: additional_context
|
|
76
|
-
attributes:
|
|
77
|
-
label: Additional Context
|
|
78
|
-
description: |
|
|
79
|
-
Add any other context about the problem here. This could include:
|
|
80
|
-
- The full error message and traceback (if applicable)
|
|
81
|
-
- Information about your environment (e.g., virtual environment, installed packages)
|
|
82
|
-
- Steps to reproduce the issue
|
|
83
|
-
- Any recent changes in your code or setup that might be relevant
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: 💡 Enhancement Request
|
|
2
|
+
description: Suggest an idea or improvement for FastMCP
|
|
3
|
+
labels: [enhancement, pending]
|
|
4
|
+
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: Thanks for contributing to FastMCP! 🙏
|
|
9
|
+
|
|
10
|
+
- type: markdown
|
|
11
|
+
attributes:
|
|
12
|
+
value: |
|
|
13
|
+
### Before you submit
|
|
14
|
+
|
|
15
|
+
To help us evaluate your enhancement request:
|
|
16
|
+
|
|
17
|
+
- 🔍 **Check if this has already been requested** - search existing issues first
|
|
18
|
+
- 💭 **Think about the broader impact** - how would this affect other users?
|
|
19
|
+
- 📋 **Consider implementation complexity** - is this a small change or a major feature?
|
|
20
|
+
|
|
21
|
+
Thanks for helping to make FastMCP better! 🚀
|
|
22
|
+
|
|
23
|
+
- type: textarea
|
|
24
|
+
id: description
|
|
25
|
+
attributes:
|
|
26
|
+
label: Enhancement
|
|
27
|
+
description: |
|
|
28
|
+
Please describe the enhancement:
|
|
29
|
+
|
|
30
|
+
- What problem or use case would it solve?
|
|
31
|
+
- How would it improve your workflow or experience with FastMCP?
|
|
32
|
+
- Are there any alternative solutions you've considered?
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../AGENTS.md
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Marvin Context Protocol
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment: { types: [created] }
|
|
5
|
+
pull_request_review_comment: { types: [created] }
|
|
6
|
+
pull_request_review: { types: [submitted] }
|
|
7
|
+
issues: { types: [opened, edited, assigned, labeled] }
|
|
8
|
+
discussion: { types: [created, edited, labeled] }
|
|
9
|
+
discussion_comment: { types: [created] }
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
issues: write
|
|
14
|
+
pull-requests: write
|
|
15
|
+
discussions: write
|
|
16
|
+
actions: read
|
|
17
|
+
id-token: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
marvin:
|
|
21
|
+
if: |
|
|
22
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '/marvin')) ||
|
|
23
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '/marvin')) ||
|
|
24
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '/marvin')) ||
|
|
25
|
+
(github.event_name == 'issues' && contains(github.event.issue.body, '/marvin')) ||
|
|
26
|
+
(github.event_name == 'discussion' && contains(github.event.discussion.body, '/marvin')) ||
|
|
27
|
+
(github.event_name == 'discussion_comment' && contains(github.event.comment.body, '/marvin')) ||
|
|
28
|
+
(github.event_name == 'issues' && github.event.action == 'assigned' && github.event.assignee.login == 'Marvin Context Protocol') ||
|
|
29
|
+
(github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'marvin')
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- name: Generate Marvin App token
|
|
35
|
+
id: marvin-token
|
|
36
|
+
uses: actions/create-github-app-token@v1
|
|
37
|
+
with:
|
|
38
|
+
app-id: ${{ secrets.MARVIN_APP_ID }}
|
|
39
|
+
private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
|
|
40
|
+
|
|
41
|
+
# Marvin Assistant
|
|
42
|
+
- name: Marvin
|
|
43
|
+
uses: anthropics/claude-code-action@beta
|
|
44
|
+
with:
|
|
45
|
+
github_token: ${{ steps.marvin-token.outputs.token }}
|
|
46
|
+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
47
|
+
mode: tag
|
|
48
|
+
trigger_phrase: "/marvin"
|
|
49
|
+
allowed_bots: "*"
|
|
50
|
+
allowed_tools: "mcp__github__add_issue_comment,mcp__github__create_issue,mcp__github__get_issue,mcp__github__list_issues,mcp__github__search_issues,mcp__github__update_issue,mcp__github__update_issue_comment,mcp__github__create_pull_request,mcp__github__get_pull_request,mcp__github__get_pull_request_comments,mcp__github__get_pull_request_files,mcp__github__get_pull_request_reviews,mcp__github__get_pull_request_status,mcp__github__list_pull_requests,mcp__github__update_pull_request,mcp__github__update_pull_request_branch,mcp__github__update_pull_request_comment,mcp__github__merge_pull_request"
|
|
51
|
+
additional_permissions: |
|
|
52
|
+
actions: read
|
|
@@ -42,7 +42,29 @@ jobs:
|
|
|
42
42
|
python-version: "3.12"
|
|
43
43
|
- name: Install dependencies
|
|
44
44
|
run: uv sync --dev
|
|
45
|
+
- name: Install just
|
|
46
|
+
uses: extractions/setup-just@v3
|
|
47
|
+
- name: Check lockfile is up to date
|
|
48
|
+
run: |
|
|
49
|
+
if ! uv lock --check; then
|
|
50
|
+
echo "❌ Lockfile is out of date!"
|
|
51
|
+
echo "To update the lockfile, run 'uv lock'."
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
echo "✅ Lockfile is up to date"
|
|
45
55
|
- name: Run pre-commit
|
|
46
56
|
uses: pre-commit/action@v3.0.1
|
|
47
57
|
env:
|
|
48
58
|
SKIP: no-commit-to-branch
|
|
59
|
+
- name: Check SDK documentation is up to date
|
|
60
|
+
run: |
|
|
61
|
+
just api-ref-all > /dev/null 2>&1
|
|
62
|
+
if ! git diff --quiet docs/python-sdk/ docs/docs.json; then
|
|
63
|
+
echo "❌ SDK documentation is out of date!"
|
|
64
|
+
echo "Files that were updated:"
|
|
65
|
+
git diff --name-only docs/python-sdk/ docs/docs.json
|
|
66
|
+
echo ""
|
|
67
|
+
echo "Run 'just api-ref-all' and commit the changes."
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
echo "✅ SDK documentation is up to date"
|
|
@@ -44,7 +44,8 @@ jobs:
|
|
|
44
44
|
python-version: ${{ matrix.python-version }}
|
|
45
45
|
|
|
46
46
|
- name: Install FastMCP
|
|
47
|
-
run
|
|
47
|
+
# run with frozen to use the current lockfile; static checks will determine if it needs updating
|
|
48
|
+
run: uv sync --frozen
|
|
48
49
|
|
|
49
50
|
- name: Run tests (excluding integration and client_process)
|
|
50
51
|
run: uv run pytest tests -m "not integration and not client_process"
|
|
@@ -68,7 +69,8 @@ jobs:
|
|
|
68
69
|
python-version: "3.10"
|
|
69
70
|
|
|
70
71
|
- name: Install FastMCP
|
|
71
|
-
run
|
|
72
|
+
# run with frozen to use the current lockfile; static checks will determine if it needs updating
|
|
73
|
+
run: uv sync --frozen
|
|
72
74
|
|
|
73
75
|
- name: Run integration tests
|
|
74
76
|
run: uv run pytest tests -m "integration"
|
fastmcp-2.11.3/AGENTS.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# FastMCP Development Guidelines
|
|
2
|
+
|
|
3
|
+
> **Audience**: LLM-driven engineering agents and human developers
|
|
4
|
+
|
|
5
|
+
FastMCP is a comprehensive Python framework (Python ≥3.10) for building Model Context Protocol (MCP) servers and clients. This is the actively maintained v2.0 providing a complete toolkit for the MCP ecosystem.
|
|
6
|
+
|
|
7
|
+
## Required Development Workflow
|
|
8
|
+
|
|
9
|
+
**CRITICAL**: Always run these commands in sequence before committing:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv sync # Install dependencies
|
|
13
|
+
uv run pre-commit run --all-files # Ruff + Prettier + Pyright
|
|
14
|
+
uv run pytest # Run full test suite
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**All three must pass** - this is enforced by CI. Alternative: `just build && just typecheck && just test`
|
|
18
|
+
|
|
19
|
+
**Tests must pass and lint/typing must be clean before committing.**
|
|
20
|
+
|
|
21
|
+
## Repository Structure
|
|
22
|
+
|
|
23
|
+
| Path | Purpose |
|
|
24
|
+
| ---------------- | ------------------------------------------------------ |
|
|
25
|
+
| `src/fastmcp/` | Library source code (Python ≥ 3.10) |
|
|
26
|
+
| ` ├─server/` | Server implementation, `FastMCP`, auth, networking |
|
|
27
|
+
| ` │ ├─auth/` | Authentication providers (Bearer, JWT, WorkOS) |
|
|
28
|
+
| ` │ └─middleware/` | Error handling, logging, rate limiting |
|
|
29
|
+
| ` ├─client/` | High-level client SDK + transports |
|
|
30
|
+
| ` │ └─auth/` | Client authentication (Bearer, OAuth) |
|
|
31
|
+
| ` ├─tools/` | Tool implementations + `ToolManager` |
|
|
32
|
+
| ` ├─resources/` | Resources, templates + `ResourceManager` |
|
|
33
|
+
| ` ├─prompts/` | Prompt templates + `PromptManager` |
|
|
34
|
+
| ` ├─cli/` | FastMCP CLI commands (`run`, `dev`, `install`) |
|
|
35
|
+
| ` ├─contrib/` | Community contributions (bulk caller, mixins) |
|
|
36
|
+
| ` ├─experimental/` | Experimental features (new OpenAPI parser) |
|
|
37
|
+
| ` └─utilities/` | Shared utilities (logging, JSON schema, HTTP) |
|
|
38
|
+
| `tests/` | Comprehensive pytest suite with markers |
|
|
39
|
+
| `docs/` | Mintlify documentation (published to gofastmcp.com) |
|
|
40
|
+
| `examples/` | Runnable demo servers (echo, smart_home, atproto) |
|
|
41
|
+
|
|
42
|
+
## Core MCP Objects
|
|
43
|
+
|
|
44
|
+
When modifying MCP functionality, changes typically need to be applied across all object types:
|
|
45
|
+
- **Tools** (`src/tools/` + `ToolManager`)
|
|
46
|
+
- **Resources** (`src/resources/` + `ResourceManager`)
|
|
47
|
+
- **Resource Templates** (`src/resources/` + `ResourceManager`)
|
|
48
|
+
- **Prompts** (`src/prompts/` + `PromptManager`)
|
|
49
|
+
|
|
50
|
+
## Testing Best Practices
|
|
51
|
+
|
|
52
|
+
### Always Use In-Memory Transport
|
|
53
|
+
|
|
54
|
+
Pass FastMCP servers directly to clients for testing:
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
mcp = FastMCP("TestServer")
|
|
58
|
+
|
|
59
|
+
@mcp.tool
|
|
60
|
+
def greet(name: str) -> str:
|
|
61
|
+
return f"Hello, {name}!"
|
|
62
|
+
|
|
63
|
+
# Direct connection - no network complexity
|
|
64
|
+
async with Client(mcp) as client:
|
|
65
|
+
result = await client.call_tool("greet", {"name": "World"})
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Only use HTTP transport when explicitly testing network features:
|
|
69
|
+
```python
|
|
70
|
+
# Network testing only
|
|
71
|
+
async with Client(transport=StreamableHttpTransport(server_url)) as client:
|
|
72
|
+
result = await client.ping()
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Development Rules
|
|
76
|
+
|
|
77
|
+
### Git & CI
|
|
78
|
+
- Pre-commit hooks are required (run automatically on commits)
|
|
79
|
+
- Never amend commits to fix pre-commit failures
|
|
80
|
+
- Apply PR labels: bugs/breaking/enhancements/features
|
|
81
|
+
- Improvements = enhancements (not features) unless specified
|
|
82
|
+
|
|
83
|
+
### Commit Messages and Agent Attribution
|
|
84
|
+
- **NEVER** include agent attribution in commit messages or PR titles/descriptions (no "🤖 Generated with [tool]", "with Claude", etc.)
|
|
85
|
+
- Agent attribution is ONLY allowed in Co-authored-by lines in commits
|
|
86
|
+
- Keep commit messages brief - ideally just headlines, not detailed messages
|
|
87
|
+
- Focus on what changed, not how or why
|
|
88
|
+
|
|
89
|
+
### Code Standards
|
|
90
|
+
- Python ≥ 3.10 with full type annotations
|
|
91
|
+
- Follow existing patterns and maintain consistency
|
|
92
|
+
- Use `# type: ignore[attr-defined]` in tests for MCP results instead of type assertions
|
|
93
|
+
- Each feature needs corresponding tests
|
|
94
|
+
|
|
95
|
+
### Documentation
|
|
96
|
+
- Uses Mintlify framework
|
|
97
|
+
- Files must be in docs.json to be included
|
|
98
|
+
- Never modify `docs/python-sdk/**` (auto-generated)
|
|
99
|
+
|
|
100
|
+
## Key Tools & Commands
|
|
101
|
+
|
|
102
|
+
### Environment Setup
|
|
103
|
+
```bash
|
|
104
|
+
git clone <repo>
|
|
105
|
+
cd fastmcp
|
|
106
|
+
uv sync # Installs all deps including dev tools
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Validation Commands (Run Frequently)
|
|
110
|
+
- **Linting**: `uv run ruff check` (or with `--fix`)
|
|
111
|
+
- **Type Checking**: `uv run pyright`
|
|
112
|
+
- **All Checks**: `uv run pre-commit run --all-files`
|
|
113
|
+
|
|
114
|
+
### Testing
|
|
115
|
+
- **Standard**: `uv run pytest`
|
|
116
|
+
- **Integration**: `uv run pytest -m "integration"`
|
|
117
|
+
- **Excluding markers**: `uv run pytest -m "not integration and not client_process"`
|
|
118
|
+
|
|
119
|
+
### CLI Usage
|
|
120
|
+
- **Run server**: `uv run fastmcp run server.py`
|
|
121
|
+
- **Development**: `uv run fastmcp dev server.py` (with Inspector UI)
|
|
122
|
+
- **Help**: `uv run fastmcp --help`
|
|
123
|
+
|
|
124
|
+
## Critical Patterns
|
|
125
|
+
|
|
126
|
+
### Error Handling
|
|
127
|
+
- Never use bare `except` - be specific with exception types
|
|
128
|
+
- Use `# type: ignore[attr-defined]` in tests for MCP results
|
|
129
|
+
|
|
130
|
+
### Build Issues (Common Solutions)
|
|
131
|
+
1. **Dependencies**: Always `uv sync` first
|
|
132
|
+
2. **Pre-commit fails**: Run `uv run pre-commit run --all-files` to see failures
|
|
133
|
+
3. **Type errors**: Use `uv run pyright` directly, check `pyproject.toml` config
|
|
134
|
+
4. **Test timeouts**: Default 3s - optimize or mark as integration tests
|
fastmcp-2.11.3/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
AGENTS.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.11.
|
|
3
|
+
Version: 2.11.3
|
|
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
|
|
@@ -21,7 +21,7 @@ Requires-Dist: authlib>=1.5.2
|
|
|
21
21
|
Requires-Dist: cyclopts>=3.0.0
|
|
22
22
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
23
23
|
Requires-Dist: httpx>=0.28.1
|
|
24
|
-
Requires-Dist: mcp
|
|
24
|
+
Requires-Dist: mcp<2.0.0,>=1.12.4
|
|
25
25
|
Requires-Dist: openapi-core>=0.19.5
|
|
26
26
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
27
27
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
@@ -100,12 +100,12 @@ async def detailed_log_handler(message: LogMessage):
|
|
|
100
100
|
|
|
101
101
|
## Default Log Handling
|
|
102
102
|
|
|
103
|
-
If you don't provide a custom `log_handler`, FastMCP
|
|
103
|
+
If you don't provide a custom `log_handler`, FastMCP's default handler routes server logs to the appropriate Python logging levels. The MCP levels are mapped as follows: `notice` → INFO; `alert` and `emergency` → CRITICAL. If the server includes a logger name, it is prefixed in the message, and any `extra` data is forwarded via the logging `extra` parameter.
|
|
104
104
|
|
|
105
105
|
```python
|
|
106
106
|
client = Client("my_mcp_server.py")
|
|
107
107
|
|
|
108
108
|
async with client:
|
|
109
|
-
# Server logs
|
|
109
|
+
# Server logs are forwarded at their proper severity (DEBUG/INFO/WARNING/ERROR/CRITICAL)
|
|
110
110
|
await client.call_tool("some_tool")
|
|
111
111
|
```
|
|
@@ -65,7 +65,10 @@
|
|
|
65
65
|
{
|
|
66
66
|
"group": "Essentials",
|
|
67
67
|
"icon": "cube",
|
|
68
|
-
"pages": [
|
|
68
|
+
"pages": [
|
|
69
|
+
"servers/server",
|
|
70
|
+
"deployment/running-server"
|
|
71
|
+
]
|
|
69
72
|
},
|
|
70
73
|
{
|
|
71
74
|
"group": "Core Components",
|
|
@@ -108,7 +111,10 @@
|
|
|
108
111
|
{
|
|
109
112
|
"group": "Essentials",
|
|
110
113
|
"icon": "cube",
|
|
111
|
-
"pages": [
|
|
114
|
+
"pages": [
|
|
115
|
+
"clients/client",
|
|
116
|
+
"clients/transports"
|
|
117
|
+
]
|
|
112
118
|
},
|
|
113
119
|
{
|
|
114
120
|
"group": "Core Operations",
|
|
@@ -134,7 +140,10 @@
|
|
|
134
140
|
{
|
|
135
141
|
"group": "Authentication",
|
|
136
142
|
"icon": "user-shield",
|
|
137
|
-
"pages": [
|
|
143
|
+
"pages": [
|
|
144
|
+
"clients/auth/oauth",
|
|
145
|
+
"clients/auth/bearer"
|
|
146
|
+
]
|
|
138
147
|
}
|
|
139
148
|
]
|
|
140
149
|
},
|
|
@@ -162,7 +171,6 @@
|
|
|
162
171
|
"pages": [
|
|
163
172
|
"patterns/tool-transformation",
|
|
164
173
|
"patterns/decorating-methods",
|
|
165
|
-
"patterns/http-requests",
|
|
166
174
|
"patterns/testing",
|
|
167
175
|
"patterns/cli",
|
|
168
176
|
"patterns/contrib"
|
|
@@ -181,12 +189,17 @@
|
|
|
181
189
|
},
|
|
182
190
|
{
|
|
183
191
|
"anchor": "What's New",
|
|
184
|
-
"pages": [
|
|
192
|
+
"pages": [
|
|
193
|
+
"updates",
|
|
194
|
+
"changelog"
|
|
195
|
+
]
|
|
185
196
|
},
|
|
186
197
|
{
|
|
187
198
|
"anchor": "Community",
|
|
188
199
|
"icon": "users",
|
|
189
|
-
"pages": [
|
|
200
|
+
"pages": [
|
|
201
|
+
"community/showcase"
|
|
202
|
+
]
|
|
190
203
|
}
|
|
191
204
|
]
|
|
192
205
|
},
|
|
@@ -10,7 +10,7 @@ FastMCP run command implementation with enhanced type hints.
|
|
|
10
10
|
|
|
11
11
|
## Functions
|
|
12
12
|
|
|
13
|
-
### `is_url` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
13
|
+
### `is_url` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L25" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
14
14
|
|
|
15
15
|
```python
|
|
16
16
|
is_url(path: str) -> bool
|
|
@@ -20,7 +20,7 @@ is_url(path: str) -> bool
|
|
|
20
20
|
Check if a string is a URL.
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
### `parse_file_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
23
|
+
### `parse_file_path` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L31" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
24
24
|
|
|
25
25
|
```python
|
|
26
26
|
parse_file_path(server_spec: str) -> tuple[Path, str | None]
|
|
@@ -36,10 +36,10 @@ Parse a file path that may include a server object specification.
|
|
|
36
36
|
- Tuple of (file_path, server_object)
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
### `import_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
39
|
+
### `import_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L62" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
40
40
|
|
|
41
41
|
```python
|
|
42
|
-
import_server(file: Path,
|
|
42
|
+
import_server(file: Path, server_or_factory: str | None = None) -> Any
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
|
|
@@ -47,13 +47,13 @@ Import a MCP server from a file.
|
|
|
47
47
|
|
|
48
48
|
**Args:**
|
|
49
49
|
- `file`: Path to the file
|
|
50
|
-
- `
|
|
50
|
+
- `server_or_factory`: Optional object name in format "module\:object" or just "object"
|
|
51
51
|
|
|
52
52
|
**Returns:**
|
|
53
|
-
- The server object
|
|
53
|
+
- The server object (or result of calling a factory function)
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
### `run_with_uv` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
56
|
+
### `run_with_uv` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L179" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
57
57
|
|
|
58
58
|
```python
|
|
59
59
|
run_with_uv(server_spec: str, python_version: str | None = None, with_packages: list[str] | None = None, with_requirements: Path | None = None, project: Path | None = None, transport: TransportType | None = None, host: str | None = None, port: int | None = None, path: str | None = None, log_level: LogLevelType | None = None, show_banner: bool = True) -> None
|
|
@@ -76,7 +76,7 @@ Run a MCP server using uv run subprocess.
|
|
|
76
76
|
- `show_banner`: Whether to show the server banner
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
### `create_client_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
79
|
+
### `create_client_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L257" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
80
80
|
|
|
81
81
|
```python
|
|
82
82
|
create_client_server(url: str) -> Any
|
|
@@ -92,7 +92,7 @@ Create a FastMCP server from a client URL.
|
|
|
92
92
|
- A FastMCP server instance
|
|
93
93
|
|
|
94
94
|
|
|
95
|
-
### `create_mcp_config_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
95
|
+
### `create_mcp_config_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L277" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
96
96
|
|
|
97
97
|
```python
|
|
98
98
|
create_mcp_config_server(mcp_config_path: Path) -> FastMCP[None]
|
|
@@ -102,10 +102,10 @@ create_mcp_config_server(mcp_config_path: Path) -> FastMCP[None]
|
|
|
102
102
|
Create a FastMCP server from a MCPConfig.
|
|
103
103
|
|
|
104
104
|
|
|
105
|
-
### `import_server_with_args` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
105
|
+
### `import_server_with_args` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L288" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
106
106
|
|
|
107
107
|
```python
|
|
108
|
-
import_server_with_args(file: Path,
|
|
108
|
+
import_server_with_args(file: Path, server_or_factory: str | None = None, server_args: list[str] | None = None) -> Any
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
|
|
@@ -113,14 +113,14 @@ Import a server with optional command line arguments.
|
|
|
113
113
|
|
|
114
114
|
**Args:**
|
|
115
115
|
- `file`: Path to the server file
|
|
116
|
-
- `
|
|
116
|
+
- `server_or_factory`: Optional server object or factory function name
|
|
117
117
|
- `server_args`: Optional command line arguments to inject
|
|
118
118
|
|
|
119
119
|
**Returns:**
|
|
120
120
|
- The imported server object
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
### `run_command` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
123
|
+
### `run_command` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L314" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
124
124
|
|
|
125
125
|
```python
|
|
126
126
|
run_command(server_spec: str, transport: TransportType | None = None, host: str | None = None, port: int | None = None, path: str | None = None, log_level: LogLevelType | None = None, server_args: list[str] | None = None, show_banner: bool = True, use_direct_import: bool = False) -> None
|
|
@@ -141,7 +141,7 @@ Run a MCP server or connect to a remote one.
|
|
|
141
141
|
- `use_direct_import`: Whether to use direct import instead of subprocess
|
|
142
142
|
|
|
143
143
|
|
|
144
|
-
### `run_v1_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#
|
|
144
|
+
### `run_v1_server` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/cli/run.py#L379" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
145
145
|
|
|
146
146
|
```python
|
|
147
147
|
run_v1_server(server: FastMCP1x, host: str | None = None, port: int | None = None, transport: TransportType | None = None) -> None
|
|
@@ -13,7 +13,11 @@ sidebarTitle: logging
|
|
|
13
13
|
default_log_handler(message: LogMessage) -> None
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
Default handler that properly routes server log messages to appropriate log levels.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### `create_log_callback` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/logging.py#L43" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
17
21
|
|
|
18
22
|
```python
|
|
19
23
|
create_log_callback(handler: LogHandler | None = None) -> LoggingFnT
|