内容
# 软件包文档 MCP 服务器
MCP(模型上下文协议)服务器,为大型语言模型提供跨多种编程语言的软件包文档访问,并具备语言服务器协议(LSP)功能。
**_注意:目前我不积极维护此代码库。虽然它不提供对私有软件包文档的访问——[Context7](https://github.com/upstash/context7) MCP 服务器和服务满足我的需求,主要是用于公共软件包文档。我个人通过我的 [mcp-devtools](https://github.com/sammcj/mcp-devtools) MCP 服务器使用 Context7,该服务器正在积极维护。_**
## 功能特点
- **多语言支持**:
- 通过 `go doc` 获取 Go 软件包文档
- 通过内置 `help()` 获取 Python 库文档
- 通过注册表文档获取 NPM 软件包文档(包括私有注册表)
- 通过 crates.io 和 docs.rs 获取 Rust crates 文档
- **智能文档解析**:
- 结构化输出,包含描述、使用方法和示例
- 集中信息,避免上下文过载
- 支持特定符号/函数查找
- 跨文档的模糊和精确搜索功能
- **高级搜索功能**:
- 软件包文档内搜索
- 模糊匹配,支持灵活查询
- 上下文感知结果,具备相关性评分
- 从搜索结果中提取符号
- **语言服务器协议(LSP)支持**:
- 代码符号悬停信息
- 代码补全
- 诊断信息(错误和警告)
- 目前支持 TypeScript/JavaScript
- 可扩展支持其他语言
- **性能优化**:
- 内置缓存
- 高效解析
- 最小内存占用
## 安装
注意:不建议使用 `npx -y` 运行 MCP 服务器,因为这本质上信任您在当时下载的软件包。我强烈建议在本地克隆仓库或构建成容器镜像。
```bash
npx -y mcp-package-docs
```
## 使用
### 作为 MCP 服务器
1. 添加到您的 MCP 设置配置文件:
```json
{
"mcpServers": {
"package-docs": {
"command": "npx",
"args": ["-y", "mcp-package-docs"],
"env": {
"ENABLE_LSP": "true" // 可选:启用语言服务器协议支持
}
}
}
}
```
2. LSP 功能包含常见语言服务器的默认配置:
- TypeScript/JavaScript: `typescript-language-server --stdio`
- HTML: `vscode-html-language-server --stdio`
- CSS: `vscode-css-language-server --stdio`
- JSON: `vscode-json-language-server --stdio`
您可以根据需要覆盖这些默认配置:
```json
{
"mcpServers": {
"package-docs": {
"command": "npx",
"args": ["-y", "mcp-package-docs"],
"env": {
"ENABLE_LSP": "true",
"TYPESCRIPT_SERVER": "{\"command\":\"/custom/path/typescript-language-server\",\"args\":[\"--stdio\"]}"
}
}
}
}
```
3. 服务器提供以下工具:
#### lookup_go_doc / describe_go_package
获取 Go 软件包文档
```typescript
{
"name": "describe_go_package",
"arguments": {
"package": "encoding/json", // 必需
"symbol": "Marshal" // 可选
}
}
```
#### lookup_python_doc / describe_python_package
获取 Python 软件包文档
```typescript
{
"name": "describe_python_package",
"arguments": {
"package": "requests", // 必需
"symbol": "get" // 可选
}
}
```
#### describe_rust_package
从 crates.io 和 docs.rs 获取 Rust crate 文档
```typescript
{
"name": "describe_rust_package",
"arguments": {
"package": "serde", // 必需:crate 名称
"version": "1.0.219" // 可选:特定版本
}
}
```
#### search_package_docs
在软件包文档中搜索
```typescript
{
"name": "search_package_docs",
"arguments": {
"package": "requests", // 必需:软件包名称
"query": "authentication", // 必需:搜索查询
"language": "python", // 必需: "go", "python", "npm", "swift", 或 "rust"
"fuzzy": true // 可选:启用模糊匹配(默认:true)
}
}
```
#### lookup_npm_doc / describe_npm_package
从公共和私有注册表获取 NPM 软件包文档。自动根据您的 .npmrc 配置文件使用适当的注册表。
```typescript
{
"name": "describe_npm_package",
"arguments": {
"package": "axios", // 必需 - 支持作用域(@org/pkg)和非作用域软件包
"version": "1.6.0" // 可选
}
}
```
该工具读取您的 ~/.npmrc 文件以确定每个软件包的正确注册表:
- 使用作用域注册表配置(例如,@mycompany:registry=...)
- 支持私有注册表(GitHub Packages、GitLab、Nexus、Artifactory 等)
- 如果未配置自定义注册表,则回退到默认 npm 注册表
示例 .npmrc 配置文件:
```npmrc
registry=https://nexus.mycompany.com/repository/npm-group/
@mycompany:registry=https://nexus.mycompany.com/repository/npm-private/
@mycompany-ct:registry=https://npm.pkg.github.com/
```
### 语言服务器协议(LSP)工具
启用 LSP 支持时,以下附加工具可用:
#### get_hover
获取文档中某个位置的悬停信息
```typescript
{
"name": "get_hover",
"arguments": {
"languageId": "typescript", // 必需:语言标识符(例如,"typescript", "javascript")
"filePath": "src/index.ts", // 必需:源文件路径
"content": "const x = 1;", // 必需:文件内容
"line": 0, // 必需:零基行号
"character": 6, // 必需:零基字符位置
"projectRoot": "/path/to/project" // 可选:项目根目录
}
}
```
#### get_completions
获取文档中某个位置的代码补全建议
```typescript
{
"name": "get_completions",
"arguments": {
"languageId": "typescript", // 必需:语言标识符
"filePath": "src/index.ts", // 必需:源文件路径
"content": "const arr = []; arr.", // 必需:文件内容
"line": 0, // 必需:零基行号
"character": 16, // 必需:零基字符位置
"projectRoot": "/path/to/project" // 可选:项目根目录
}
}
```
#### get_diagnostics
获取文档的诊断信息(错误、警告)
```typescript
{
"name": "get_diagnostics",
"arguments": {
"languageId": "typescript", // 必需:语言标识符
"filePath": "src/index.ts", // 必需:源文件路径
"content": "const x: string = 1;", // 必需:文件内容
"projectRoot": "/path/to/project" // 可选:项目根目录
}
}
```
### 在大型语言模型中的示例用法
#### 查询文档
```typescript
// 查询 Go 文档
const goDocResult = await use_mcp_tool({
server_name: "package-docs",
tool_name: "describe_go_package",
arguments: {
package: "encoding/json",
symbol: "Marshal"
}
});
// 查询 Python 文档
const pythonDocResult = await use_mcp_tool({
server_name: "package-docs",
tool_name: "describe_python_package",
arguments: {
package: "requests",
symbol: "post"
}
});
// 查询 Rust 文档
const rustDocResult = await use_mcp_tool({
server_name: "package-docs",
tool_name: "describe_rust_package",
arguments: {
package: "serde"
}
});
// 在文档中搜索
const searchResult = await use_mcp_tool({
server_name: "package-docs",
tool_name: "search_package_docs",
arguments: {
package: "serde",
query: "serialize",
language: "rust",
fuzzy: true
}
});
// 使用 LSP 获取悬停信息(启用 LSP 时)
const hoverResult = await use_mcp_tool({
server_name: "package-docs",
tool_name: "get_hover",
arguments: {
languageId: "typescript",
filePath: "src/index.ts",
content: "const axios = require('axios');\naxios.get",
line: 1,
character: 7
}
});
```
## 需求
- Node.js >= 20
- Go(用于 Go 软件包文档)
- Python 3(用于 Python 软件包文档)
- 互联网连接(用于 NPM 软件包文档和 Rust crate 文档)
- 语言服务器(用于 LSP 功能):
- TypeScript/JavaScript: `npm install -g typescript-language-server typescript`
- HTML/CSS/JSON: `npm install -g vscode-langservers-extracted`
## 开发
```bash
# 安装依赖
npm i
# 构建
npm run build
# 监听模式
npm run watch
```
## 贡献
1. 分叉仓库
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 打开拉取请求
## 许可证
该项目根据 MIT 许可证授权 - 参见 [LICENSE](LICENSE) 文件了解详情。
连接信息
猜你喜欢
everything-claude-code
完整的 Claude Code 配置集合 - agents、skills、hooks、commands、rules、MCPs。来自 Anthropic...
MarkItDown MCP
MarkItDown-MCP是一个轻量级服务器,用于将URI转换为Markdown。
Firecrawl
Firecrawl MCP Server 实现了网页抓取、爬虫和内容提取功能。
cc-switch
跨平台的Claude Code、Codex和Gemini CLI一体化助手。
servers
# 模型上下文协议服务器
servers
# 模型上下文协议服务器