一个用于获取和搜索第三方包文档的MCP服务器。
sqlite-vec 实现高效的向量存储,并使用 FTS5 实现强大的全文搜索。该项目提供了一个 Model Context Protocol (MCP) 服务器,设计用于抓取、处理、索引和搜索各种软件库和包的文档。它从指定的 URL 获取内容,使用语义分割技术将其分割成有意义的片段,使用 OpenAI 生成向量嵌入,并将数据存储在 SQLite 数据库中。服务器利用 sqlite-vec 实现高效的向量相似度搜索,并使用 FTS5 实现全文搜索能力,结合这两种方法以获得混合搜索结果。它支持版本控制,允许不同库版本(包括无版本的内容)被单独存储和查询。
服务器暴露 MCP 工具用于:
scrape_docs):立即返回 jobId。get_job_status):获取特定任务的当前状态和进度。list_jobs):显示最近和正在进行的任务。cancel_job):尝试停止正在运行或排队的任务。search_docs)。list_libraries)。find_version)。remove_docs)。fetch_url):抓取 URL 并返回其内容作为 Markdown。本服务已全面适配 OpenRouter API,支持主流大模型(GPT-4.1、Claude 3.7、Gemini 2.5、Grok、Qwen 等),并支持多模态输入(文本+图片)。
src/utils/openrouter.ts 的 OPENROUTER_MODELSOPENAI_API_KEY:OpenRouter API Key(必填)OPENAI_API_BASE:OpenRouter API Base,推荐 https://openrouter.ai/api/v1MODEL_ID:默认模型(如 openai/gpt-4.1),可选import { openrouterChat } from './src/utils/openrouter';
const messages = [
{
role: 'user',
content: [
{ type: 'text', text: '这张图片里有什么?' },
{ type: 'image_url', image_url: { url: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg' } }
]
}
];
const result = await openrouterChat({
model: 'openai/gpt--4.1',
messages,
referer: 'https://your-site.com', // 可选
xTitle: '您的站点名称' // 可选
// 还可加 extraBody, headers 等参数
});
console.log(result);
如需支持流式输出、函数调用、system prompt、stop、temperature、max_tokens 等 OpenRouter API 参数,只需通过 extraBody 字段传递即可,无需修改底层代码。
Embedding 功能已禁用!
本项目当前版本已彻底移除所有 embedding 相关实现和依赖,不再支持向量生成与检索。所有 embedding 相关 API 均会直接抛出异常提示。
仅保留全文检索与大模型 chat/completions 能力。
以下环境变量支持配置嵌入模型行为:
DOCS_MCP_EMBEDDING_MODEL: 可选。 格式:provider:model_name 或仅 model_name(默认为 text-embedding-3-small)。支持的提供商及其所需的环境变量:
openai(默认):使用 OpenAI 的嵌入模型
OPENAI_API_KEY: 必需。 您的 OpenAI API 密钥OPENAI_ORG_ID: 可选。 您的 OpenAI 组织 IDOPENAI_API_BASE: 可选。 自定义兼容 OpenAI 的 API 基础 URL(例如,Ollama、Azure OpenAI)vertex: 使用 Google Cloud Vertex AI 嵌入
GOOGLE_APPLICATION_CREDENTIALS: 必需。 服务帐户 JSON 密钥文件的路径gemini: 使用 Google 生成式 AI(Gemini)嵌入
GOOGLE_API_KEY: 必需。 您的 Google API 密钥aws: 使用 AWS Bedrock 嵌入
AWS_ACCESS_KEY_ID: 必需。 AWS 访问密钥AWS_SECRET_ACCESS_KEY: 必需。 AWS 秘密密钥AWS_REGION 或 BEDROCK_AWS_REGION: 必需。 Bedrock 的 AWS 区域microsoft: 使用 Azure OpenAI 嵌入
AZURE_OPENAI_API_KEY: 必需。 Azure OpenAI API 密钥AZURE_OPENAI_API_INSTANCE_NAME: 必需。 Azure 实例名称AZURE_OPENAI_API_DEPLOYMENT_NAME: 必需。 Azure 部署名称AZURE_OPENAI_API_VERSION: 必需。 Azure API 版本数据库模式使用固定维度 1536 的嵌入向量。仅支持产生维度 ≤ 1536 的模型,除了某些提供商(如 Gemini)支持维度缩减。
对于兼容 OpenAI 的 API(如 Ollama),使用 openai 提供商并将 OPENAI_API_BASE 指向您的端点。
这些变量可以在您运行服务器的方式(Docker、npx 或从源代码)中设置。
有两种方式运行 docs-mcp-server:
这是大多数用户的推荐方法。它简单、直接且不需要安装 Node.js。
确保 Docker 已安装并运行。
配置您的 MCP 设置:
Claude/Cline/Roo 配置示例: 将以下配置块添加到您的 MCP 设置文件中(根据需要调整路径):
{
"mcpServers": {
"docs-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAI_API_KEY",
"-v",
"docs-mcp-data:/data",
"ghcr.io/arabold/docs-mcp-server:latest"
],
"env": {
"OPENAI_API_KEY": "sk-proj-..." // 必须:替换为您自己的密钥
},
"disabled": false,
"autoApprove": []
}
}
}
记得将 "sk-proj-..." 替换为您实际的 OpenAI API 密钥并重启应用程序。
就这样! 服务器现在可供您的 AI 助手使用。
Docker 容器设置:
-i: 保持 STDIN 打开,这对于 MCP 通过 stdio 的通信至关重要。--rm: 当容器退出时自动删除容器。-e OPENAI_API_KEY: 必需。 设置您的 OpenAI API 密钥。-v docs-mcp-data:/data: 持久化所需。 挂载 Docker 命名卷 docs-mcp-data 以存储数据库。您可以替换为特定主机路径(例如,-v /path/on/host:/data)。任何配置环境变量(参见上面的配置)都可以使用 -e 标志传递给容器。例如:
# 示例 1:使用 OpenAI 嵌入(默认)
docker run -i --rm \
-e OPENAI_API_KEY="your-key-here" \
-e DOCS_MCP_EMBEDDING_MODEL="text-embedding-3-small" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest
# 示例 2:使用兼容 OpenAI 的 API(如 Ollama)
docker run -i --rm \
-e OPENAI_API_KEY="your-key-here" \
-e OPENAI_API_BASE="http://localhost:11434/v1" \
-e DOCS_MCP_EMBEDDING_MODEL="embeddings" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest
# 示例 3a:使用 Google Cloud Vertex AI 嵌入
docker run -i --rm \
-e OPENAI_API_KEY="your-openai-key" \ # 保持为回退到 OpenAI
-e DOCS_MCP_EMBEDDING_MODEL="vertex:text-embedding-004" \
-e GOOGLE_APPLICATION_CREDENTIALS="/app/gcp-key.json" \
-v docs-mcp-data:/data \
-v /path/to/gcp-key.json:/app/gcp-key.json:ro \
ghcr.io/arabold/docs-mcp-server:latest
# 示例 3b:使用 Google 生成式 AI(Gemini)嵌入
docker run -i --rm \
-e OPENAI_API_KEY="your-openai-key" \ # 保持为回退到 OpenAI
-e DOCS_MCP_EMBEDDING_MODEL="gemini:embedding-001" \
-e GOOGLE_API_KEY="your-google-api-key" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest
# 示例 4:使用 AWS Bedrock 嵌入
docker run -i --rm \
-e AWS_ACCESS_KEY_ID="your-aws-key" \
-e AWS_SECRET_ACCESS_KEY="your-aws-secret" \
-e AWS_REGION="us-east-1" \
-e DOCS_MCP_EMBEDDING_MODEL="aws:amazon.titan-embed-text-v1" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest
# 示例 5:使用 Azure OpenAI 嵌入
docker run -i --rm \
-e AZURE_OPENAI_API_KEY="your-azure-key" \
-e AZURE_OPENAI_API_INSTANCE_NAME="your-instance" \
-e AZURE_OPENAI_API_DEPLOYMENT_NAME="your-deployment" \
-e AZURE_OPENAI_API_VERSION="2024-02-01" \
-e DOCS_MCP_EMBEDDING_MODEL="microsoft:text-embedding-ada-002" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest
当您需要本地文件访问(例如,从本地文件系统索引文档)时推荐此方法。虽然也可以通过挂载路径到 Docker 容器来实现这一点,但使用 npx 更简单,但需要安装 Node.js。
确保 Node.js 已安装。
配置您的 MCP 设置:
Claude/Cline/Roo 配置示例: 将以下配置块添加到您的 MCP 设置文件中:
{
"mcpServers": {
"docs-mcp-server": {
"command": "npx",
"args": ["-y", "--package=@arabold/docs-mcp-server", "docs-server"],
"env": {
"OPENAI_API_KEY": "sk-proj-..." // 必须:替换为您自己的密钥
},
"disabled": false,
"autoApprove": []
}
}
}
记得将 "sk-proj-..." 替换为您实际的 OpenAI API 密钥并重启应用程序。
就这样! 服务器现在可供您的 AI 助手使用。
您可以使用 CLI 直接管理文档,无论是通过 Docker 还是 npx。重要: 确保服务器和 CLI 使用相同的方法(Docker 或 npx),以确保访问相同的已索引文档。
如果您使用 Docker 运行服务器,请也使用 Docker 运行 CLI:
docker run --rm \
-e OPENAI_API_KEY="your-openai-api-key-here" \
-v docs-mcp-data:/data \
ghcr.io/arabold/docs-mcp-server:latest \
docs-cli <command> [options]
确保使用与服务器相同的卷名称(例如,docs-mcp-data)。任何配置环境变量(参见上面的配置)都可以使用 -e 标志传递,就像服务器一样。
如果您使用 npx 运行服务器,请也使用 npx 运行 CLI:
npx -y --package=@arabold/docs-mcp-server docs-cli <command> [options]
npx 方法将使用系统默认的数据目录(通常在您的主目录中),确保服务器和 CLI 之间的一致性。
(参见“CLI 命令参考”以了解可用命令和选项。)
docs-cli 提供了管理文档索引的命令。可以通过 Docker(docker run -v docs-mcp-data:/data ghcr.io/arabold/docs-mcp-server:latest docs-cli ...)或 npx(npx -y --package=@arabold/docs-mcp-server docs-cli ...)访问。
通用帮助:
docs-cli --help
# 或
npx -y --package=@arabold/docs-mcp-server docs-cli --help
命令特定帮助:(如果未全局安装,请将 docs-cli 替换为 npx... 命令)
docs-cli scrape --help
docs-cli search --help
docs-cli fetch-url --help
docs-cli find-version --help
docs-cli remove --help
docs-cli list --help
fetch-url)抓取单个 URL 并将其内容转换为 Markdown。与 scrape 不同,此命令不会爬取链接或存储内容。
docs-cli fetch-url <url> [options]
选项:
--no-follow-redirects: 禁用跟随 HTTP 重定向(默认:跟随重定向)。--scrape-mode <mode>: HTML 处理策略:'fetch'(快速,较少 JS),'playwright'(慢,全 JS),'auto'(默认)。示例:
# 抓取 URL 并转换为 Markdown
docs-cli fetch-url https://example.com/page.html
scrape)从给定 URL 抓取并索引特定库的文档。
docs-cli scrape <library> <url> [options]
选项:
-v, --version <string>: 与抓取文档关联的具体版本。
1.2.3)、预发布版本(1.2.3-beta.1)或部分版本(1,1.2,分别扩展为 1.0.0,1.2.0)。-p, --max-pages <number>: 最大抓取页面数(默认:1000)。-d, --max-depth <number>: 最大导航深度(默认:3)。-c, --max-concurrency <number>: 最大并发请求数(默认:3)。--scope <scope>: 定义爬行边界:'subpages'(默认),'hostname',或 'domain'。--no-follow-redirects: 禁用跟随 HTTP 重定向(默认:跟随重定向)。--scrape-mode <mode>: HTML 处理策略:'fetch'(快速,较少 JS),'playwright