github jlowin/fastmcp v2.12.0
v2.12.0: Auth to the Races

latest releases: v2.14.5, v2.14.4, v3.0.0b1...
5 months ago

FastMCP 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 to ty 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 🐞

Breaking Changes 🛫

  • Enhance inspect command with structured output and format options by @jlowin in #1481

Docs 📚

Dependencies 📦

Other Changes 🦾

New Contributors

Full Changelog: v2.11.3...v2.12.0

Don't miss a new fastmcp release

NewReleases is sending notifications on new releases.