from mcp import Client from mcp.client import advertise from mcp.server.apps import APP_MIME_TYPE, EXTENSION_ID, Apps, client_supports_apps from mcp.server.mcpserver import MCPServer from mcp.server.mcpserver.context import Context CLOCK_HTML = """\ Clock

...

""" apps = Apps() @apps.tool(resource_uri="ui://clock/app.html", description="The current time.") def get_time(ctx: Context) -> str: now = "2026-06-26T12:00:00Z" if not client_supports_apps(ctx): return f"The time is {now}." return now apps.add_html_resource("ui://clock/app.html", CLOCK_HTML, title="Clock") mcp = MCPServer("clock", extensions=[apps]) async def main() -> None: async with Client(mcp, extensions=[advertise(EXTENSION_ID, {"mimeTypes": [APP_MIME_TYPE]})]) as client: result = await client.call_tool("get_time", {}) print(result.content) # [TextContent(text='2026-06-26T12:00:00Z')]