Download server.js from altool/vscode: direct link, hf CLI and curl.
- Browser
- Download file 1.42 kB
-
https://huggingface.co/spaces/altool/vscode/resolve/main/server.js
- Command line
-
hf download hf://spaces/altool/vscode/server.js
-
curl -L -o server.js https://huggingface.co/spaces/altool/vscode/resolve/main/server.js
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}`); | |
| }); |