diff --git a/src/mcp/server/fastmcp/server.py b/src/mcp/server/fastmcp/server.py index 924baaa9b..e1c356922 100644 --- a/src/mcp/server/fastmcp/server.py +++ b/src/mcp/server/fastmcp/server.py @@ -320,6 +320,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..76ea63a37 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."""