OpenAPI Integration
Generate MCP servers from OpenAPI specs and FastAPI apps
New in version:Β 2.0.0
FastMCP can automatically generate an MCP server from an OpenAPI specification or FastAPI app. Instead of manually creating tools and resources, you provide an OpenAPI spec and FastMCP intelligently converts your API endpoints into the appropriate MCP components.
Quick Start
To convert an OpenAPI specification to an MCP server, you can use the FastMCP.from_openapi
class method. This method takes an OpenAPI specification and an async HTTPX client that can be used to make requests to the API, and returns an MCP server.
Hereβs an example:
Thatβs it! Your entire API is now available as an MCP server. Clients can discover and interact with your API endpoints through the MCP protocol, with full schema validation and type safety.
Route Mapping
FastMCP analyzes your API specification and automatically creates MCP components based on HTTP semantics and REST conventions. By default, the following rules are used to determine what MCP component to create for each route:
OpenAPI Route | Example | MCP Component |
---|---|---|
GET with path params | GET /users/{id} | Resource Template |
GET without path params | GET /stats | Resource |
POST , PUT , PATCH , DELETE , etc. | POST /users | Tool |
Interally, FastMCP uses an ordered list of RouteMap
objects to determine how to map OpenAPI routes to various MCP component types.
Each RouteMap
specifies a combination of methods, patterns, and tags, as well as a corresponding MCP component type. Each OpenAPI route is checked against each RouteMap
in order, and the first one that matches every criteria is used to determine its converted MCP type. A special type, EXCLUDE
, can be used to exclude routes from the MCP server entirely.
- Methods: HTTP methods to match (e.g.
["GET", "POST"]
or"*"
for all) - Pattern: Regex pattern to match the route path (e.g.
r"^/users/.*"
orr".*"
for all) - Tags: A set of OpenAPI tags that must all be present. An empty set (
{}
) means no tag filtering, so the route matches regardless of its tags. - MCP type: What MCP component type to create (
TOOL
,RESOURCE
,RESOURCE_TEMPLATE
, orEXCLUDE
)
To illustrate this in practice, here are FastMCPβs default rules as a list of RouteMap
objects:
Custom Route Maps
When creating your FastMCP server, you can customize routing behavior by providing your own list of RouteMap
objects. Your custom maps are processed before the default route maps, and routes will be assigned to the first matching custom map.
For example, the following simple rule will treat every OpenAPI route as a tool:
Here is a more complete example that uses custom route maps to convert all GET
endpoints under /analytics/
to tools while excluding all admin endpoints and all routes tagged βinternalβ. All other routes will be handled by the default rules:
The default route maps are always applied after your custom maps, so you do not have to create route maps for every possible route.
Excluding Routes
To exclude routes from the MCP server, use a route map to assign them to MCPType.EXCLUDE
.
You can use this to remove sensitive or internal routes by targeting them specifically:
Or you can use a catch-all rule to exclude everything that your maps donβt handle explicitly:
Using a catch-all exclusion rule will prevent the default route mappings from being applied, since it will match every remaining route. This is useful if you want to explicitly allow-list certain routes.
Advanced Route Mapping
New in version:Β 2.5.0
For advanced use cases that require more complex logic, you can provide a route_map_fn
callable. After the route map logic is applied, this function is called on each matched route and its assigned MCP component type. It can optionally return a different component type to override the mapped assignment. If it returns None
, the assigned type is used.
In addition to more precise targeting of methods, patterns, and tags, this function can access any additional OpenAPI metadata about the route.
The route_map_fn
is called on routes that matched MCPType.EXCLUDE
in your custom maps, giving you an opportunity to override the exclusion.
Customizing MCP Components
Component Names
New in version:Β 2.5.0
FastMCP automatically generates names for MCP components based on the OpenAPI specification. By default, it uses the operationId
from your OpenAPI spec, up to the first double underscore (__
).
All component names are automatically:
- Slugified: Spaces and special characters are converted to underscores or removed
- Truncated: Limited to 56 characters maximum to ensure compatibility
- Unique: If multiple components have the same name, a number is automatically appended to make them unique
For more control over component names, you can provide an mcp_names
dictionary that maps operationId
values to your desired names. The operationId
must be exactly as it appears in the OpenAPI spec. The provided name will always be slugified and truncated.
Any operationId
not found in mcp_names
will use the default strategy (operationId up to the first __
).
Advanced Customization
New in version:Β 2.5.0
By default, FastMCP creates MCP components using a variety of metadata from the OpenAPI spec, such as incorporating the OpenAPI description into the MCP component description.
At times you may want to modify those MCP components in a variety of ways, such as adding LLM-specific instructions or tags. For fine-grained customization, you can provide a mcp_component_fn
when creating the MCP server. After each MCP component has been created, this function is called on it and has the opportunity to modify it in-place.
Your mcp_component_fn
is expected to modify the component in-place, not to return a new component. The result of the function is ignored.
Request Parameter Handling
FastMCP intelligently handles different types of parameters in OpenAPI requests:
Query Parameters
By default, FastMCP only includes query parameters that have non-empty values. Parameters with None
values or empty strings are automatically filtered out.
Path Parameters
Path parameters are typically required by REST APIs. FastMCP:
- Filters out
None
values - Validates that all required path parameters are provided
- Raises clear errors for missing required parameters
Array Parameters
FastMCP handles array parameters according to OpenAPI specifications:
- Query arrays: Serialized based on the
explode
parameter (default:True
) - Path arrays: Serialized as comma-separated values (OpenAPI βsimpleβ style)
Headers
Header parameters are automatically converted to strings and included in the HTTP request.
Auth
If your API requires authentication, configure it on the HTTP client before creating the MCP server:
Timeouts
Set a timeout for all API requests:
FastAPI Integration
New in version:Β 2.0.0
FastMCP can directly convert FastAPI applications into MCP servers by extracting their OpenAPI specifications:
FastMCP does not include FastAPI as a dependency; you must install it separately to use this integration.
Note that operation ids are optional, but are used to create component names. You can also provide custom names, just like with OpenAPI specs.
FastMCP servers are not FastAPI apps, even when created from one. To learn how to deploy them as an ASGI app, see the ASGI Integration documentation.
FastAPI Configuration
All OpenAPI integration features work with FastAPI apps:
FastAPI Benefits
- Zero code duplication: Reuse existing FastAPI endpoints
- Schema inheritance: Pydantic models and validation are preserved
- ASGI transport: Direct in-memory communication (no HTTP overhead)
- Full FastAPI features: Dependencies, middleware, authentication all work