Skip to main content
Glama

Playwright MCP Server

by pvinis
response.ts2.81 kB
import type { Response } from "rebrowser-playwright"; import { BrowserToolBase } from "./base.js"; import type { ToolContext, ToolResponse } from "../common/types.js"; import { createSuccessResponse, createErrorResponse } from "../common/types.js"; const responsePromises = new Map<string, Promise<Response>>(); interface ExpectResponseArgs { id: string; url: string; } interface AssertResponseArgs { id: string; value?: string; } /** * Tool for setting up response wait operations */ export class ExpectResponseTool extends BrowserToolBase { /** * Execute the expect response tool */ async execute( args: ExpectResponseArgs, context: ToolContext ): Promise<ToolResponse> { return this.safeExecute(context, async (page) => { if (!args.id || !args.url) { return createErrorResponse( "Missing required parameters: id and url must be provided" ); } const responsePromise = page.waitForResponse(args.url); responsePromises.set(args.id, responsePromise); return createSuccessResponse( `Started waiting for response with ID ${args.id}` ); }); } } /** * Tool for asserting and validating responses */ export class AssertResponseTool extends BrowserToolBase { /** * Execute the assert response tool */ async execute( args: AssertResponseArgs, context: ToolContext ): Promise<ToolResponse> { return this.safeExecute(context, async () => { if (!args.id) { return createErrorResponse( "Missing required parameter: id must be provided" ); } const responsePromise = responsePromises.get(args.id); if (!responsePromise) { return createErrorResponse( `No response wait operation found with ID: ${args.id}` ); } try { const response = await responsePromise; const body = await response.json(); if (args.value) { const bodyStr = JSON.stringify(body); if (!bodyStr.includes(args.value)) { const messages = [ `Response body does not contain expected value: ${args.value}`, `Actual body: ${bodyStr}`, ]; return createErrorResponse(messages.join("\n")); } } const messages = [ `Response assertion for ID ${args.id} successful`, `URL: ${response.url()}`, `Status: ${response.status()}`, `Body: ${JSON.stringify(body, null, 2)}`, ]; return createSuccessResponse(messages.join("\n")); } catch (error) { return createErrorResponse( `Failed to assert response: ${(error as Error).message}` ); } finally { responsePromises.delete(args.id); } }); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pvinis/mcp-playwright-stealth'

If you have feedback or need assistance with the MCP directory API, please join our Discord server