fastmcp 2.13.0.1__tar.gz → 2.13.1__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.13.1/.github/workflows/martian-test-failure.yml +179 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/marvin.yml +6 -6
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/run-static.yml +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/run-tests.yml +3 -8
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/AGENTS.md +7 -7
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/PKG-INFO +14 -11
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/README.md +7 -5
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/auth/oauth.mdx +34 -20
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/client.mdx +49 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/tools.mdx +25 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/deployment/http.mdx +3 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/deployment/running-server.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/development/contributing.mdx +9 -9
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/development/tests.mdx +10 -11
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/docs.json +1 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/getting-started/installation.mdx +14 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/getting-started/welcome.mdx +3 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/auth0.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/authkit.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/aws-cognito.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/azure.mdx +13 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/descope.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/fastapi.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/github.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/google.mdx +1 -1
- fastmcp-2.13.1/docs/integrations/images/oci/ociaddapplication.png +0 -0
- fastmcp-2.13.1/docs/integrations/images/oci/ocieditdomainsettings.png +0 -0
- fastmcp-2.13.1/docs/integrations/images/oci/ocieditdomainsettingsbutton.png +0 -0
- fastmcp-2.13.1/docs/integrations/images/oci/ocioauthconfiguration.png +0 -0
- fastmcp-2.13.1/docs/integrations/oci.mdx +333 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/patterns/testing.mdx +20 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-cli.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-cursor.mdx +5 -5
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-auth-oauth.mdx +9 -9
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-client.mdx +61 -33
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-transports.mdx +19 -19
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-mcp_config.mdx +3 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-prompts-prompt.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-oauth_proxy.mdx +33 -13
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-oidc_proxy.mdx +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-azure.mdx +2 -2
- fastmcp-2.13.1/docs/python-sdk/fastmcp-server-auth-providers-debug.mdx +70 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-jwt.mdx +6 -6
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-context.mdx +3 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-dependencies.mdx +4 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-caching.mdx +18 -18
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-openapi.mdx +4 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-proxy.mdx +26 -26
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-server.mdx +55 -55
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-tools-tool.mdx +16 -16
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-tools-tool_transform.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-base.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-base.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-tests.mdx +4 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-types.mdx +16 -7
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-ui.mdx +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/oidc-proxy.mdx +11 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/token-verification.mdx +63 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/context.mdx +71 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/icons.mdx +10 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/middleware.mdx +35 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/storage-backends.mdx +4 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/tools.mdx +119 -39
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/tutorials/rest-api.mdx +1 -1
- fastmcp-2.13.1/examples/testing_demo/README.md +84 -0
- fastmcp-2.13.1/examples/testing_demo/pyproject.toml +18 -0
- fastmcp-2.13.1/examples/testing_demo/server.py +61 -0
- fastmcp-2.13.1/examples/testing_demo/tests/test_server.py +160 -0
- fastmcp-2.13.1/examples/testing_demo/uv.lock +1569 -0
- fastmcp-2.13.1/examples/tool_result_echo.py +41 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/pyproject.toml +31 -20
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/cli.py +3 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/cursor.py +12 -6
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/auth/oauth.py +11 -6
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/client.py +86 -20
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/transports.py +4 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/director.py +13 -14
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/parser.py +18 -15
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/mcp_config.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/resources/resource_manager.py +3 -3
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/__init__.py +4 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/auth.py +28 -9
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/handlers/authorize.py +7 -5
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/oauth_proxy.py +170 -30
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/oidc_proxy.py +28 -9
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/azure.py +26 -5
- fastmcp-2.13.1/src/fastmcp/server/auth/providers/debug.py +114 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/descope.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/in_memory.py +25 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/jwt.py +38 -26
- fastmcp-2.13.1/src/fastmcp/server/auth/providers/oci.py +233 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/supabase.py +21 -5
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/workos.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/context.py +50 -8
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/dependencies.py +8 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/caching.py +9 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/logging.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/middleware.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/proxy.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/server.py +11 -5
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/tools/tool.py +33 -8
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/components.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/json_schema.py +4 -4
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/logging.py +13 -9
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/openapi.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/types.py +28 -15
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/ui.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_cursor.py +95 -19
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/auth/test_oauth_client.py +4 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_client.py +156 -11
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_elicitation.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_sse.py +4 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_streamable_http.py +1 -1
- fastmcp-2.13.1/tests/client/transports/test_transports.py +37 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/conftest.py +17 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_performance.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/integration_tests/auth/test_github_provider_integration.py +2 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_resource_manager.py +106 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_azure.py +102 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_supabase.py +37 -0
- fastmcp-2.13.1/tests/server/auth/test_debug_verifier.py +169 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_jwt_provider.py +23 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oauth_consent_flow.py +17 -6
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oauth_mounting.py +71 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oauth_proxy.py +100 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oidc_proxy.py +136 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_caching.py +16 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/proxy/test_proxy_client.py +2 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_auth_integration.py +6 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_context.py +56 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_server.py +1 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_server_interactions.py +1 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/test_mcp_config.py +2 -1
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/tools/test_tool.py +111 -10
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/test_openapi_fastapi.py +3 -2
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_json_schema_type.py +6 -6
- fastmcp-2.13.1/tests/utilities/test_logging.py +56 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_types.py +37 -15
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/uv.lock +183 -366
- fastmcp-2.13.0.1/tests/utilities/test_logging.py +0 -30
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.ccignore +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.cursor/worktrees.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/copilot-instructions.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/dependabot.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/pull_request_template.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/release.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/auto-close-duplicates.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/auto-close-needs-mre.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/martian-issue-triage.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/marvin-dedupe-issues.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/marvin-label-triage.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/update-config-schema.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.github/workflows/update-sdk-docs.yml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.gitignore +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/.pre-commit-config.yaml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/CLAUDE.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/CODE_OF_CONDUCT.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/LICENSE +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/SECURITY.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/.ccignore +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/.cursor/rules/mintlify.mdc +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/blue-logo.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/f-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/f-watercolor-waves.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/favicon.svg +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/thumbnail-background.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-padded.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-watercolor-rainbow-dark.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-watercolor-rainbow.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-watercolor-waves-dark.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-watercolor-waves.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-white-padded.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark-white.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/brand/wordmark.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/fastmcp_cloud/connect.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/fastmcp_cloud/create_project.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/fastmcp_cloud/deployment.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/fastmcp_cloud/quickstart.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/oauth-proxy-consent-screen.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/schemas/mcp_server_config/latest.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/schemas/mcp_server_config/v1.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/changelog.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/auth/bearer.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/elicitation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/logging.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/messages.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/progress.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/prompts.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/resources.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/roots.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/sampling.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/clients/transports.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/community/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/css/banner.css +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/css/python-sdk.css +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/css/style.css +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/css/version-badge.css +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/deployment/fastmcp-cloud.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/deployment/server-configuration.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/development/releases.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/development/upgrade-guide.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/anthropic.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/chatgpt.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/claude-code.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/claude-desktop.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/cursor-install-mcp.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/cursor.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/eunomia-authorization.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/gemini-cli.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/gemini.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/images/authkit/enable_dcr.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/images/permit/abac_condition_example.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/images/permit/abac_policy_example.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/images/permit/policy_mapping.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/images/permit/role_assignement.png +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/mcp-json-configuration.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/openai.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/openapi.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/permit.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/scalekit.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/integrations/workos.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/patterns/cli.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/patterns/contrib.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/patterns/tool-transformation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/public/schemas/fastmcp.json/latest.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/public/schemas/fastmcp.json/v1.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-claude_code.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-claude_desktop.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-gemini_cli.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-mcp_json.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-install-shared.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-cli-run.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-auth-bearer.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-elicitation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-logging.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-messages.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-oauth_callback.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-progress.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-roots.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-client-sampling.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-exceptions.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-prompts-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-resources-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-resources-resource.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-resources-resource_manager.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-resources-template.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-resources-types.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-auth.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-jwt_issuer.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-middleware.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-auth0.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-aws.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-descope.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-github.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-google.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-introspection.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-scalekit.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-supabase.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-providers-workos.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-auth-redirect_validation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-elicitation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-http.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-low_level.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-logging.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-timing.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-server-middleware-tool_injection.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-settings.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-tools-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-tools-tool_manager.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-auth.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-cli.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-components.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-exceptions.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-http.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-inspect.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-json_schema.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-json_schema_type.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-logging.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-environments-uv.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-mcp_server_config.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-__init__.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-mcp_server_config-v1-sources-filesystem.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/python-sdk/fastmcp-utilities-openapi.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/authentication.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/full-oauth-server.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/oauth-proxy.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/auth/remote-oauth.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/composition.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/elicitation.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/logging.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/progress.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/prompts.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/proxy.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/resources.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/sampling.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/servers/server.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/snippets/local-focus.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/docs/updates.mdx +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/demo.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/pyproject.toml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/__main__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/py.typed +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/settings.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/atproto_mcp/src/atproto_mcp/types.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/authkit_dcr/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/authkit_dcr/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/authkit_dcr/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/aws_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/aws_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/aws_oauth/requirements.txt +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/aws_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/azure_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/azure_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/azure_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/github_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/github_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/github_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/google_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/google_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/google_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/scalekit_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/scalekit_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/scalekit_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/workos_oauth/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/workos_oauth/client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/auth/workos_oauth/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/complex_inputs.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/config_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/desktop.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/echo.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config/env_interpolation_example.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config/fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config/full_example.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config/simple.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config_demo/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config_demo/fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/fastmcp_config_demo/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/get_file.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/memory.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/memory.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/mount_example.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/mount_example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/sampling.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/sampling_fallback.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/screenshot.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/screenshot.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/serializer.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/simple_echo.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/hub.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/lights.fastmcp.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/py.typed +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/tags_example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/examples/text_me.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/justfile +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/logo.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/scripts/auto_close_duplicates.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/scripts/auto_close_needs_mre.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/claude_code.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/claude_desktop.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/gemini_cli.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/mcp_json.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/install/shared.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/cli/run.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/elicitation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/logging.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/messages.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/component_manager/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/component_manager/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/component_manager/component_service.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/component_manager/example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/sampling/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/sampling/handlers/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/sampling/handlers/base.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/sampling/handlers/openai.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/server/openapi/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/server/openapi/components.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/server/openapi/routing.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/server/openapi/server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/formatters.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/json_schema_converter.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/models.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/experimental/utilities/openapi/schemas.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/prompts/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/prompts/prompt.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/prompts/prompt_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/py.typed +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/resources/resource.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/resources/template.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/jwt_issuer.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/middleware.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/auth0.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/aws.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/bearer.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/github.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/google.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/introspection.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/providers/scalekit.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/auth/redirect_validation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/elicitation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/http.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/low_level.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/error_handling.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/rate_limiting.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/timing.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/middleware/tool_injection.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/server/sampling/handler.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/settings.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/tools/tool_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/tools/tool_transform.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/auth.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/cli.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/inspect.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/json_schema_type.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_config.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/src/fastmcp/utilities/tests.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_cli.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_config.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_install.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_mcp_server_config_integration.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_mcp_server_config_schema.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_project_prepare.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_run.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_run_config.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_server_args.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_shared.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/cli/test_with_argv.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/auth/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_logs.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_notifications.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_oauth_callback_xss.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_openapi_experimental.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_openapi_legacy.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_progress.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_roots.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/transports/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/client/transports/test_uv_transport.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/contrib/test_component_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_bearer_auth_provider.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_dependencies.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_deprecated.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_mount_import_arg_order.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_mount_separators.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_output_schema_false.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_proxy_client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_resource_prefixes.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/deprecated/test_settings.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/README.md +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/conftest.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_comprehensive.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_end_to_end_compatibility.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_openapi_features.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_performance_comparison.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/server/openapi/test_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_allof_requestbody.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_direct_array_schemas.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_director.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_legacy_compatibility.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_models.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_parser.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_schemas.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/openapi_parser/utilities/openapi/test_transitive_references.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/experimental/sampling/test_openai_handler.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/integration_tests/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/integration_tests/auth/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/integration_tests/conftest.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/integration_tests/test_github_mcp_remote.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/prompts/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/prompts/test_prompt.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/prompts/test_prompt_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_resource_template.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_resource_template_meta.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_auth0.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_aws.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_descope.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_github.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_google.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_introspection.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_scalekit.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/providers/test_workos.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_auth_provider.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_enhanced_error_responses.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_jwt_issuer.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oauth_proxy_redirect_validation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_oauth_proxy_storage.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_redirect_validation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_remote_auth_provider.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/auth/test_static_token_verifier.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/test_bearer_auth_backend.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/test_custom_routes.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/test_http_auth_middleware.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/test_http_dependencies.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/http/test_http_middleware.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_error_handling.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_initialization_middleware.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_logging.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_middleware.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_rate_limiting.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_timing.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/middleware/test_tool_injection.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/conftest.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_advanced_behavior.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_basic_functionality.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_configuration.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_deepobject_style.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_description_propagation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_explode_integration.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_openapi_compatibility.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_openapi_path_parameters.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_optional_parameters.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_parameter_collisions.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/proxy/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/proxy/test_proxy_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/proxy/test_stateful_proxy_client.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_app_state.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_experimental_openapi_feature_flag.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_icons.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_import_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_input_validation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_log_level.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_logging.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_mount.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_resource_prefix_formats.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_server_lifespan.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_streamable_http_no_redirect.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_tool_annotations.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_tool_exclude_args.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/server/test_tool_transformation.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/test_examples.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/tools/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/tools/test_tool_future_annotations.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/tools/test_tool_manager.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/test_nullable_fields.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/test_openapi_advanced.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/openapi/test_openapi_output_schemas.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_cli.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_components.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_inspect.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_json_schema.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.13.0.1 → fastmcp-2.13.1}/tests/utilities/test_typeadapter.py +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
name: Marvin Test Failure Analysis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_run:
|
|
5
|
+
workflows: ["Run Tests"]
|
|
6
|
+
types:
|
|
7
|
+
- completed
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: marvin-test-failure-${{ github.event.workflow_run.head_branch }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
martian-test-failure:
|
|
15
|
+
# Only run if the test workflow failed
|
|
16
|
+
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
pull-requests: write
|
|
21
|
+
issues: read
|
|
22
|
+
id-token: write
|
|
23
|
+
actions: read # Required for Claude to read CI results
|
|
24
|
+
steps:
|
|
25
|
+
- name: Checkout repository
|
|
26
|
+
uses: actions/checkout@v4
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 1
|
|
29
|
+
|
|
30
|
+
- name: Generate Marvin App token
|
|
31
|
+
id: marvin-token
|
|
32
|
+
uses: actions/create-github-app-token@v2
|
|
33
|
+
with:
|
|
34
|
+
app-id: ${{ secrets.MARVIN_APP_ID }}
|
|
35
|
+
private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
|
|
36
|
+
|
|
37
|
+
- name: Set up Python 3.10
|
|
38
|
+
uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.10"
|
|
41
|
+
|
|
42
|
+
# Install UV package manager
|
|
43
|
+
- name: Install UV
|
|
44
|
+
uses: astral-sh/setup-uv@v7
|
|
45
|
+
|
|
46
|
+
# Install dependencies
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: uv sync --all-packages --group dev
|
|
49
|
+
|
|
50
|
+
- name: Set analysis prompt
|
|
51
|
+
id: analysis-prompt
|
|
52
|
+
run: |
|
|
53
|
+
cat >> $GITHUB_OUTPUT << 'EOF'
|
|
54
|
+
PROMPT<<PROMPT_END
|
|
55
|
+
You're a test failure analysis assistant for FastMCP, a Python framework for building Model Context Protocol servers and clients.
|
|
56
|
+
|
|
57
|
+
# Your Task
|
|
58
|
+
A GitHub Actions workflow has failed. Your job is to:
|
|
59
|
+
1. Analyze the test failure(s) to understand what went wrong
|
|
60
|
+
2. Identify the root cause of the failure(s)
|
|
61
|
+
3. Suggest a clear, actionable solution to fix the failure(s)
|
|
62
|
+
|
|
63
|
+
# Getting Started
|
|
64
|
+
1. Call the generate_agents_md tool to get a high-level summary of the project
|
|
65
|
+
2. Get the pull request associated with this workflow run from the GitHub repository: ${{ github.repository }}
|
|
66
|
+
- The workflow run ID is: ${{ github.event.workflow_run.id }}
|
|
67
|
+
- The workflow run was triggered by: ${{ github.event.workflow_run.event }}
|
|
68
|
+
- Use GitHub MCP tools to get PR details and workflow run information
|
|
69
|
+
3. Use the GitHub MCP tools to fetch job logs and failure information:
|
|
70
|
+
- Use get_workflow_run to get details about the failed workflow
|
|
71
|
+
- Use list_workflow_jobs to see which jobs failed
|
|
72
|
+
- Use get_job_logs with failed_only=true to get logs for failed jobs
|
|
73
|
+
- Use summarize_run_log_failures to get an AI summary of what failed
|
|
74
|
+
4. Analyze the failures to understand the root cause
|
|
75
|
+
5. Search the codebase for relevant files, tests, and implementations
|
|
76
|
+
|
|
77
|
+
# Your Response
|
|
78
|
+
Post a comment on the pull request with your analysis. Your comment should include:
|
|
79
|
+
|
|
80
|
+
## Test Failure Analysis
|
|
81
|
+
|
|
82
|
+
**Summary**: A brief 1-2 sentence summary of what failed.
|
|
83
|
+
|
|
84
|
+
**Root Cause**: A clear explanation of why the tests failed, based on your analysis of the logs and code.
|
|
85
|
+
|
|
86
|
+
**Suggested Solution**: Specific, actionable steps to fix the failure(s). Include:
|
|
87
|
+
- Which files need to be modified
|
|
88
|
+
- What changes are needed
|
|
89
|
+
- Why these changes will fix the issue
|
|
90
|
+
|
|
91
|
+
<details>
|
|
92
|
+
<summary>Detailed Analysis</summary>
|
|
93
|
+
|
|
94
|
+
Include here:
|
|
95
|
+
- Relevant log excerpts showing the failure
|
|
96
|
+
- Code snippets that are causing the issue
|
|
97
|
+
- Any related issues or PRs that might be relevant
|
|
98
|
+
</details>
|
|
99
|
+
|
|
100
|
+
<details>
|
|
101
|
+
<summary>Related Files</summary>
|
|
102
|
+
|
|
103
|
+
List files that are relevant to the failure with brief explanations of their relevance.
|
|
104
|
+
</details>
|
|
105
|
+
|
|
106
|
+
# Important Guidelines
|
|
107
|
+
- Be concise and actionable - developers want to quickly understand and fix the issue
|
|
108
|
+
- Focus on facts from the logs and code, not speculation
|
|
109
|
+
- If you can't determine the root cause, say so clearly
|
|
110
|
+
- Provide specific file names, line numbers, and code references when possible
|
|
111
|
+
- You can run make commands (e.g., `make lint`, `make typecheck`, `make sync`) to build, test, or lint the code
|
|
112
|
+
- You can also run git commands (e.g., `git status`, `git log`, `git diff`) to inspect the repository
|
|
113
|
+
- You can use WebSearch and WebFetch to research errors, stack traces, or related issues
|
|
114
|
+
- For bash commands, you are limited to make and git commands only
|
|
115
|
+
|
|
116
|
+
# CRITICAL: Loop Detection
|
|
117
|
+
**IMPORTANT**: Before posting your analysis, check the PR comments to detect if there's a loop where:
|
|
118
|
+
- CodeRabbit or another bot triggered this workflow
|
|
119
|
+
- Your previous analysis triggered CodeRabbit or another bot
|
|
120
|
+
- This created a repeating cycle of bot comments
|
|
121
|
+
|
|
122
|
+
# CRITICAL: ANGRY USERS
|
|
123
|
+
**IMPORTANT**: If the user is angry with you, the triage bot, don't respond. Just exit immediately without further action.
|
|
124
|
+
|
|
125
|
+
If you detect such a loop (e.g., you see multiple similar bot comments or your own previous analysis comments):
|
|
126
|
+
1. **DO NOT** post another analysis comment
|
|
127
|
+
2. Exit immediately without further action
|
|
128
|
+
|
|
129
|
+
# Problems Encountered
|
|
130
|
+
If you encounter any problems during your analysis (e.g., unable to fetch logs, tools not working), document them clearly so the team knows what limitations you faced.
|
|
131
|
+
PROMPT_END
|
|
132
|
+
EOF
|
|
133
|
+
|
|
134
|
+
- name: Setup GitHub MCP Server
|
|
135
|
+
run: |
|
|
136
|
+
mkdir -p /tmp/mcp-config
|
|
137
|
+
cat > /tmp/mcp-config/mcp-servers.json << 'EOF'
|
|
138
|
+
{
|
|
139
|
+
"mcpServers": {
|
|
140
|
+
"repository-summary": {
|
|
141
|
+
"type": "http",
|
|
142
|
+
"url": "https://agents-md-generator.fastmcp.app/mcp"
|
|
143
|
+
},
|
|
144
|
+
"code-search": {
|
|
145
|
+
"type": "http",
|
|
146
|
+
"url": "https://public-code-search.fastmcp.app/mcp"
|
|
147
|
+
},
|
|
148
|
+
"github-research": {
|
|
149
|
+
"type": "stdio",
|
|
150
|
+
"command": "uvx",
|
|
151
|
+
"args": [
|
|
152
|
+
"github-research-mcp"
|
|
153
|
+
],
|
|
154
|
+
"env": {
|
|
155
|
+
"DISABLE_SUMMARIES": "true",
|
|
156
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${{ secrets.GITHUB_TOKEN }}"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
EOF
|
|
162
|
+
|
|
163
|
+
- name: Run Claude Code
|
|
164
|
+
id: claude
|
|
165
|
+
uses: anthropics/claude-code-action@v1
|
|
166
|
+
with:
|
|
167
|
+
github_token: ${{ steps.marvin-token.outputs.token }}
|
|
168
|
+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
|
|
169
|
+
bot_name: "Marvin Context Protocol"
|
|
170
|
+
|
|
171
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
172
|
+
|
|
173
|
+
additional_permissions: |
|
|
174
|
+
actions: read
|
|
175
|
+
|
|
176
|
+
prompt: ${{ steps.analysis-prompt.outputs.PROMPT }}
|
|
177
|
+
claude_args: |
|
|
178
|
+
--allowed-tools mcp__repository-summary,mcp__code-search,mcp__github-research,WebSearch,WebFetch,Bash(make:*,git:*)
|
|
179
|
+
--mcp-config /tmp/mcp-config/mcp-servers.json
|
|
@@ -44,11 +44,10 @@ jobs:
|
|
|
44
44
|
- name: Install dependencies
|
|
45
45
|
run: uv sync --python 3.12
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
echo "✅ Pre-commit hooks installed"
|
|
47
|
+
- name: Run prek
|
|
48
|
+
uses: j178/prek-action@v1
|
|
49
|
+
env:
|
|
50
|
+
SKIP: no-commit-to-branch
|
|
52
51
|
|
|
53
52
|
- name: Generate Marvin App token
|
|
54
53
|
id: marvin-token
|
|
@@ -74,5 +73,6 @@ jobs:
|
|
|
74
73
|
"model": "claude-sonnet-4-5-20250929",
|
|
75
74
|
"env": {
|
|
76
75
|
"GH_TOKEN": "${{ steps.marvin-token.outputs.token }}"
|
|
77
|
-
}
|
|
76
|
+
},
|
|
77
|
+
"customInstructions": "When you complete work on an issue: (1) You MUST create a pull request using the mcp__github__create_pull_request tool instead of posting a link, and (2) You MUST add the 'marvin-pr' label to the original issue using mcp__github__update_issue. Even if PR creation fails and you post a link instead, you MUST still add the 'marvin-pr' label. Follow the PR message guidelines in CLAUDE.md."
|
|
78
78
|
}
|
|
@@ -48,12 +48,7 @@ jobs:
|
|
|
48
48
|
run: uv sync --upgrade
|
|
49
49
|
|
|
50
50
|
- name: Run tests (excluding integration and client_process)
|
|
51
|
-
run:
|
|
52
|
-
if [ "${{ matrix.os }}" = "windows-latest" ]; then
|
|
53
|
-
uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process"
|
|
54
|
-
else
|
|
55
|
-
uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
56
|
-
fi
|
|
51
|
+
run: uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
57
52
|
shell: bash
|
|
58
53
|
|
|
59
54
|
- name: Run client process tests separately
|
|
@@ -79,10 +74,10 @@ jobs:
|
|
|
79
74
|
run: uv sync --resolution lowest-direct
|
|
80
75
|
|
|
81
76
|
- name: Run tests (excluding integration and client_process)
|
|
82
|
-
run: uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
77
|
+
run: uv run --resolution lowest-direct pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal
|
|
83
78
|
|
|
84
79
|
- name: Run client process tests separately
|
|
85
|
-
run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x
|
|
80
|
+
run: uv run --resolution lowest-direct pytest --inline-snapshot=disable tests -m "client_process" -x
|
|
86
81
|
|
|
87
82
|
run_integration_tests:
|
|
88
83
|
name: "Run integration tests"
|
|
@@ -10,7 +10,7 @@ FastMCP is a comprehensive Python framework (Python ≥3.10) for building Model
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
uv sync # Install dependencies
|
|
13
|
-
uv run
|
|
13
|
+
uv run prek run --all-files # Ruff + Prettier + ty
|
|
14
14
|
uv run pytest # Run full test suite
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -100,12 +100,12 @@ async with Client(transport=StreamableHttpTransport(server_url)) as client:
|
|
|
100
100
|
|
|
101
101
|
### Git & CI
|
|
102
102
|
|
|
103
|
-
-
|
|
104
|
-
- Never amend commits to fix
|
|
103
|
+
- Prek hooks are required (run automatically on commits)
|
|
104
|
+
- Never amend commits to fix prek failures
|
|
105
105
|
- Apply PR labels: bugs/breaking/enhancements/features
|
|
106
106
|
- Improvements = enhancements (not features) unless specified
|
|
107
107
|
- **NEVER** force-push on collaborative repos
|
|
108
|
-
- **ALWAYS** run
|
|
108
|
+
- **ALWAYS** run prek before PRs
|
|
109
109
|
|
|
110
110
|
### Commit Messages and Agent Attribution
|
|
111
111
|
|
|
@@ -217,7 +217,7 @@ If something needs work, your review should help it get there through specific,
|
|
|
217
217
|
|
|
218
218
|
Before approving, verify:
|
|
219
219
|
|
|
220
|
-
- [ ] All required development workflow steps completed (uv sync,
|
|
220
|
+
- [ ] All required development workflow steps completed (uv sync, prek, pytest)
|
|
221
221
|
- [ ] Changes align with repository patterns and conventions
|
|
222
222
|
- [ ] API changes are documented and backwards-compatible where possible
|
|
223
223
|
- [ ] Error handling follows project patterns (specific exception types)
|
|
@@ -237,7 +237,7 @@ uv sync # Installs all deps including dev tools
|
|
|
237
237
|
|
|
238
238
|
- **Linting**: `uv run ruff check` (or with `--fix`)
|
|
239
239
|
- **Type Checking**: `uv run ty check`
|
|
240
|
-
- **All Checks**: `uv run
|
|
240
|
+
- **All Checks**: `uv run prek run --all-files`
|
|
241
241
|
|
|
242
242
|
### Testing
|
|
243
243
|
|
|
@@ -260,6 +260,6 @@ uv sync # Installs all deps including dev tools
|
|
|
260
260
|
### Build Issues (Common Solutions)
|
|
261
261
|
|
|
262
262
|
1. **Dependencies**: Always `uv sync` first
|
|
263
|
-
2. **
|
|
263
|
+
2. **Prek fails**: Run `uv run prek run --all-files` to see failures
|
|
264
264
|
3. **Type errors**: Use `uv run ty check` directly, check `pyproject.toml` config
|
|
265
265
|
4. **Test timeouts**: Default 5s - optimize or mark as integration tests
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.1
|
|
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
|
|
@@ -18,19 +18,20 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
18
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
19
19
|
Classifier: Typing :: Typed
|
|
20
20
|
Requires-Python: >=3.10
|
|
21
|
-
Requires-Dist: authlib>=1.5
|
|
22
|
-
Requires-Dist: cyclopts>=
|
|
21
|
+
Requires-Dist: authlib>=1.6.5
|
|
22
|
+
Requires-Dist: cyclopts>=4.0.0
|
|
23
23
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
24
24
|
Requires-Dist: httpx>=0.28.1
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist:
|
|
25
|
+
Requires-Dist: jsonschema-path>=0.3.4
|
|
26
|
+
Requires-Dist: mcp!=1.21.1,<2.0.0,>=1.19.0
|
|
27
27
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
28
28
|
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
-
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.
|
|
29
|
+
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.3.0,>=0.2.8
|
|
30
30
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
31
31
|
Requires-Dist: pyperclip>=1.9.0
|
|
32
32
|
Requires-Dist: python-dotenv>=1.1.0
|
|
33
33
|
Requires-Dist: rich>=13.9.4
|
|
34
|
+
Requires-Dist: uvicorn>=0.35
|
|
34
35
|
Requires-Dist: websockets>=15.0.1
|
|
35
36
|
Provides-Extra: openai
|
|
36
37
|
Requires-Dist: openai>=1.102.0; extra == 'openai'
|
|
@@ -181,6 +182,8 @@ uv pip install fastmcp
|
|
|
181
182
|
|
|
182
183
|
For full installation instructions, including verification, upgrading from the official MCPSDK, and developer setup, see the [**Installation Guide**](https://gofastmcp.com/getting-started/installation).
|
|
183
184
|
|
|
185
|
+
**Dependency Licensing:** FastMCP depends on Cyclopts for CLI functionality. Cyclopts v4 includes docutils as a transitive dependency, which has complex licensing that may trigger compliance reviews in some organizations. If this is a concern, you can install Cyclopts v5 alpha (`pip install "cyclopts>=5.0.0a1"`) which removes this dependency, or wait for the stable v5 release. See [this issue](https://github.com/BrianPugh/cyclopts/issues/672) for details.
|
|
186
|
+
|
|
184
187
|
## Core Concepts
|
|
185
188
|
|
|
186
189
|
These are the building blocks for creating MCP servers and clients with FastMCP.
|
|
@@ -519,20 +522,20 @@ uv run pytest --cov=src --cov=examples --cov-report=html
|
|
|
519
522
|
|
|
520
523
|
### Static Checks
|
|
521
524
|
|
|
522
|
-
FastMCP uses `
|
|
525
|
+
FastMCP uses `prek` for code formatting, linting, and type-checking. All PRs must pass these checks (they run automatically in CI).
|
|
523
526
|
|
|
524
527
|
Install the hooks locally:
|
|
525
528
|
|
|
526
529
|
```bash
|
|
527
|
-
uv run
|
|
530
|
+
uv run prek install
|
|
528
531
|
```
|
|
529
532
|
|
|
530
533
|
The hooks will now run automatically on `git commit`. You can also run them manually at any time:
|
|
531
534
|
|
|
532
535
|
```bash
|
|
533
|
-
|
|
536
|
+
prek run --all-files
|
|
534
537
|
# or via uv
|
|
535
|
-
uv run
|
|
538
|
+
uv run prek run --all-files
|
|
536
539
|
```
|
|
537
540
|
|
|
538
541
|
### Pull Requests
|
|
@@ -540,7 +543,7 @@ uv run pre-commit run --all-files
|
|
|
540
543
|
1. Fork the repository on GitHub.
|
|
541
544
|
2. Create a feature branch from `main`.
|
|
542
545
|
3. Make your changes, including tests and documentation updates.
|
|
543
|
-
4. Ensure tests and
|
|
546
|
+
4. Ensure tests and prek hooks pass.
|
|
544
547
|
5. Commit your changes and push to your fork.
|
|
545
548
|
6. Open a pull request against the `main` branch of `jlowin/fastmcp`.
|
|
546
549
|
|
|
@@ -143,6 +143,8 @@ uv pip install fastmcp
|
|
|
143
143
|
|
|
144
144
|
For full installation instructions, including verification, upgrading from the official MCPSDK, and developer setup, see the [**Installation Guide**](https://gofastmcp.com/getting-started/installation).
|
|
145
145
|
|
|
146
|
+
**Dependency Licensing:** FastMCP depends on Cyclopts for CLI functionality. Cyclopts v4 includes docutils as a transitive dependency, which has complex licensing that may trigger compliance reviews in some organizations. If this is a concern, you can install Cyclopts v5 alpha (`pip install "cyclopts>=5.0.0a1"`) which removes this dependency, or wait for the stable v5 release. See [this issue](https://github.com/BrianPugh/cyclopts/issues/672) for details.
|
|
147
|
+
|
|
146
148
|
## Core Concepts
|
|
147
149
|
|
|
148
150
|
These are the building blocks for creating MCP servers and clients with FastMCP.
|
|
@@ -481,20 +483,20 @@ uv run pytest --cov=src --cov=examples --cov-report=html
|
|
|
481
483
|
|
|
482
484
|
### Static Checks
|
|
483
485
|
|
|
484
|
-
FastMCP uses `
|
|
486
|
+
FastMCP uses `prek` for code formatting, linting, and type-checking. All PRs must pass these checks (they run automatically in CI).
|
|
485
487
|
|
|
486
488
|
Install the hooks locally:
|
|
487
489
|
|
|
488
490
|
```bash
|
|
489
|
-
uv run
|
|
491
|
+
uv run prek install
|
|
490
492
|
```
|
|
491
493
|
|
|
492
494
|
The hooks will now run automatically on `git commit`. You can also run them manually at any time:
|
|
493
495
|
|
|
494
496
|
```bash
|
|
495
|
-
|
|
497
|
+
prek run --all-files
|
|
496
498
|
# or via uv
|
|
497
|
-
uv run
|
|
499
|
+
uv run prek run --all-files
|
|
498
500
|
```
|
|
499
501
|
|
|
500
502
|
### Pull Requests
|
|
@@ -502,7 +504,7 @@ uv run pre-commit run --all-files
|
|
|
502
504
|
1. Fork the repository on GitHub.
|
|
503
505
|
2. Create a feature branch from `main`.
|
|
504
506
|
3. Make your changes, including tests and documentation updates.
|
|
505
|
-
4. Ensure tests and
|
|
507
|
+
4. Ensure tests and prek hooks pass.
|
|
506
508
|
5. Commit your changes and push to your fork.
|
|
507
509
|
6. Open a pull request against the `main` branch of `jlowin/fastmcp`.
|
|
508
510
|
|
|
@@ -53,7 +53,7 @@ async with Client("https://fastmcp.cloud/mcp", auth=oauth) as client:
|
|
|
53
53
|
- **`mcp_url`** (`str`): The full URL of the target MCP server endpoint. Used to discover OAuth server metadata
|
|
54
54
|
- **`scopes`** (`str | list[str]`, optional): OAuth scopes to request. Can be space-separated string or list of strings
|
|
55
55
|
- **`client_name`** (`str`, optional): Client name for dynamic registration. Defaults to `"FastMCP Client"`
|
|
56
|
-
- **`
|
|
56
|
+
- **`token_storage`** (`AsyncKeyValue`, optional): Storage backend for persisting OAuth tokens. Defaults to in-memory storage (tokens lost on restart). See [Token Storage](#token-storage) for encrypted storage options
|
|
57
57
|
- **`additional_client_metadata`** (`dict[str, Any]`, optional): Extra metadata for client registration
|
|
58
58
|
- **`callback_port`** (`int`, optional): Fixed port for OAuth callback server. If not specified, uses a random available port
|
|
59
59
|
|
|
@@ -64,7 +64,7 @@ The OAuth flow is triggered when you use a FastMCP `Client` configured to use OA
|
|
|
64
64
|
|
|
65
65
|
<Steps>
|
|
66
66
|
<Step title="Token Check">
|
|
67
|
-
The client first checks the `
|
|
67
|
+
The client first checks the configured `token_storage` backend for existing, valid tokens for the target server. If one is found, it will be used to authenticate the client.
|
|
68
68
|
</Step>
|
|
69
69
|
<Step title="OAuth Server Discovery">
|
|
70
70
|
If no valid tokens exist, the client attempts to discover the OAuth server's endpoints using a well-known URI (e.g., `/.well-known/oauth-authorization-server`) based on the `mcp_url`.
|
|
@@ -82,37 +82,51 @@ The user's default web browser is automatically opened, directing them to the OA
|
|
|
82
82
|
Upon approval, the OAuth server redirects the user's browser to the local callback server with an `authorization_code`. The client captures this code and exchanges it with the OAuth server's token endpoint for an `access_token` (and often a `refresh_token`) using PKCE for security.
|
|
83
83
|
</Step>
|
|
84
84
|
<Step title="Token Caching">
|
|
85
|
-
The obtained tokens are saved to the `
|
|
86
|
-
</Step>
|
|
85
|
+
The obtained tokens are saved to the configured `token_storage` backend for future use, eliminating the need for repeated browser interactions.
|
|
86
|
+
</Step>
|
|
87
87
|
<Step title="Authenticated Requests">
|
|
88
|
-
The access token is automatically included in the `Authorization` header for requests to the MCP server.
|
|
88
|
+
The access token is automatically included in the `Authorization` header for requests to the MCP server.
|
|
89
89
|
</Step>
|
|
90
90
|
<Step title="Refresh Token">
|
|
91
91
|
If the access token expires, the client will automatically use the refresh token to get a new access token.
|
|
92
92
|
</Step>
|
|
93
93
|
</Steps>
|
|
94
94
|
|
|
95
|
-
## Token
|
|
96
|
-
|
|
97
|
-
### Token Storage
|
|
95
|
+
## Token Storage
|
|
98
96
|
|
|
99
|
-
|
|
97
|
+
<VersionBadge version="2.13.0" />
|
|
100
98
|
|
|
101
|
-
|
|
99
|
+
By default, tokens are stored in memory and lost when your application restarts. For persistent storage, pass an `AsyncKeyValue`-compatible storage backend to the `token_storage` parameter.
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
<Warning>
|
|
102
|
+
**Security Consideration**: Use encrypted storage for production. MCP clients can accumulate OAuth credentials for many servers over time, and a compromised token store could expose access to multiple services.
|
|
103
|
+
</Warning>
|
|
104
104
|
|
|
105
105
|
```python
|
|
106
|
-
from fastmcp
|
|
106
|
+
from fastmcp import Client
|
|
107
|
+
from fastmcp.client.auth import OAuth
|
|
108
|
+
from key_value.aio.stores.disk import DiskStore
|
|
109
|
+
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
|
|
110
|
+
from cryptography.fernet import Fernet
|
|
111
|
+
import os
|
|
112
|
+
|
|
113
|
+
# Create encrypted disk storage
|
|
114
|
+
encrypted_storage = FernetEncryptionWrapper(
|
|
115
|
+
key_value=DiskStore(directory="~/.fastmcp/oauth-tokens"),
|
|
116
|
+
fernet=Fernet(os.environ["OAUTH_STORAGE_ENCRYPTION_KEY"])
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
oauth = OAuth(
|
|
120
|
+
mcp_url="https://fastmcp.cloud/mcp",
|
|
121
|
+
token_storage=encrypted_storage
|
|
122
|
+
)
|
|
107
123
|
|
|
108
|
-
|
|
109
|
-
await
|
|
124
|
+
async with Client("https://fastmcp.cloud/mcp", auth=oauth) as client:
|
|
125
|
+
await client.ping()
|
|
110
126
|
```
|
|
111
127
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
```python
|
|
115
|
-
from fastmcp.client.auth.oauth import FileTokenStorage
|
|
128
|
+
You can use any `AsyncKeyValue`-compatible backend from the [key-value library](https://github.com/strawgate/py-key-value) including Redis, DynamoDB, and more. Wrap your storage in `FernetEncryptionWrapper` for encryption.
|
|
116
129
|
|
|
117
|
-
|
|
118
|
-
|
|
130
|
+
<Note>
|
|
131
|
+
When selecting a storage backend, review the [py-key-value documentation](https://github.com/strawgate/py-key-value) to understand the maturity level and limitations of your chosen backend. Some backends may be in preview or have constraints that affect production suitability.
|
|
132
|
+
</Note>
|
|
@@ -223,6 +223,55 @@ async with client:
|
|
|
223
223
|
print("Server is reachable")
|
|
224
224
|
```
|
|
225
225
|
|
|
226
|
+
### Initialization and Server Information
|
|
227
|
+
|
|
228
|
+
When you enter the client context manager, the client automatically performs an MCP initialization handshake with the server. This handshake exchanges capabilities, server metadata, and instructions. The result is available through the `initialize_result` property.
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
from fastmcp import Client, FastMCP
|
|
232
|
+
|
|
233
|
+
mcp = FastMCP(name="MyServer", instructions="Use the greet tool to say hello!")
|
|
234
|
+
|
|
235
|
+
@mcp.tool
|
|
236
|
+
def greet(name: str) -> str:
|
|
237
|
+
"""Greet a user by name."""
|
|
238
|
+
return f"Hello, {name}!"
|
|
239
|
+
|
|
240
|
+
async with Client(mcp) as client:
|
|
241
|
+
# Initialization already happened automatically
|
|
242
|
+
print(f"Server: {client.initialize_result.serverInfo.name}")
|
|
243
|
+
print(f"Version: {client.initialize_result.serverInfo.version}")
|
|
244
|
+
print(f"Instructions: {client.initialize_result.instructions}")
|
|
245
|
+
print(f"Capabilities: {client.initialize_result.capabilities.tools}")
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Manual Initialization Control
|
|
249
|
+
|
|
250
|
+
In advanced scenarios, you might want precise control over when initialization happens. For example, you may need custom error handling, want to defer initialization until after other setup, or need to measure initialization timing separately.
|
|
251
|
+
|
|
252
|
+
Disable automatic initialization and call `initialize()` manually:
|
|
253
|
+
|
|
254
|
+
```python
|
|
255
|
+
from fastmcp import Client
|
|
256
|
+
|
|
257
|
+
# Disable automatic initialization
|
|
258
|
+
client = Client("my_mcp_server.py", auto_initialize=False)
|
|
259
|
+
|
|
260
|
+
async with client:
|
|
261
|
+
# Connection established, but not initialized yet
|
|
262
|
+
print(f"Connected: {client.is_connected()}")
|
|
263
|
+
print(f"Initialized: {client.initialize_result is not None}") # False
|
|
264
|
+
|
|
265
|
+
# Initialize manually with custom timeout
|
|
266
|
+
result = await client.initialize(timeout=10.0)
|
|
267
|
+
print(f"Server: {result.serverInfo.name}")
|
|
268
|
+
|
|
269
|
+
# Now ready for operations
|
|
270
|
+
tools = await client.list_tools()
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
The `initialize()` method is idempotent - calling it multiple times returns the cached result from the first successful call.
|
|
274
|
+
|
|
226
275
|
## Client Configuration
|
|
227
276
|
|
|
228
277
|
Clients can be configured with additional handlers and settings for specialized use cases.
|
|
@@ -101,6 +101,31 @@ async with client:
|
|
|
101
101
|
- `arguments`: Dictionary of arguments to pass to the tool (optional)
|
|
102
102
|
- `timeout`: Maximum execution time in seconds (optional, overrides client-level timeout)
|
|
103
103
|
- `progress_handler`: Progress callback function (optional, overrides client-level handler)
|
|
104
|
+
- `meta`: Dictionary of metadata to send with the request (optional, see below)
|
|
105
|
+
|
|
106
|
+
## Sending Metadata
|
|
107
|
+
|
|
108
|
+
<VersionBadge version="2.13.1" />
|
|
109
|
+
|
|
110
|
+
The `meta` parameter sends ancillary information alongside tool calls. This can be used for various purposes like observability, debugging, client identification, or any context the server may need beyond the tool's primary arguments.
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
async with client:
|
|
114
|
+
result = await client.call_tool(
|
|
115
|
+
name="send_email",
|
|
116
|
+
arguments={
|
|
117
|
+
"to": "user@example.com",
|
|
118
|
+
"subject": "Hello",
|
|
119
|
+
"body": "Welcome!"
|
|
120
|
+
},
|
|
121
|
+
meta={
|
|
122
|
+
"trace_id": "abc-123",
|
|
123
|
+
"request_source": "mobile_app"
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The structure and usage of `meta` is determined by your application. See [Client Metadata](/servers/context#client-metadata) in the server documentation to learn how to access this data in your tool implementations.
|
|
104
129
|
|
|
105
130
|
## Handling Results
|
|
106
131
|
|
|
@@ -45,7 +45,7 @@ Run your server with a simple Python command:
|
|
|
45
45
|
python server.py
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
Your server is now accessible at `http://localhost:8000/mcp
|
|
48
|
+
Your server is now accessible at `http://localhost:8000/mcp` (or use your server's actual IP address for remote access).
|
|
49
49
|
|
|
50
50
|
This approach is ideal when you want to get online quickly with minimal configuration. It's perfect for internal tools, development environments, or simple deployments where you don't need advanced server features. The built-in server handles all the HTTP details, letting you focus on your MCP implementation.
|
|
51
51
|
|
|
@@ -72,7 +72,7 @@ Run with any ASGI server - here's an example with Uvicorn:
|
|
|
72
72
|
uvicorn app:app --host 0.0.0.0 --port 8000
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
Your server is accessible at the same URL: `http://localhost:8000/mcp
|
|
75
|
+
Your server is accessible at the same URL: `http://localhost:8000/mcp` (or use your server's actual IP address for remote access).
|
|
76
76
|
|
|
77
77
|
The ASGI approach shines in production environments where you need reliability and performance. You can run multiple worker processes to handle concurrent requests, add custom middleware for logging or monitoring, integrate with existing deployment pipelines, or mount your MCP server as part of a larger application.
|
|
78
78
|
|
|
@@ -293,7 +293,7 @@ api.mount("/mcp", mcp.http_app())
|
|
|
293
293
|
# Run with: uvicorn app:api --host 0.0.0.0 --port 8000
|
|
294
294
|
```
|
|
295
295
|
|
|
296
|
-
Your existing API remains at `http://localhost:8000/api
|
|
296
|
+
Your existing API remains at `http://localhost:8000/api` while MCP is available at `http://localhost:8000/mcp`.
|
|
297
297
|
|
|
298
298
|
## Mounting Authenticated Servers
|
|
299
299
|
|
|
@@ -83,7 +83,7 @@ if __name__ == "__main__":
|
|
|
83
83
|
mcp.run(transport="http", host="127.0.0.1", port=8000)
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
Your server is now accessible at `http://localhost:8000/mcp
|
|
86
|
+
Your server is now accessible at `http://localhost:8000/mcp`. This URL is the MCP endpoint that clients will connect to. HTTP transport enables:
|
|
87
87
|
- Network accessibility
|
|
88
88
|
- Multiple concurrent clients
|
|
89
89
|
- Integration with web infrastructure
|