fastmcp 2.8.1__tar.gz → 2.9.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.8.1 → fastmcp-2.9.1}/.github/release.yml +11 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.pre-commit-config.yaml +1 -1
- fastmcp-2.9.1/CLAUDE.md +37 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/PKG-INFO +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/README.md +1 -1
- fastmcp-2.9.1/docs/.cursor/rules/mintlify.mdc +364 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/changelog.mdx +98 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/clients/auth/bearer.mdx +1 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/clients/auth/oauth.mdx +1 -1
- fastmcp-2.9.1/docs/clients/client.mdx +291 -0
- fastmcp-2.9.1/docs/clients/logging.mdx +76 -0
- fastmcp-2.9.1/docs/clients/messages.mdx +129 -0
- fastmcp-2.9.1/docs/clients/progress.mdx +70 -0
- fastmcp-2.9.1/docs/clients/prompts.mdx +187 -0
- fastmcp-2.9.1/docs/clients/resources.mdx +171 -0
- fastmcp-2.9.1/docs/clients/roots.mdx +42 -0
- fastmcp-2.9.1/docs/clients/sampling.mdx +152 -0
- fastmcp-2.9.1/docs/clients/tools.mdx +143 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/clients/transports.mdx +4 -4
- fastmcp-2.8.1/docs/style.css → fastmcp-2.9.1/docs/css/banner.css +0 -52
- fastmcp-2.9.1/docs/css/python-sdk.css +3 -0
- fastmcp-2.9.1/docs/css/style.css +13 -0
- fastmcp-2.9.1/docs/css/version-badge.css +39 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/deployment/asgi.mdx +11 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/deployment/running-server.mdx +11 -8
- fastmcp-2.9.1/docs/docs.json +310 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/getting-started/installation.mdx +3 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/integrations/anthropic.mdx +6 -6
- fastmcp-2.9.1/docs/integrations/chatgpt.mdx +158 -0
- fastmcp-2.9.1/docs/integrations/claude-code.mdx +60 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/integrations/claude-desktop.mdx +9 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/integrations/gemini.mdx +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/integrations/openai.mdx +6 -6
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/patterns/cli.mdx +33 -8
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/patterns/tool-transformation.mdx +1 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-cli-__init__.mdx +9 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-cli-claude.mdx +43 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-cli-cli.mdx +87 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-cli-run.mdx +106 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-auth-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-auth-bearer.mdx +18 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-auth-oauth.mdx +102 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-client.mdx +94 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-logging.mdx +14 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-oauth_callback.mdx +63 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-progress.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-roots.mdx +20 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-sampling.mdx +14 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-client-transports.mdx +192 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-exceptions.mdx +65 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-prompts-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-prompts-prompt.mdx +84 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-prompts-prompt_manager.mdx +43 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-resources-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-resources-resource.mdx +90 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-resources-resource_manager.mdx +111 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-resources-template.mdx +104 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-resources-types.mdx +83 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-auth.mdx +10 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-providers-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-providers-bearer.mdx +69 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-providers-bearer_env.mdx +22 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-auth-providers-in_memory.mdx +15 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-context.mdx +118 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-dependencies.mdx +36 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-http.mdx +113 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-error_handling.mdx +40 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-logging.mdx +29 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-middleware.mdx +56 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-rate_limiting.mdx +47 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware-timing.mdx +29 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-middleware.mdx +56 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-openapi.mdx +58 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-proxy.mdx +101 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-server-server.mdx +629 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-settings.mdx +59 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-tools-__init__.mdx +8 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-tools-tool.mdx +68 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-tools-tool_manager.mdx +58 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-tools-tool_transform.mdx +139 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-__init__.mdx +9 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-cache.mdx +30 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-components.mdx +52 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-exceptions.mdx +20 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-http.mdx +18 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-inspect.mdx +41 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-json_schema.mdx +25 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-logging.mdx +41 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-mcp_config.mdx +50 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-openapi.mdx +118 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-tests.mdx +42 -0
- fastmcp-2.9.1/docs/python-sdk/fastmcp-utilities-types.mdx +112 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/auth/bearer.mdx +69 -24
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/composition.mdx +81 -9
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/context.mdx +20 -0
- fastmcp-2.9.1/docs/servers/middleware.mdx +574 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/prompts.mdx +134 -50
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/proxy.mdx +3 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/resources.mdx +60 -19
- fastmcp-2.8.1/docs/servers/fastmcp.mdx → fastmcp-2.9.1/docs/servers/server.mdx +59 -13
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/tools.mdx +84 -24
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/tutorials/rest-api.mdx +3 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/updates.mdx +18 -2
- fastmcp-2.9.1/examples/atproto_mcp/README.md +156 -0
- fastmcp-2.9.1/examples/atproto_mcp/demo.py +257 -0
- fastmcp-2.9.1/examples/atproto_mcp/pyproject.toml +24 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/__init__.py +3 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/__main__.py +9 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/__init__.py +20 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/_client.py +16 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/_posts.py +385 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/_profile.py +33 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/_read.py +124 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/_atproto/_social.py +108 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/server.py +154 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/settings.py +17 -0
- fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp/types.py +142 -0
- fastmcp-2.9.1/examples/get_file.py +33 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/mount_example.py +13 -9
- fastmcp-2.9.1/justfile +30 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/cli/cli.py +99 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/cli/run.py +1 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/auth/oauth.py +1 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/client.py +23 -7
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/logging.py +1 -2
- fastmcp-2.9.1/src/fastmcp/client/messages.py +126 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/transports.py +17 -2
- fastmcp-2.9.1/src/fastmcp/contrib/mcp_mixin/README.md +116 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/mcp_mixin/mcp_mixin.py +14 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/prompts/prompt.py +109 -13
- fastmcp-2.9.1/src/fastmcp/prompts/prompt_manager.py +201 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/resources/resource.py +27 -1
- fastmcp-2.9.1/src/fastmcp/resources/resource_manager.py +492 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/resources/template.py +44 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/auth/providers/bearer.py +62 -13
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/context.py +113 -10
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/http.py +8 -0
- fastmcp-2.9.1/src/fastmcp/server/low_level.py +35 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/__init__.py +6 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/error_handling.py +206 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/logging.py +165 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/middleware.py +236 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/rate_limiting.py +231 -0
- fastmcp-2.9.1/src/fastmcp/server/middleware/timing.py +156 -0
- fastmcp-2.9.1/src/fastmcp/server/proxy.py +401 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/server.py +446 -280
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/settings.py +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/tools/tool.py +22 -2
- fastmcp-2.9.1/src/fastmcp/tools/tool_manager.py +215 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/tools/tool_transform.py +42 -16
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/components.py +22 -2
- fastmcp-2.9.1/src/fastmcp/utilities/inspect.py +326 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/json_schema.py +67 -23
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/mcp_config.py +13 -7
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/openapi.py +75 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/tests.py +1 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/types.py +90 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/auth/providers/test_bearer.py +98 -6
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/auth/test_oauth_client.py +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/cli/test_cli.py +35 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_client.py +133 -6
- fastmcp-2.9.1/tests/client/test_notifications.py +422 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_openapi.py +5 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_sse.py +3 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_streamable_http.py +64 -7
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/deprecated/test_deprecated.py +1 -81
- fastmcp-2.9.1/tests/deprecated/test_mount_import_arg_order.py +275 -0
- fastmcp-2.9.1/tests/deprecated/test_mount_separators.py +113 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/deprecated/test_resource_prefixes.py +7 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/deprecated/test_settings.py +2 -2
- fastmcp-2.9.1/tests/prompts/test_prompt.py +484 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/prompts/test_prompt_manager.py +25 -26
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/resources/test_resource_manager.py +73 -53
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/resources/test_resource_template.py +3 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/http/test_custom_routes.py +1 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/http/test_http_dependencies.py +3 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/http/test_http_middleware.py +2 -2
- fastmcp-2.9.1/tests/server/middleware/test_error_handling.py +601 -0
- fastmcp-2.9.1/tests/server/middleware/test_logging.py +426 -0
- fastmcp-2.9.1/tests/server/middleware/test_middleware.py +567 -0
- fastmcp-2.9.1/tests/server/middleware/test_rate_limiting.py +448 -0
- fastmcp-2.9.1/tests/server/middleware/test_timing.py +312 -0
- fastmcp-2.9.1/tests/server/openapi/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/openapi/test_openapi.py +188 -184
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/openapi/test_openapi_path_parameters.py +28 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_app_state.py +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_context.py +37 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_import_server.py +237 -38
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_mount.py +386 -67
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_proxy.py +2 -2
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_resource_prefix_formats.py +6 -6
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_server.py +15 -9
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_server_interactions.py +167 -6
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_tool_annotations.py +6 -3
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_tool_exclude_args.py +5 -3
- fastmcp-2.9.1/tests/tools/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/tools/test_tool.py +81 -1
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/tools/test_tool_manager.py +51 -46
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/openapi/test_openapi_advanced.py +71 -0
- fastmcp-2.9.1/tests/utilities/test_inspect.py +388 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_json_schema.py +17 -5
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_mcp_config.py +6 -6
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_types.py +114 -0
- fastmcp-2.8.1/docs/clients/advanced-features.mdx +0 -152
- fastmcp-2.8.1/docs/clients/client.mdx +0 -372
- fastmcp-2.8.1/docs/docs.json +0 -177
- fastmcp-2.8.1/justfile +0 -12
- fastmcp-2.8.1/src/fastmcp/contrib/mcp_mixin/README.md +0 -39
- fastmcp-2.8.1/src/fastmcp/prompts/prompt_manager.py +0 -125
- fastmcp-2.8.1/src/fastmcp/resources/resource_manager.py +0 -319
- fastmcp-2.8.1/src/fastmcp/server/proxy.py +0 -291
- fastmcp-2.8.1/src/fastmcp/tools/tool_manager.py +0 -146
- fastmcp-2.8.1/tests/deprecated/test_mount_separators.py +0 -88
- fastmcp-2.8.1/tests/prompts/test_prompt.py +0 -242
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.cursor/rules/core-mcp-objects.mdc +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/dependabot.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/labeler.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/workflows/labeler.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/workflows/publish.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/workflows/run-static.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.github/workflows/run-tests.yml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/.gitignore +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/AGENTS.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/LICENSE +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/Windows_Notes.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/assets/demo-inspector.png +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/assets/favicon.ico +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/assets/images/tutorial-rest-api-result.png +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/assets/logo.png +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/assets/updates/release-2-7.png +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/community/README.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/community/showcase.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/getting-started/quickstart.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/getting-started/welcome.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/integrations/contrib.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/patterns/decorating-methods.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/patterns/http-requests.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/patterns/testing.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/servers/openapi.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/snippets/version-badge.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/snippets/youtube-embed.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/tutorials/create-mcp-server.mdx +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/docs/tutorials/mcp.mdx +0 -0
- {fastmcp-2.8.1/examples/smart_home/src/smart_home → fastmcp-2.9.1/examples/atproto_mcp/src/atproto_mcp}/py.typed +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/complex_inputs.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/config_server.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/desktop.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/echo.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/in_memory_proxy_example.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/memory.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/sampling.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/screenshot.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/serializer.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/simple_echo.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/README.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/pyproject.toml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/__main__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/hub.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/lights/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/lights/hue_utils.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/lights/server.py +0 -0
- {fastmcp-2.8.1/src/fastmcp → fastmcp-2.9.1/examples/smart_home/src/smart_home}/py.typed +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/src/smart_home/settings.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/smart_home/uv.lock +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/tags_example.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/examples/text_me.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/pyproject.toml +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/cli/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/cli/claude.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/auth/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/auth/bearer.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/oauth_callback.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/progress.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/roots.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/client/sampling.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/README.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/exceptions.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/prompts/__init__.py +0 -0
- /fastmcp-2.8.1/src/fastmcp/server/auth/providers/__init__.py → /fastmcp-2.9.1/src/fastmcp/py.typed +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/resources/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/resources/types.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/auth/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/auth/auth.py +0 -0
- {fastmcp-2.8.1/tests → fastmcp-2.9.1/src/fastmcp/server/auth/providers}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/auth/providers/bearer_env.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/auth/providers/in_memory.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/dependencies.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/server/openapi.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/tools/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/cache.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/exceptions.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/http.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/src/fastmcp/utilities/logging.py +0 -0
- {fastmcp-2.8.1/tests/auth → fastmcp-2.9.1/tests}/__init__.py +0 -0
- {fastmcp-2.8.1/tests/cli → fastmcp-2.9.1/tests/auth}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/auth/providers/test_bearer_env.py +0 -0
- {fastmcp-2.8.1/tests/client → fastmcp-2.9.1/tests/cli}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/cli/test_run.py +0 -0
- {fastmcp-2.8.1/tests/prompts → fastmcp-2.9.1/tests/client}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_logs.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_progress.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_roots.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_sampling.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/client/test_stdio.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/conftest.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/contrib/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/contrib/test_bulk_tool_caller.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/contrib/test_mcp_mixin.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/deprecated/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/deprecated/test_route_type_ignore.py +0 -0
- {fastmcp-2.8.1/tests/resources → fastmcp-2.9.1/tests/prompts}/__init__.py +0 -0
- {fastmcp-2.8.1/tests/server → fastmcp-2.9.1/tests/resources}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/resources/test_file_resources.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/resources/test_function_resources.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/resources/test_resources.py +0 -0
- {fastmcp-2.8.1/tests/server/http → fastmcp-2.9.1/tests/server}/__init__.py +0 -0
- {fastmcp-2.8.1/tests/server/openapi → fastmcp-2.9.1/tests/server/http}/__init__.py +0 -0
- {fastmcp-2.8.1/tests/tools → fastmcp-2.9.1/tests/server/middleware}/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/openapi/test_route_map_fn.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_auth_integration.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_file_server.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_logging.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/server/test_run_server.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/test_examples.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/test_servers/fastmcp_server.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/test_servers/sse.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/test_servers/stdio.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/tools/test_tool_transform.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/openapi/__init__.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/openapi/conftest.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/openapi/test_openapi.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/openapi/test_openapi_fastapi.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_cache.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_logging.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_tests.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/tests/utilities/test_typeadapter.py +0 -0
- {fastmcp-2.8.1 → fastmcp-2.9.1}/uv.lock +0 -0
|
@@ -9,7 +9,7 @@ changelog:
|
|
|
9
9
|
- feature
|
|
10
10
|
exclude:
|
|
11
11
|
labels:
|
|
12
|
-
-
|
|
12
|
+
- contrib
|
|
13
13
|
|
|
14
14
|
- title: Enhancements 🔧
|
|
15
15
|
labels:
|
|
@@ -17,22 +17,31 @@ changelog:
|
|
|
17
17
|
exclude:
|
|
18
18
|
labels:
|
|
19
19
|
- breaking change
|
|
20
|
+
- contrib
|
|
20
21
|
|
|
21
22
|
- title: Fixes 🐞
|
|
22
23
|
labels:
|
|
23
24
|
- bug
|
|
24
25
|
exclude:
|
|
25
26
|
labels:
|
|
26
|
-
-
|
|
27
|
+
- contrib
|
|
27
28
|
|
|
28
29
|
- title: Breaking Changes 🛫
|
|
29
30
|
labels:
|
|
30
31
|
- breaking change
|
|
32
|
+
exclude:
|
|
33
|
+
labels:
|
|
34
|
+
- contrib
|
|
31
35
|
|
|
32
36
|
- title: Docs 📚
|
|
33
37
|
labels:
|
|
34
38
|
- documentation
|
|
35
39
|
|
|
40
|
+
- title: Examples & Contrib 💡
|
|
41
|
+
labels:
|
|
42
|
+
- example
|
|
43
|
+
- contrib
|
|
44
|
+
|
|
36
45
|
- title: Dependencies 📦
|
|
37
46
|
labels:
|
|
38
47
|
- dependencies
|
fastmcp-2.9.1/CLAUDE.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# FastMCP Development Guidelines
|
|
2
|
+
|
|
3
|
+
## Testing and Investigation
|
|
4
|
+
|
|
5
|
+
### In-Memory Transport - Always Preferred
|
|
6
|
+
|
|
7
|
+
When testing or investigating FastMCP servers, **always prefer the in-memory transport** unless you specifically need HTTP transport features. Pass a FastMCP server directly to a Client to eliminate separate processes and network complexity.
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
# Create your FastMCP server
|
|
11
|
+
mcp = FastMCP("TestServer")
|
|
12
|
+
|
|
13
|
+
@mcp.tool
|
|
14
|
+
def greet(name: str) -> str:
|
|
15
|
+
return f"Hello, {name}!"
|
|
16
|
+
|
|
17
|
+
# Pass server directly to client - uses in-memory transport
|
|
18
|
+
async with Client(mcp) as client:
|
|
19
|
+
result = await client.call_tool("greet", {"name": "World"})
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### When to Use HTTP Transport
|
|
23
|
+
|
|
24
|
+
Only use HTTP transport when testing network-specific features. Prefer StreamableHttp over SSE as it's the modern approach.
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
# Only when network testing is required
|
|
28
|
+
async with Client(transport=StreamableHttpTransport(server_url)) as client:
|
|
29
|
+
result = await client.ping()
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Development Workflow
|
|
33
|
+
|
|
34
|
+
- You must always run pre-commit if you open a PR, because it is run as part of a required check.
|
|
35
|
+
- When opening PRs, apply labels appropriately for bugs/breaking changes/enhancements/features. Generally, improvements are enhancements (not features) unless told otherwise.
|
|
36
|
+
- NEVER modify files in docs/python-sdk/**, as they are auto-generated.
|
|
37
|
+
- Use # type: ignore[attr-defined] in unit tests when accessing an MCP result of indeterminate type instead of asserting its type
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.9.1
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -380,7 +380,7 @@ mcp.run(transport="stdio") # Default, so transport argument is optional
|
|
|
380
380
|
**Streamable HTTP**: Recommended for web deployments.
|
|
381
381
|
|
|
382
382
|
```python
|
|
383
|
-
mcp.run(transport="
|
|
383
|
+
mcp.run(transport="http", host="127.0.0.1", port=8000, path="/mcp")
|
|
384
384
|
```
|
|
385
385
|
|
|
386
386
|
**SSE**: For compatibility with existing SSE clients.
|
|
@@ -349,7 +349,7 @@ mcp.run(transport="stdio") # Default, so transport argument is optional
|
|
|
349
349
|
**Streamable HTTP**: Recommended for web deployments.
|
|
350
350
|
|
|
351
351
|
```python
|
|
352
|
-
mcp.run(transport="
|
|
352
|
+
mcp.run(transport="http", host="127.0.0.1", port=8000, path="/mcp")
|
|
353
353
|
```
|
|
354
354
|
|
|
355
355
|
**SSE**: For compatibility with existing SSE clients.
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs: *.mdx
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Mintlify technical writing assistant
|
|
7
|
+
|
|
8
|
+
You are an AI writing assistant specialized in creating exceptional technical documentation using Mintlify components and following industry-leading technical writing practices.
|
|
9
|
+
|
|
10
|
+
## Core writing principles
|
|
11
|
+
|
|
12
|
+
### Language and style requirements
|
|
13
|
+
- Use clear, direct language appropriate for technical audiences
|
|
14
|
+
- Write in second person ("you") for instructions and procedures
|
|
15
|
+
- Use active voice over passive voice
|
|
16
|
+
- Employ present tense for current states, future tense for outcomes
|
|
17
|
+
- Maintain consistent terminology throughout all documentation
|
|
18
|
+
- Keep sentences concise while providing necessary context
|
|
19
|
+
- Use parallel structure in lists, headings, and procedures
|
|
20
|
+
|
|
21
|
+
### Content organization standards
|
|
22
|
+
- Lead with the most important information (inverted pyramid structure)
|
|
23
|
+
- Use progressive disclosure: basic concepts before advanced ones
|
|
24
|
+
- Break complex procedures into numbered steps
|
|
25
|
+
- Include prerequisites and context before instructions
|
|
26
|
+
- Provide expected outcomes for each major step
|
|
27
|
+
- End sections with next steps or related information
|
|
28
|
+
- Use descriptive, keyword-rich headings for navigation and SEO
|
|
29
|
+
|
|
30
|
+
### User-centered approach
|
|
31
|
+
- Focus on user goals and outcomes rather than system features
|
|
32
|
+
- Anticipate common questions and address them proactively
|
|
33
|
+
- Include troubleshooting for likely failure points
|
|
34
|
+
- Provide multiple pathways when appropriate (beginner vs advanced), but offer an opinionated path for people to follow to avoid overwhelming with options
|
|
35
|
+
|
|
36
|
+
## Mintlify component reference
|
|
37
|
+
|
|
38
|
+
### Callout components
|
|
39
|
+
|
|
40
|
+
#### Note - Additional helpful information
|
|
41
|
+
|
|
42
|
+
<Note>
|
|
43
|
+
Supplementary information that supports the main content without interrupting flow
|
|
44
|
+
</Note>
|
|
45
|
+
|
|
46
|
+
#### Tip - Best practices and pro tips
|
|
47
|
+
|
|
48
|
+
<Tip>
|
|
49
|
+
Expert advice, shortcuts, or best practices that enhance user success
|
|
50
|
+
</Tip>
|
|
51
|
+
|
|
52
|
+
#### Warning - Important cautions
|
|
53
|
+
|
|
54
|
+
<Warning>
|
|
55
|
+
Critical information about potential issues, breaking changes, or destructive actions
|
|
56
|
+
</Warning>
|
|
57
|
+
|
|
58
|
+
#### Info - Neutral contextual information
|
|
59
|
+
|
|
60
|
+
<Info>
|
|
61
|
+
Background information, context, or neutral announcements
|
|
62
|
+
</Info>
|
|
63
|
+
|
|
64
|
+
#### Check - Success confirmations
|
|
65
|
+
|
|
66
|
+
<Check>
|
|
67
|
+
Positive confirmations, successful completions, or achievement indicators
|
|
68
|
+
</Check>
|
|
69
|
+
|
|
70
|
+
### Code components
|
|
71
|
+
|
|
72
|
+
#### Single code block
|
|
73
|
+
|
|
74
|
+
```javascript config.js
|
|
75
|
+
const apiConfig = {
|
|
76
|
+
baseURL: 'https://api.example.com',
|
|
77
|
+
timeout: 5000,
|
|
78
|
+
headers: {
|
|
79
|
+
'Authorization': `Bearer ${process.env.API_TOKEN}`
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### Code group with multiple languages
|
|
85
|
+
|
|
86
|
+
<CodeGroup>
|
|
87
|
+
```javascript Node.js
|
|
88
|
+
const response = await fetch('/api/endpoint', {
|
|
89
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```python Python
|
|
94
|
+
import requests
|
|
95
|
+
response = requests.get('/api/endpoint',
|
|
96
|
+
headers={'Authorization': f'Bearer {api_key}'})
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```curl cURL
|
|
100
|
+
curl -X GET '/api/endpoint' \
|
|
101
|
+
-H 'Authorization: Bearer YOUR_API_KEY'
|
|
102
|
+
```
|
|
103
|
+
</CodeGroup>
|
|
104
|
+
|
|
105
|
+
#### Request/Response examples
|
|
106
|
+
|
|
107
|
+
<RequestExample>
|
|
108
|
+
```bash cURL
|
|
109
|
+
curl -X POST 'https://api.example.com/users' \
|
|
110
|
+
-H 'Content-Type: application/json' \
|
|
111
|
+
-d '{"name": "John Doe", "email": "john@example.com"}'
|
|
112
|
+
```
|
|
113
|
+
</RequestExample>
|
|
114
|
+
|
|
115
|
+
<ResponseExample>
|
|
116
|
+
```json Success
|
|
117
|
+
{
|
|
118
|
+
"id": "user_123",
|
|
119
|
+
"name": "John Doe",
|
|
120
|
+
"email": "john@example.com",
|
|
121
|
+
"created_at": "2024-01-15T10:30:00Z"
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
</ResponseExample>
|
|
125
|
+
|
|
126
|
+
### Structural components
|
|
127
|
+
|
|
128
|
+
#### Steps for procedures
|
|
129
|
+
|
|
130
|
+
<Steps>
|
|
131
|
+
<Step title="Install dependencies">
|
|
132
|
+
Run `npm install` to install required packages.
|
|
133
|
+
|
|
134
|
+
<Check>
|
|
135
|
+
Verify installation by running `npm list`.
|
|
136
|
+
</Check>
|
|
137
|
+
</Step>
|
|
138
|
+
|
|
139
|
+
<Step title="Configure environment">
|
|
140
|
+
Create a `.env` file with your API credentials.
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
API_KEY=your_api_key_here
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
<Warning>
|
|
147
|
+
Never commit API keys to version control.
|
|
148
|
+
</Warning>
|
|
149
|
+
</Step>
|
|
150
|
+
</Steps>
|
|
151
|
+
|
|
152
|
+
#### Tabs for alternative content
|
|
153
|
+
|
|
154
|
+
<Tabs>
|
|
155
|
+
<Tab title="macOS">
|
|
156
|
+
```bash
|
|
157
|
+
brew install node
|
|
158
|
+
npm install -g package-name
|
|
159
|
+
```
|
|
160
|
+
</Tab>
|
|
161
|
+
|
|
162
|
+
<Tab title="Windows">
|
|
163
|
+
```powershell
|
|
164
|
+
choco install nodejs
|
|
165
|
+
npm install -g package-name
|
|
166
|
+
```
|
|
167
|
+
</Tab>
|
|
168
|
+
|
|
169
|
+
<Tab title="Linux">
|
|
170
|
+
```bash
|
|
171
|
+
sudo apt install nodejs npm
|
|
172
|
+
npm install -g package-name
|
|
173
|
+
```
|
|
174
|
+
</Tab>
|
|
175
|
+
</Tabs>
|
|
176
|
+
|
|
177
|
+
#### Accordions for collapsible content
|
|
178
|
+
|
|
179
|
+
<AccordionGroup>
|
|
180
|
+
<Accordion title="Troubleshooting connection issues">
|
|
181
|
+
- **Firewall blocking**: Ensure ports 80 and 443 are open
|
|
182
|
+
- **Proxy configuration**: Set HTTP_PROXY environment variable
|
|
183
|
+
- **DNS resolution**: Try using 8.8.8.8 as DNS server
|
|
184
|
+
</Accordion>
|
|
185
|
+
|
|
186
|
+
<Accordion title="Advanced configuration">
|
|
187
|
+
```javascript
|
|
188
|
+
const config = {
|
|
189
|
+
performance: { cache: true, timeout: 30000 },
|
|
190
|
+
security: { encryption: 'AES-256' }
|
|
191
|
+
};
|
|
192
|
+
```
|
|
193
|
+
</Accordion>
|
|
194
|
+
</AccordionGroup>
|
|
195
|
+
|
|
196
|
+
### API documentation components
|
|
197
|
+
|
|
198
|
+
#### Parameter fields
|
|
199
|
+
|
|
200
|
+
<ParamField path="user_id" type="string" required>
|
|
201
|
+
Unique identifier for the user. Must be a valid UUID v4 format.
|
|
202
|
+
</ParamField>
|
|
203
|
+
|
|
204
|
+
<ParamField body="email" type="string" required>
|
|
205
|
+
User's email address. Must be valid and unique within the system.
|
|
206
|
+
</ParamField>
|
|
207
|
+
|
|
208
|
+
<ParamField query="limit" type="integer" default="10">
|
|
209
|
+
Maximum number of results to return. Range: 1-100.
|
|
210
|
+
</ParamField>
|
|
211
|
+
|
|
212
|
+
<ParamField header="Authorization" type="string" required>
|
|
213
|
+
Bearer token for API authentication. Format: `Bearer YOUR_API_KEY`
|
|
214
|
+
</ParamField>
|
|
215
|
+
|
|
216
|
+
#### Response fields
|
|
217
|
+
|
|
218
|
+
<ResponseField name="user_id" type="string" required>
|
|
219
|
+
Unique identifier assigned to the newly created user.
|
|
220
|
+
</ResponseField>
|
|
221
|
+
|
|
222
|
+
<ResponseField name="created_at" type="timestamp">
|
|
223
|
+
ISO 8601 formatted timestamp of when the user was created.
|
|
224
|
+
</ResponseField>
|
|
225
|
+
|
|
226
|
+
<ResponseField name="permissions" type="array">
|
|
227
|
+
List of permission strings assigned to this user.
|
|
228
|
+
</ResponseField>
|
|
229
|
+
|
|
230
|
+
#### Expandable nested fields
|
|
231
|
+
|
|
232
|
+
<ResponseField name="user" type="object">
|
|
233
|
+
Complete user object with all associated data.
|
|
234
|
+
|
|
235
|
+
<Expandable title="User properties">
|
|
236
|
+
<ResponseField name="profile" type="object">
|
|
237
|
+
User profile information including personal details.
|
|
238
|
+
|
|
239
|
+
<Expandable title="Profile details">
|
|
240
|
+
<ResponseField name="first_name" type="string">
|
|
241
|
+
User's first name as entered during registration.
|
|
242
|
+
</ResponseField>
|
|
243
|
+
|
|
244
|
+
<ResponseField name="avatar_url" type="string | null">
|
|
245
|
+
URL to user's profile picture. Returns null if no avatar is set.
|
|
246
|
+
</ResponseField>
|
|
247
|
+
</Expandable>
|
|
248
|
+
</ResponseField>
|
|
249
|
+
</Expandable>
|
|
250
|
+
</ResponseField>
|
|
251
|
+
|
|
252
|
+
### Interactive components
|
|
253
|
+
|
|
254
|
+
#### Cards for navigation
|
|
255
|
+
|
|
256
|
+
<Card title="Getting started guide" icon="rocket" href="/quickstart">
|
|
257
|
+
Complete walkthrough from installation to your first API call in under 10 minutes.
|
|
258
|
+
</Card>
|
|
259
|
+
|
|
260
|
+
<CardGroup cols={2}>
|
|
261
|
+
<Card title="Authentication" icon="key" href="/auth">
|
|
262
|
+
Learn how to authenticate requests using API keys or JWT tokens.
|
|
263
|
+
</Card>
|
|
264
|
+
|
|
265
|
+
<Card title="Rate limiting" icon="clock" href="/rate-limits">
|
|
266
|
+
Understand rate limits and best practices for high-volume usage.
|
|
267
|
+
</Card>
|
|
268
|
+
</CardGroup>
|
|
269
|
+
|
|
270
|
+
### Media and advanced components
|
|
271
|
+
|
|
272
|
+
#### Frames for images
|
|
273
|
+
|
|
274
|
+
Wrap all images in frames.
|
|
275
|
+
|
|
276
|
+
<Frame>
|
|
277
|
+
<img src="/images/dashboard.png" alt="Main dashboard showing analytics overview" />
|
|
278
|
+
</Frame>
|
|
279
|
+
|
|
280
|
+
<Frame caption="The analytics dashboard provides real-time insights">
|
|
281
|
+
<img src="/images/analytics.png" alt="Analytics dashboard with charts" />
|
|
282
|
+
</Frame>
|
|
283
|
+
|
|
284
|
+
#### Tooltips and updates
|
|
285
|
+
|
|
286
|
+
<Tooltip tip="Application Programming Interface - protocols for building software">
|
|
287
|
+
API
|
|
288
|
+
</Tooltip>
|
|
289
|
+
|
|
290
|
+
<Update label="Version 2.1.0" description="Released March 15, 2024">
|
|
291
|
+
## New features
|
|
292
|
+
- Added bulk user import functionality
|
|
293
|
+
- Improved error messages with actionable suggestions
|
|
294
|
+
|
|
295
|
+
## Bug fixes
|
|
296
|
+
- Fixed pagination issue with large datasets
|
|
297
|
+
- Resolved authentication timeout problems
|
|
298
|
+
</Update>
|
|
299
|
+
|
|
300
|
+
## Required page structure
|
|
301
|
+
|
|
302
|
+
Every documentation page must begin with YAML frontmatter:
|
|
303
|
+
|
|
304
|
+
```yaml
|
|
305
|
+
---
|
|
306
|
+
title: "Clear, specific, keyword-rich title"
|
|
307
|
+
description: "Concise description explaining page purpose and value"
|
|
308
|
+
---
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## Content quality standards
|
|
312
|
+
|
|
313
|
+
### Code examples requirements
|
|
314
|
+
- Always include complete, runnable examples that users can copy and execute
|
|
315
|
+
- Show proper error handling and edge case management
|
|
316
|
+
- Use realistic data instead of placeholder values
|
|
317
|
+
- Include expected outputs and results for verification
|
|
318
|
+
- Test all code examples thoroughly before publishing
|
|
319
|
+
- Specify language and include filename when relevant
|
|
320
|
+
- Add explanatory comments for complex logic
|
|
321
|
+
|
|
322
|
+
### API documentation requirements
|
|
323
|
+
- Document all parameters including optional ones with clear descriptions
|
|
324
|
+
- Show both success and error response examples with realistic data
|
|
325
|
+
- Include rate limiting information with specific limits
|
|
326
|
+
- Provide authentication examples showing proper format
|
|
327
|
+
- Explain all HTTP status codes and error handling
|
|
328
|
+
- Cover complete request/response cycles
|
|
329
|
+
|
|
330
|
+
### Accessibility requirements
|
|
331
|
+
- Include descriptive alt text for all images and diagrams
|
|
332
|
+
- Use specific, actionable link text instead of "click here"
|
|
333
|
+
- Ensure proper heading hierarchy starting with H2
|
|
334
|
+
- Provide keyboard navigation considerations
|
|
335
|
+
- Use sufficient color contrast in examples and visuals
|
|
336
|
+
- Structure content for easy scanning with headers and lists
|
|
337
|
+
|
|
338
|
+
## AI assistant instructions
|
|
339
|
+
|
|
340
|
+
### Component selection logic
|
|
341
|
+
- Use **Steps** for procedures, tutorials, setup guides, and sequential instructions
|
|
342
|
+
- Use **Tabs** for platform-specific content or alternative approaches
|
|
343
|
+
- Use **CodeGroup** when showing the same concept in multiple languages
|
|
344
|
+
- Use **Accordions** for supplementary information that might interrupt flow
|
|
345
|
+
- Use **Cards and CardGroup** for navigation, feature overviews, and related resources
|
|
346
|
+
- Use **RequestExample/ResponseExample** specifically for API endpoint documentation
|
|
347
|
+
- Use **ParamField** for API parameters, **ResponseField** for API responses
|
|
348
|
+
- Use **Expandable** for nested object properties or hierarchical information
|
|
349
|
+
|
|
350
|
+
### Quality assurance checklist
|
|
351
|
+
- Verify all code examples are syntactically correct and executable
|
|
352
|
+
- Test all links to ensure they are functional and lead to relevant content
|
|
353
|
+
- Validate Mintlify component syntax with all required properties
|
|
354
|
+
- Confirm proper heading hierarchy with H2 for main sections, H3 for subsections
|
|
355
|
+
- Ensure content flows logically from basic concepts to advanced topics
|
|
356
|
+
- Check for consistency in terminology, formatting, and component usage
|
|
357
|
+
|
|
358
|
+
### Error prevention strategies
|
|
359
|
+
- Always include realistic error handling in code examples
|
|
360
|
+
- Provide dedicated troubleshooting sections for complex procedures
|
|
361
|
+
- Explain prerequisites clearly before beginning instructions
|
|
362
|
+
- Include verification and testing steps with expected outcomes
|
|
363
|
+
- Add appropriate warnings for destructive or security-sensitive actions
|
|
364
|
+
- Validate all technical information through testing before publication
|
|
@@ -1,7 +1,104 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
icon: "list-check"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
<Update label="v2.9.0" description="2024-06-23">
|
|
6
|
+
|
|
7
|
+
## [v2.9.0: Stuck in the Middleware With You](https://github.com/jlowin/fastmcp/releases/tag/v2.9.0)
|
|
8
|
+
|
|
9
|
+
FastMCP 2.9 introduces two important features that push beyond the basic MCP protocol: MCP Middleware and server-side type conversion.
|
|
10
|
+
|
|
11
|
+
### MCP Middleware
|
|
12
|
+
MCP middleware lets you intercept and modify requests and responses at the protocol level, giving you powerful capabilities for logging, authentication, validation, and more. This is particularly useful for building production-ready MCP servers that need sophisticated request handling.
|
|
13
|
+
|
|
14
|
+
### Server-side Type Conversion
|
|
15
|
+
This release also introduces server-side type conversion for prompt arguments, ensuring that data is properly formatted before being passed to your functions. This reduces the burden on individual tools and prompts to handle type validation and conversion.
|
|
16
|
+
|
|
17
|
+
## What's Changed
|
|
18
|
+
### New Features 🎉
|
|
19
|
+
* Add File utility for binary data by [@gorocode](https://github.com/gorocode) in [#843](https://github.com/jlowin/fastmcp/pull/843)
|
|
20
|
+
* Consolidate prefix logic into FastMCP methods by [@jlowin](https://github.com/jlowin) in [#861](https://github.com/jlowin/fastmcp/pull/861)
|
|
21
|
+
* Add MCP Middleware by [@jlowin](https://github.com/jlowin) in [#870](https://github.com/jlowin/fastmcp/pull/870)
|
|
22
|
+
* Implement server-side type conversion for prompt arguments by [@jlowin](https://github.com/jlowin) in [#908](https://github.com/jlowin/fastmcp/pull/908)
|
|
23
|
+
### Enhancements 🔧
|
|
24
|
+
* Fix tool description indentation issue by [@zfflxx](https://github.com/zfflxx) in [#845](https://github.com/jlowin/fastmcp/pull/845)
|
|
25
|
+
* Add version parameter to FastMCP constructor by [@mkyutani](https://github.com/mkyutani) in [#842](https://github.com/jlowin/fastmcp/pull/842)
|
|
26
|
+
* Update version to not be positional by [@jlowin](https://github.com/jlowin) in [#848](https://github.com/jlowin/fastmcp/pull/848)
|
|
27
|
+
* Add key to component by [@jlowin](https://github.com/jlowin) in [#869](https://github.com/jlowin/fastmcp/pull/869)
|
|
28
|
+
* Add session_id property to Context for data sharing by [@jlowin](https://github.com/jlowin) in [#881](https://github.com/jlowin/fastmcp/pull/881)
|
|
29
|
+
* Fix CORS documentation example by [@jlowin](https://github.com/jlowin) in [#895](https://github.com/jlowin/fastmcp/pull/895)
|
|
30
|
+
### Fixes 🐞
|
|
31
|
+
* "report_progress missing passing related_request_id causes notifications not working" by [@alexsee](https://github.com/alexsee) in [#838](https://github.com/jlowin/fastmcp/pull/838)
|
|
32
|
+
* Fix JWT issuer validation to support string values per RFC 7519 by [@jlowin](https://github.com/jlowin) in [#892](https://github.com/jlowin/fastmcp/pull/892)
|
|
33
|
+
* Fix BearerAuthProvider audience type annotations by [@jlowin](https://github.com/jlowin) in [#894](https://github.com/jlowin/fastmcp/pull/894)
|
|
34
|
+
### Docs 📚
|
|
35
|
+
* Add CLAUDE.md development guidelines by [@jlowin](https://github.com/jlowin) in [#880](https://github.com/jlowin/fastmcp/pull/880)
|
|
36
|
+
* Update context docs for session_id property by [@jlowin](https://github.com/jlowin) in [#882](https://github.com/jlowin/fastmcp/pull/882)
|
|
37
|
+
* Add API reference by [@zzstoatzz](https://github.com/zzstoatzz) in [#893](https://github.com/jlowin/fastmcp/pull/893)
|
|
38
|
+
* Fix API ref rendering by [@zzstoatzz](https://github.com/zzstoatzz) in [#900](https://github.com/jlowin/fastmcp/pull/900)
|
|
39
|
+
* Simplify docs nav by [@jlowin](https://github.com/jlowin) in [#902](https://github.com/jlowin/fastmcp/pull/902)
|
|
40
|
+
* Add fastmcp inspect command by [@jlowin](https://github.com/jlowin) in [#904](https://github.com/jlowin/fastmcp/pull/904)
|
|
41
|
+
* Update client docs by [@jlowin](https://github.com/jlowin) in [#912](https://github.com/jlowin/fastmcp/pull/912)
|
|
42
|
+
* Update docs nav by [@jlowin](https://github.com/jlowin) in [#913](https://github.com/jlowin/fastmcp/pull/913)
|
|
43
|
+
* Update integration documentation for Claude Desktop, ChatGPT, and Claude Code by [@jlowin](https://github.com/jlowin) in [#915](https://github.com/jlowin/fastmcp/pull/915)
|
|
44
|
+
* Add http as an alias for streamable http by [@jlowin](https://github.com/jlowin) in [#917](https://github.com/jlowin/fastmcp/pull/917)
|
|
45
|
+
* Clean up parameter documentation by [@jlowin](https://github.com/jlowin) in [#918](https://github.com/jlowin/fastmcp/pull/918)
|
|
46
|
+
* Add middleware examples for timing, logging, rate limiting, and error handling by [@jlowin](https://github.com/jlowin) in [#919](https://github.com/jlowin/fastmcp/pull/919)
|
|
47
|
+
* ControlFlow → FastMCP rename by [@jlowin](https://github.com/jlowin) in [#922](https://github.com/jlowin/fastmcp/pull/922)
|
|
48
|
+
### Examples & Contrib 💡
|
|
49
|
+
* Add contrib.mcp_mixin support for annotations by [@rsp2k](https://github.com/rsp2k) in [#860](https://github.com/jlowin/fastmcp/pull/860)
|
|
50
|
+
* Add ATProto (Bluesky) MCP Server Example by [@zzstoatzz](https://github.com/zzstoatzz) in [#916](https://github.com/jlowin/fastmcp/pull/916)
|
|
51
|
+
* Fix path in atproto example pyproject by [@zzstoatzz](https://github.com/zzstoatzz) in [#920](https://github.com/jlowin/fastmcp/pull/920)
|
|
52
|
+
* Remove uv source in example by [@zzstoatzz](https://github.com/zzstoatzz) in [#921](https://github.com/jlowin/fastmcp/pull/921)
|
|
53
|
+
|
|
54
|
+
## New Contributors
|
|
55
|
+
* [@alexsee](https://github.com/alexsee) made their first contribution in [#838](https://github.com/jlowin/fastmcp/pull/838)
|
|
56
|
+
* [@zfflxx](https://github.com/zfflxx) made their first contribution in [#845](https://github.com/jlowin/fastmcp/pull/845)
|
|
57
|
+
* [@mkyutani](https://github.com/mkyutani) made their first contribution in [#842](https://github.com/jlowin/fastmcp/pull/842)
|
|
58
|
+
* [@gorocode](https://github.com/gorocode) made their first contribution in [#843](https://github.com/jlowin/fastmcp/pull/843)
|
|
59
|
+
* [@rsp2k](https://github.com/rsp2k) made their first contribution in [#860](https://github.com/jlowin/fastmcp/pull/860)
|
|
60
|
+
* [@owtaylor](https://github.com/owtaylor) made their first contribution in [#897](https://github.com/jlowin/fastmcp/pull/897)
|
|
61
|
+
* [@Jason-CKY](https://github.com/Jason-CKY) made their first contribution in [#906](https://github.com/jlowin/fastmcp/pull/906)
|
|
62
|
+
|
|
63
|
+
**Full Changelog**: [v2.8.1...v2.9.0](https://github.com/jlowin/fastmcp/compare/v2.8.1...v2.9.0)
|
|
64
|
+
|
|
65
|
+
</Update>
|
|
66
|
+
|
|
67
|
+
<Update label="v2.8.1" description="2024-06-15">
|
|
68
|
+
|
|
69
|
+
## [v2.8.1: Sound Judgement](https://github.com/jlowin/fastmcp/releases/tag/v2.8.1)
|
|
70
|
+
|
|
71
|
+
2.8.1 introduces audio support, as well as minor fixes and updates for deprecated features.
|
|
72
|
+
|
|
73
|
+
### Audio Support
|
|
74
|
+
This release adds support for audio content in MCP tools and resources, expanding FastMCP's multimedia capabilities beyond text and images.
|
|
75
|
+
|
|
76
|
+
## What's Changed
|
|
77
|
+
### New Features 🎉
|
|
78
|
+
* Add audio support by [@jlowin](https://github.com/jlowin) in [#833](https://github.com/jlowin/fastmcp/pull/833)
|
|
79
|
+
### Enhancements 🔧
|
|
80
|
+
* Add flag for disabling deprecation warnings by [@jlowin](https://github.com/jlowin) in [#802](https://github.com/jlowin/fastmcp/pull/802)
|
|
81
|
+
* Add examples to Tool Arg Param transformation by [@strawgate](https://github.com/strawgate) in [#806](https://github.com/jlowin/fastmcp/pull/806)
|
|
82
|
+
### Fixes 🐞
|
|
83
|
+
* Restore .settings access as deprecated by [@jlowin](https://github.com/jlowin) in [#800](https://github.com/jlowin/fastmcp/pull/800)
|
|
84
|
+
* Ensure handling of false http kwargs correctly; removed unused kwarg by [@jlowin](https://github.com/jlowin) in [#804](https://github.com/jlowin/fastmcp/pull/804)
|
|
85
|
+
* Bump mcp 1.9.4 by [@jlowin](https://github.com/jlowin) in [#835](https://github.com/jlowin/fastmcp/pull/835)
|
|
86
|
+
### Docs 📚
|
|
87
|
+
* Update changelog for 2.8.0 by [@jlowin](https://github.com/jlowin) in [#794](https://github.com/jlowin/fastmcp/pull/794)
|
|
88
|
+
* Update welcome docs by [@jlowin](https://github.com/jlowin) in [#808](https://github.com/jlowin/fastmcp/pull/808)
|
|
89
|
+
* Update headers in docs by [@jlowin](https://github.com/jlowin) in [#809](https://github.com/jlowin/fastmcp/pull/809)
|
|
90
|
+
* Add MCP group to tutorials by [@jlowin](https://github.com/jlowin) in [#810](https://github.com/jlowin/fastmcp/pull/810)
|
|
91
|
+
* Add Community section to documentation by [@zzstoatzz](https://github.com/zzstoatzz) in [#819](https://github.com/jlowin/fastmcp/pull/819)
|
|
92
|
+
* Add 2.8 update by [@jlowin](https://github.com/jlowin) in [#821](https://github.com/jlowin/fastmcp/pull/821)
|
|
93
|
+
* Embed YouTube videos in community showcase by [@zzstoatzz](https://github.com/zzstoatzz) in [#820](https://github.com/jlowin/fastmcp/pull/820)
|
|
94
|
+
### Other Changes 🦾
|
|
95
|
+
* Ensure http args are passed through by [@jlowin](https://github.com/jlowin) in [#803](https://github.com/jlowin/fastmcp/pull/803)
|
|
96
|
+
* Fix install link in readme by [@jlowin](https://github.com/jlowin) in [#836](https://github.com/jlowin/fastmcp/pull/836)
|
|
97
|
+
|
|
98
|
+
**Full Changelog**: [v2.8.0...v2.8.1](https://github.com/jlowin/fastmcp/compare/v2.8.0...v2.8.1)
|
|
99
|
+
|
|
100
|
+
</Update>
|
|
101
|
+
|
|
5
102
|
<Update label="v2.8.0" description="2024-06-10">
|
|
6
103
|
|
|
7
104
|
## [v2.8.0: Transform and Roll Out](https://github.com/jlowin/fastmcp/releases/tag/v2.8.0)
|