From 74023cf72e8bddbeee66c19fe2d828dec66d5bea Mon Sep 17 00:00:00 2001 From: Pradeepta Choudhury Date: Tue, 22 Jul 2025 19:24:18 +0530 Subject: [PATCH 1/2] fix(fastmcp): propagate mimeType in resource template listing and add test - Fix resource template list did not include the mimeType attribute. - Propagate mimeType from template metadata to the list output in FastMCP. - Add test_resource_template_includes_mime_type to verify that listed resource templates include the correct mimeType and the resource is still accessible via the client. --- 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 2fe7c1224..f3d6f07e8 100644 --- a/src/mcp/server/fastmcp/server.py +++ b/src/mcp/server/fastmcp/server.py @@ -296,6 +296,7 @@ async def list_resource_templates(self) -> list[MCPResourceTemplate]: 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 a9e0d182a..ab82382f9 100644 --- a/tests/server/fastmcp/test_server.py +++ b/tests/server/fastmcp/test_server.py @@ -739,6 +739,27 @@ def get_data(name: str) -> str: 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.""" From b9743bd7f8021acb51c56a9c324200316e2a93fa Mon Sep 17 00:00:00 2001 From: Pradeepta Choudhury Date: Tue, 22 Jul 2025 19:35:17 +0530 Subject: [PATCH 2/2] chore(tests): fix trailing whitespace in test_resource_template_includes_mime_type --- tests/server/fastmcp/test_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/server/fastmcp/test_server.py b/tests/server/fastmcp/test_server.py index ab82382f9..76ea63a37 100644 --- a/tests/server/fastmcp/test_server.py +++ b/tests/server/fastmcp/test_server.py @@ -754,7 +754,7 @@ def get_csv(user: str) -> str: 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)