一、项目概况
二、技术栈
| 分类 | 技术 | 版本 |
|---|
| 运行时 | Node.js | v20.14.0 |
| 语言 | TypeScript | v5.4.5 |
| 框架 | @modelcontextprotocol/sdk | v1.15.0 |
| 浏览器自动化 | Playwright | v1.48.0 |
| HTTP客户端 | Axios | v1.6.8 |
| HTML解析 | Cheerio | v1.0.0-rc.12 |
| 数据验证 | Zod | v3.22.0 |
三、项目结构
PHP
C:\Users\username\Qwen web se\
├── dist/ # 编译后的 JavaScript
│ ├── index.js # MCP 服务器入口
│ ├── browser-pool.js # 浏览器池管理
│ ├── content-extractor.js # 页面内容提取器
│ ├── enhanced-content-extractor.js # 增强内容提取器
│ ├── search-engine.js # 搜索引擎实现
│ ├── rate-limiter.js # 限流控制
│ ├── types.js # TypeScript 类型定义
│ └── utils.js # 工具函数
├── node-v20.14.0-win-x64/ # 便携版 Node.js
├── node_modules/ # npm 依赖
├── package.json
├── package-lock.json
└── PROJECT_SUMMARY.md # 本文件
四、核心功能
4.1 Web 搜索工具
| 工具名 | 功能 | 说明 |
|---|
full-web-search | 完整网页搜索 | 多引擎搜索 + 页面内容提取 |
get-web-search-summaries | 轻量级搜索 | 仅返回摘要,速度更快 |
get-single-web-page-content | 单页内容提取 | 提取指定 URL 的页面内容 |
4.2 搜索策略
- 优先顺序: Bing → Brave → DuckDuckGo
- 浏览器隔离: 每个搜索引擎使用独立浏览器实例
- 并发处理: 同时提取多个页面内容
- 智能降级: axios 请求失败后自动切换到浏览器模式
五、配置文件
LM Studio 配置文件路径: C:\Users\username\.lmstudio\mcp.json
PHP
{
"mcpServers": {
"web-search": {
"command": "C:\\Users\\username\\Qwen web se\\node-v20.14.0-win-x64\\node.exe",
"args": ["C:\\Users\\username\\Qwen web se\\dist\\index.js"],
"env": {
"MAX_CONTENT_LENGTH": "500000",
"BROWSER_HEADLESS": "true",
"MAX_BROWSERS": "3",
"DEFAULT_TIMEOUT": "6000",
"BROWSER_FALLBACK_THRESHOLD": "3"
}
},
"playwright": {
"command": "C:\\Users\\username\\Qwen web se\\node-v20.14.0-win-x64\\node.exe",
"args": ["C:\\Users\\username\\Qwen web se\\node_modules\\@playwright\\mcp\\cli.js"],
"env": {
"PLAYWRIGHT_MCP_EXECUTABLE_PATH": "C:\\Users\\username\\AppData\\Local\\ms-playwright\\chromium-1228\\chrome-win64\\chrome.exe"
}
},
"filesystem": {
"command": "C:\\Users\\username\\Qwen web se\\node-v20.14.0-win-x64\\node.exe",
"args": ["C:\\Users\\username\\Qwen web se\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js", "C:\\Users\\username\\lmstudio_room"]
}
}
}
六、环境变量配置
| 变量 | 默认值 | 说明 |
|---|
MAX_CONTENT_LENGTH | 500000 | 最大内容长度(字符) |
DEFAULT_TIMEOUT | 6000 | 请求超时(毫秒) |
MAX_BROWSERS | 3 | 最大浏览器实例数 |
BROWSER_HEADLESS | true | 是否无头模式 |
BROWSER_FALLBACK_THRESHOLD | 3 | axios 失败次数阈值 |
七、可用脚本
PHP
npm run build # TypeScript 编译
npm run dev # 开发模式(热更新)
npm start # 启动服务器
npm run lint # ESLint 检查
npm run format # Prettier 格式化
八、已安装的 MCP 服务
| 服务 | 状态 | 功能 |
|---|
| web-search | ✅ 正常运行 | 网页搜索与内容提取 |
| filesystem | ✅ 正常运行 | 文件系统操作 |
| playwright | ✅ 正常运行 | 浏览器自动化 |
九、使用方式
- 启动 LM Studio
- 加载支持工具调用的模型(推荐:Qwen3, Gemma 3)
- 点击工具栏的工具图标(🔧)
- 在对话中输入搜索请求,模型会自动调用 web-search 工具
示例:
十、注意事项
- 需要良好的网络连接以访问搜索引擎
- 首次运行可能需要较长时间初始化浏览器
- 建议使用较新的大语言模型以获得更好的工具调用效果