AI编码助手经常因过时的文档和幻觉而遇到问题。Docs MCP服务器通过提供一个个人、始终最新的知识库来解决这个问题。它从各种来源(网站、GitHub、npm、PyPI、本地文件)索引第三方文档,并通过模型上下文协议(MCP)提供强大的、版本感知的搜索工具。
这使得您的AI代理能够访问最新官方文档,从而极大地提高生成代码和集成细节的质量和可靠性。它是免费的、开源的,在本地运行以保护隐私,并无缝地集成到您的开发工作流程中。
LLM辅助编码承诺速度和效率,但往往因为以下原因表现不佳:
Docs MCP服务器通过以下方式解决了这些问题:
npx轻松设置。什么是语义分块?
语义分块基于结构(如标题、代码块和表格)将文档分割成有意义的部分,而不是任意的文本大小。Docs MCP服务器保留逻辑边界,保持代码和表格的完整性,并从HTML文档中移除导航杂乱。这确保LLMs接收到连贯、富含上下文的信息,以产生更准确和相关的答案。
选择您的部署方法:
运行一个包含MCP端点和Web界面的独立服务器。这是开始的最简单方式。
安装Docker。
启动服务器:
docker run --rm \
-v docs-mcp-data:/data \
-p 6280:6280 \
ghcr.io/arabold/docs-mcp-server:latest \
--protocol http --host 0.0.0.0 --port 6280
可选: 添加 -e OPENAI_API_KEY="your-openai-api-key" 以启用向量搜索,提高结果质量。
安装Node.js 20.x或更高版本。
启动服务器:
npx @arabold/docs-mcp-server@latest
默认情况下,服务器运行在6280端口。
可选: 前缀 OPENAI_API_KEY="your-openai-api-key" 以启用向量搜索,提高结果质量。
将此添加到您的MCP设置(VS Code、Claude Desktop等):
{
"mcpServers": {
"docs-mcp-server": {
"type": "sse",
"url": "http://localhost:6280/sse",
"disabled": false,
"autoApprove": []
}
}
}
替代连接类型:
// SSE(服务器发送事件)
"type": "sse", "url": "http://localhost:6280/sse"
// HTTP(流式传输)
"type": "http", "url": "http://localhost:6280/mcp"
更新配置后重启您的AI助手。
在浏览器中打开http://localhost:6280以管理文档和监控任务。
您还可以使用CLI命令与本地数据库交互:
# 列出已索引的库
OPENAI_API_KEY="your-key" npx @arabold/docs-mcp-server@latest list
# 搜索文档
OPENAI_API_KEY="your-key" npx @arabold/docs-mcp-server@latest search react "useState hook"
# 抓取新的文档(连接到正在运行的服务器的工作程序)
npx @arabold/docs-mcp-server@latest scrape react https://react.dev/reference/react --server-url http://localhost:8080/api
http://localhost:6280处打开Web界面。一旦任务完成,文档即可通过您的AI助手或Web UI进行搜索。

优点:
要停止服务器,请按Ctrl+C。
直接在您的AI助手内嵌入MCP服务器,无需单独进程或Web界面。此方法仅提供MCP集成。
将此添加到您的MCP设置(VS Code、Claude Desktop等):
{
"mcpServers": {
"docs-mcp-server": {
"command": "npx",
"args": ["@arabold/docs-mcp-server@latest"],
"disabled": false,
"autoApprove": []
}
}
}
可选: 要启用向量搜索以提高结果质量,添加一个带有API密钥的env部分:
{
"mcpServers": {
"docs-mcp-server": {
"command": "npx",
"args": ["@arabold/docs-mcp-server@latest"],
"env": {
"OPENAI_API_KEY": "sk-proj-..." // 您的OpenAI API密钥
},
"disabled": false,
"autoApprove": []
}
}
}
更新配置后重启应用程序。
选项1:使用MCP工具
您的AI助手可以使用内置的scrape_docs工具索引新的文档:
请从https://react.dev/reference/react抓取React文档,库名为"react",版本为"18.x"
选项2:启动Web界面
启动一个临时的Web界面,共享相同的数据库:
OPENAI_API_KEY="your-key" npx @arabold/docs-mcp-server@latest web --port 6281
然后打开http://localhost:6281以管理文档。完成后停止Web界面(Ctrl+C)。
选项3:CLI命令
直接使用CLI命令(避免与嵌入式服务器并发运行抓取任务):
# 列出库
OPENAI_API_KEY="your-key" npx @arabold/docs-mcp-server@latest list
# 搜索文档
OPENAI_API_KEY="your-key" npx @arabold/docs-mcp-server@latest search react "useState hook"
优点:
限制:
您可以使用file://URL作为源来索引来自本地文件系统的文档。这在Web UI和CLI中都适用。
示例:
https://react.dev/reference/reactfile:///Users/me/docs/index.htmlfile:///Users/me/docs/my-library要求:
text/*的文件都会被处理。这包括HTML、Markdown、纯文本以及.js、.ts、.tsx、.css等源代码文件。二进制文件、PDF、图像和其他非文本格式将被忽略。file://前缀表示本地文件/文件夹。file://URL中使用容器路径。docker run --rm \
-e OPENAI_API_KEY="your-key" \
-v /绝对路径/to/docs:/docs:ro \
-v docs-mcp-data:/data \
-p 6280:6280 \
ghcr.io/arabold/docs-mcp-server:latest \
scrape mylib file:///docs/my-library
file:///docs/my-library(与容器路径匹配)。有关更多详细信息,请参阅Web UI和CLI帮助中的工具提示。
对于生产部署或需要扩展处理的情况,使用Docker Compose运行单独的服务。系统根据配置选择本地进程内工作者或远程工作者客户端,确保跨模式行为一致。
启动服务:
# 克隆仓库(以获取docker-compose.yml)
git clone https://github.com/arabold/docs-mcp-server.git
cd docs-mcp-server
# 设置环境变量
export OPENAI_API_KEY="your-key-here"
# 启动所有服务
docker compose up -d
服务架构:
/sse端点配置您的MCP客户端:
{
"mcpServers": {
"docs-mcp-server": {
"type": "sse",
"url": "http://localhost:6280/sse",
"disabled": false,
"autoApprove": []
}
}
}
替代连接类型:
// SSE(服务器发送事件)
"type": "sse", "url": "http://localhost:6280/sse"
// HTTP(流式传输)
"type": "http", "url": "http://localhost:6280/mcp"
访问接口:
http://localhost:6281http://localhost:6280/mcphttp://localhost:6280/sse这种架构允许独立扩展处理(工作者)和用户界面。
Docs MCP服务器可以在没有任何配置的情况下运行,并仅使用全文搜索。要启用向量搜索以提高结果质量,请通过环境变量配置嵌入提供者。
许多CLI参数可以通过环境变量覆盖。这对于Docker部署、CI/CD管道或设置默认值非常有用。
| 环境变量 | CLI参数 | 描述 | 用于命令 |
|---|---|---|---|
DOCS_MCP_STORE_PATH | --store-path | 自定义数据存储目录路径 | 所有 |
DOCS_MCP_TELEMETRY | --no-telemetry | 禁用遥测(设为false禁用) | 所有 |
DOCS_MCP_PROTOCOL | --protocol | MCP服务器协议(自动、标准I/O、HTTP) | 默认、MCP |
DOCS_MCP_PORT | --port | 服务器端口 | 默认、MCP、Web、Worker |
DOCS_MCP_WEB_PORT | --port(Web命令) | Web界面端口(仅限Web命令) | Web |
PORT | --port | 服务器端口(如果未设置DOCS_MCP_PORT则使用) | 默认、MCP、Web、Worker |
DOCS_MCP_HOST | --host | 服务器主机/绑定地址 | 默认、MCP、Web、Worker |
HOST | --host | 服务器主机(如果未设置DOCS_MCP_HOST则使用) | 默认、MCP、Web、Worker |
DOCS_MCP_EMBEDDING_MODEL | --embedding-model | 嵌入模型配置 | 默认、MCP、Web、Worker |
DOCS_MCP_AUTH_ENABLED | --auth-enabled | 启用OAuth2/OIDC认证 | 默认、MCP |
DOCS_MCP_AUTH_ISSUER_URL | --auth-issuer-url | OAuth2提供者发行人/发现URL | 默认、MCP |
DOCS_MCP_AUTH_AUDIENCE | --auth-audience | JWT受众声明(资源标识符) | 默认、MCP |
使用示例:
# 通过环境变量设置
export DOCS_MCP_PORT=8080
export DOCS_MCP_HOST=0.0.0.0
export DOCS_MCP_EMBEDDING_MODEL=text-embedding-3-small
npx @arabold/docs-mcp-server@latest
# 通过CLI参数覆盖(优先级更高)
DOCS_MCP_PORT=8080 npx @arabold/docs-mcp-server@latest --port 9090
Docs MCP服务器通过环境变量进行配置。在您的shell、Docker或MCP客户端配置中设置这些变量。
| 变量 | 描述 |
|---|---|
DOCS_MCP_EMBEDDING_MODEL | 使用的嵌入模型(见下文选项)。 |
OPENAI_API_KEY | OpenAI API密钥用于嵌入。 |
OPENAI_API_BASE | 自定义OpenAI兼容API端点(例如,Ollama)。 |
GOOGLE_API_KEY | Google API密钥用于Gemini嵌入。 |
GOOGLE_APPLICATION_CREDENTIALS | Google服务账户JSON的路径用于Vertex AI。 |
AWS_ACCESS_KEY_ID | AWS密钥用于Bedrock嵌入。 |
AWS_SECRET_ACCESS_KEY | AWS密钥用于Bedrock嵌入。 |
AWS_REGION | AWS区域用于Bedrock。 |
AZURE_OPENAI_API_KEY | Azure OpenAI API密钥。 |
AZURE_OPENAI_API_INSTANCE_NAME | Azure OpenAI实例名称。 |
AZURE_OPENAI_API_DEPLOYMENT_NAME | Azure OpenAI部署名称。 |
AZURE_OPENAI_API_VERSION | Azure OpenAI API版本。 |
参见上面的示例以了解使用方法。
设置DOCS_MCP_EMBEDDING_MODEL为以下之一:
text-embedding-3-small(默认,OpenAI)openai:snowflake-arctic-embed2(OpenAI兼容,Ollama)vertex:text-embedding-004(Google Vertex AI)gemini:embedding-001(Google Gemini)aws:amazon.titan-embed-text-v1(AWS Bedrock)microsoft:text-embedding-ada-002(Azure OpenAI)以下是不同嵌入提供商的完整配置示例:
OpenAI(默认):
OPENAI_API_KEY="sk-proj-your-openai-api-key" \
DOCS_MCP_EMBEDDING_MODEL="text-embedding-3-small" \
npx @arabold/docs-mcp-server@latest
Ollama(本地):
OPENAI_API_KEY="ollama" \
OPENAI_API_BASE="http