UNPKG

@executeautomation/playwright-mcp-server

Version:
80 lines (79 loc) 3.47 kB
import { ListResourcesRequestSchema, ReadResourceRequestSchema, ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js"; import { handleToolCall, getConsoleLogs, getScreenshots } from "./toolHandler.js"; import { Logger, RequestLoggingMiddleware } from "./logging/index.js"; export function setupRequestHandlers(server, tools, monitoringSystem) { // Initialize logger and middleware const logger = Logger.getInstance(Logger.createDefaultConfig()); const loggingMiddleware = new RequestLoggingMiddleware(logger); // Helper function to wrap handlers with monitoring const wrapWithMonitoring = (handler, category) => { return (async (...args) => { const startTime = Date.now(); let success = true; try { const result = await handler(...args); return result; } catch (error) { success = false; throw error; } finally { if (monitoringSystem) { const duration = Date.now() - startTime; monitoringSystem.recordRequest(duration, success, category); } } }); }; // List resources handler server.setRequestHandler(ListResourcesRequestSchema, loggingMiddleware.wrapHandler('ListResources', wrapWithMonitoring(async () => ({ resources: [ { uri: "console://logs", mimeType: "text/plain", name: "Browser console logs", }, ...Array.from(getScreenshots().keys()).map(name => ({ uri: `screenshot://${name}`, mimeType: "image/png", name: `Screenshot: ${name}`, })), ], }), 'ListResources'))); // Read resource handler server.setRequestHandler(ReadResourceRequestSchema, loggingMiddleware.wrapHandler('ReadResource', wrapWithMonitoring(async (request) => { const uri = request.params.uri.toString(); if (uri === "console://logs") { const logs = getConsoleLogs().join("\n"); return { contents: [{ uri, mimeType: "text/plain", text: logs, }], }; } if (uri.startsWith("screenshot://")) { const name = uri.split("://")[1]; const screenshot = getScreenshots().get(name); if (screenshot) { return { contents: [{ uri, mimeType: "image/png", blob: screenshot, }], }; } } throw new Error(`Resource not found: ${uri}`); }, 'ReadResource'))); // List tools handler server.setRequestHandler(ListToolsRequestSchema, loggingMiddleware.wrapHandler('ListTools', wrapWithMonitoring(async () => ({ tools: tools, }), 'ListTools'))); // Call tool handler with enhanced tool logging const wrappedToolHandler = loggingMiddleware.wrapToolHandler(handleToolCall); server.setRequestHandler(CallToolRequestSchema, loggingMiddleware.wrapHandler('CallTool', wrapWithMonitoring(async (request) => wrappedToolHandler(request.params.name, request.params.arguments ?? {}, server), 'CallTool'))); }