JSON Canvas MCP Server

by Cam10001110101
Verified
#!/usr/bin/env python3 """Simple MCP server example.""" import asyncio import json from mcp.server import Server from mcp.server.stdio import stdio_server from mcp.types import ( CallToolRequest, ListResourcesRequest, ListToolsRequest, ReadResourceRequest, ) class SimpleMcpServer: """A simple MCP server implementation.""" def __init__(self): """Initialize the server.""" self.server = Server( { "name": "simple-server", "version": "0.1.0", }, { "capabilities": { "resources": {}, "tools": {}, }, }, ) # Set up handlers self.setup_handlers() # Error handling self.server.onerror = lambda error: print(f"[MCP Error] {error}") def setup_handlers(self): """Set up request handlers.""" # Try different methods to register handlers # Method 1: Direct assignment to request_handlers if hasattr(self.server, 'request_handlers'): print("Registering handlers using request_handlers attribute") self.server.request_handlers[ListResourcesRequest] = self.handle_list_resources self.server.request_handlers[ReadResourceRequest] = self.handle_read_resource self.server.request_handlers[ListToolsRequest] = self.handle_list_tools self.server.request_handlers[CallToolRequest] = self.handle_call_tool # Method 2: Using on method elif hasattr(self.server, 'on'): print("Registering handlers using on method") self.server.on(ListResourcesRequest, self.handle_list_resources) self.server.on(ReadResourceRequest, self.handle_read_resource) self.server.on(ListToolsRequest, self.handle_list_tools) self.server.on(CallToolRequest, self.handle_call_tool) # Method 3: Using register_handler method elif hasattr(self.server, 'register_handler'): print("Registering handlers using register_handler method") self.server.register_handler(ListResourcesRequest, self.handle_list_resources) self.server.register_handler(ReadResourceRequest, self.handle_read_resource) self.server.register_handler(ListToolsRequest, self.handle_list_tools) self.server.register_handler(CallToolRequest, self.handle_call_tool) else: print("ERROR: Could not find a way to register handlers!") async def handle_list_resources(self, request): """Handle list resources request.""" print("Handling list_resources request") return { "resources": [ { "uri": "simple://example", "name": "Example Resource", "mimeType": "text/plain", "description": "An example resource", }, ], } async def handle_read_resource(self, request): """Handle read resource request.""" print(f"Handling read_resource request for {request.params.uri}") return { "contents": [ { "uri": request.params.uri, "mimeType": "text/plain", "text": "This is an example resource content.", } ] } async def handle_list_tools(self, request): """Handle list tools request.""" print("Handling list_tools request") return { "tools": [ { "name": "echo", "description": "Echo back the input", "inputSchema": { "type": "object", "properties": { "message": { "type": "string", "description": "Message to echo" } }, "required": ["message"] } }, ] } async def handle_call_tool(self, request): """Handle call tool request.""" print(f"Handling call_tool request for {request.params.name}") if request.params.name == "echo": message = request.params.arguments.get("message", "") return { "content": [ { "type": "text", "text": f"Echo: {message}" } ] } else: return { "content": [ { "type": "text", "text": f"Unknown tool: {request.params.name}" } ], "isError": True } if __name__ == "__main__": print("Starting simple MCP server...") server = SimpleMcpServer() asyncio.run(stdio_server(server.server))