rabbit-browser
Version:
Browser automation tool for detecting interactive elements on web pages
84 lines • 3.07 kB
JavaScript
;
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