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安装浏览器
在使用浏览器工具之前,您需要安装浏览器二进制文件。您可以通过以下方式做到这一点:
- 使用
browser_install工具通过MCP或HTTP API - 或者运行Playwright CLI:
pwsh bin/Debug/net8.0/playwright.ps1 install用法
命令行选项
PlaywrightMcpServer [options]
Options:
--browser, -b 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
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 firefoxHTTP服务器模式
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 --headedMCP客户端配置
将服务器添加到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建筑
服务器的实现采用了清晰的关注点分离:
- 浏览器自动化 -使用Playwright的核心浏览器自动化逻辑
- McpServer -用于stdin/stdout通信的MCP协议处理程序
- Http服务器 -使用ASP。NET核心最低API
两台服务器共享相同的 BrowserAutomation 类,确保无论通信方式如何,行为都是一致的。
许可证
MIT许可证
