浏览器自动化服务器

一个基于.NET 8和Playwright的轻量级浏览器自动化服务器,支持MCP协议和HTTP REST API,适用于AI代理与本地浏览器的交互。

  • by kolatts
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 kolatts/playwright-dockerless-mcp

使用说明

Playwright MCP服务器。网

使用Microsoft Playwright构建的用于浏览器自动化的轻量级模型上下文协议(MCP)服务器。NET 8c#。该服务器允许AI代理在本地与web浏览器交互,而不需要npm、Docker或其他外部依赖。

特性

  • 纯净。NET 8实现:不需要npm或Docker
  • 完全支持Playwright浏览器:Chromium、Firefox和WebKit
  • 双模式操作:作为MCP服务器(stdin/stdout)或HTTP REST API服务器运行
  • 全面的浏览器工具:21个浏览器自动化工具,用于完成网络交互
  • 命令行配置:使用命令行参数轻松启动
  • 代理友好型HTTP API:简单的REST端点,便于与AI代理集成

需求

  • .NET 8.0 SDK或运行时
  • 支持的浏览器之一(可以通过安装 browser_install 工具)

安装

从源代码构建

# Clone the repository
git clone https://github.com/kolatts/playwright-dockerless-mcp.git
cd playwright-dockerless-mcp

# Build the project
dotnet build

# Run the server
dotnet run

安装浏览器

在使用浏览器工具之前,您需要安装浏览器二进制文件。您可以通过以下方式做到这一点:

  1. 使用 browser_install 工具通过MCP或HTTP API
  2. 或者运行Playwright CLI:
    pwsh bin/Debug/net8.0/playwright.ps1 install
    

用法

命令行选项

PlaywrightMcpServer [options]

Options:
  --browser, -b <type>   Browser type: chromium, firefox, webkit (default: chromium)
  --headed               Run browser in headed mode (default: headless)
  --http                 Run as HTTP server instead of MCP stdin/stdout mode
  --port, -p <port>      HTTP server port (default: 5000, only used with --http)
  --help, -h             Show this help message
  --version, -v          Show version information

运行模式

MCP模式(默认)

默认模式使用MCP协议通过stdin/stdout进行通信,适用于与MCP兼容的客户端集成。

# Run in MCP mode
dotnet run

# With specific browser
dotnet run -- --browser firefox

HTTP服务器模式

HTTP服务器模式提供REST API,AI代理或任何HTTP客户端都可以轻松调用该API。

# Start HTTP server on default port 5000
dotnet run -- --http

# Start on custom port with headed browser
dotnet run -- --http --port 8080 --headed

MCP客户端配置

将服务器添加到MCP客户端配置中。例如,在Claude Desktop的 claude_desktop_config.json:

{
  "mcpServers": {
    "playwright": {
      "command": "dotnet",
      "args": ["run", "--project", "/path/to/playwright-dockerless-mcp"]
    }
  }
}

或者,如果您已经发布了可执行文件:

{
  "mcpServers": {
    "playwright": {
      "command": "/path/to/PlaywrightMcpServer",
      "args": ["--browser", "chromium"]
    }
  }
}

HTTP API参考

在HTTP模式下运行时(--http),以下端点可用:

健康检查

GET /health

返回服务器运行状况。

答复:

{
  "status": "healthy",
  "version": "1.0.0"
}

列出工具

GET /tools

返回所有可用的浏览器自动化工具及其模式。

答复:

{
  "tools": [
    {
      "name": "browser_navigate",
      "description": "Navigate to a URL",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": { "type": "string", "description": "The URL to navigate to" }
        },
        "required": ["url"]
      }
    },
    ...
  ]
}

执行工具

POST /tools/{toolName}
Content-Type: application/json

使用提供的参数执行特定工具。

示例-导航到URL:

curl -X POST http://localhost:5000/tools/browser_navigate \
     -H "Content-Type: application/json" \
     -d '{"url": "https://example.com"}'

答复:

{
  "success": true,
  "url": "https://example.com/",
  "title": "Example Domain",
  "status": 200
}

示例-截图:

curl -X POST http://localhost:5000/tools/browser_take_screenshot \
     -H "Content-Type: application/json" \
     -d '{"fullPage": true}'

示例-单击元素:

curl -X POST http://localhost:5000/tools/browser_click \
     -H "Content-Type: application/json" \
     -d '{"element": "Submit button", "ref": "button[type=\"submit\"]"}'

示例-获取辅助功能快照:

curl -X POST http://localhost:5000/tools/browser_snapshot \
     -H "Content-Type: application/json" \
     -d '{}'

可用工具

服务器提供以下浏览器自动化工具:

导航

  • 浏览器导航 -导航到URL
  • 浏览器导航返回 -返回上一页

页面交互

  • 浏览器点击 -点击网页元素
  • 浏览器类型 -在可编辑元素中键入文本
  • browser_fill_form -一次填写多个表单字段
  • 浏览器选择选项 -在下拉列表中选择一个选项
  • 浏览器切换 -将鼠标悬停在元素上
  • browser_drag -在元素之间执行拖放操作
  • browser_press_key -按键盘键
  • 浏览器文件上传 -上传文件
  • 浏览器处理对话框 -处理浏览器对话框(警告、确认、提示)

页面信息

  • 浏览器快照 -捕获页面的可访问性快照(首选AI交互)
  • browser_take_screenshot -对页面进行截图
  • browser_console_消息 -获取所有控制台消息
  • 浏览器网络请求 -获取所有网络请求
  • 浏览器_评估 -评估页面上的JavaScript

选项卡管理

  • 浏览器标签 -列出、创建、关闭或选择浏览器选项卡

公用事业

  • 浏览器等待 -等待文本、元素或时间
  • 浏览器大小 -调整浏览器视口大小
  • 浏览器_关闭 -关闭当前页面
  • 浏览器安装 -安装浏览器二进制文件

示例工作流

使用HTTP API进行Web抓取

# 1. Navigate to the page
curl -X POST http://localhost:5000/tools/browser_navigate \
     -H "Content-Type: application/json" \
     -d '{"url": "https://example.com"}'

# 2. Get accessibility snapshot
curl -X POST http://localhost:5000/tools/browser_snapshot \
     -H "Content-Type: application/json" \
     -d '{}'

# 3. Click a link
curl -X POST http://localhost:5000/tools/browser_click \
     -H "Content-Type: application/json" \
     -d '{"element": "More information link", "ref": "a[href]"}'

# 4. Take a screenshot
curl -X POST http://localhost:5000/tools/browser_take_screenshot \
     -H "Content-Type: application/json" \
     -d '{"filename": "/tmp/screenshot.png"}'

表格填写

# Fill a login form
curl -X POST http://localhost:5000/tools/browser_fill_form \
     -H "Content-Type: application/json" \
     -d '{
       "fields": [
         {"name": "username", "type": "textbox", "ref": "#username", "value": "user@example.com"},
         {"name": "password", "type": "textbox", "ref": "#password", "value": "secretpass"},
         {"name": "remember", "type": "checkbox", "ref": "#remember-me", "value": "true"}
       ]
     }'

MCP交互示例

初始化服务器

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}

列出可用工具

{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}

导航至网址

{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"browser_navigate","arguments":{"url":"https://example.com"}}}

快照

{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"browser_snapshot","arguments":{}}}

单击元素

{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"browser_click","arguments":{"element":"Submit button","ref":"button[type='submit']"}}}

发展

建筑

dotnet build

运行测试

dotnet test

出版

要创建自包含的可执行文件,请执行以下操作:

dotnet publish -c Release -r linux-x64 --self-contained
dotnet publish -c Release -r win-x64 --self-contained
dotnet publish -c Release -r osx-x64 --self-contained

建筑

服务器的实现采用了清晰的关注点分离:

  1. 浏览器自动化 -使用Playwright的核心浏览器自动化逻辑
  2. McpServer -用于stdin/stdout通信的MCP协议处理程序
  3. Http服务器 -使用ASP。NET核心最低API

两台服务器共享相同的 BrowserAutomation 类,确保无论通信方式如何,行为都是一致的。

许可证

MIT许可证