| import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; |
| import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; |
| import { chromium } from "playwright"; |
|
|
| |
| 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" }); |
|
|
| |
| server.tool("navigate", { url: { type: "string" } }, async ({ url }) => { |
| const browser = await chromium.launch({ |
| headless: true, |
| args: [ |
| "--no-sandbox", |
| "--disable-setuid-sandbox", |
| "--disable-dev-shm-usage", |
| "--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}` }] }; |
| }); |
|
|
| |
| app.get("/sse", async (req, res) => { |
| const transport = new SSEServerTransport("/message", res); |
| await server.connect(transport); |
| }); |
|
|
| app.post("/message", express.json(), async (req, res) => { |
| |
| }); |
|
|
| app.listen(process.env.PORT || 7860, () => { |
| console.log(`MCP server running on port ${process.env.PORT}`); |
| }); |