|
from contextlib import asynccontextmanager |
|
from dataclasses import dataclass |
|
from typing import AsyncIterator |
|
|
|
import mariadb |
|
from mcp.server.fastmcp import FastMCP |
|
|
|
from mcp_server_mariadb_vector.settings import DatabaseSettings |
|
|
|
|
|
@dataclass |
|
class AppContext: |
|
conn: mariadb.Connection |
|
|
|
|
|
@asynccontextmanager |
|
async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]: |
|
"""Open a MariaDB connection for the duration of the FastMCP session.""" |
|
|
|
cfg = DatabaseSettings() |
|
conn = mariadb.connect( |
|
host=cfg.host, |
|
port=cfg.port, |
|
user=cfg.user, |
|
password=cfg.password, |
|
database=cfg.database, |
|
) |
|
conn.autocommit = True |
|
|
|
try: |
|
yield AppContext(conn=conn) |
|
finally: |
|
conn.close() |
|
|