Skip to content

Releases: jlowin/fastmcp

v2.9.2: Safety Pin

26 Jun 15:02
2dcd6e1
Compare
Choose a tag to compare

This is a patch release to pin mcp below 1.10, which includes changes related to the 6/18/2025 MCP spec update and could potentially break functionality for some FastMCP users. Those will be incorporated into FastMCP 2.10

What's Changed

Docs 📚

Dependencies 📦

Full Changelog: v2.9.1...v2.9.2

v2.9.1: Call Me Maybe

26 Jun 13:39
3de57fa
Compare
Choose a tag to compare

The headline of this release is the introduction of change notifications for tools/resources/prompts, as well as flexible client-side handling of arbitrary messages.

What's Changed

New Features 🎉

  • Add automatic MCP list change notifications and client message handling by @jlowin in #939

Enhancements 🔧

  • Add debug logging to bearer token authentication by @jlowin in #952

Fixes 🐞

  • Fix duplicate error logging in exception handlers by @jlowin in #938

Docs 📚

Examples & Contrib 💡

  • add create_thread tool to bsky MCP server by @zzstoatzz in #927
  • fix(examples): update mount_example.py to work with current fastmcp API by @rajephon in #957

Other Changes 🦾

  • Fix parameter location enum handling in OpenAPI parser by @jlowin in #953
  • Fix external schema reference handling in OpenAPI parser by @jlowin in #954

New Contributors

Full Changelog: v2.9.0...v2.9.1

v2.9.0: Stuck in the Middleware With You

23 Jun 14:35
e117fa0
Compare
Choose a tag to compare

FastMCP 2.9 introduces two important features that push beyond the basic MCP protocol. MCP Middleware brings a flexible middleware system for intercepting and controlling server operations - think authentication, logging, rate limiting, and custom business logic without touching core protocol code. Server-side type conversion solves a major developer pain point: while MCP requires string arguments, your functions can now work with native Python types like lists and dictionaries, with automatic conversion handling the complexity.

These features transform FastMCP from a simple protocol implementation into a powerful framework for building sophisticated MCP applications. Combined with the new File utility for binary data and improvements to authentication and serialization, this release makes FastMCP significantly more flexible and developer-friendly while maintaining full protocol compliance.

What's Changed

New Features 🎉

  • Add File utility for wrapping 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 🔧

Fixes 🐞

  • fix: report_progress missing passing related_request_id causes notifications not working in streaming-http 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 📚

Examples & Contrib 💡

  • contrib.mcp_mixin: add support for enabled, mcp_tool: annotations, excl. parm, serializer 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

Full Changelog: v2.8.1...v2.9.0

v2.8.1: Sound Judgement

15 Jun 01:24
ab2ad0b
Compare
Choose a tag to compare

2.8.1 introduces audio support, as well as minor fixes and updates for deprecated features.

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 we handle false http kwargs correctly; removed unused kwarg by @jlowin in #804
  • Bump mcp 1.9.4 by @jlowin in #835

Docs 📚

Other Changes 🦾

Full Changelog: v2.8.0...v2.8.1

v2.8.0: Transform and Roll Out

11 Jun 01:31
eee0159
Compare
Choose a tag to compare

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 to Tools 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 🛫

Docs 📚

Other Changes 🦾

New Contributors

Full Changelog: v2.7.1...v2.8.0

v2.7.1: The Bearer Necessities

08 Jun 01:49
9b97637
Compare
Choose a tag to compare

This release primarily contains a fix for parsing string tokens that are provided to FastMCP clients.

What's Changed

New Features 🎉

  • Respect cache setting, set default to 1 second by @jlowin in #747

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 📚

Other Changes 🦾

New Contributors

Full Changelog: v2.7.0...v2.7.1

v2.7.0: Pare Programming

05 Jun 19:03
23e1d1e
Compare
Choose a tag to compare

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. Examples include:

  • 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

Happily, this release DOES permit the use of "naked" decorators to align with Pythonic practice:

@mcp.tool
def my_tool():
    ...

What's Changed

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 🐞

Breaking Changes 🛫

  • Deprecate passing functions to the server in favor of core objects by @jlowin in #705
  • Remove websockets dependency by @jlowin in #726
  • Return objects from FastMCP decorators by @jlowin in #727

Docs 📚

New Contributors

Full Changelog: v2.6.1...v2.7.0

v2.6.1: Blast Auth (second ignition)

03 Jun 13:30
a7ce4a8
Compare
Choose a tag to compare

This is a patch release to restore py.typed in #686.

What's Changed

Docs 📚

Other Changes 🦾

New Contributors

Full Changelog: v2.6.0...v2.6.1

v2.6.0: Blast Auth

02 Jun 22:21
faa30de
Compare
Choose a tag to compare

What's Changed

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

Full Changelog: v2.5.2...v2.6.0

v2.5.2: Stayin' Alive

29 May 18:11
b3d0f5b
Compare
Choose a tag to compare

What's Changed

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 📚

  • Add notes about uv and claude desktop by @jlowin in #597

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.2