From 0c03291512106c669d948fe54ba86dcb2f1338dc Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Tue, 23 Sep 2025 05:21:09 -0600 Subject: [PATCH] fix(server): ensure lifespan uses async context manager --- mcp_plex/server.py | 8 ++++++-- pyproject.toml | 2 +- tests/test_server.py | 9 +++++++++ uv.lock | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/mcp_plex/server.py b/mcp_plex/server.py index d3426db..b694404 100644 --- a/mcp_plex/server.py +++ b/mcp_plex/server.py @@ -5,6 +5,7 @@ import asyncio import inspect import json +from contextlib import asynccontextmanager from typing import Annotated, Any, Callable from fastapi import FastAPI @@ -55,9 +56,12 @@ def __init__( https=self.settings.qdrant_https, ) + @asynccontextmanager async def _lifespan(app: FastMCP): # noqa: ARG001 - yield - await self.close() + try: + yield + finally: + await self.close() super().__init__(lifespan=_lifespan) self._reranker: CrossEncoder | None = None diff --git a/pyproject.toml b/pyproject.toml index 45c2b3f..b70b1a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mcp-plex" -version = "0.26.25" +version = "0.26.26" description = "Plex-Oriented Model Context Protocol Server" requires-python = ">=3.11,<3.13" diff --git a/tests/test_server.py b/tests/test_server.py index ad1c7c7..47ec852 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -204,3 +204,12 @@ def test_rest_endpoints(monkeypatch): resp = client.get("/rest") assert resp.status_code == 200 + + +def test_server_lifespan_context(monkeypatch): + with _load_server(monkeypatch) as module: + async def _lifespan() -> None: + async with module.server._mcp_server.lifespan(module.server): + pass + + asyncio.run(_lifespan()) diff --git a/uv.lock b/uv.lock index 2958ce4..a2ecf10 100644 --- a/uv.lock +++ b/uv.lock @@ -690,7 +690,7 @@ wheels = [ [[package]] name = "mcp-plex" -version = "0.26.25" +version = "0.26.26" source = { editable = "." } dependencies = [ { name = "fastapi" },