UNPKG

crawl-page-mcp-server

Version:

MCP server for crawling web pages and converting to markdown

294 lines (220 loc) 5.81 kB
# MCP服务器调试指南 ## 概述 本文档提供了完整的MCP服务器调试方法和工具,帮助开发者快速定位和解决问题。 ## 调试工具 ### 1. 交互式调试器 最推荐的调试方式,提供实时交互测试功能。 ```bash # 启动调试器 npm run debug # 或直接运行 node debug-server.js ``` #### 可用命令 | 命令 | 语法 | 描述 | |------|------|------| | `list` | `list` | 列出所有可用工具 | | `crawl` | `crawl <url> [format] [selector]` | 抓取网页内容 | | `links` | `links <url> [pattern]` | 提取页面链接 | | `test` | `test` | 运行预设测试用例 | | `help` | `help` | 显示帮助信息 | | `exit` | `exit` | 退出调试器 | #### 使用示例 ```bash # 启动调试器后输入以下命令 list # 查看工具列表 crawl https://example.com # 抓取页面为Markdown crawl https://example.com html # 抓取为HTML格式 crawl https://example.com markdown h1 # 只抓取h1标签内容 links https://example.com # 提取所有链接 links https://example.com ".*\.pdf$" # 只提取PDF链接 test # 运行测试套件 ``` ### 2. 快速功能测试 用于验证基本功能是否正常工作。 ```bash # 测试HTTP抓取功能 npm run test:crawl # 测试MCP协议通信 node quick-debug-test.js ``` ### 3. VS Code调试 提供断点调试和变量检查功能。 #### 配置文件位置 `.vscode/launch.json` #### 可用配置 - **Debug MCP Server** - 调试主服务器 - **Debug Test Crawl** - 调试抓取测试 - **Debug Interactive** - 调试交互式工具 #### 使用方法 1. 在VS Code中打开项目 2. 按F5或点击调试按钮 3. 选择相应的调试配置 4. 设置断点进行调试 ### 4. 日志调试 启用详细日志输出来追踪问题。 ```bash # 启用调试日志 DEBUG=true npm start # 或在环境变量中设置 export DEBUG=true npm start ``` #### 日志级别 - **INFO** - 基本信息 - **DEBUG** - 详细调试信息 - **ERROR** - 错误信息 ## 常见问题排查 ### 1. 服务器启动失败 #### 检查依赖 ```bash npm install ``` #### 检查构建 ```bash npm run build ``` #### 查看详细错误 ```bash DEBUG=true node dist/index.js 2>&1 | tee debug.log ``` ### 2. 网页抓取失败 #### 网络连接测试 ```bash curl -I https://example.com ``` #### User-Agent问题 某些网站可能阻止默认的User-Agent,可以自定义: ```json { "url": "https://example.com", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" } ``` #### 超时问题 增加超时时间: ```json { "url": "https://slow-site.com", "timeout": 30000 } ``` ### 3. CSS选择器问题 #### 验证选择器 1. 在浏览器开发者工具中测试选择器 2. 使用在线CSS选择器测试工具 #### 调试选择器匹配 在代码中添加调试信息: ```typescript console.error('Debug: 找到元素数量', targetElement.length); console.error('Debug: 元素内容预览', targetElement.text().substring(0, 100)); ``` ### 4. Markdown转换问题 #### 测试转换功能 ```javascript import TurndownService from 'turndown'; const turndown = new TurndownService(); console.log(turndown.turndown('<h1>Test</h1><p>Content</p>')); ``` #### 自定义转换规则 ```javascript turndown.addRule('customRule', { filter: 'div', replacement: function(content) { return content; } }); ``` ## 性能调试 ### 1. 内存监控 ```javascript // 在关键位置添加内存监控 console.error('Memory usage:', process.memoryUsage()); ``` ### 2. 请求时间监控 ```javascript const startTime = Date.now(); // ... 执行请求 console.error('Request took:', Date.now() - startTime, 'ms'); ``` ### 3. 并发控制 ```javascript // 限制并发请求数量 const pLimit = require('p-limit'); const limit = pLimit(3); // 最多3个并发请求 ``` ## 集成测试 ### 1. 单元测试 ```bash npm test ``` ### 2. 端到端测试 使用真实的MCP客户端测试: ```bash # 配置MCP客户端 { "mcpServers": { "crawl-page": { "command": "node", "args": ["./dist/index.js"], "cwd": "/path/to/project" } } } ``` ## 生产环境调试 ### 1. 错误监控 ```javascript process.on('uncaughtException', (error) => { console.error('Uncaught Exception:', error); process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); }); ``` ### 2. 健康检查 ```javascript setInterval(() => { console.error('Health check: Server is running'); }, 60000); // 每分钟输出一次 ``` ### 3. 日志轮转 建议使用日志管理工具如winston: ```bash npm install winston ``` ## 调试最佳实践 ### 1. 逐步调试 1. 先测试基本HTTP请求 2. 再测试HTML解析 3. 最后测试Markdown转换 ### 2. 使用调试器 - 优先使用交互式调试器 - 对复杂问题使用VS Code断点调试 - 生产环境使用日志调试 ### 3. 保存调试信息 ```bash # 保存调试日志 DEBUG=true npm start 2>&1 | tee debug-$(date +%Y%m%d-%H%M%S).log ``` ### 4. 版本控制调试配置 - 将调试配置文件加入版本控制 - 为不同环境创建不同的调试配置 ## 故障排除清单 - [ ] 依赖是否正确安装 - [ ] 项目是否成功构建 - [ ] 网络连接是否正常 - [ ] URL格式是否正确 - [ ] CSS选择器是否有效 - [ ] 超时设置是否合理 - [ ] User-Agent是否被阻止 - [ ] 内存使用是否正常 - [ ] 日志是否有错误信息 ## 获取帮助 如果遇到无法解决的问题: 1. 查看详细错误日志 2. 使用调试器逐步排查 3. 检查网络和权限问题 4. 参考示例代码和文档 5. 在项目仓库提交issue