v2.8.0
2024-06-10

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 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
2024-06-08

v2.7.1: The Bearer Necessities

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

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
2024-06-05

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 🐞

Happily, this release DOES permit the use of β€œnaked” decorators to align with Pythonic practice:

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

Full Changelog: v2.6.2…v2.7.0

v2.6.1
2024-06-03

v2.6.1: Blast Auth (second ignition)

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

Docs πŸ“š

Other Changes 🦾

New Contributors

Full Changelog: v2.6.0…v2.6.1

v2.6.0
2024-06-02

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

Full Changelog: v2.5.2…v2.6.0

v2.5.2
2024-05-29

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 πŸ“š

  • 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

v2.5.1
2024-05-24

v2.5.1: Route Awakening (Part 2)

Fixes 🐞

  • Ensure content-length is always stripped from client headers by @jlowin in #589

Docs πŸ“š

Full Changelog: v2.5.0…v2.5.1

v2.5.0
2024-05-24

v2.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 πŸ“š

Full Changelog: v2.4.0…v2.5.0

v2.4.0
2024-05-21

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 🐞

  • Avoid hanging on initializing server session by @jlowin in #523

Breaking Changes πŸ›«

  • Remove customizable separators; improve resource separator by @jlowin in #526

Docs πŸ“š

Other Changes 🦾

  • Ensure openapi path params are handled properly by @jlowin in #519
  • better error when missing lifespan by @zzstoatzz in #521

Full Changelog: v2.3.5…v2.4.0

v2.3.5
2024-05-20

v2.3.5: Making Progress

New Features πŸŽ‰

Fixes 🐞

  • Remove patch and use upstream SSEServerTransport by @jlowin in #425

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 🦾

New Contributors

Full Changelog: v2.3.4…v2.3.5

v2.3.4
2024-05-15

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 πŸ“š

  • Add documentation for tool removal by @jlowin in #440

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

v2.3.3
2024-05-10

v2.3.3: SSE you later

This is a hotfix for a bug introduced in 2.3.2 that broke SSE servers

Fixes 🐞

  • Fix bug that sets message path and sse path to same value by @jlowin in #405

Docs πŸ“š

Other Changes 🦾

  • Add test for no prefix when importing by @jlowin in #404

Full Changelog: v2.3.2…v2.3.3

v2.3.2
2024-05-10

v2.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 🦾

Full Changelog: v2.3.1…v2.3.2

v2.3.1
2024-05-09

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 πŸ“š

Other Changes 🦾

New Contributors

Full Changelog: v2.3.0…v2.3.1

v2.3.0
2024-05-08

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 🐞

  • Fix streaming transport initialization by @jlowin in #368

Docs πŸ“š

  • Update transport documentation for streaming support by @jlowin in #369

Full Changelog: v2.2.10…v2.3.0

v2.2.10
2024-05-06

v2.2.10: That’s JSON Bourne

Fixes 🐞

Other Changes 🦾

New Contributors

Full Changelog: v2.2.9…v2.2.10

v2.2.9
2024-05-06

v2.2.9: Str-ing the Pot (Hotfix)

This release is a hotfix for the issue detailed in #330

Fixes 🐞

Docs πŸ“š

Other Changes 🦾

  • Update quickstart.mdx example to include import by @discdiver in #329

New Contributors

Full Changelog: v2.2.8…v2.2.9

v2.2.8
2024-05-05

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 🐞

  • Ensure that tool serialization has a graceful fallback by @jlowin in #310

Docs πŸ“š

Other Changes 🦾

Full Changelog: v2.2.7…v2.2.8

v2.2.7
2024-05-03

v2.2.7: You Auth to Know Better

New Features πŸŽ‰

Other Changes 🦾

Full Changelog: v2.2.6…v2.2.7

v2.2.6
2024-04-30

v2.2.6: The REST is History

New Features πŸŽ‰

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

Full Changelog: v2.2.5…v2.2.6

v2.2.5
2024-04-26

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

Full Changelog: v2.2.4…v2.2.5

v2.2.4
2024-04-25

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 πŸŽ‰

  • Allow customization of inspector proxy port, ui port, and version by @jlowin in #253

Fixes 🐞

Docs πŸ“š

Other Changes 🦾

New Contributors

Full Changelog: v2.2.3…v2.2.4

v2.2.3
2024-04-25

v2.2.3: The Wild Side

New Features πŸŽ‰

  • Add wildcard params for resource templates by @jlowin in #246

Docs πŸ“š

Other Changes 🦾

Full Changelog: v2.2.2…v2.2.3

v2.2.2
2024-04-24

v2.2.2: Prompt and Circumstance

New Features πŸŽ‰

Fixes 🐞

  • Ensure that resource templates are properly exposed by @jlowin in #238

Docs πŸ“š

Other Changes 🦾

Full Changelog: v2.2.1…v2.2.2

v2.2.1
2024-04-23

v2.2.1: Template for Success

New Features πŸŽ‰

Fixes 🐞

  • Ensure that resource templates are properly exposed by @jlowin in #231

Docs πŸ“š

  • Update docs for resource templates by @jlowin in #232

Other Changes 🦾

Full Changelog: v2.2.0…v2.2.1

v2.2.0
2024-04-22

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

Full Changelog: v2.1.2…v2.2.0

v2.1.2
2024-04-14

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 🐞

  • Ensure objects are copied properly and test mounting fastapi by @jlowin in #153

Docs πŸ“š

Other Changes 🦾

Full Changelog: v2.1.1…v2.1.2

v2.1.1
2024-04-14

v2.1.1: Doc Holiday

FastMCP’s docs are now available at gofastmcp.com.

Docs πŸ“š

Fixes 🐞

Other Changes 🦾

Full Changelog: v2.1.0…v2.1.1

v2.1.0
2024-04-13

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

v2.0.0
2024-04-11

v2.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 🐞

  • Fix bug with tools that return lists by @jlowin in #116

Other Changes 🦾

Full Changelog: v1.0…v2.0.0

v1.0
2024-04-11

v1.0: It’s Official

This release commemorates FastMCP 1.0, which is included in the official Model Context Protocol SDK:

from mcp.server.fastmcp import FastMCP

To the best of my knowledge, v1 is identical to the upstream version included with mcp.

Docs πŸ“š

  • Update readme to redirect to the official SDK by @jlowin in #79

Other Changes 🦾

  • fix: use Mount instead of Route for SSE message handling by @samihamine in #77

New Contributors

Full Changelog: v0.4.1…v1.0

v0.4.1
2024-12-09

v0.4.1: String Theory

Fixes 🐞

  • fix: handle strings containing numbers correctly by @sd2k in #63

Docs πŸ“š

Other Changes 🦾

New Contributors

Full Changelog: v0.4.0…v0.4.1

v0.4.0
2024-12-05

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 πŸŽ‰

Fixes 🐞

  • fix: use stderr for logging by @sd2k in #51

Docs πŸ“š

Other Changes 🦾

New Contributors

  • @sd2k made their first contribution in #51

Full Changelog: v0.3.5…v0.4.0

v0.3.5
2024-12-03

v0.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 πŸŽ‰

Docs πŸ“š

  • Make AI labeler more conservative by @jlowin in #46

Other Changes 🦾

  • Additional Windows Fixes for Dev running and for importing modules in a server by @justjoehere in #43

New Contributors

Full Changelog: v0.3.4…v0.3.5

v0.3.4
2024-12-02

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

Full Changelog: v0.3.3…v0.3.4

v0.3.3
2024-12-02

v0.3.3: Dependence Day

New Features πŸŽ‰

Docs πŸ“š

Full Changelog: v0.3.2…v0.3.3

v0.3.2
Green with ENVy

v0.3.2: Green with ENVy

New Features πŸŽ‰

  • Support env vars when installing by @jlowin in #27

Docs πŸ“š

Full Changelog: v0.3.1…v0.3.2

v0.3.1
2024-12-01

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

v0.3.0
2024-12-01

v0.3.0: Prompt and Circumstance

New Features πŸŽ‰

Other Changes 🦾

New Contributors

Full Changelog: v0.2.0…v0.3.0

v0.2.0
2024-11-30
v0.1.0
2024-11-30

v0.1.0

The very first release of FastMCP! πŸŽ‰

Full Changelog: Initial commits