一个使用Playwright提供全面网站快照能力的模型上下文协议(MCP)服务器。该服务器使LLMs能够通过结构化的可访问性快照、网络监控和控制台消息收集来捕获和分析网页。
首先,使用您的客户端安装MCP Web快照服务器。典型的配置如下所示:
{
"mcpServers": {
"mcp-web-snapshot": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-web-snapshot",
"run",
"python",
"src/server.py"
]
}
}
}
您可以使用VS Code CLI安装MCP Web快照服务器:
# 对于VS Code
code --add-mcp '{"name":"mcp-web-snapshot","command":"uv","args":["--directory","/path/to/mcp-web-snapshot","run","python","src/server.py"]}'
安装后,MCP Web快照服务器将在VS Code中与GitHub Copilot代理一起可用。
前往Cursor设置 → MCP → 添加新MCP服务器。按喜好命名,使用command类型,并指定命令uv和参数["--directory", "/path/to/mcp-web-snapshot", "run", "python", "src/server.py"]。
{
"mcpServers": {
"mcp-web-snapshot": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-web-snapshot",
"run",
"python",
"src/server.py"
]
}
}
}
git clone https://github.com/your-username/mcp-web-snapshot.git
cd mcp-web-snapshot
uv sync
uv run playwright install
uv run python src/server.py
├── src/
│ ├── server.py # 主MCP服务器入口点
│ ├── registry.py # 工具注册逻辑
│ └── tools/
│ ├── __init__.py
│ └── snapshot_url.py # 网站快照实现
├── tests/ # 测试套件
│ ├── __init__.py
│ ├── test_snapshot_url.py # 网站快照单元测试
│ └── README.md # 测试文档
├── pyproject.toml # 项目配置
├── pytest.ini # Pytest配置
├── uv.lock # 依赖项锁文件
└── README.md # 此文件
该项目包括使用pytest的全面测试套件:
# 运行所有测试
uv run pytest
# 带有详细输出运行
uv run pytest -v
# 带有覆盖率报告运行
PYTHONPATH=. uv run pytest --cov=src.tools.snapshot_url --cov-report=term-missing
当前测试覆盖率为92%,涵盖:
工具:website_snapshot
描述:带有监控功能的网页综合快照
参数:
target_url (字符串):要捕获的URL(必须是带协议的有效URL)特性:
示例用法:
# 通过MCP客户端
result = await website_snapshot("https://example.com")
输出结构:
✅ 捕获了包含25个元素、12个请求、0个控制台消息的快照
🔍 示例网站 - 首页
📍 https://example.com
🎭 可访问性快照:
- 导航 "主要":
- 链接 "首页": [ref=1]
- 链接 "关于我们": [ref=2]
- 按钮 "联系我们" [ref=3]
- 主:
- 标题 "欢迎来到示例"
- 链接 "开始": [ref=4]
🌐 网络请求:
🌐 GET https://example.com
状态码: 200
响应: <!DOCTYPE html><html>...
🖥️ 控制台:
无控制台消息
🎯 元素引用:
[ref=1]: 链接 "首页"
[ref=2]: 链接 "关于我们"
[ref=3]: 按钮 "联系我们"
[ref=4]: 链接 "开始"
服务器可以通过src/tools/snapshot_url.py中的CONFIG字典进行配置:
CONFIG = {
"viewport": {"width": 1920, "height": 1080},
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"timeout": 15000, # 15秒
}
捕获全面的页面状态以生成自动化测试:
"请对https://myapp.com/login进行快照,并基于发现的元素和结构帮助我创建Page Object Model类。"
提取结构化数据进行内容分析和监控:
"对https://competitor.com/pricing进行快照,并分析与上周讨论相比的任何定价变化或新功能。"
利用可访问性树数据进行合规检查:
"请对https://myapp.com进行快照,并根据WCAG指南识别任何可访问性问题或改进领域。"
监控网络活动以了解应用程序行为:
"在登录后对https://dashboard.example.com进行快照,并展示正在执行的API调用,以便我可以理解数据流。"
基于捕获的交互生成测试场景:
"对https://myapp.com/checkout进行快照,并帮助我创建涵盖所有交互元素和用户工作流程的全面测试案例。"
服务器包括全面的错误处理:
git checkout -b feature-nameuv run pytestPYTHONPATH=. uv run pytest --cov=src.tools.snapshot_url --cov-report=term-missinguv run ruff check请确保所有测试通过,并保持或提高当前的测试覆盖率。
本项目采用MIT许可证 - 查看LICENSE文件获取详情。