vscode / server.js
Subham9126's picture
Create server.js
931fb4a verified
Raw
History Blame Contribute Delete
1.42 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { chromium } from "playwright";
// Or use SSE transport for HTTP-based MCP on HF Spaces
import express from "express";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
const app = express();
const server = new McpServer({ name: "playwright-mcp", version: "1.0.0" });
// Register a tool example
server.tool("navigate", { url: { type: "string" } }, async ({ url }) => {
const browser = await chromium.launch({
headless: true,
args: [
"--no-sandbox", // Required in containers
"--disable-setuid-sandbox",
"--disable-dev-shm-usage", // Prevents /dev/shm OOM crashes
"--disable-gpu",
"--single-process",
],
});
const page = await browser.newPage();
await page.goto(url);
const title = await page.title();
await browser.close();
return { content: [{ type: "text", text: `Title: ${title}` }] };
});
// SSE endpoint for MCP over HTTP
app.get("/sse", async (req, res) => {
const transport = new SSEServerTransport("/message", res);
await server.connect(transport);
});
app.post("/message", express.json(), async (req, res) => {
// handle message
});
app.listen(process.env.PORT || 7860, () => {
console.log(`MCP server running on port ${process.env.PORT}`);
});