用于Web爬行的MCP服务器
一种MCP(模型上下文协议)服务器,使用crawl4ai提供网络爬行功能。支持多种内容格式输出(HTML、JSON、PDF、截图、Markdown)和浏览器交互功能。
快速开始
要启动服务器,您有几个选项:
选项1:使用Python启动脚本
python launch_server.py选项2:使用shell脚本(基于Unix的系统)
./launch_server.sh选项3:使用批处理脚本(Windows)
launch_server.bat选项4:直接执行
python mcp_server/server.py目录
MCP配置
要使用MCP配置此服务器,根据您的设置,您有多个选项:
方法1:使用启动脚本(推荐)
这是推荐的方法,因为它可以自动处理虚拟环境设置和依赖关系安装:
{
"mcpServers": {
"dev-tool-mcp": {
"command": "/bin/bash",
"args": [
"-c",
"cd /absolute/path/to/your/dev-tool-mcp && ./launch_server.sh"
],
"description": "MCP development tool server providing web crawling, browser automation, content extraction, and real-time page analysis capabilities"
}
}
}确保更换 /absolute/path/to/your/dev-tool-mcp 使用项目目录的实际绝对路径。
方法2:直接使用虚拟环境Python
如果您更喜欢直接在虚拟环境中运行服务器:
{
"mcpServers": {
"dev-tool-mcp": {
"command": "/absolute/path/to/your/dev-tool-mcp/launch_server.sh",
"args": [],
"description": "MCP development tool server providing web crawling, browser automation, content extraction, and real-time page analysis capabilities"
}
}
}方法3:使用已安装的控制台脚本
如果包安装在虚拟环境中,则可以使用控制台脚本:
{
"mcpServers": {
"dev-tool-mcp": {
"command": "/absolute/path/to/your/dev-tool-mcp/launch_server.sh",
"args": [],
"description": "MCP development tool server providing web crawling, browser automation, content extraction, and real-time page analysis capabilities"
}
}
}方法4:Windows配置
对于Windows系统,请使用批处理脚本:
{
"mcpServers": {
"dev-tool-mcp": {
"command": "cmd",
"args": [
"/c",
"cd /d C:\\absolute\\path\\to\\your\\dev-tool-mcp && launch_server.bat"
],
"description": "MCP development tool server providing web crawling, browser automation, content extraction, and real-time page analysis capabilities"
}
}
}备注:建议使用启动脚本(Unix/Linux/Mac上的方法1-3和Windows上的方法4),因为它们将: - 检查虚拟环境是否存在 - 如果需要,创建它 - 从pyproject.toml安装依赖项 - 激活环境 - 使用所有必要的依赖项启动服务器 这确保了MCP服务器设置的一致性和可靠性。
特性
- 网络爬虫:使用crawl4ai的高级网络爬行功能
- 多种输出格式:支持HTML、JSON、PDF、截图和Markdown输出
- 浏览器交互:获取页面内容、控制台消息和网络请求
- LLM集成:支持用于内容处理的LLM提取策略
- 文件下载:自动下载和保存在已爬网页面上找到的文件
- 进度跟踪:在爬网操作期间流式传输进度更新
- 安全:URL验证和净化,以防止安全问题
建筑
MCP服务器由以下模块组成:
mcp_server/
├── server.py # Main MCP server definition and tool handling
├── utils.py # Utility functions for file operations
├── browser/ # Browser automation functionality
│ ├── browser_service.py # Playwright-based browser service
│ └── README.md # Browser module documentation
└── crawl/ # Web crawling functionality
└── crawl.py # Core crawling implementation with crawl4ai核心组件
- 服务器:通过工具注册和执行实现MCP协议
- 浏览器服务:管理Playwright浏览器实例以进行页面内容和网络监控
- 爬虫:使用crawl4ai进行具有多种输出格式的高级web爬行
- 工具集:提供用于保存内容的文件处理实用程序
安装
先决条件
- Python 3.8或更高版本
- pip包管理器
- Playwright(Chromium浏览器)的系统依赖关系
步骤
- 克隆存储库:
git clone
cd mcp-server- 安装软件包和依赖项:
pip install -e .- 安装Playwright浏览器:
python -m playwright install chromium依赖项
服务器需要以下依赖项(通过pip自动安装):
crawl4ai>=0.7.7:Web爬行库pydantic>=2.0.0:数据验证mcp==1.0.0:模型上下文协议实现httpx[socks]:HTTP客户端litellm:LLM接口beautifulsoup4>=4.12.2:HTML解析lxml>=4.9.3:XML/HTML处理sentencepiece:文本处理playwright>=1.40.0:浏览器自动化
配置
环境变量
服务器使用以下环境变量(可选):
TEST_URL:测试URL(用于测试文件)
可用工具
服务器通过MCP公开以下工具:
你好
- 描述:一个简单的问候工具,向用户返回个性化消息
- 参数:
- name (字符串,可选):要问候的名称,默认为“World”
- 退货:问候语文本
echo消息
- 描述:Echo工具,按原样返回用户提供的信息
- 参数:
- message (string,必填):要回显的消息
- 退货:回声消息文本
crawl_web_page
- 描述:从页面下载文件资源时,抓取网页内容并以多种格式(HTML、JSON、PDF、屏幕截图)保存
- 参数:
- url (string,必填):要抓取的网页的URL - save_path (string,必填):用于保存已爬网内容和下载文件的基本文件路径 - instruction (字符串,可选):用于LLM的指令(默认值:“”) - save_screenshot (布尔值,可选):保存页面的屏幕截图(默认值:false) - save_pdf (布尔值,可选):保存页面的PDF(默认值:false) - generate_markdown (boolean,可选):生成页面的Markdown表示(默认值:false)
- 退货:带有文件计数和保存位置的成功消息
get_page_content
- 描述:获取指定URL网页的完整内容,包括HTML结构和页面数据
- 参数:
- url (string,必填):从中获取内容的网页的URL - wait_for_selector (string,可选):获取内容前等待的可选CSS选择器 - wait_timeout (整数,可选):等待超时(毫秒),默认30000
- 退货:包含页面内容、标题、HTML、文本、元数据、链接和图像的JSON对象
get_sole_message
- 描述:从指定的URL网页捕获控制台输出信息(包括日志、警告、错误等)
- 参数:
- url (string,必填):从中获取控制台消息的网页的URL - wait_for_selector (string,可选):在获取控制台消息之前等待的可选CSS选择器 - wait_timeout (整数,可选):等待超时(毫秒),默认30000
- 退货:JSON对象,包含具有类型、文本、位置和堆栈信息的控制台消息
get_network_requests
- 描述:监控并检索指定URL网页发起的所有网络请求(API调用、资源加载等)
- 参数:
- url (string,必填):从中获取网络请求的网页的URL - wait_for_selector (string,可选):获取网络请求前等待的可选CSS选择器 - wait_timeout (整数,可选):等待超时(毫秒),默认30000
- 退货:JSON对象,包含带有URL、状态、标头和计时信息的请求和响应
用法
运行服务器
可以使用pyproject.toml中定义的控制台脚本启动服务器:
dev-tool-mcp或者直接通过Python:
python -m mcp_server.server服务器使用stdio进行MCP通信,使其与MCP客户端兼容。
工具示例
抓取网页
要抓取网页并以多种格式保存内容,请执行以下操作:
{
"name": "crawl_web_page",
"arguments": {
"url": "https://example.com",
"save_path": "/path/to/save",
"save_screenshot": true,
"save_pdf": true,
"generate_markdown": true
}
}这将创建一个带有时间戳的子目录,其中包含:
output.html-页面HTML内容output.json-JSON格式的页面内容output.png-页面截图(如果需要)output.pdf-页面的PDF(如果需要)raw_markdown.md-页面的Markdown表示(如果需要)downloaded_files.json-下载文件列表files/-包含下载文件的目录
获取页面内容
要检索页面内容,请执行以下操作:
{
"name": "get_page_content",
"arguments": {
"url": "https://example.com",
"wait_for_selector": "#main-content",
"wait_timeout": 10000
}
}获取控制台消息
要从页面捕获控制台消息,请执行以下操作:
{
"name": "get_console_messages",
"arguments": {
"url": "https://example.com",
"wait_for_selector": ".app",
"wait_timeout": 15000
}
}获取网络请求
要监视页面发出的网络请求,请执行以下操作:
{
"name": "get_network_requests",
"arguments": {
"url": "https://example.com",
"wait_for_selector": "[data-loaded]",
"wait_timeout": 20000
}
}测试
该项目包括对浏览器和爬虫功能的全面测试:
运行测试
# Run all tests
pytest
# Run specific test files
python -m pytest test/test_crawler.py
python -m pytest test/test_browser.py
# Run browser tests directly
python -m test.test_browser测试覆盖率
test_crawler.py:测试完整的爬虫功能,包括文件保存和格式生成test_browser.py:测试页面内容、控制台消息和网络请求的浏览器服务功能
爬虫测试专门验证:
- HTML、JSON、PDF、截图和Markdown文件生成
- 文件下载和保存功能
- 正确的错误处理和目录创建
部署
生产部署
- 在生产环境中安装该软件包:
pip install dev-tool-mcp- 安装Playwright浏览器:
python -m playwright install chromium --with-deps- 运行服务器:
dev-tool-mcpDocker部署(可选)
为容器化部署创建一个Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY pyproject.toml .
COPY mcp_server/ ./mcp_server/
RUN pip install -e .
RUN python -m playwright install chromium --with-deps
CMD ["dev-tool-mcp"]安全
URL验证
服务器包括防止恶意URL的安全措施:
- URL长度限制(2048个字符)
- 协议验证(只允许http/https)
- 输入消毒以防止注射攻击
- 验证以防止访问本地网络地址
浏览器安全性
- 默认情况下,Playwright以无头模式运行
- 安全标志设置为禁用危险功能
- 浏览器以有限权限运行
文件系统安全
- 文件仅保存到明确指定的路径
- 不允许任意访问文件系统
- 临时文件已正确清理
故障排除
常见问题
找不到剧作家浏览器
如果您遇到与浏览器相关的错误:
python -m playwright install chromium权限错误
确保服务器对指定的保存路径具有写权限:
mkdir -p /path/to/save
chmod 755 /path/to/save网络问题
对于与网络相关的爬网问题,请验证:
- 目标URL可访问
- 不存在防火墙限制
- 设置适当的超时值
内存使用
大页面抓取会消耗大量内存。对于大规模爬行:
- 监控内存使用情况
- 按顺序而不是并行处理页面
- 定期清理临时文件
调试
启用详细日志记录以排除问题:
# Check the server logs for error messages
# Monitor file system permissions
# Verify network connectivity to target URLs版本信息
- 包裹:开发工具mcp
- 版本: 0.1.0
- Python支持: 3.8+
- 依赖项:有关确切版本,请参阅pyproject.toml
许可证
此项目根据pyproject.toml文件中指定的条款获得许可。有关完整的许可证详细信息,请参阅项目存储库。
