#!/usr/bin/env python3 """Hello World MCP server using UV runtime.""" import asyncio from mcp.server.models import InitializationOptions import mcp.types as types from mcp.server import NotificationOptions, Server import mcp.server.stdio server = Server("hello-world-uv") @server.list_tools() async def handle_list_tools() -> list[types.Tool]: """List available tools.""" return [ types.Tool( name="say_hello", description="Say hello to someone", inputSchema={ "type": "object", "properties": { "name": { "type": "string", "description": "Name to greet", } }, "required": ["name"], }, ) ] @server.call_tool() async def handle_call_tool( name: str, arguments: dict | None ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]: """Handle tool calls.""" if name == "say_hello": person_name = arguments.get("name", "World") if arguments else "World" return [types.TextContent(type="text", text=f"Hello, {person_name}!")] raise ValueError(f"Unknown tool: {name}") async def main(): """Run the server.""" async with mcp.server.stdio.stdio_server() as (read_stream, write_stream): await server.run( read_stream, write_stream, InitializationOptions( server_name="hello-world-uv", server_version="1.0.0", capabilities=server.get_capabilities( notification_options=NotificationOptions(), experimental_capabilities={}, ), ), ) if __name__ == "__main__": asyncio.run(main())