- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.7k
Closed
Description
Describe the bug
I attempted to use AppContext in my project by utilizing the sample code provided in the README.md. However, it raised the following type error:
error: Cannot access attribute "db" for class "None"
To Reproduce
Below is the sample code taken from the README.md.
from contextlib import asynccontextmanager
from collections.abc import AsyncIterator
from dataclasses import dataclass
from mcp.server.fastmcp import Context, FastMCP
class Database:   # Replace with your actual DB type
    @classmethod
    async def connect(cls):
        return cls()
    async def disconnect(self):
        pass
    def query(self):
        return "Hello, World!"
# Create a named server
mcp = FastMCP("My App")
@dataclass
class AppContext:
    db: Database
@asynccontextmanager
async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]:
    """Manage application lifecycle with type-safe context"""
    # Initialize on startup
    db = await Database.connect()
    try:
        yield AppContext(db=db)
    finally:
        # Cleanup on shutdown
        await db.disconnect()
# Pass lifespan to server
mcp = FastMCP("My App", lifespan=app_lifespan)
# Access type-safe lifespan context in tools
@mcp.tool()
def query_db(ctx: Context) -> str:
    """Tool that uses initialized resources"""
    db = ctx.request_context.lifespan_context.db
    return db.query()Store the code above in a file named readme.py and run the following command:
uv run pyright readme.py
Expected behavior
The type check should pass without any errors.
Desktop (please complete the following information):
- OS: macOS 15.3.2
- Browser N/A
- Version N/A
Metadata
Metadata
Assignees
Labels
No labels