Skip to main content
As your application grows, you’ll want to split it into focused servers — one for weather, one for calendar, one for admin — and combine them into a single server that clients connect to. That’s what mount() does. When you mount a server, all its tools, resources, and prompts become available through the parent. The connection is live: add a tool to the child after mounting, and it’s immediately visible through the parent.

Mounting External Servers

Mount remote HTTP servers or subprocess-based MCP servers using create_proxy():

Mounting npm/uvx Packages

For npm packages or Python tools, use the config dict format:
Or use explicit transport classes:
For advanced configuration, see Proxying.

Namespacing

When mounting multiple servers, use namespaces to avoid naming conflicts:

How Namespacing Works

Namespacing uses transforms under the hood.

Dynamic Composition

Because mount() creates a live link, you can add components to a child server after mounting and they’ll be immediately available through the parent:

Protocol Extensions

When you mount a local FastMCP server, its provider-bundled extensions follow the components to the parent. Extensions that opt into automatic registration give the parent the capabilities and request methods its clients need. Configure an extension explicitly on the parent to choose its settings for all mounted providers. Compose providers that need new extensions before the parent starts. Once extension lifespans have begun, additional providers can use extensions already registered on the root. The startup rules also apply through nested mounts and aggregates.

Tag Filtering

Parent server tag filters apply recursively to mounted servers:

Performance Considerations

Operations like list_tools() on the parent are affected by the performance of all mounted servers. This is particularly noticeable with:
  • HTTP-based mounted servers (300-400ms vs 1-2ms for local tools)
  • Mounted servers with slow initialization
  • Deep mounting hierarchies
If low latency is critical, consider implementing caching strategies or limiting mounting depth.

Custom Routes

Custom HTTP routes defined with @server.custom_route() are also forwarded when mounting:

Conflict Resolution

When mounting multiple servers with the same namespace (or no namespace), FastMCP queries all mounted providers for a requested component and returns the highest matching version. If two unversioned components (or two equal versions) use the same identifier, the provider registered first wins.