crawl-page-mcp-server
Version:
MCP server for crawling web pages and converting to markdown
284 lines (220 loc) • 5.89 kB
Markdown
# Crawl Page MCP Server
一个用于抓取网页内容并转换为Markdown格式的MCP(Model Context Protocol)服务器。
## 功能特性
- 🌐 抓取任意URL的网页内容
- 📝 支持多种输出格式:HTML、纯文本、Markdown
- 🎯 支持CSS选择器精确提取页面内容
- 🔗 提取页面中的所有链接
- ⚙️ 可配置请求超时和User-Agent
- 🛡️ 内置错误处理和URL验证
## 安装
```bash
npm install
npm run build
```
## 安装和使用
### 通过 npx 直接使用(推荐)
```bash
# 直接运行MCP服务器
npx crawl-page-mcp-server
# 运行调试器
npx crawl-page-mcp-server crawl-page-debug
# 查看版本
npx crawl-page-mcp-server --version
# 查看帮助
npx crawl-page-mcp-server --help
```
### 全局安装
```bash
# 安装到全局
npm install -g crawl-page-mcp-server
# 使用全局命令
crawl-page-mcp # 启动MCP服务器
crawl-page-debug # 启动调试器
```
### 本地开发
```bash
# 克隆项目
git clone <repository-url>
cd crawl-page-mcp-server
# 安装依赖并构建
npm install
npm run build
# 启动服务器
npm start
# 启动调试器
npm run debug
```
## 工具说明
### 1. crawl_page
抓取指定URL的页面内容。
**参数:**
- `url` (必需): 要抓取的网页URL地址
- `format` (可选): 输出格式,可选值:`html`、`text`、`markdown`(默认)
- `selector` (可选): CSS选择器,用于提取页面特定部分的内容
- `timeout` (可选): 请求超时时间(毫秒),默认10秒
- `userAgent` (可选): 自定义User-Agent字符串
**示例:**
```json
{
"url": "https://example.com",
"format": "markdown",
"selector": "article",
"timeout": 15000
}
```
### 2. extract_links
从指定URL页面中提取所有链接。
**参数:**
- `url` (必需): 要分析的网页URL地址
- `baseUrl` (可选): 基础URL,用于解析相对链接
- `filterPattern` (可选): 正则表达式模式,用于过滤链接
- `timeout` (可选): 请求超时时间(毫秒),默认10秒
**示例:**
```json
{
"url": "https://example.com",
"filterPattern": "https://.*\\.pdf$",
"timeout": 10000
}
```
## 输出格式
### crawl_page 输出
```json
{
"url": "https://example.com",
"title": "页面标题",
"description": "页面描述",
"keywords": "关键词",
"format": "markdown",
"content": "转换后的内容...",
"contentLength": 1234,
"timestamp": "2023-12-01T12:00:00.000Z"
}
```
### extract_links 输出
```json
{
"url": "https://example.com",
"totalLinks": 25,
"links": [
{
"href": "https://example.com/page1",
"text": "链接文本",
"title": "链接标题"
}
],
"timestamp": "2023-12-01T12:00:00.000Z"
}
```
## 配置MCP客户端
### 使用 npx(推荐)
```json
{
"mcpServers": {
"crawl-page": {
"command": "npx",
"args": ["crawl-page-mcp-server"]
}
}
}
```
### 使用全局安装
```json
{
"mcpServers": {
"crawl-page": {
"command": "crawl-page-mcp"
}
}
}
```
### 使用本地开发版本
```json
{
"mcpServers": {
"crawl-page": {
"command": "node",
"args": ["./dist/index.js"],
"cwd": "/path/to/crawl-page-mcp-server"
}
}
}
```
## 技术栈
- **TypeScript**: 类型安全的JavaScript
- **@modelcontextprotocol/sdk**: MCP协议SDK
- **axios**: HTTP客户端
- **cheerio**: 服务端jQuery实现
- **turndown**: HTML到Markdown转换器
## 依赖打包说明
本项目使用 **esbuild** 将所有第三方依赖打包到单个可执行文件中,用户无需单独安装 axios、cheerio、turndown 等依赖。
### 打包策略
- **包含的依赖**: axios, cheerio, turndown, url 等所有运行时依赖
- **外部依赖**: 仅保留 @modelcontextprotocol/sdk 作为外部依赖
- **文件大小**: 约 3.0MB(包含所有依赖)
- **格式**: CommonJS with shebang,可直接执行
### 构建过程
```bash
# 开发时使用 tsx 直接运行 TypeScript
npm run dev
# 构建时使用 esbuild 打包所有依赖
npm run build
```
### 为什么使用 esbuild 而不是 tsx?
- **tsx**: 仅为 TypeScript 运行时工具,不能打包依赖
- **tsc**: TypeScript 编译器,只编译不打包,依赖仍为外部引用
- **esbuild**: 真正的打包工具,能将依赖打包到单个文件中
这种方案确保了:
- ✅ **用户体验**: 只需安装一个包即可使用
- ✅ **依赖管理**: 避免版本冲突和依赖缺失
- ✅ **部署简单**: 单文件部署,无需额外配置
- ✅ **性能优化**: 减少模块解析时间
## 开发
### 项目结构
```
crawl-page-mcp-server/
├── src/
│ └── index.ts # 主服务器文件
├── dist/ # 编译输出目录
├── package.json
├── tsconfig.json
└── README.md
```
### 构建
```bash
npm run build
```
### 测试
```bash
npm test
```
## 调试和测试
### 使用 MCP Inspector(推荐)
```bash
# 启动可视化调试工具
npm run inspector
# 使用预配置文件启动
npm run inspector:config
# 或直接使用
npx @modelcontextprotocol/inspector
```
### 使用自定义调试器
```bash
npm run debug
```
### 快速功能测试
```bash
npm run test:crawl
```
## 文档
详细文档请查看 [docs](./docs/) 目录:
- 🚀 [快速开始](./docs/quick-start.md) - 快速上手指南
- 📖 [API参考文档](./docs/api-reference.md) - 详细的API接口说明
- 💡 [使用示例](./docs/examples.md) - 丰富的使用示例和应用场景
- 🔧 [调试指南](./docs/debugging.md) - 完整的调试方法和工具
- ⚡ [超时优化](./docs/timeout-optimization.md) - 性能优化和超时问题解决
- 🔍 [Inspector调试](./docs/inspector-debugging.md) - 使用MCP Inspector进行可视化调试
- 🚨 [故障排除](./docs/troubleshooting.md) - 常见问题解决方案
## 许可证
MIT License