UNPKG

rabbit-browser

Version:

Browser automation tool for detecting interactive elements on web pages

84 lines 3.07 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const cors_1 = __importDefault(require("cors")); const server_1 = require("./server"); /** * Example of running an MCP server for RabbitBrowser over HTTP */ async function main() { // Default port const port = process.env.PORT || 3000; // Create Express app const app = (0, express_1.default)(); app.use(express_1.default.json()); app.use((0, cors_1.default)()); // Create the RabbitBrowser MCP server const rabbitServer = new server_1.RabbitBrowserMcpServer({ headless: true, waitTime: 5000, logDetails: true, }); // Create a mapping from sessionId to transport const transports = {}; // SSE endpoint app.get("/sse", async (_req, res) => { // Set SSE headers res.setHeader("Content-Type", "text/event-stream"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Connection", "keep-alive"); // Start the MCP server with SSE transport const transport = await rabbitServer.startWithSSE(res, "/messages"); // Store the transport by session ID const sessionId = transport.sessionId; transports[sessionId] = transport; // Clean up when connection closes res.on("close", () => { delete transports[sessionId]; console.log(`Client ${sessionId} disconnected`); }); console.log(`Client ${sessionId} connected`); }); // Message endpoint for receiving client messages app.post("/messages", async (req, res) => { const sessionId = req.query.sessionId; const transport = transports[sessionId]; if (transport) { await transport.handlePostMessage(req, res); } else { res.status(400).send("No transport found for sessionId"); } }); // Simple status endpoint app.get("/status", (_req, res) => { res.json({ status: "ok", name: "RabbitBrowser MCP Server", activeConnections: Object.keys(transports).length, }); }); // Start the server app.listen(port, () => { console.log(`RabbitBrowser MCP server listening on http://localhost:${port}`); console.log(`Connect to SSE endpoint at http://localhost:${port}/sse`); console.log(`Post messages to http://localhost:${port}/messages?sessionId=YOUR_SESSION_ID`); }); // Handle process termination process.on("SIGINT", async () => { console.log("\nShutting down RabbitBrowser MCP server..."); await rabbitServer.close(); process.exit(0); }); } // Run the main function if (require.main === module) { main().catch((error) => { console.error("Error:", error); process.exit(1); }); } //# sourceMappingURL=http-server.js.map