v2.12.4: OIDC What You Did ThereFastMCP 2.12.4 adds comprehensive OIDC support and expands authentication options with AWS Cognito and Descope providers. The release also includes improvements to logging middleware, URL handling for nested resources, persistent OAuth client registration storage, and various fixes to the experimental OpenAPI parser.
Whatβs Changed
New Features π
Enhancements π§
- feat: Move the Starlette context middleware to the front by @akkuman in #1812
- Refactor Logging and Structured Logging Middleware by @strawgate in #1805
- Update pull_request_template.md by @jlowin in #1824
- chore: Set redirect_path default in function by @ruhulio in #1833
- feat: Set instructions in code by @attiks in #1838
- Automatically Create inline Snapshots by @strawgate in #1779
- chore: Cleanup Auth0 redirect_path initialization by @ruhulio in #1842
- feat: Add support for Descope Authentication by @anvibanga in #1853
- Update descope version badges by @jlowin in #1870
- Update welcome images by @jlowin in #1884
- Fix rounded edges of image by @jlowin in #1886
- optimize test suite by @zzstoatzz in #1893
- Enhancement: client completions support context_arguments by @isijoe in #1906
- Update Descope icon by @anvibanga in #1912
- Add AWS Cognito OAuth Provider for Enterprise Authentication by @stephaneberle9 in #1873
- Fix typos discovered by codespell by @cclauss in #1922
- Use lowercase namespace for fastmcp logger by @jlowin in #1791
Fixes π
- Update quickstart.mdx by @radi-dev in #1821
- Remove extraneous union import by @jlowin in #1823
- Delay import of Provider classes until FastMCP Server Creation by @strawgate in #1820
- fix: correct documentation link in deprecation warning by @strawgate in #1828
- fix: Increase default 3s timeout on Pytest by @dacamposol in #1866
- fix: Improve URL handling in OIDCConfiguration by @ruhulio in #1850
- fix: correct typing for on_read_resource middleware method by @strawgate in #1858
- feat(experimental/openapi): replace $ref in additionalProperties; add tests by @jlowin in #1735
- Honor client supplied scopes during registration by @dmikusa in #1860
- Fix: FastAPI list parameter parsing in experimental OpenAPI parser by @jlowin in #1834
- Add log level support for stdio and HTTP transports by @jlowin in #1840
- Fix OAuth pre-flight check to accept HTTP 200 responses by @jlowin in #1874
- Fix: Preserve OpenAPI parameter descriptions in experimental parser by @shlomo666 in #1877
- Add persistent storage for OAuth client registrations by @jlowin in #1879
- docs: update release dates based on github releases by @lodu in #1890
- Small updates to Sampling types by @strawgate in #1882
- remove lockfile smart_home example by @zzstoatzz in #1892
- Fix: Remove JSON schema title metadata while preserving parameters named βtitleβ by @jlowin in #1872
- Fix: get_resource_url nested URL handling by @raphael-linx in #1914
- Clean up code for creating the resource url by @jlowin in #1916
- Fix route count logging in OpenAPI server by @zzstoatzz in #1928
Docs π
- docs: make Gemini CLI integration discoverable by @jackwotherspoon in #1827
- docs: update NEW tags for AI assistant integrations by @jackwotherspoon in #1829
- Update wordmark by @jlowin in #1832
- docs: improve OAuth and OIDC Proxy documentation by @jlowin in #1880
- Update readme + welcome docs by @jlowin in #1883
- Update dark mode image in README by @jlowin in #1885
New Contributors
- @radi-dev made their first contribution in #1821
- @akkuman made their first contribution in #1812
- @ruhulio made their first contribution in #1817
- @attiks made their first contribution in #1838
- @anvibanga made their first contribution in #1853
- @shlomo666 made their first contribution in #1877
- @lodu made their first contribution in #1890
- @isijoe made their first contribution in #1906
- @raphael-linx made their first contribution in #1914
- @stephaneberle9 made their first contribution in #1873
- @cclauss made their first contribution in #1922
v2.12.3: Double TimeFastMCP 2.12.3 focuses on performance and developer experience improvements based on community feedback. This release includes optimized auth provider imports that reduce server startup time, enhanced OIDC authentication flows with proper token management, and several reliability fixes for OAuth proxy configurations. The addition of automatic inline snapshot creation significantly improves the testing experience for contributors.
Whatβs Changed
New Features π
Enhancements π§
- Add client-side auth support for mcp install cursor command by @jlowin in #1747
- Automatically Create inline Snapshots by @strawgate in #1779
- Use lowercase namespace for fastmcp logger by @jlowin in #1791
Fixes π
- fix: correct merge mistake during auth0 refactor by @strawgate in #1742
- Remove extraneous union import by @jlowin in #1823
- Delay import of Provider classes until FastMCP Server Creation by @strawgate in #1820
- fix: refactor OIDC configuration provider for proper token management by @strawgate in #1751
- Fix smart_home example imports by @strawgate in #1753
- fix: correct oauth proxy initialization of client by @strawgate in #1759
- Fix: return empty string when prompts have no arguments by @jlowin in #1766
- Fix async server callbacks by @strawgate in #1774
- Fix error when retrieving Completion API errors by @strawgate in #1785
- fix: correct documentation link in deprecation warning by @strawgate in #1828
Docs π
- Add migration docs for 2.12 by @jlowin in #1745
- Update docs for default sampling implementation to mention OpenAI API Key by @strawgate in #1763
- Add tip about sampling prompts and user_context to sampling documentation by @jlowin in #1764
- Update quickstart.mdx by @radi-dev in #1821
Other Changes π¦Ύ
- Replace Marvin with Claude Code in CI by @jlowin in #1800
- Refactor logging and structured logging middleware by @strawgate in #1805
- feat: Move the Starlette context middleware to the front by @akkuman in #1812
- feat: Add support for OIDC configuration by @ruhulio in #1817
New Contributors
- @radi-dev made their first contribution in #1821
- @akkuman made their first contribution in #1812
- @ruhulio made their first contribution in #1817
v2.12.2: Perchance to StreamThis is a hotfix for a bug where the
streamable-http
transport was not recognized as a valid option in fastmcp.json
configuration files, despite being supported by the CLI. This resulted in a parsing error when the CLI arguments were merged against the configuration spec.Whatβs Changed
Fixes π
Full Changelog: v2.12.1β¦v2.12.2v2.12.1: OAuth to JoyFastMCP 2.12.1 strengthens the OAuth proxy implementation based on extensive community testing and feedback. This release improves client storage reliability, adds PKCE forwarding for enhanced security, introduces configurable token endpoint authentication methods, and expands scope handlingβall addressing real-world integration challenges discovered since 2.12.0. The enhanced test suite with mock providers ensures these improvements are robust and maintainable.
Breaking Changes
- OAuth Proxy: Users of built-in IDP integrations should note that
resource_server_url
has been renamed tobase_url
for clarity and consistency
Whatβs Changed
Enhancements π§
- Make openai dependency optional by @jlowin in #1701
- Remove orphaned OAuth proxy code by @jlowin in #1722
- Expose valid scopes from OAuthProxy metadata by @dmikusa in #1717
- OAuth proxy PKCE forwarding by @jlowin in #1733
- Add token_endpoint_auth_method parameter to OAuthProxy by @jlowin in #1736
- Clean up and enhance OAuth proxy tests with mock provider by @jlowin in #1738
Fixes π
- refactor: replace auth provider registry with ImportString by @jlowin in #1710
- Fix OAuth resource URL handling and WWW-Authenticate header by @jlowin in #1706
- Fix OAuth proxy client storage and add retry logic by @jlowin in #1732
Docs π
- Fix documentation: use StreamableHttpTransport for headers in testing by @jlowin in #1702
- docs: add performance warnings for mounted servers and proxies by @strawgate in #1669
- Update documentation around scopes for google by @jlowin in #1703
- Add deployment information to quickstart by @seanpwlms in #1433
- Update quickstart by @jlowin in #1728
- Add development docs for FastMCP by @jlowin in #1719
Other Changes π¦Ύ
- Set generics without bounds to default=Any by @strawgate in #1648
New Contributors
- @dmikusa made their first contribution in #1717
- @seanpwlms made their first contribution in #1433
v2.12.0: Auth to the RacesFastMCP 2.12 represents one of our most significant releases to date, both in scope and community involvement. After extensive testing and iteration with the community, weβre shipping major improvements to authentication, configuration, and MCP feature adoption.π OAuth Proxy for Broader Provider Support addresses a fundamental challenge: while MCP requires Dynamic Client Registration (DCR), many popular OAuth providers donβt support it. The new OAuth proxy bridges this gap, enabling FastMCP servers to authenticate with providers like GitHub, Google, WorkOS, and Azure through minimal configuration. These native integrations ship today, with more providers planned based on community needs.π Declarative JSON Configuration introduces a standardized, portable way to describe and deploy MCP servers. The
fastmcp.json
configuration file becomes the single source of truth for dependencies, transport settings, entrypoints, and server metadata. This foundation sets the stage for future capabilities like transformations and remote sources, moving toward a world where MCP servers are as portable and shareable as container images.π§ Sampling API Fallback tackles the chicken-and-egg problem limiting adoption of advanced MCP features. Samplingβwhere servers request LLM completions from clientsβis powerful but underutilized due to limited client support. FastMCP now lets server authors define fallback handlers that generate sampling completions server-side when clients donβt support the feature, encouraging adoption while maintaining compatibility.This release took longer than usual to ship, and for good reason: the communityβs aggressive testing and feedback on the authentication system helped us reach a level of stability weβre confident in. Thereβs certainly more work ahead, but these foundations position FastMCP to handle increasingly complex use cases while remaining approachable for developers.Thank you to our new contributors and everyone who tested preview builds. Your feedback directly shaped these features.Whatβs Changed
New Features π
- Add OAuth proxy that allows authentication with social IDPs without DCR support by @jlowin in #1434
- feat: introduce declarative JSON configuration system by @jlowin in #1517
- β¨ Fallback to a Completions API when Sampling is not available by @strawgate in #1145
- Implement typed source system for FastMCP declarative configuration by @jlowin in #1607
Enhancements π§
- Support importing custom_route endpoints when mounting servers by @jlowin in #1470
- Remove unnecessary asserts by @jlowin in #1484
- Add Claude issue triage by @jlowin in #1510
- Inline dedupe prompt by @jlowin in #1512
- Improve stdio and mcp_config clean-up by @strawgate in #1444
- involve kwargs to pass parameters on creating RichHandler for logging customization. by @itaru2622 in #1504
- Move SDK docs generation to post-merge workflow by @jlowin in #1513
- Improve label triage guidance by @jlowin in #1516
- Add code review guidelines for agents by @jlowin in #1520
- Remove trailing slash in unit tests by @jlowin in #1535
- Update OAuth callback UI branding by @jlowin in #1536
- Fix Marvin workflow to support development tools by @jlowin in #1537
- Add mounted_components_raise_on_load_error setting for debugging by @jlowin in #1534
- feat: Add βworkspace flag to fastmcp install cursor by @jlowin in #1522
- switch from
pyright
toty
by @zzstoatzz in #1545 - feat: trigger Marvin workflow on PR body content by @jlowin in #1549
- Add WorkOS and Azure OAuth providers by @jlowin in #1550
- Adjust timeout for slow MCP Server shutdown test by @strawgate in #1561
- Update banner by @jlowin in #1567
- Added import of AuthProxy to auth init by @KaliszS in #1568
- Add configurable redirect URI validation for OAuth providers by @jlowin in #1582
- Remove invalid-argument-type ignore and fix type errors by @jlowin in #1588
- Remove generate-schema from public CLI by @jlowin in #1591
- Skip flaky windows test / mulit-client garbage collection by @jlowin in #1592
- Add setting to disable logging configuration by @isra17 in #1575
- Improve debug logging for nested Servers / Clients by @strawgate in #1604
- Add GitHub pull request template by @strawgate in #1581
- chore: Automate docs and schema updates via PRs by @jlowin in #1611
- Experiment with haiku for limited workflows by @jlowin in #1613
- feat: Improve GitHub workflow automation for schema and SDK docs by @jlowin in #1615
- Consolidate server loading logic into FileSystemSource by @jlowin in #1614
- Prevent Haiku Marvin from commenting when there are no duplicates by @jlowin in #1622
- chore: Add clarifying note to automated PR bodies by @jlowin in #1623
- feat: introduce inline snapshots by @strawgate in #1605
- Improve fastmcp.json environment configuration and project-based deployments by @jlowin in #1631
- fix: allow passing query params in OAuthProxy upstream authorization url by @danb27 in #1630
- Support multiple βwith-editable flags in CLI commands by @jlowin in #1634
- feat: support comma separated oauth scopes by @jlowin in #1642
- Add allowed_client_redirect_uris to OAuth provider subclasses by @jlowin in #1662
- Consolidate CLI config parsing and prevent infinite loops by @jlowin in #1660
- Internal refactor: mcp server config by @jlowin in #1672
- Refactor Environment to support multiple runtime types by @jlowin in #1673
- Add type field to Environment base class by @jlowin in #1676
Fixes π
- Fix breaking change: restore output_schema=False compatibility by @jlowin in #1482
- Fix #1506: Update tool filtering documentation from _meta to meta by @maybenotconnor in #1511
- Fix pytest warnings by @jlowin in #1559
- nest schemas under assets by @jlowin in #1593
- Skip flaky windows test by @jlowin in #1596
- ACTUALLY move schemas to fastmcp.json by @jlowin in #1597
- Fix and centralize CLI path resolution by @jlowin in #1590
- Remove client info modifications by @jlowin in #1620
- Fix $defs being discarded in input schema of transformed tool by @pldesch-chift in #1578
- Fix enum elicitation to use inline schemas for MCP compatibility by @jlowin in #1632
- Reuse session for
StdioTransport
inClient.new
by @strawgate in #1635 - Feat: Configurable LoggingMiddleware payload serialization by @vl-kp in #1636
- Fix OAuth redirect URI validation for DCR compatibility by @jlowin in #1661
- Add default scope handling in OAuth proxy by @romanusyk in #1667
- Fix OAuth token expiry handling by @jlowin in #1671
- Add resource_server_url parameter to OAuth proxy providers by @jlowin in #1682
Breaking Changes π«
Docs π
- Update changelog by @jlowin in #1453
- Update banner by @jlowin in #1472
- Update logo files by @jlowin in #1473
- Update deployment docs by @jlowin in #1486
- Update FastMCP Cloud screenshot by @jlowin in #1487
- Update authentication note in docs by @jlowin in #1488
- chore: Update installation.mdx version snippet by @thomas-te in #1496
- Update fastmcp cloud server requirements by @jlowin in #1497
- Fix oauth pyright type checking by @strawgate in #1498
- docs: Fix type annotation in return value documentation by @MaikelVeen in #1499
- Fix PromptMessage usage in docs example by @jlowin in #1515
- Create CODE_OF_CONDUCT.md by @jlowin in #1523
- Fixed wrong import path in new docs page by @KaliszS in #1538
- Document symmetric key JWT verification support by @jlowin in #1586
- Update fastmcp.json schema path by @jlowin in #1595
Dependencies π¦
- Bump actions/create-github-app-token from 1 to 2 by @dependabot[bot] in #1436
- Bump astral-sh/setup-uv from 4 to 6 by @dependabot[bot] in #1532
- Bump actions/checkout from 4 to 5 by @dependabot[bot] in #1533
Other Changes π¦Ύ
- Add dedupe workflow by @jlowin in #1454
- Update AGENTS.md by @jlowin in #1471
- Give Marvin the power of the Internet by @strawgate in #1475
- Update
just
error message for static checks by @jlowin in #1483 - Remove labeler by @jlowin in #1509
- update aproto server to handle rich links by @zzstoatzz in #1556
- fix: enable triage bot for fork PRs using pull_request_target by @jlowin in #1557
New Contributors
- @thomas-te made their first contribution in #1496
- @maybenotconnor made their first contribution in #1511
- @MaikelVeen made their first contribution in #1499
- @KaliszS made their first contribution in #1538
- @isra17 made their first contribution in #1575
- @marvin-context-protocol[bot] made their first contribution in #1616
- @pldesch-chift made their first contribution in #1578
- @vl-kp made their first contribution in #1636
- @romanusyk made their first contribution in #1667
v2.11.3: API-tite for ChangeThis release includes significant enhancements to the experimental OpenAPI parser and fixes a significant bug that led schemas not to be included in input/output schemas if they were transitive dependencies (e.g. A β B β C implies A depends on C). For users naively transforming large OpenAPI specs into MCP servers, this may result in ballooning payload sizes and necessitate curation.
Whatβs Changed
Enhancements π§
- Improve redirect handling to address 307βs by @jlowin in #1387
- Ensure resource + template names are properly prefixed when importing/mounting by @jlowin in #1423
- fixes #1398: Add JWT claims to AccessToken by @panargirakis in #1399
- Enable Protected Resource Metadata to provide resource_name and resou⦠by @yannj-fr in #1371
- Pin mcp SDK under 2.0 to avoid breaking changes by @jlowin in #1428
- Clean up complexity from PR #1426 by @jlowin in #1435
- Optimize OpenAPI payload size by 46% by @jlowin in #1452
- Update static checks by @jlowin in #1448
Fixes π
- Fix client-side logging bug #1394 by @chi2liu in #1397
- fix: Fix httpx_client_factory type annotation to match MCP SDK (#1402) by @chi2liu in #1405
- Fix OpenAPI allOf handling at requestBody top level (#1378) by @chi2liu in #1425
- Fix OpenAPI transitive references and performance (#1372) by @jlowin in #1426
- fix(type): lifespan is partially unknown by @ykun9 in #1389
- Ensure transformed tools generate structured content by @jlowin in #1443
Docs π
- docs(client/logging): reflect corrected default log level mapping by @jlowin in #1403
- Add documentation for get_access_token() dependency function by @jlowin in #1446
Other Changes π¦Ύ
- Add comprehensive tests for utilities.components module by @chi2liu in #1395
- Consolidate agent instructions into AGENTS.md by @jlowin in #1404
- Fix performance test threshold to prevent flaky failures by @jlowin in #1406
- Update agents.md; add github instructions by @jlowin in #1410
- Add Marvin assistant by @jlowin in #1412
- Marvin: fix deprecated variable names by @jlowin in #1417
- Simplify action setup and add github tools for Marvin by @jlowin in #1419
- Update marvin workflow name by @jlowin in #1421
- Improve GitHub templates by @jlowin in #1422
New Contributors
- @panargirakis made their first contribution in #1399
- @ykun9 made their first contribution in #1389
- @yannj-fr made their first contribution in #1371
v2.11.2: Satis-factory
Whatβs Changed
Enhancements π§
- Support factory functions in fastmcp run by @jlowin in #1384
- Add async support to client_factory in FastMCPProxy (#1286) by @bianning in #1375
Fixes π
- Fix server_version field in inspect manifest by @jlowin in #1383
- Fix Settings field with both default and default_factory by @jlowin in #1380
Other Changes π¦Ύ
New Contributors
Full Changelog: v2.11.1β¦v2.11.2v2.11.1: Youβre Better Auth Now
Whatβs Changed
New Features π
- Introduce
RemoteAuthProvider
for cleaner external identity provider integration, update docs by @jlowin in #1346
Enhancements π§
Fixes π
- Fix method-bound FunctionTool schemas by @strawgate in #1360
- Manually set
_key
aftermodel_copy()
to enable prefixing Transformed Tools by @strawgate in #1357
Docs π
- Docs updates by @jlowin in #1336
- Add 2.11 to changelog by @jlowin in #1337
- Update AuthKit vocab by @jlowin in #1338
- Fix typo in decorating-methods.mdx by @Ozzuke in #1344
New Contributors
Full Changelog: v2.11.0β¦v2.11.1v2.11.0: Auth to a Good Start
FastMCP 2.11 doubles down on what developers need most: speed and simplicity. This massive release delivers significant performance improvements and a dramatically better developer experience.π Enterprise-Ready Authentication brings comprehensive OAuth 2.1 support with WorkOSβs AuthKit integration. The new AuthProvider interface leverages MCPβs support for separate resource and authorization servers, handling API keys and remote authentication with Dynamic Client Registration. AuthKit integration means you can plug into existing enterprise identity systems without rebuilding your auth stack, setting the stage for plug-and-play auth that doesnβt require users to become security experts overnight.β‘ The Experimental OpenAPI Parser delivers dramatic performance improvements through single-pass schema processing and optimized memory usage. OpenAPI integrations are now significantly faster, with cleaner, more maintainable code. (Note: the experimental parser is disabled by default, setFASTMCPEXPERIMENTALENABLENEWOPENAPIPARSER=1
to enable it. A message will be shown to all users on the legacy parser encouraging them to try the new one before it becomes the default.)π§ Context State Management finally gives you persistent state across tool calls with a simple dict interface, while enhanced meta support lets you expose rich component metadata to clients. Combined with improved type annotations, string-based argument descriptions, and UV transport support, this release makes FastMCP feel more intuitive than ever.This release represents a TON of community contributions and sets the foundation for even more ambitious features ahead.Whatβs Changed
New Features π
- Introduce experimental OpenAPI parser with improved performance and maintainability by @jlowin in #1209
- Add state dict to Context (#1118) by @mukulmurthy in #1160
- Expose FastMCP tags to clients via component
meta
dict by @jlowin in #1281 - Add _fastmcp meta namespace by @jlowin in #1290
- Add TokenVerifier protocol support alongside existing OAuthProvider authentication by @jlowin in #1297
- Add comprehensive OAuth 2.1 authentication system with WorkOS integration by @jlowin in #1327
Enhancements π§
- [πΆ] Transform MCP Server Tools by @strawgate in #1132
- Add βpython, βproject, and βwith-requirements options to CLI commands by @jlowin in #1190
- Support
fastmcp run mcp.json
by @strawgate in #1138 - Support from future import annotations by @jlowin in #1199
- Optimize OpenAPI parser performance with single-pass schema processing by @jlowin in #1214
- Log tool name on transform validation error by @strawgate in #1238
- Refactor
get_http_request
andcontext.session_id
by @hopeful0 in #1242 - Support creating tool argument descriptions from string annotations by @jlowin in #1255
- feat: Add Annotations support for resources and resource templates by @chughtapan in #1260
- Add UV Transport by @strawgate in #1270
- Improve OpenAPI-to-JSONSchema conversion utilities by @jlowin in #1283
- Ensure proxy components forward meta dicts by @jlowin in #1282
- fix: server argument passing in CLI run command by @chughtapan in #1293
- Add meta support to tool transformation utilities by @jlowin in #1295
- feat: Allow Resource Metadata URL as field in OAuthProvider by @dacamposol in #1287
- Use a simple overwrite instead of a merge for meta by @jlowin in #1296
- Remove unused TimedCache by @strawgate in #1303
- refactor: standardize logging usage across OpenAPI utilities by @chi2liu in #1322
- perf: optimize OpenAPI parsing by reducing dict copy operations by @chi2liu in #1321
- Structured client-side logging by @cjermain in #1326
Fixes π
- fix: preserve def reference when referenced in allOf / oneOf / anyOf by @algirdasci in #1208
- fix: add type hint to custom_route decorator by @zzstoatzz in #1210
- chore: typo by @richardkmichael in #1216
- fix: handle non-string $ref values in experimental OpenAPI parser by @jlowin in #1217
- Skip repeated type conversion and validation in proxy client elicitation handler by @chughtapan in #1222
- Ensure default fields are not marked nullable by @jlowin in #1224
- Fix stateful proxy client mixing in multi-proxies sessions by @hopeful0 in #1245
- Fix invalid async context manager usage in proxy documentation by @zzstoatzz in #1246
- fix: experimental FastMCPOpenAPI server lost headers in request when init(client with headers) by @itaru2622 in #1254
- Fix typing, add tests for tool call middleware by @jlowin in #1269
- Fix: prune hidden parameter defs by @muhammadkhalid-03 in #1257
- Fix nullable field handling in OpenAPI to JSON Schema conversion by @jlowin in #1279
- Ensure fastmcp run supports v1 servers by @jlowin in #1332
Breaking Changes π«
Docs π
- Remove unused import from FastAPI integration documentation by @mariotaddeucci in #1194
- Update fastapi docs by @jlowin in #1198
- Add docs for context state management by @jlowin in #1227
- Permit.io integration docs by @orweis in #1226
- Update docs to reflect sync tools by @jlowin in #1234
- Update changelog.mdx by @jlowin in #1235
- Update SDK docs by @jlowin in #1236
- Update βname flag documentation for Cursor/Claude by @adam-conway in #1239
- Add annotations docs by @jlowin in #1268
- Update openapi/fastapi URLs README.md by @jbn in #1278
- Add 2.11 version badge for state management by @jlowin in #1289
- Add meta parameter support to tools, resources, templates, and prompts decorators by @jlowin in #1294
- docs: update get_state and set_state references by @Maxi91f in #1306
- Add unit tests and docs for denying tool calls with middleware by @jlowin in #1333
- Remove reference to stacked decorators by @jlowin in #1334
- Eunomia authorization server can run embedded within the MCP server by @tommitt in #1317
Other Changes π¦Ύ
- Update README.md by @jlowin in #1230
- Logcapture addition to test_server file by @Sourav-Tripathy in #1229
- Add tests for headers with both legacy and experimental openapi parser by @jlowin in #1259
- Small clean-up from MCP Tool Transform PR by @strawgate in #1267
- Add test for proxy tags visibility by @jlowin in #1302
- Add unit test for sampling with image messages by @jlowin in #1329
- Remove redundant resource_metadata_url assignment by @jlowin in #1328
- Update bug.yml by @jlowin in #1331
- Ensure validation errors are raised when masked by @jlowin in #1330
New Contributors
- @mariotaddeucci made their first contribution in #1194
- @algirdasci made their first contribution in #1208
- @chughtapan made their first contribution in #1222
- @mukulmurthy made their first contribution in #1160
- @orweis made their first contribution in #1226
- @Sourav-Tripathy made their first contribution in #1229
- @adam-conway made their first contribution in #1239
- @muhammadkhalid-03 made their first contribution in #1257
- @jbn made their first contribution in #1278
- @dacamposol made their first contribution in #1287
- @chi2liu made their first contribution in #1322
- @cjermain made their first contribution in #1326
v2.10.6: Hymn for the Weekend
A special Saturday release with many fixes.Whatβs Changed
Enhancements π§
- Resolve #1139 β Implement include_context argument in Context.sample by @codingjoe in #1141
- feat(settings): add log level normalization by @ka2048 in #1171
- add server name to mounted server warnings by @artificial-aidan in #1147
- Add StatefulProxyClient by @hopeful0 in #1109
Fixes π
- Fix OpenAPI empty parameters by @FabrizioSandri in #1128
- Fix title field preservation in tool transformations by @jlowin in #1131
- Fix optional parameter validation in OpenAPI integration by @jlowin in #1135
- Do not silently exclude the βcontextβ key from JSON body by @melkamar in #1153
- Fix tool output schema generation to respect Pydantic serialization aliases by @zzstoatzz in #1148
- fix: _replace_ref_with_defs; ensure ref_path is string by @itaru2622 in #1164
- Fix nesting when making OpenAPI arrays and objects optional by @melkamar in #1178
- Fix
mcp-json
output format to include server name by @jlowin in #1185 - Only configure logging one time by @jlowin in #1187
Docs π
- Update changelog.mdx by @jlowin in #1127
- Eunomia Authorization with native FastMCPβs Middleware by @tommitt in #1144
- update api ref for new
mdxify
version by @zzstoatzz in #1182
Other Changes π¦Ύ
- Expand empty parameter filtering and add comprehensive tests by @jlowin in #1129
- Add no-commit-to-branch hook by @zzstoatzz in #1149
- Update README.md by @jlowin in #1165
- skip on rate limit by @zzstoatzz in #1183
- Remove deprecated proxy creation by @jlowin in #1186
- Separate integration tests from unit tests in CI by @jlowin in #1188
New Contributors
- @FabrizioSandri made their first contribution in #1128
- @melkamar made their first contribution in #1153
- @codingjoe made their first contribution in #1141
- @itaru2622 made their first contribution in #1164
- @ka2048 made their first contribution in #1171
- @artificial-aidan made their first contribution in #1147
v2.10.5: Middle Management
A maintenance release focused on OpenAPI refinements and middleware fixes, plus console improvements.Whatβs Changed
Enhancements π§
- Fix Claude Code CLI detection for npm global installations by @jlowin in #1106
- Fix OpenAPI parameter name collisions with location suffixing by @jlowin in #1107
- Add mirrored component support for proxy servers by @jlowin in #1105
Fixes π
- Fix OpenAPI deepObject style parameter encoding by @jlowin in #1122
- xfail when github token is not set (β or None) by @jlowin in #1123
- fix: replace oneOf with anyOf in OpenAPI output schemas by @MagnusS0 in #1119
- Fix middleware list result types by @jlowin in #1125
- Improve console width for logo by @jlowin in #1126
Docs π
- Improve transport + integration docs by @jlowin in #1103
- Update proxy.mdx by @coldfire-x in #1108
Other Changes π¦Ύ
New Contributors
- @coldfire-x made their first contribution in #1108
- @MagnusS0 made their first contribution in #1119
v2.10.4: Transport-ation
A quick fix to ensure the CLI accepts βstreamable-httpβ as a valid transport option.Whatβs Changed
Fixes π
Full Changelog: v2.10.3β¦v2.10.4v2.10.3: CLI Me a River
A major CLI overhaul featuring a complete refactor from typer to cyclopts, new IDE integrations, and comprehensive OpenAPI improvements.Whatβs Changed
New Features π
- Refactor CLI from typer to cyclopts and add comprehensive tests by @jlowin in #1062
- Add output schema support for OpenAPI tools by @jlowin in #1073
Enhancements π§
- Add Cursor support via CLI integration by @jlowin in #1052
- Add Claude Code install integration by @jlowin in #1053
- Generate MCP JSON config output from CLI as new
fastmcp install
command by @jlowin in #1056 - Use isawaitable instead of iscoroutine by @jlowin in #1059
- feat: Add
--path
Option to CLI for HTTP/SSE Route by @davidbk-legit in #1087 - Fix concurrent proxy client operations with session isolation by @jlowin in #1083
Fixes π
- Refactor Client context management to avoid concurrency issue by @hopeful0 in #1054
- Keep json schema $defs on transform by @strawgate in #1066
- Ensure fastmcp version copy is plaintext by @jlowin in #1071
- Fix single-element list unwrapping in tool content by @jlowin in #1074
- Fix max recursion error when pruning OpenAPI definitions by @dimitribarbot in #1092
- Fix OpenAPI tool name registration when modified by mcp_component_fn by @jlowin in #1096
Docs π
- Docs: add example of more concise way to use bearer auth by @neilconway in #1055
- Update favicon by @jlowin in #1058
- Update environment note by @jlowin in #1075
- Add fastmcp version βcopy documentation by @jlowin in #1076
Other Changes π¦Ύ
- Remove asserts and add documentation following #1054 by @jlowin in #1057
- Add βcopy flag for fastmcp version by @jlowin in #1063
- Fix docstring format for fastmcp.client.Client by @neilconway in #1094
New Contributors
- @neilconway made their first contribution in #1055
- @davidbk-legit made their first contribution in #1087
- @dimitribarbot made their first contribution in #1092
v2.10.2: Forward March
The headline feature of this release is the ability to βforwardβ advanced MCP interactions like logging, progress, and elicitation through proxy servers. If the remote server requests an elicitation, the proxy client will pass that request to the new, βultimateβ client.Whatβs Changed
New Features π
Enhancements π§
- Re-add splash screen by @jlowin in #1027
- Reduce banner padding by @jlowin in #1030
- Allow per-server timeouts in MCPConfig by @cegersdoerfer in #1031
- Support βscpβ claim for OAuth scopes in BearerAuthProvider by @jlowin in #1033
- Add path expansion to image/audio/file by @jlowin in #1038
- Ensure multi-client configurations use new ProxyClient by @jlowin in #1045
Fixes π
- Expose stateless_http kwarg for mcp.run() by @jlowin in #1018
- Avoid propagating logs by @jlowin in #1042
Docs π
- Clean up docs by @jlowin in #1028
- Docs: clarify server URL paths for ChatGPT integration by @thap2331 in #1017
Other Changes π¦Ύ
- Split giant openapi test file into smaller files by @jlowin in #1034
- Add comprehensive OpenAPI 3.0 vs 3.1 compatibility tests by @jlowin in #1035
- Update banner and use console.log by @jlowin in #1041
New Contributors
- @cegersdoerfer made their first contribution in #1031
- @hopeful0 made their first contribution in #1022
- @thap2331 made their first contribution in #1017
v2.10.1: Revert to Sender
A quick patch to revert the CLI banner that was added in v2.10.0.Whatβs Changed
Docs π
Full Changelog: v2.10.0β¦v2.10.1v2.10.0: Great Spec-tations
FastMCP 2.10 brings full compliance with the 6/18/2025 MCP spec update, introducing elicitation support for dynamic server-client communication and output schemas for structured tool responses. Please note that due to these changes, this release also includes a breaking change to the return signature ofclient.call_tool()
.Elicitation Support
Elicitation allows MCP servers to request additional information from clients during tool execution, enabling more interactive and dynamic server behavior. This opens up new possibilities for tools that need user input or confirmation during execution.Output Schemas
Tools can now define structured output schemas, ensuring that responses conform to expected formats and making tool integration more predictable and type-safe.Whatβs Changed
New Features π
- MCP 6/18/25: Add output schema to tools by @jlowin in #901
- MCP 6/18/25: Elicitation support by @jlowin in #889
Enhancements π§
- Update types + tests for SDK changes by @jlowin in #888
- MCP 6/18/25: Update auth primitives by @jlowin in #966
- Add OpenAPI extensions support to HTTPRoute by @maddymanu in #977
- Add title field support to FastMCP components by @jlowin in #982
- Support implicit Elicitation acceptance by @jlowin in #983
- Support βno responseβ elicitation requests by @jlowin in #992
- Add Support for Configurable Algorithms by @sstene1 in #997
Fixes π
- Improve stdio error handling to raise connection failures immediately by @jlowin in #984
- Fix type hints for FunctionResource:fn by @CfirTsabari in #986
- Update link to OpenAI MCP example by @mossbanay in #985
- Fix output schema generation edge case by @jlowin in #995
- Refactor array parameter formatting to reduce code duplication by @jlowin in #1007
- Fix OpenAPI array parameter explode handling by @jlowin in #1008
Breaking Changes π«
Docs π
- Update middleware imports and documentation by @jlowin in #999
- Update OpenAI docs by @jlowin in #1001
- Add CLI banner by @jlowin in #1005
Examples & Contrib π‘
Other Changes π¦Ύ
New Contributors
- @maddymanu made their first contribution in #977
- @github0hello made their first contribution in #979
- @tommitt made their first contribution in #975
- @CfirTsabari made their first contribution in #986
- @mossbanay made their first contribution in #985
- @sstene1 made their first contribution in #997
v2.9.2: Safety Pin
This is a patch release to pinmcp
below 1.10, which includes changes related to the 6/18/2025 MCP spec update and could potentially break functionality for some FastMCP users.Whatβs Changed
Docs π
Dependencies π¦
Full Changelog: v2.9.1β¦v2.9.2v2.9.1: Call Me Maybe
FastMCP 2.9.1 introduces automatic MCP list change notifications, allowing servers to notify clients when tools, resources, or prompts are dynamically updated. This enables more responsive and adaptive MCP integrations.Whatβs Changed
New Features π
Enhancements π§
Fixes π
- Fix duplicate error logging in exception handlers by @jlowin in #938
- Fix parameter location enum handling in OpenAPI parser by @jlowin in #953
- Fix external schema reference handling in OpenAPI parser by @jlowin in #954
Docs π
- Update changelog for 2.9 release by @jlowin in #929
- Regenerate API references by @zzstoatzz in #935
- Regenerate API references by @zzstoatzz in #947
- Regenerate API references by @zzstoatzz in #949
Examples & Contrib π‘
- Add
create_thread
tool to bsky MCP server by @zzstoatzz in #927 - Update
mount_example.py
to work with current fastmcp API by @rajephon in #957
New Contributors
Full Changelog: v2.9.0β¦v2.9.1v2.9.0: Stuck in the Middleware With You
FastMCP 2.9 introduces two important features that push beyond the basic MCP protocol: MCP Middleware and server-side type conversion.MCP Middleware
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.Server-side Type Conversion
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.Whatβs Changed
New Features π
- Add File utility for binary data by @gorocode in #843
- Consolidate prefix logic into FastMCP methods by @jlowin in #861
- Add MCP Middleware by @jlowin in #870
- Implement server-side type conversion for prompt arguments by @jlowin in #908
Enhancements π§
- Fix tool description indentation issue by @zfflxx in #845
- Add version parameter to FastMCP constructor by @mkyutani in #842
- Update version to not be positional by @jlowin in #848
- Add key to component by @jlowin in #869
- Add session_id property to Context for data sharing by @jlowin in #881
- Fix CORS documentation example by @jlowin in #895
Fixes π
- βreport_progress missing passing related_request_id causes notifications not workingβ by @alexsee in #838
- Fix JWT issuer validation to support string values per RFC 7519 by @jlowin in #892
- Fix BearerAuthProvider audience type annotations by @jlowin in #894
Docs π
- Add CLAUDE.md development guidelines by @jlowin in #880
- Update context docs for session_id property by @jlowin in #882
- Add API reference by @zzstoatzz in #893
- Fix API ref rendering by @zzstoatzz in #900
- Simplify docs nav by @jlowin in #902
- Add fastmcp inspect command by @jlowin in #904
- Update client docs by @jlowin in #912
- Update docs nav by @jlowin in #913
- Update integration documentation for Claude Desktop, ChatGPT, and Claude Code by @jlowin in #915
- Add http as an alias for streamable http by @jlowin in #917
- Clean up parameter documentation by @jlowin in #918
- Add middleware examples for timing, logging, rate limiting, and error handling by @jlowin in #919
- ControlFlow β FastMCP rename by @jlowin in #922
Examples & Contrib π‘
- Add contrib.mcp_mixin support for annotations by @rsp2k in #860
- Add ATProto (Bluesky) MCP Server Example by @zzstoatzz in #916
- Fix path in atproto example pyproject by @zzstoatzz in #920
- Remove uv source in example by @zzstoatzz in #921
New Contributors
- @alexsee made their first contribution in #838
- @zfflxx made their first contribution in #845
- @mkyutani made their first contribution in #842
- @gorocode made their first contribution in #843
- @rsp2k made their first contribution in #860
- @owtaylor made their first contribution in #897
- @Jason-CKY made their first contribution in #906
v2.8.1: Sound Judgement
2.8.1 introduces audio support, as well as minor fixes and updates for deprecated features.Audio Support
This release adds support for audio content in MCP tools and resources, expanding FastMCPβs multimedia capabilities beyond text and images.Whatβs Changed
New Features π
Enhancements π§
- Add flag for disabling deprecation warnings by @jlowin in #802
- Add examples to Tool Arg Param transformation by @strawgate in #806
Fixes π
- Restore .settings access as deprecated by @jlowin in #800
- Ensure handling of false http kwargs correctly; removed unused kwarg by @jlowin in #804
- Bump mcp 1.9.4 by @jlowin in #835
Docs π
- Update changelog for 2.8.0 by @jlowin in #794
- Update welcome docs by @jlowin in #808
- Update headers in docs by @jlowin in #809
- Add MCP group to tutorials by @jlowin in #810
- Add Community section to documentation by @zzstoatzz in #819
- Add 2.8 update by @jlowin in #821
- Embed YouTube videos in community showcase by @zzstoatzz in #820
Other Changes π¦Ύ
- Ensure http args are passed through by @jlowin in #803
- Fix install link in readme by @jlowin in #836
v2.8.0: Transform and Roll Out
FastMCP 2.8.0 introduces powerful new ways to customize and control your MCP servers!Tool Transformation
The highlight of this release is first-class Tool Transformation, a new feature that lets you create enhanced variations of existing tools. You can now easily rename arguments, hide parameters, modify descriptions, and even wrap tools with custom validation or post-processing logicβall without rewriting the original code. This makes it easier than ever to adapt generic tools for specific LLM use cases or to simplify complex APIs. Huge thanks to @strawgate for partnering on this, starting with #591 and #599 and continuing offline.Component Control
This release also gives you more granular control over which components are exposed to clients. With new tag-based filtering, you can selectively enable or disable tools, resources, and prompts based on tags, perfect for managing different environments or user permissions. Complementing this, every component now supports being programmatically enabled or disabled, offering dynamic control over your serverβs capabilities.Tools-by-Default
Finally, to improve compatibility with a wider range of LLM clients, this release changes the default behavior for OpenAPI integration: all API endpoints are now converted toTools
by default. This is a breaking change but pragmatically necessitated by the fact that the majority of MCP clients available today are, sadly, only compatible with MCP tools. Therefore, this change significantly simplifies the out-of-the-box experience and ensures your entire API is immediately accessible to any tool-using agent.Whatβs Changed
New Features π
- First-class tool transformation by @jlowin in #745
- Support enable/disable for all FastMCP components (tools, prompts, resources, templates) by @jlowin in #781
- Add support for tag-based component filtering by @jlowin in #748
- Allow tag assignments for OpenAPI by @jlowin in #791
Enhancements π§
- Create common base class for components by @jlowin in #776
- Move components to own file; add resource by @jlowin in #777
- Update FastMCP component with eq and repr by @jlowin in #779
- Remove open-ended and server-specific settings by @jlowin in #750
Fixes π
- Ensure client is only initialized once by @jlowin in #758
- Fix field validator for resource by @jlowin in #778
- Ensure proxies can overwrite remote tools without falling back to the remote by @jlowin in #782
Breaking Changes π«
- Treat all openapi routes as tools by @jlowin in #788
- Fix issue with global OpenAPI tags by @jlowin in #792
Docs π
- Minor docs updates by @jlowin in #755
- Add 2.7 update by @jlowin in #756
- Reduce 2.7 image size by @jlowin in #757
- Update updates.mdx by @jlowin in #765
- Hide docs sidebar scrollbar by default by @jlowin in #766
- Add βstop vibe testingβ to tutorials by @jlowin in #767
- Add docs links by @jlowin in #768
- Fix: updated variable name under Gemini remote client by @yrangana in #769
- Revert βHide docs sidebar scrollbar by defaultβ by @jlowin in #770
- Add updates by @jlowin in #773
- Add tutorials by @jlowin in #783
- Update LLM-friendly docs by @jlowin in #784
- Update oauth.mdx by @JeremyCraigMartinez in #787
- Add changelog by @jlowin in #789
- Add tutorials by @jlowin in #790
- Add docs for tag-based filtering by @jlowin in #793
Other Changes π¦Ύ
- Create dependabot.yml by @jlowin in #759
- Bump astral-sh/setup-uv from 3 to 6 by @dependabot in #760
- Add dependencies section to release by @jlowin in #761
- Remove extra imports for MCPConfig by @Maanas-Verma in #763
- Split out enhancements in release notes by @jlowin in #764
New Contributors
- @dependabot made their first contribution in #760
- @Maanas-Verma made their first contribution in #763
- @JeremyCraigMartinez made their first contribution in #787
v2.7.1: The Bearer Necessities
This release primarily contains a fix for parsing string tokens that are provided to FastMCP clients.New Features π
Fixes π
- Ensure event store is properly typed by @jlowin in #753
- Fix passing token string to client auth & add auth to MCPConfig clients by @jlowin in #754
Docs π
- Docs : fix client to mcp_client in Gemini example by @yrangana in #734
- update add tool docstring by @strawgate in #739
- Fix contrib link by @richardkmichael in #749
Other Changes π¦Ύ
- Switch Pydantic defaults to kwargs by @strawgate in #731
- Fix Typo in CLI module by @wfclark5 in #737
- chore: fix prompt docstring by @danb27 in #752
- Add accept to excluded headers by @jlowin in #751
New Contributors
- @wfclark5 made their first contribution in #737
- @richardkmichael made their first contribution in #749
- @danb27 made their first contribution in #752
v2.7.0: Pare Programming
This is primarily a housekeeping release to remove or deprecate cruft thatβs accumulated since v1. Primarily, this release refactors FastMCPβs internals in preparation for features planned in the next few major releases. However please note that as a result, this release has some minor breaking changes (which is why itβs 2.7, not 2.6.2, in accordance with repo guidelines) though not to the core user-facing APIs.Breaking Changes π«
- decorators return the objects they create, not the decorated function
- websockets is an optional dependency
- methods on the server for automatically converting functions into tools/resources/prompts have been deprecated in favor of using the decorators directly
New Features π
- allow passing flags to servers by @zzstoatzz in #690
- replace ref pointing to `#/components/schemas/` with `#/defs/` by @phateffect in #697
- Split Tool into Tool and FunctionTool by @jlowin in #700
- Use strict basemodel for Prompt; relax from_function deprecation by @jlowin in #701
- Formalize resource/functionresource replationship by @jlowin in #702
- Formalize template/functiontemplate split by @jlowin in #703
- Support flexible @tool decorator call patterns by @jlowin in #706
- Ensure deprecation warnings have stacklevel=2 by @jlowin in #710
- Allow naked prompt decorator by @jlowin in #711
Fixes π
- Updates / Fixes for Tool Content Conversion by @strawgate in #642
- Fix pr labeler permissions by @jlowin in #708
- remove -n auto by @jlowin in #709
- Fix links in README.md by @alainivars in #723
v2.6.1: Blast Auth (second ignition)
This is a patch release to restore py.typed in #686.Docs π
- Update readme by @jlowin in #679
- Add gemini tutorial by @jlowin in #680
- Fix : fix path error to CLI Documentation by @yrangana in #684
- Update auth docs by @jlowin in #687
Other Changes π¦Ύ
- Remove deprecation notice by @jlowin in #677
- Delete server.py by @jlowin in #681
- Restore py.typed by @jlowin in #686
New Contributors
Full Changelog: v2.6.0β¦v2.6.1v2.6.0: Blast Auth
New Features π
- Introduce MCP client oauth flow by @jlowin in #478
- Support providing tools at init by @jlowin in #647
- Simplify code for running servers in processes during tests by @jlowin in #649
- Add basic bearer auth for server and client by @jlowin in #650
- Support configuring bearer auth from env vars by @jlowin in #652
- feat(tool): add support for excluding arguments from tool definition by @deepak-stratforge in #626
- Add docs for server + client auth by @jlowin in #655
Fixes π
- fix: Support concurrency in FastMcpProxy (and Client) by @Sillocan in #635
- Ensure Client.close() cleans up client context appropriately by @jlowin in #643
- Update client.mdx: ClientError namespace by @mjkaye in #657
Docs π
- Make FastMCPTransport support simulated Streamable HTTP Transport (didnβt work) by @jlowin in #645
- Document exclude_args by @jlowin in #653
- Update welcome by @jlowin in #673
- Add Anthropic + Claude desktop integration guides by @jlowin in #674
- Minor docs design updates by @jlowin in #676
Other Changes π¦Ύ
New Contributors
- @Sillocan made their first contribution in #635
- @deepak-stratforge made their first contribution in #626
- @mjkaye made their first contribution in #657
v2.5.2: Stayinβ Alive
New Features π
- Add graceful error handling for unreachable mounted servers by @davenpi in #605
- Improve type inference from client transport by @jlowin in #623
- Add keep_alive param to reuse subprocess by @jlowin in #624
Fixes π
- Fix handling tools without descriptions by @jlowin in #610
- Donβt print env vars to console when format is wrong by @jlowin in #615
- Ensure behavior-affecting headers are excluded when forwarding proxies/openapi by @jlowin in #620
Docs π
Other Changes π¦Ύ
- add init_timeout for mcp client by @jfouret in #607
- Add init_timeout for mcp client (incl settings) by @jlowin in #609
- Support for uppercase letters at the log level by @ksawaray in #625
New Contributors
Full Changelog: v2.5.1β¦v2.5.2v2.5.0: Route Awakening
This release introduces completely new tools for generating and customizing MCP servers from OpenAPI specs and FastAPI apps, including popular requests like mechanisms for determining what routes map to what MCP components; renaming routes; and customizing the generated MCP components.New Features π
- Add FastMCP 1.0 server support for in-memory Client / Testing by @jlowin in #539
- Minor addition: add transport to stdio server in mcpconfig, with default by @jlowin in #555
- Raise an error if a Client is created with no servers in config by @jlowin in #554
- Expose model preferences in
Context.sample
for flexible model selection. by @davenpi in #542 - Ensure custom routes are respected by @jlowin in #558
- Add client method to send cancellation notifications by @davenpi in #563
- Enhance route map logic for include/exclude OpenAPI routes by @jlowin in #564
- Add tag-based route maps by @jlowin in #565
- Add advanced control of openAPI route creation by @jlowin in #566
- Make error masking configurable by @jlowin in #550
- Ensure client headers are passed through to remote servers by @jlowin in #575
- Use lowercase name for headers when comparing by @jlowin in #576
- Permit more flexible name generation for OpenAPI servers by @jlowin in #578
- Ensure that tools/templates/prompts are compatible with callable objects by @jlowin in #579
Docs π
- Add version badge for prefix formats by @jlowin in #537
- Add versioning note to docs by @jlowin in #551
- Bump 2.3.6 references to 2.4.0 by @jlowin in #567
v2.4.0: Config and Conquer
Note: this release includes a backwards-incompatible change to how resources are prefixed when mounted in composed servers. However, it is only backwards-incompatible if users were running tests or manually loading resources by prefixed key; LLMs should not have any issue discovering the new route. See Resource Prefix Formats for more.New Features π
- Allow * Methods and all routes as tools shortcuts by @jlowin in #520
- Improved support for config dicts by @jlowin in #522
- Support creating clients from MCP config dicts, including multi-server clients by @jlowin in #527
- Make resource prefix format configurable by @jlowin in #534
Fixes π
Breaking Changes π«
Docs π
Other Changes π¦Ύ
- Ensure openapi path params are handled properly by @jlowin in #519
- better error when missing lifespan by @zzstoatzz in #521
v2.3.5: Making Progress
New Features π
- support messages in progress notifications by @rickygenhealth in #471
- feat: Add middleware option in server.run by @Maxi91f in #475
- Add lifespan property to app by @jlowin in #483
- Update
fastmcp run
to work with remote servers by @jlowin in #491 - Add FastMCP.as_proxy() by @jlowin in #490
- Infer sse transport from urls containing /sse by @jlowin in #512
- Add progress handler to client by @jlowin in #513
- Store the initialize result on the client by @jlowin in #509
Fixes π
Docs π
- Update transport docs by @jlowin in #458
- update proxy docs + example by @zzstoatzz in #460
- doc(asgi): Change custom route example to PlainTextResponse by @mcw0933 in #477
- Store FastMCP instance on app.state.fastmcp_server by @jlowin in #489
- Improve AGENTS.md overview by @jlowin in #492
- Update release numbers for anticipated version by @jlowin in #516
Other Changes π¦Ύ
- run tests on all PRs by @jlowin in #468
- add null check by @zzstoatzz in #473
- strict typing for
server.py
by @zzstoatzz in #476 - Doc(quickstart): Fix import statements by @mai-nakagawa in #479
- Add labeler by @jlowin in #484
- Fix flaky timeout test by increasing timeout (#474) by @davenpi in #486
- Skipping
test_permission_error
if runner is root. by @ZiadAmerr in #502 - allow passing full uvicorn config by @zzstoatzz in #504
- Skip timeout tests on windows by @jlowin in #514
New Contributors
- @rickygenhealth made their first contribution in #471
- @Maxi91f made their first contribution in #475
- @mcw0933 made their first contribution in #477
- @mai-nakagawa made their first contribution in #479
- @ZiadAmerr made their first contribution in #502
v2.3.4: Error Today, Gone Tomorrow
New Features π
- logging stack trace for easier debugging by @jbkoh in #413
- add missing StreamableHttpTransport in client exports by @yihuang in #408
- Improve error handling for tools and resources by @jlowin in #434
- feat: add support for removing tools from server by @davenpi in #437
- Prune titles from JSONSchemas by @jlowin in #449
- Declare toolsChanged capability for stdio server. by @davenpi in #450
- Improve handling of exceptiongroups when raised in clients by @jlowin in #452
- Add timeout support to client by @jlowin in #455
Fixes π
- Pin to mcp 1.8.1 to resolve callback deadlocks with SHTTP by @jlowin in #427
- Add reprs for OpenAPI objects by @jlowin in #447
- Ensure openapi defs for structured objects are loaded properly by @jlowin in #448
- Ensure tests run against correct python version by @jlowin in #454
- Ensure result is only returned if a new key was found by @jlowin in #456
Docs π
Other Changes π¦Ύ
- Deprecate passing settings to the FastMCP instance by @jlowin in #424
- Add path prefix to test by @jlowin in #432
New Contributors
Full Changelog: v2.3.3β¦v2.3.4v2.3.3: SSE you later
This is a hotfix for a bug introduced in 2.3.2 that broke SSE serversFixes π
Docs π
Other Changes π¦Ύ
Full Changelog: v2.3.2β¦v2.3.3v2.3.2: Stuck in the Middleware With You
New Features π
- Allow users to pass middleware to starlette app constructors by @jlowin in #398
- Deprecate transport-specific methods on FastMCP server by @jlowin in #401
Docs π
Other Changes π¦Ύ
- Adding 23 tests for CLI by @didier-durand in #394
v2.3.1: For Good-nests Sake
This release primarily patches a long-standing bug with nested ASGI SSE servers.Fixes π
- Fix tool result serialization when the tool returns a list by @strawgate in #379
- Ensure FastMCP handles nested SSE and SHTTP apps properly in ASGI frameworks by @jlowin in #390
Docs π
- Update transport docs by @jlowin in #377
- Add llms.txt to docs by @jlowin in #384
- Fixing various text typos by @didier-durand in #385
Other Changes π¦Ύ
- Adding a few tests to Image type by @didier-durand in #387
- Adding tests for TimedCache by @didier-durand in #388
New Contributors
- @didier-durand made their first contribution in #385
v2.3.0: Stream Me Up, Scotty
New Features π
- Add streaming support for HTTP transport by @jlowin in #365
- Support streaming HTTP transport in clients by @jlowin in #366
- Add streaming support to CLI by @jlowin in #367
Fixes π
Docs π
Full Changelog: v2.2.10β¦v2.3.0v2.2.10: Thatβs JSON Bourne
Fixes π
Other Changes π¦Ύ
- Update docs.json by @jlowin in #338
- Add test coverage + tests on 4 examples by @alainivars in #306
New Contributors
- @alainivars made their first contribution in #306
v2.2.9: Str-ing the Pot (Hotfix)
This release is a hotfix for the issue detailed in #330Fixes π
Docs π
Other Changes π¦Ύ
- Update quickstart.mdx example to include import by @discdiver in #329
New Contributors
- @discdiver made their first contribution in #329
v2.2.8: Parse and Recreation
New Features π
- Replace custom parsing with TypeAdapter by @jlowin in #314
- Handle *args/**kwargs appropriately for various components by @jlowin in #317
- Add timeout-graceful-shutdown as a default config for SSE app by @jlowin in #323
- Ensure prompts return descriptions by @jlowin in #325
Fixes π
Docs π
Other Changes π¦Ύ
Full Changelog: v2.2.7β¦v2.2.8v2.2.7: You Auth to Know Better
New Features π
- use pydantic_core.to_json by @jlowin in #290
- Ensure openapi descriptions are included in tool details by @jlowin in #293
- Bump mcp to 1.7.1 by @jlowin in #298
- Add support for tool annotations by @jlowin in #299
- Add auth support by @jlowin in #300
- Add low-level methods to client by @jlowin in #301
- Add method for retrieving current starlette request to FastMCP context by @jlowin in #302
- get_starlette_request β get_http_request by @jlowin in #303
- Support custom Serializer for Tools by @strawgate in #308
- Support proxy mount by @jlowin in #309
Other Changes π¦Ύ
- Improve context injection type checks by @jlowin in #291
- add readme to smarthome example by @zzstoatzz in #294
v2.2.6: The REST is History
New Features π
- Added feature : Load MCP server using config by @sandipan1 in #260
- small typing fixes by @zzstoatzz in #237
- Expose configurable timeout for OpenAPI by @jlowin in #279
- Lower websockets pin for compatibility by @jlowin in #286
- Improve OpenAPI param handling by @jlowin in #287
Fixes π
- Ensure openapi tool responses are properly converted by @jlowin in #283
- Fix OpenAPI examples by @jlowin in #285
- Fix client docs for advanced features, add tests for logging by @jlowin in #284
Other Changes π¦Ύ
- add testing doc by @jlowin in #264
- #267 Fix openapi template resource to support multiple path parameters by @jeger-at in #278
New Contributors
- @sandipan1 made their first contribution in #260
- @jeger-at made their first contribution in #278
v2.2.5: Context Switching
New Features π
- Add tests for tool return types; improve serialization behavior by @jlowin in #262
- Support context injection in resources, templates, and prompts (like tools) by @jlowin in #263
Docs π
- Update wildcards to 2.2.4 by @jlowin in #257
- Update note in templates docs by @jlowin in #258
- Significant documentation and test expansion for tool input types by @jlowin in #261
v2.2.4: The Wild Side, Actually
The wildcard URI templates exposed in v2.2.3 were blocked by a server-level check which is removed in this release.New Features π
Fixes π
- fix: unintended type convert by @cutekibry in #252
- Ensure openapi resources return valid responses by @jlowin in #254
- Ensure servers expose template wildcards by @jlowin in #256
Docs π
- Update README.md Grammar error by @TechWithTy in #249
Other Changes π¦Ύ
New Contributors
- @TechWithTy made their first contribution in #249
- @cutekibry made their first contribution in #252
v2.2.3: The Wild Side
New Features π
Docs π
- Indicate that Image class is for returns by @jlowin in #242
- Update mermaid diagram by @jlowin in #243
Other Changes π¦Ύ
Full Changelog: v2.2.2β¦v2.2.3v2.2.2: Prompt and Circumstance
New Features π
Fixes π
Docs π
Other Changes π¦Ύ
Full Changelog: v2.2.1β¦v2.2.2v2.2.1: Template for Success
New Features π
Fixes π
Docs π
Other Changes π¦Ύ
Full Changelog: v2.2.0β¦v2.2.1v2.2.0: Compose Yourself
New Features π
- Add support for mounting FastMCP servers by @jlowin in #175
- Add support for duplicate behavior == ignore by @jlowin in #169
Breaking Changes π«
Docs π
Other Changes π¦Ύ
- Add transport kwargs for mcp.run() and fastmcp run by @jlowin in #161
- Allow resource templates to have optional / excluded arguments by @jlowin in #164
- Update resources.mdx by @jlowin in #165
New Contributors
- @kongqi404 made their first contribution in #181
v2.1.2: Copy That, Good Buddy
The main improvement in this release is a fix that allows FastAPI / OpenAPI-generated servers to be mounted as sub-servers.Fixes π
Docs π
Other Changes π¦Ύ
- Update README.md by @jlowin in #149
- Only apply log config to FastMCP loggers by @jlowin in #155
- Update pyproject.toml by @jlowin in #156
v2.1.1: Doc Holiday
FastMCPβs docs are now available at gofastmcp.com.Docs π
- Add docs by @jlowin in #136
- Add docs link to readme by @jlowin in #137
- Minor docs updates by @jlowin in #138
Fixes π
- fix branch name in example by @zzstoatzz in #140
Other Changes π¦Ύ
- smart home example by @zzstoatzz in #115
- Remove mac os tests by @jlowin in #142
- Expand support for various method interactions by @jlowin in #143
- Update docs and add_resource_fn by @jlowin in #144
- Update description by @jlowin in #145
- Support openapi 3.0 and 3.1 by @jlowin in #147
v2.1.0: Tag, Youβre It
The primary motivation for this release is the fix in #128 for Claude desktop compatibility, but the primary new feature of this release is per-object tags. Currently these are for bookkeeping only but will become useful in future releases.New Features π
- Add tags for all core MCP objects by @jlowin in #121
- Ensure that openapi tags are transferred to MCP objects by @jlowin in #124
Fixes π
- Change default mounted tool separator from / to _ by @jlowin in #128
- Enter mounted app lifespans by @jlowin in #129
- Fix CLI that called mcp instead of fastmcp by @jlowin in #128
Breaking Changes π«
- Changed configuration for duplicate resources/tools/prompts by @jlowin in #121
- Improve client return types by @jlowin in #123
Other Changes π¦Ύ
Full Changelog: v2.0.0β¦v2.1.0v2.0.0: Second to None
New Features π
- Support mounting FastMCP instances as sub-MCPs by @jlowin in #99
- Add in-memory client for calling FastMCP servers (and tests) by @jlowin in #100
- Add MCP proxy server by @jlowin in #105
- Update FastMCP for upstream changes by @jlowin in #107
- Generate FastMCP servers from OpenAPI specs and FastAPI by @jlowin in #110
- Reorganize all client / transports by @jlowin in #111
- Add sampling and roots by @jlowin in #117
Fixes π
Other Changes π¦Ύ
- Add back FastMCP CLI by @jlowin in #108
- Update Readme for v2 by @jlowin in #112
- fix deprecation warnings by @zzstoatzz in #113
- Readme by @jlowin in #118
- FastMCP 2.0 by @jlowin in #119
v1.0: Itβs Official
This release commemorates FastMCP 1.0, which is included in the official Model Context Protocol SDK:mcp
.Docs π
Other Changes π¦Ύ
- fix: use Mount instead of Route for SSE message handling by @samihamine in #77
New Contributors
- @samihamine made their first contribution in #77
v0.4.1: String Theory
Fixes π
Docs π
- patch: Update pyproject.toml license by @leonkozlowski in #67
Other Changes π¦Ύ
- Avoid new try_eval_type unavailable with older pydantic by @jurasofish in #57
- Decorator typing by @jurasofish in #56
New Contributors
- @leonkozlowski made their first contribution in #67
v0.4.0: Nice to MIT You
This is a relatively small release in terms of features, but the version is bumped to 0.4 to reflect that the code is being relicensed from Apache 2.0 to MIT. This is to facilitate FastMCPβs inclusion in the official MCP SDK.New Features π
- Add pyright + tests by @jlowin in #52
- add pgvector memory example by @zzstoatzz in #49
Fixes π
Docs π
Other Changes π¦Ύ
- fix warning and flake by @zzstoatzz in #47
New Contributors
Full Changelog: v0.3.5β¦v0.4.0v0.3.5: Windows of Opportunity
This release is highlighted by the ability to handle complex JSON objects as MCP inputs and improved Windows compatibility.New Features π
- Set up multiple os tests by @jlowin in #44
- Changes to accommodate windows users. by @justjoehere in #42
- Handle complex inputs by @jurasofish in #31
Docs π
Other Changes π¦Ύ
- Additional Windows Fixes for Dev running and for importing modules in a server by @justjoehere in #43
New Contributors
- @justjoehere made their first contribution in #42
- @jurasofish made their first contribution in #31
v0.3.4: URLβs Well That Ends Well
Fixes π
- Handle missing config file when installing by @jlowin in #37
- Remove BaseURL reference and use AnyURL by @jlowin in #40
v0.3.3: Dependence Day
New Features π
- Surge example by @zzstoatzz in #29
- Support Python dependencies in Server by @jlowin in #34
Docs π
- add
Contributing
section to README by @zzstoatzz in #32
v0.3.1
New Features π
- Update README.md by @jlowin in #23
- add rich handler and dotenv loading for settings by @zzstoatzz in #22
- print exception when server canβt start by @jlowin in #25
Docs π
Other Changes π¦Ύ
Full Changelog: v0.3.0β¦v0.3.1v0.3.0: Prompt and Circumstance
New Features π
- Update README by @jlowin in #3
- Make log levels strings by @jlowin in #4
- Make content method a function by @jlowin in #5
- Add template support by @jlowin in #6
- Refactor resources module by @jlowin in #7
- Clean up cli imports by @jlowin in #8
- Prepare to list templates by @jlowin in #11
- Move image to separate module by @jlowin in #9
- Add support for request context, progress, logging, etc. by @jlowin in #12
- Add context tests and better runtime loads by @jlowin in #13
- Refactor tools + resourcemanager by @jlowin in #14
- func β fn everywhere by @jlowin in #15
- Add support for prompts by @jlowin in #16
- Create LICENSE by @jlowin in #18
- Update cli file spec by @jlowin in #19
- Update readmeUpdate README by @jlowin in #20
- Use hatchling for version by @jlowin in #21
Other Changes π¦Ύ
- Add echo server by @jlowin in #1
- Add github workflows by @jlowin in #2
- typing updates by @zzstoatzz in #17
New Contributors
- @jlowin made their first contribution in #1
- @zzstoatzz made their first contribution in #17