From ca5cb4cb67b673e3d5acbc716f7c1cddd9a2fd20 Mon Sep 17 00:00:00 2001 From: pchoudhury22 Date: Wed, 17 Sep 2025 19:20:41 +0530 Subject: [PATCH] fix(fastmcp): propagate mimeType in resource template list (#1186) Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com> --- src/mcp/server/fastmcp/server.py | 1 + tests/server/fastmcp/test_server.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/mcp/server/fastmcp/server.py b/src/mcp/server/fastmcp/server.py index adc38681..d86fa85e 100644 --- a/src/mcp/server/fastmcp/server.py +++ b/src/mcp/server/fastmcp/server.py @@ -320,6 +320,7 @@ class FastMCP(Generic[LifespanResultT]): name=template.name, title=template.title, description=template.description, + mimeType=template.mime_type, ) for template in templates ] diff --git a/tests/server/fastmcp/test_server.py b/tests/server/fastmcp/test_server.py index 5675145b..5e34ba1b 100644 --- a/tests/server/fastmcp/test_server.py +++ b/tests/server/fastmcp/test_server.py @@ -810,6 +810,27 @@ class TestServerResourceTemplates: result = await resource.read() assert result == "Data for test" + @pytest.mark.anyio + async def test_resource_template_includes_mime_type(self): + """Test that list resource templates includes the correct mimeType.""" + mcp = FastMCP() + + @mcp.resource("resource://{user}/csv", mime_type="text/csv") + def get_csv(user: str) -> str: + return f"csv for {user}" + + templates = await mcp.list_resource_templates() + assert len(templates) == 1 + template = templates[0] + + assert hasattr(template, "mimeType") + assert template.mimeType == "text/csv" + + async with client_session(mcp._mcp_server) as client: + result = await client.read_resource(AnyUrl("resource://bob/csv")) + assert isinstance(result.contents[0], TextResourceContents) + assert result.contents[0].text == "csv for bob" + class TestContextInjection: """Test context injection in tools, resources, and prompts."""