Subham9126 commited on
Commit
931fb4a
·
verified ·
1 Parent(s): f3baa28

Create server.js

Browse files
Files changed (1) hide show
  1. server.js +43 -0
server.js ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { chromium } from "playwright";
4
+
5
+ // Or use SSE transport for HTTP-based MCP on HF Spaces
6
+ import express from "express";
7
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
8
+
9
+ const app = express();
10
+ const server = new McpServer({ name: "playwright-mcp", version: "1.0.0" });
11
+
12
+ // Register a tool example
13
+ server.tool("navigate", { url: { type: "string" } }, async ({ url }) => {
14
+ const browser = await chromium.launch({
15
+ headless: true,
16
+ args: [
17
+ "--no-sandbox", // Required in containers
18
+ "--disable-setuid-sandbox",
19
+ "--disable-dev-shm-usage", // Prevents /dev/shm OOM crashes
20
+ "--disable-gpu",
21
+ "--single-process",
22
+ ],
23
+ });
24
+ const page = await browser.newPage();
25
+ await page.goto(url);
26
+ const title = await page.title();
27
+ await browser.close();
28
+ return { content: [{ type: "text", text: `Title: ${title}` }] };
29
+ });
30
+
31
+ // SSE endpoint for MCP over HTTP
32
+ app.get("/sse", async (req, res) => {
33
+ const transport = new SSEServerTransport("/message", res);
34
+ await server.connect(transport);
35
+ });
36
+
37
+ app.post("/message", express.json(), async (req, res) => {
38
+ // handle message
39
+ });
40
+
41
+ app.listen(process.env.PORT || 7860, () => {
42
+ console.log(`MCP server running on port ${process.env.PORT}`);
43
+ });