mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 07:09:11 +02:00
101 lines
2.9 KiB
Text
101 lines
2.9 KiB
Text
---
|
|
title: lifespan
|
|
sidebarTitle: lifespan
|
|
---
|
|
|
|
# `fastmcp.server.lifespan`
|
|
|
|
|
|
Composable lifespans for FastMCP servers.
|
|
|
|
This module provides a `@lifespan` decorator for creating composable server lifespans
|
|
that can be combined using the `|` operator.
|
|
|
|
Example:
|
|
```python
|
|
from fastmcp import FastMCP
|
|
from fastmcp.server.lifespan import lifespan
|
|
|
|
@lifespan
|
|
async def db_lifespan(server):
|
|
conn = await connect_db()
|
|
yield {"db": conn}
|
|
await conn.close()
|
|
|
|
@lifespan
|
|
async def cache_lifespan(server):
|
|
cache = await connect_cache()
|
|
yield {"cache": cache}
|
|
await cache.close()
|
|
|
|
mcp = FastMCP("server", lifespan=db_lifespan | cache_lifespan)
|
|
```
|
|
|
|
To compose with existing `@asynccontextmanager` lifespans, wrap them explicitly:
|
|
|
|
```python
|
|
from contextlib import asynccontextmanager
|
|
from fastmcp.server.lifespan import lifespan, ContextManagerLifespan
|
|
|
|
@asynccontextmanager
|
|
async def legacy_lifespan(server):
|
|
yield {"legacy": True}
|
|
|
|
@lifespan
|
|
async def new_lifespan(server):
|
|
yield {"new": True}
|
|
|
|
# Wrap the legacy lifespan explicitly
|
|
combined = ContextManagerLifespan(legacy_lifespan) | new_lifespan
|
|
```
|
|
|
|
|
|
## Functions
|
|
|
|
### `lifespan` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/server/lifespan.py#L172" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
lifespan(fn: LifespanFn) -> Lifespan
|
|
```
|
|
|
|
|
|
Decorator to create a composable lifespan.
|
|
|
|
Use this decorator on an async generator function to make it composable
|
|
with other lifespans using the `|` operator.
|
|
|
|
**Args:**
|
|
- `fn`: An async generator function that takes a FastMCP server and yields
|
|
a dict for the lifespan context.
|
|
|
|
**Returns:**
|
|
- A composable Lifespan wrapper.
|
|
|
|
|
|
## Classes
|
|
|
|
### `Lifespan` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/server/lifespan.py#L61" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Composable lifespan wrapper.
|
|
|
|
Wraps an async generator function and enables composition via the `|` operator.
|
|
The wrapped function should yield a dict that becomes part of the lifespan context.
|
|
|
|
|
|
### `ContextManagerLifespan` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/server/lifespan.py#L110" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Lifespan wrapper for already-wrapped context manager functions.
|
|
|
|
Use this for functions already decorated with @asynccontextmanager.
|
|
|
|
|
|
### `ComposedLifespan` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/server/lifespan.py#L137" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Two lifespans composed together.
|
|
|
|
Enters the left lifespan first, then the right. Exits in reverse order.
|
|
Results are shallow-merged into a single dict.
|
|
|