基于MCP协议的开发文档服务器,专门设计用于各种开发框架文档。提供多线程文档爬取、本地文档加载、关键词搜索及文档详情检索等功能。

从配置到执行npm run crawl的完整文档爬取过程

通过光标查询API并获取精确文档结果的过程
在使用光标进行各种框架开发时,我们经常遇到由AI对框架API理解不准确导致的“幻觉”问题:
此MCP服务器通过提供精准的文档检索能力有效解决了上述问题:
通过集成此MCP服务器,可以显著提高光标在各种框架开发过程中的准确性和效率,避免因“幻觉”而产生的开发障碍。
/
├── server.js # 服务器入口文件
├── docs/ # 文档数据目录
│ ├── taro-docs.json # Taro框架文档
│ └── taroify-docs.json # Taroify组件库文档
├── scripts/ # 脚本目录
│ └── crawl.js # 文档爬取脚本
├── tests/ # 测试目录
│ └── mcp.test.js # MCP测试脚本
├── config/ # 配置文件目录
│ └── doc-sources.js # 文档源配置
└── package.json # 项目配置
如果你已经安装了Chrome浏览器,并希望puppeteer使用你已有的版本,你可以设置PUPPETEER_SKIP_OWNLOAD环境变量:
macOS/Linux:
export PUPPETEER_SKIP_DOWNLOAD=true
npm install
Windows (命令提示符):
set PUPPETEER_SKIP_DOWNLOAD=true
npm install
Windows (PowerShell):
$env:PUPPETEER_SKIP_DOWNLOAD = $true
npm install
爬虫用于获取框架文档,是使用服务器之前的重要步骤。你需要首先创建一个爬虫配置文件,然后运行爬虫脚本。
在config目录中创建doc-sources.js文件,参考以下格式:
// config/doc-sources.js
// 文档源配置
export const docSources = [
{
// 文档源名称 - 作为搜索时的source参数
name: "taro",
// 文档网站基础URL
url: "https://docs.taro.zone/docs",
// 包含模式 - 指定要爬取的URL路径(空数组表示所有页面)
includePatterns: [
],
// 排除模式 - 指定不爬取的URL路径(支持正则表达式)
excludePatterns: [
/\d\.x/, // 排除版本号页面
/apis/ // 排除API页面
]
},
{
name: "taroify",
url: "https://taroify.github.io/taroify.com/introduce/",
includePatterns: [
"/components/", // 所有组件页面
"/components/*/", // 组件子页面
"/components/*/*/" // 组件子子页面
],
excludePatterns: []
},
{
name: "jquery",
url: "https://www.jquery123.com/",
includePatterns: [], // 空数组表示爬取所有页面
excludePatterns: [
/version/ // 排除版本相关页面
]
}
];
// 爬虫全局配置
export const crawlerConfig = {
// 并行抓取的线程数
maxConcurrency: 40,
// 页面加载超时时间(毫秒)
pageLoadTimeout: 30000,
// 内容加载超时时间(毫秒)
contentLoadTimeout: 5000,
// 是否显示浏览器窗口(false为无界面模式)
headless: false,
// 重试次数
maxRetries: 3,
// 重试间隔(毫秒)
retryDelay: 2000,
// 请求间隔(毫秒)
requestDelay: 1000
};
配置完成后,执行以下命令启动爬虫:
npm run crawl
爬虫将根据配置自动爬取指定的文档网站,并保存符合MCP服务器要求的JSON格式的结果。
爬虫完成后,将在docs目录生成如下格式的JSON文件:
{
"source": {
"name": "taro",
"url": "https://docs.taro.zone/docs"
},
"lastUpdated": "2024-05-20T12:00:00.000Z",
"pages": {
"https://docs.taro.zone/docs/components-desc": {
"title": "组件库说明 | Taro 文档",
"content": "页面内容...",
"lastCrawled": "2024-05-20T12:00:00.000Z"
},
"https://docs.taro.zone/docs/components/viewcontainer/view": {
"title": "View | Taro 文档",
"content": "View 组件是一个容器组件...",
"lastCrawled": "2024-05-20T12:00:00.000Z"
}
// ... 更多页面
}
}
如果需要自定义爬虫行为,可以修改scripts/crawl.js文档。你可以添加特定网站的解析逻辑,自定义内容处理,或增强爬取能力。
npm start
启动后,服务器将检测并加载docs目录中的文档文件,并通过MCP协议提供接口服务。服务器将输出加载的文档源信息和页面数量。
npm test
执行测试脚本来验证MCP服务器的基本功能和接口是否正常工作。
文档文件应为包含以下结构的JSON文件:
{
"source": {
"name": "taro",
"url": "https://docs.taro.zone/docs"
},
"lastUpdated": "2024-03-27T12:00:00.000Z",
"pages": {
"https://docs.taro.zone/docs/components-desc": {
"title": "组件库说明 | Taro 文档",
"content": "页面内容..."
},
// 更多页面...
}
}
文档加载过程:
docs目录中的JSON文件系统内置的爬虫支持从各种框架官方文档站点爬取内容并将其转换为本地可用的文档格式。爬虫特性包括:
服务器提供了以下MCP工具:
search_docs - 搜索文档
query:搜索关键词(字符串,必填)source:文档源名称(字符串,可选)limit:最大结果数(数字,可选,默认值为10)get_doc_detail - 获取文档详情
id:文档ID(字符串,必填)source:文档源名称(字符串,可选)// 搜索文档
const searchRequest = {
jsonrpc: "2.0",
id: "search1",
method: "tools/call",
params: {
name: "search_docs",
arguments: {
query: "组件",
source: "taro",
limit: 5
}
}
};
// 获取文档详情
const detailRequest = {
jsonrpc: "2.0",
id: "detail1",
method: "tools/call",
params: {
name: "get_doc_detail",
arguments: {
id: "https://docs.taro.zone/docs/components-desc",
source: "taro"
}
}
};
// 重新加载文档
const reloadRequest = {
jsonrpc: "2.0",
id: "reload1",
method: "tools/call",
params: {
name: "search_docs",
arguments: {
query: "reload"
}
}
};
要在光标中使用此服务器,需要添加以下配置mcp.json:
{
"mcpServers": {
"文档 MCP 服务器": {
"command": "node",
"args": ["/绝对路径/server.js"],
"env": { "NODE_ENV": "development" }
}
}
}
注意:请确保使用服务器文件的完整绝对路径而不是相对路径。当服务器启动时,它将自动输出适用于光标的配置示例。
项目包含自动化测试,可以使用以下命令运行:
npm test
测试将检查服务器的基本功能:
该项目目前处于持续开发中,以下是我们的计划增加的功能:
如果您有任何功能建议或问题,请随时提交Issue或Pull Request。