UNPKG

puppeteer-vision-mcp-server

Version:

MCP Server for scraping webpages and converting to markdown

76 lines (75 loc) 2.84 kB
import express from 'express'; import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { config } from '../config.js'; /** * Sets up the appropriate transport for the MCP server * @param server The MCP server instance * @param serverName Server name for logging * @param serverVersion Server version for logging */ export function setupTransport(server, serverName, serverVersion) { if (config.useSSE) { setupSSETransport(server, serverName, serverVersion); } else { setupStdioTransport(server, serverName, serverVersion); } } /** * Sets up an SSE transport over HTTP * @param server The MCP server instance * @param serverName Server name for logging * @param serverVersion Server version for logging */ function setupSSETransport(server, serverName, serverVersion) { // Setup Express server for SSE mode const app = express(); // to support multiple simultaneous connections we have a lookup object from // sessionId to transport const transports = {}; app.get("/sse", async (_, res) => { const transport = new SSEServerTransport('/messages', res); transports[transport.sessionId] = transport; res.on("close", () => { delete transports[transport.sessionId]; }); await server.connect(transport); }); 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'); } }); const webserver = app.listen(config.serverPort, () => { console.log(`${serverName} v${serverVersion} is running in SSE mode on port ${config.serverPort}`); if (config.apiBaseUrl) { console.log(`Using custom API endpoint: ${config.apiBaseUrl}`); } }); webserver.keepAliveTimeout = 3000; } /** * Sets up a stdio transport for command-line usage * @param server The MCP server instance * @param serverName Server name for logging * @param serverVersion Server version for logging */ function setupStdioTransport(server, serverName, serverVersion) { // Use Stdio transport (default mode) const stdioTransport = new StdioServerTransport(); console.log(`${serverName} v${serverVersion} starting in stdio mode`); if (config.apiBaseUrl) { console.log(`Using custom API endpoint: ${config.apiBaseUrl}`); } // Connect the transport to the server server.connect(stdioTransport).catch((error) => { console.error("Error connecting transport:", error); process.exit(1); }); }