MCP Web Browser Server

by random-robbie
Verified
  • src
  • mcp_server_diff_python
import difflib import mcp.server.stdio import mcp.types as types from mcp.server import NotificationOptions, Server from mcp.server.models import InitializationOptions server = Server("mcp-server-diff-python") @server.list_tools() async def handle_list_tools() -> list[types.Tool]: """ List available tools. Each tool specifies its arguments using JSON Schema validation. """ return [ types.Tool( name="get-unified-diff", description="Get the difference between two text articles in Unified diff format. Use this when you want to extract the difference between texts.", # noqa: E501 inputSchema={ "type": "object", "properties": { "string_a": {"type": "string"}, "string_b": {"type": "string"}, }, "required": ["string_a", "string_b"], }, ) ] @server.call_tool() async def handle_call_tool( name: str, arguments: dict | None ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]: """ Handle tool execution requests. Tools can modify server state and notify clients of changes. """ if name != "get-unified-diff": raise ValueError(f"Unknown tool: {name}") if not arguments: raise ValueError("Missing arguments") string_a: str = arguments.get("string_a") string_b: str = arguments.get("string_b") if string_a is None or string_b is None: raise ValueError("Missing 'string_a' or 'string_b' in arguments") diff_iterator = difflib.unified_diff(string_a.splitlines(), string_b.splitlines()) return [types.TextContent(type="text", text="\n".join(diff_iterator))] async def main(): # Run the server using stdin/stdout streams async with mcp.server.stdio.stdio_server() as (read_stream, write_stream): await server.run( read_stream, write_stream, InitializationOptions( server_name="mcp-server-diff-python", server_version="0.1.0", capabilities=server.get_capabilities( notification_options=NotificationOptions(), experimental_capabilities={}, ), ), )