Crates Docs MCP 服务器
一个高性能的 Rust crate 文档查询 MCP 服务器,支持多种传输协议。
特性
- 🚀 高性能: 异步 Rust + TinyLFU/TTL 内存缓存,支持按条目 TTL,可选 Redis 扩展
- 📦 多架构 Docker 镜像: 支持
linux/amd64和linux/arm64 - 🔧 多种传输协议: Stdio、HTTP (Streamable HTTP)、SSE、Hybrid
- 📚 完整文档查询: crate 搜索、文档查找、特定项目查询
- 🛡️ 安全可靠: 速率限制、连接池、请求验证
- 📊 健康监控: 内置健康检查和性能监控
- 🏗️ 模块化架构: 清晰的模块划分,易于扩展和维护
- 🔄 HTTP 重试机制: 可配置的 HTTP 客户端重试逻辑,提高外部服务调用可靠性
- 📊 Prometheus 指标: 内置指标监控支持,便于运维观测
- ⏱️ 细粒度缓存 TTL: 为 crate 文档、项目文档、搜索结果提供独立的 TTL 配置
架构图
系统架构
graph TB
subgraph "MCP 客户端"
Client[Claude/Cursor/Windsurf]
end
subgraph "传输层"
Stdio[Stdio 传输]
HTTP[HTTP 传输]
SSE[SSE 传输]
end
subgraph "Crates Docs MCP 服务器"
Server[CratesDocsServer]
Handler[CratesDocsHandler]
Registry[ToolRegistry]
subgraph "工具层"
LookupCrate[lookup_crate]
SearchCrates[search_crates]
LookupItem[lookup_item]
HealthCheck[health_check]
end
subgraph "服务层"
DocService[DocService]
HttpClient[HTTP Client]
end
subgraph "缓存层"
MemoryCache[MemoryCache]
RedisCache[RedisCache]
DocCache[DocCache]
end
end
subgraph "外部服务"
DocsRs[docs.rs]
CratesIo[crates.io]
end
Client --> Stdio
Client --> HTTP
Client --> SSE
Stdio --> Server
HTTP --> Server
SSE --> Server
Server --> Handler
Handler --> Registry
Registry --> LookupCrate
Registry --> SearchCrates
Registry --> LookupItem
Registry --> HealthCheck
LookupCrate --> DocService
SearchCrates --> DocService
LookupItem --> DocService
HealthCheck --> HttpClient
DocService --> HttpClient
DocService --> DocCache
DocCache --> MemoryCache
DocCache --> RedisCache
HttpClient --> DocsRs
HttpClient --> CratesIo
数据流
sequenceDiagram
participant Client as MCP 客户端
participant Server as CratesDocsServer
participant Handler as CratesDocsHandler
participant Tool as 工具实现
participant Cache as DocCache
participant External as 外部服务
Client->>Server: MCP 请求
Server->>Handler: 路由请求
Handler->>Tool: 执行工具
alt 缓存命中
Tool->>Cache: 查询缓存
Cache-->>Tool: 返回缓存数据
else 缓存未命中
Tool->>Cache: 查询缓存
Cache-->>Tool: 未命中
Tool->>External: HTTP 请求
External-->>Tool: 返回数据
Tool->>Cache: 写入缓存
end
Tool-->>Handler: 返回结果
Handler-->>Server: 格式化响应
Server-->>Client: MCP 响应
快速开始
使用 Docker(推荐)
# 从 Docker Hub 拉取镜像
# 运行容器(官方镜像内置配置默认监听 0.0.0.0:8080)
# 使用自定义配置
Docker Compose
version: '3.8'
services:
crates-docs:
image: kingingwang/crates-docs:latest
ports:
- "8080:8080"
environment:
CRATES_DOCS_HOST: 0.0.0.0
CRATES_DOCS_PORT: 8080
CRATES_DOCS_TRANSPORT_MODE: hybrid
volumes:
- ./config.toml:/app/config.toml:ro
- ./logs:/app/logs
restart: unless-stopped
从源码构建
从 crates.io 安装
MCP 客户端集成
Claude Desktop
编辑配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Cursor
编辑 ~/.cursor/mcp.json:
Windsurf
编辑 ~/.codeium/windsurf/mcp_config.json:
Cherry Studio
- 打开 Cherry Studio 设置
- 找到
MCP 服务器选项 - 点击
添加服务器 - 填写参数:
| 字段 | 值 |
|---|---|
| 名称 | crates-docs |
| 类型 | STDIO |
| 命令 | /path/to/crates-docs |
| 参数1 | serve |
| 参数2 | --mode |
| 参数3 | stdio |
- 点击保存
注意:将
/path/to/crates-docs替换为实际的可执行文件路径。
HTTP 模式
适合远程访问或网络服务:
客户端配置:
MCP 工具
1. lookup_crate - 查找 Crate 文档
从 docs.rs 获取完整文档。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
crate_name |
string | ✅ | Crate 名称,如 serde、tokio |
version |
string | ❌ | 版本号,默认最新 |
format |
string | ❌ | 输出格式:markdown(默认)、text、html |
2. search_crates - 搜索 Crate
从 crates.io 搜索 Rust crate,支持按相关性、总下载量、近期下载热度、最近更新时间和最新发布进行排序,适合做 crate 发现、选型和横向比较。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
query |
string | ✅ | 搜索关键词 |
limit |
number | ❌ | 结果数量(1-100),默认 10 |
sort |
string | ❌ | 排序方式,支持 relevance(默认)、downloads、recent-downloads、recent-updates、new |
format |
string | ❌ | 输出格式:markdown、text、json |
排序建议
relevance:优先返回与关键词最相关的结果,适合通用搜索。downloads:按累计下载量排序,适合优先看生态里最常用、最成熟的 crate。recent-downloads:按近期下载热度排序,适合观察最近更活跃或更受关注的项目。recent-updates:按最近更新时间排序,适合关注仍在持续维护的 crate。new:按发布时间排序,适合探索新发布项目。
3. lookup_item - 查找特定项目
查找 crate 中的特定类型、函数或模块。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
crate_name |
string | ✅ | Crate 名称 |
item_path |
string | ✅ | 项目路径,如 serde::Serialize |
version |
string | ❌ | 版本号 |
format |
string | ❌ | 输出格式 |
4. health_check - 健康检查
检查服务器和外部服务状态。
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
check_type |
string | ❌ | all、external、internal、docs_rs、crates_io |
verbose |
boolean | ❌ | 详细输出 |
详细使用示例
Stdio 模式
Stdio 模式适合与本地 MCP 客户端集成:
# 启动 Stdio 服务器
# 或使用默认配置(stdio 是某些客户端的默认模式)
MCP 客户端配置示例:
HTTP 模式
HTTP 模式适合远程访问或网络服务:
# 启动 HTTP 服务器
# 使用自定义配置
使用 curl 测试 HTTP 端点:
# 获取服务器信息(健康检查)
# MCP 工具调用示例(需要 MCP 协议格式)
SSE 模式
SSE 模式支持服务器推送:
# 启动 SSE 服务器
SSE 客户端连接:
# 连接到 SSE 端点
工具调用示例
search_crates - 搜索 Crate
# 使用 CLI 测试工具
# 预期输出:
# 搜索 "serde" 的结果:
# 1. serde (v1.0.xxx) - 序列化框架
# 下载量: xxx
# 描述: ...
MCP 调用参数:
lookup_crate - 查找 Crate 文档
# 使用 CLI 测试工具
# 指定版本
MCP 调用参数:
lookup_item - 查找特定项目
# 使用 CLI 测试工具
MCP 调用参数:
health_check - 健康检查
# 使用 CLI 执行健康检查
# 仅检查外部服务
MCP 调用参数:
使用示例
了解新 crate
用户: "帮我了解一下 serde"
AI 调用: { "crate_name": "serde" }
查找特定功能
用户: "tokio 怎么创建异步任务?"
AI 调用: { "crate_name": "tokio", "item_path": "tokio::spawn" }
搜索相关 crate
用户: "有什么稳定、大家都常用的 HTTP 客户端?"
AI 调用: { "query": "http client", "limit": 10, "sort": "downloads" }
命令行
# 启动服务器
# 生成配置
# 测试工具
# CLI 健康检查入口
# 版本信息
全局参数见
Cli,常用项包括--config、--debug、--verbose。
run_health_command()会执行真实的健康检查(内部状态 + docs.rs / crates.io 探测),与 MCP 工具health_check共用同一套检测逻辑。当整体状态不是healthy时,命令以非零退出码结束,可直接用作容器/编排器的健康探针(例如 Docker Compose 的healthcheck)。
配置
完整配置文件示例
下面是一个完整的配置文件示例,包含所有可用的配置项:
# 服务器配置
[]
= "crates-docs" # 服务器名称
= "0.1.0" # 服务器版本
= "Rust crate docs MCP server" # 服务器描述
= "0.0.0.0" # 监听地址(0.0.0.0 允许外部访问)
= 8080 # 监听端口
= "hybrid" # 传输模式:stdio/http/sse/hybrid
= true # 启用 SSE 支持
= false # 启用 OAuth 认证
= 100 # 最大并发连接数
= 30 # 请求超时(秒)
= 60 # 响应超时(秒)
= ["localhost", "127.0.0.1"] # 允许的 Host
= ["http://localhost:*"] # 允许的 Origin
# 缓存配置
[]
= "memory" # 缓存类型:memory 或 redis
= 1000 # 内存缓存大小(条目数)
= "redis://localhost:6379" # Redis 连接 URL(使用 redis 时必需)
= "" # 缓存键前缀
= 3600 # 默认 TTL(秒)
= 3600 # crate 文档缓存 TTL(秒)
= 1800 # 项目文档缓存 TTL(秒)
= 300 # 搜索结果缓存 TTL(秒)
# 日志配置
[]
= "info" # 日志级别:trace/debug/info/warn/error
= "./logs/crates-docs.log" # 日志文件路径
= true # 启用控制台日志
= false # 启用文件日志
= 100 # 单个日志文件最大大小(MB)
= 10 # 保留的日志文件数量
# 性能配置
[]
= 10 # HTTP 客户端连接池大小
= 90 # 连接池空闲超时(秒)
= 10 # 连接超时(秒)
= 30 # 请求超时(秒)
= 30 # 读取超时(秒)
= 3 # HTTP 客户端最大重试次数
= 100 # 重试初始延迟(毫秒)
= 10000 # 重试最大延迟(毫秒)
= 1000 # 最大缓存大小
= 3600 # 默认缓存 TTL(秒)
= 100 # 每秒请求速率限制
= 50 # 并发请求限制
= true # 启用响应压缩
= true # 启用 Prometheus 指标
= 0 # 指标端口(0 表示使用服务器端口)
# OAuth 配置(可选),推荐使用 [auth.oauth]
[]
= false # 启用 OAuth
= "" # OAuth 客户端 ID
= "" # OAuth 客户端密钥
= "" # 授权端点 URL
= "" # Token 端点 URL
= "" # 回调 URI
= [] # OAuth 作用域
# API Key 认证配置(可选),必须使用 [auth.api_key]
[]
= false # 启用 API Key 认证
= [] # API Key 哈希列表(Argon2 PHC 格式),不要存明文 key
= "X-API-Key" # API Key 请求头名称
= "api_key" # API Key 查询参数名称
= false # 是否允许查询参数传递
= "sk" # API Key 前缀(用于生成和校验结构化 key)
环境变量配置
支持通过环境变量配置,适用于 Docker 部署。
对于 API Key,推荐先生成一次性明文 key,再把生成出的 hash 放入配置或环境变量中:
# 生成新的 API Key(会输出明文 key、key_id 和 hash)
# 服务器配置
CRATES_DOCS_HOST=0.0.0.0
CRATES_DOCS_PORT=8080
CRATES_DOCS_TRANSPORT_MODE=hybrid
# API Key 认证配置
CRATES_DOCS_API_KEY_ENABLED=true
CRATES_DOCS_API_KEYS='$argon2id$...generated_hash...'
CRATES_DOCS_API_KEY_HEADER=X-API-Key
CRATES_DOCS_API_KEY_ALLOW_QUERY=false
CRATES_DOCS_API_KEY_PREFIX=sk
Docker 部署示例
# 使用环境变量启用 API Key 认证(保存 hash,不保存明文 key)
Docker Compose 示例
version: '3.8'
services:
crates-docs:
image: kingingwang/crates-docs:latest
ports:
- "8080:8080"
environment:
- CRATES_DOCS_API_KEY_ENABLED=true
- CRATES_DOCS_API_KEYS=$argon2id$...generated_hash...
- CRATES_DOCS_API_KEY_PREFIX=sk
- CRATES_DOCS_HOST=0.0.0.0
- CRATES_DOCS_PORT=8080
配置项详细说明
[server] 服务器配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string | "crates-docs" |
服务器名称 |
host |
string | "127.0.0.1" |
监听地址,设为 "0.0.0.0" 允许外部访问 |
port |
number | 8080 |
监听端口 |
transport_mode |
string | "hybrid" |
传输模式:stdio/http/sse/hybrid |
enable_sse |
boolean | true |
是否启用 SSE 支持 |
max_connections |
number | 100 |
最大并发连接数 |
allowed_hosts |
array | ["localhost", "127.0.0.1"] |
允许的 Host 列表(CORS) |
allowed_origins |
array | ["http://localhost:*"] |
允许的 Origin 列表(CORS) |
[cache] 缓存配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cache_type |
string | "memory" |
缓存类型:memory 或 redis |
memory_size |
number | 1000 |
内存缓存条目数 |
redis_url |
string | null |
Redis 连接 URL |
key_prefix |
string | "" |
缓存键前缀 |
crate_docs_ttl_secs |
number | 3600 |
crate 文档缓存时间(秒) |
item_docs_ttl_secs |
number | 1800 |
项目文档缓存时间(秒) |
search_results_ttl_secs |
number | 300 |
搜索结果缓存时间(秒) |
[logging] 日志配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
level |
string | "info" |
日志级别:trace/debug/info/warn/error |
enable_console |
boolean | true |
启用控制台输出 |
enable_file |
boolean | false |
启用文件日志 |
file_path |
string | "./logs/crates-docs.log" |
日志文件路径 |
max_file_size_mb |
number | 100 |
单个日志文件大小限制 |
max_files |
number | 10 |
保留的日志文件数 |
[performance] 性能配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
http_client_pool_size |
number | 10 |
HTTP 连接池大小 |
http_client_max_retries |
number | 3 |
HTTP 请求最大重试次数 |
rate_limit_per_second |
number | 100 |
每秒请求限制 |
concurrent_request_limit |
number | 50 |
并发请求限制 |
enable_response_compression |
boolean | true |
启用响应压缩 |
enable_metrics |
boolean | true |
启用 Prometheus 指标 |
环境变量配置
所有配置项都可以通过环境变量覆盖,环境变量优先级最高:
# 服务器配置
# 日志配置
# 缓存配置
# 性能配置
注意:环境变量会覆盖配置文件中的设置。布尔值使用
"true"或"false"字符串表示。API Key 安全建议:
- 使用
crates-docs generate-api-key --prefix sk生成新的 key- 只保存生成结果中的 hash
- 明文 key 只展示一次,之后请存入你的密钥管理系统
- 不要把明文 key 直接写入
config.toml、Docker Compose 或环境变量示例中
⚠️ 重要安全限制:当前版本的 API Key / OAuth 认证尚未在 HTTP/SSE 传输层强制执行。 也就是说,即使在配置中启用了认证,HTTP/SSE 端点仍然是未鉴权的。请勿将本服务直接暴露在不可信网络中; 应通过
allowed_hosts/allowed_origins、反向代理进行访问控制,或使用 stdio 模式运行。 服务启动时若检测到已配置但未强制执行的认证,会打印明显的告警日志。
生成配置文件
使用 CLI 生成默认配置文件:
# 生成配置文件
# 强制覆盖已存在的文件
传输协议
| 模式 | 适用场景 | 端点 |
|---|---|---|
stdio |
MCP 客户端集成(推荐) | 标准输入输出 |
http |
网络服务 | POST /mcp |
sse |
向后兼容 | GET /sse |
hybrid |
网络服务(推荐) | /mcp + /sse |
MCP 端点
POST /mcp- MCP Streamable HTTP 端点GET /sse- MCP SSE 端点
注意:这些是 MCP 协议端点,不是普通的 HTTP API。需要使用 MCP 客户端进行交互。
API Key 认证使用指南
API Key 认证用于保护 HTTP/SSE/Hybrid 模式下的 MCP 端点,防止未授权访问。启用后,所有 MCP 请求必须携带有效的 API Key,/health 端点始终开放以便监控。
完整流程概览
1. 生成 API Key → 得到明文 key(客户端用)和 hash(服务端存)
2. 配置服务端 → 将 hash 写入 config.toml 或环境变量
3. 启动服务 → crates-docs serve --config config.toml
4. 客户端携带 key → Authorization: Bearer <明文 key>
第一步:生成 API Key
输出示例:
Generated API key successfully.
Plain-text key (show once and store securely):
sk-live-<your-api-key-here>
Key ID:
<key-id>
Store this hash in configuration or secret storage:
$argon2id$v=19$m=47104,t=1,p=1$<salt>$<hash>
⚠️ 重要:
- 明文 key(
sk-live-...)只显示一次,请立即保存到密钥管理器中,服务端无法从 hash 反推出明文 - hash(
$argon2id$...)写入服务端配置,用于验证客户端发来的 key - 两者不可互换:客户端用明文,服务端存 hash
也可以指定自定义前缀:
第二步:配置服务端
方式 A:配置文件(推荐)
创建或编辑 config.toml,将生成的 hash 放入 keys 列表:
[]
= true
= ["$argon2id$v=19$m=47104,t=1,p=1$<salt>$<hash>"]
= "X-API-Key"
= "api_key"
= false
= "sk"
支持多个 key(例如为不同客户端分配不同 key):
[]
= true
= [
"$argon2id$v=19$m=47104,t=1,p=1$hash1...",
"$argon2id$v=19$m=47104,t=1,p=1$hash2...",
]
= "sk"
方式 B:环境变量
方式 C:CLI 标志
注意:CLI 标志仅启用认证开关,key 列表仍需通过配置文件或环境变量提供。
第三步:启动服务
# 使用配置文件
# 或使用环境变量
启动后日志中会显示 API Key 认证已启用。
第四步:客户端使用 API Key
curl 测试
# 使用 Bearer token(直连服务端必须用此方式)
# 未携带 key 的请求会返回 401
# → 401 Unauthorized
# /health 端点无需认证
Claude Desktop 配置
Cursor 配置
编辑 ~/.cursor/mcp.json:
其他 MCP 客户端
任何支持自定义 HTTP header 的 MCP 客户端,添加以下 header 即可:
Authorization: Bearer <你的明文 key>
管理操作
查看已注册的 API Key
吊销 API Key
# 通过 Key ID 吊销
# 吊销后需重启服务生效
添加新 Key
- 运行
crates-docs generate-api-key生成新 key - 将新 hash 追加到
config.toml的keys列表中 - 重启服务
常见问题
Q: 为什么不能用 X-API-Key header 直连服务端?
A: 进程内的 MCP 中间件只识别 Authorization: Bearer 头。X-API-Key header 需要配合反向代理使用——代理将 X-API-Key: <k> 改写为 Authorization: Bearer <k> 后转发给后端。详见下方"认证与加密传输"章节。
Q: 可以通过 URL 查询参数传递 key 吗?
A: 配置 allow_query_param = true 后,反向代理可以支持 ?api_key=<key> 方式。但直连服务端仍只接受 Bearer token。出于安全考虑,不建议在 URL 中传递 key(会出现在日志和浏览器历史中)。
Q: 忘记了明文 key 怎么办?
A: 明文 key 只在生成时显示一次,无法从 hash 反推。如果丢失,需要生成新 key 并替换配置中的 hash。
Q: 多个客户端可以共用同一个 key 吗?
A: 可以,但建议为不同客户端分配不同 key,便于独立吊销。
认证与加密传输(TLS)
在 HTTP/SSE/Hybrid 服务器模式下,访问控制分为两层,可按需组合:
| 能力 | 由谁提供 | 说明 |
|---|---|---|
| 认证(只有持有密钥者可连接) | 进程内置(默认编译进二进制) | 校验 Authorization: Bearer <key>,密钥以 Argon2 哈希存储、常量时间比对 |
| 加密(被监听也无法解密) | 前置反向代理(Caddy/nginx) | 终止 TLS,并把 X-API-Key: <k> 改写为 Authorization: Bearer <k> |
进程内置认证(Bearer)
auth 已包含在 default features 中,因此标准 cargo build / cargo install
即具备认证能力。是否真正启用是运行时开关,无需重新编译:
- 打开/关闭由
auth.api_key.enabled控制(配置文件、--enable-api-keyCLI 标志或CRATES_DOCS_API_KEY_ENABLED环境变量),改动后重启生效。 - 启用后,每个 MCP 请求都必须携带
Authorization: Bearer <key>,否则返回401;/health始终开放,便于监控。 - 密钥用
crates-docs generate-api-key生成:配置里保存 hash,把明文 key 发给客户端。吊销密钥 = 从keys移除并重启。
# 启用后,直连服务端必须使用 Bearer 头:
为什么是 Bearer 而不是
X-API-Key? 进程内的 MCP 中间件只识别Authorization: Bearer头,无法读取X-API-Key或查询参数。header_name、allow_query_param等配置项仅对前置反向代理有意义(见下)。
加密传输与 X-API-Key(反向代理)
进程本身只说明文 HTTP,没有 TLS。若服务要对外暴露、需要加密,或希望继续使用
X-API-Key 头,请在前面加一层反向代理:它终止 TLS(HTTPS),把
X-API-Key: <k> 改写为 Authorization: Bearer <k>,再转发到仅监听 127.0.0.1
的后端——后端依旧做密码学校验,构成纵深防御。
客户端 --HTTPS, X-API-Key--> 反向代理 --HTTP, Authorization: Bearer--> 127.0.0.1:8080
开箱即用的配置(含 Caddy 与 nginx,以及完整步骤)见
docs/reverse-proxy/。使用反向代理时,请把后端
绑定到回环地址(server.host = "127.0.0.1"),避免客户端绕过 TLS 直连后端。
缓存策略
内存缓存(默认)
- 当前实现位于
MemoryCache - 基于
moka::sync::Cache,使用 TinyLFU 淘汰策略 - 支持按条目 TTL 过期
- 适用于单实例部署
Redis 缓存
- 支持分布式部署
- 支持持久化
- 通过 feature flag 启用:
cache-redis
配置示例:
[]
= "redis"
= "redis://localhost:6379"
= 3600
缓存 TTL 配置
支持为不同类型的数据配置独立的 TTL:
crate_docs_ttl_secs: crate 文档缓存时间(默认 3600 秒 / 1 小时)item_docs_ttl_secs: 项目文档缓存时间(默认 1800 秒 / 30 分钟)search_results_ttl_secs: 搜索结果缓存时间(默认 300 秒 / 5 分钟)
部署
Docker
# 使用预构建镜像
# 或使用特定版本
Systemd
创建 /etc/systemd/system/crates-docs.service:
[Unit]
Description=Crates Docs MCP Server
After=network.target
[Service]
Type=simple
User=crates-docs
WorkingDirectory=/opt/crates-docs
ExecStart=/opt/crates-docs/crates-docs serve --config /etc/crates-docs/config.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
开发
# 构建
# 运行所有测试
# 运行 clippy 检查
# 格式化检查
# 运行完整 CI 流程
&& \
&& \
Feature Flags
| Feature | 描述 |
|---|---|
default |
默认启用:server、stdio、macros、cache-memory、logging |
server |
启用 rust-mcp-sdk 服务端能力 |
client |
启用 rust-mcp-sdk 客户端能力 |
stdio |
启用 Stdio 传输 |
hyper-server |
启用 HTTP 服务器 |
streamable-http |
启用 Streamable HTTP |
sse |
启用 SSE 传输 |
macros |
启用 MCP 宏支持 |
auth |
启用 OAuth 认证支持 |
api-key |
启用 API Key 认证支持(默认启用) |
cache-memory |
启用内存缓存相关支持 |
cache-redis |
启用 Redis 缓存 |
tls |
启用 TLS/SSL 支持 |
logging |
启用日志相关支持 |
故障排除
端口被占用
网络问题
日志
启用文件日志时,默认日志文件路径为 ./logs/crates-docs.log。
[]
= "debug"
许可证
MIT License
贡献
欢迎 Issue 和 Pull Request!
- Fork 仓库
- 创建分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
开发指南
- 所有代码必须通过
cargo clippy --all-features --all-targets -- -D warnings - 所有测试必须通过
cargo test --all-features - 新功能需要添加相应的单元测试
- 遵循现有的代码风格和文档规范
致谢
- rust-mcp-sdk - MCP SDK
- docs.rs - Rust 文档服务
- crates.io - Rust 包注册表
- lru - 内存缓存淘汰策略实现
API 文档
docs.rs 文档
主要类型使用示例
CratesDocsServer
use ;
async
缓存使用
use Arc;
use ;
async
工具注册表
use Arc;
use ;
use DocService;
use MemoryCache;
async
模块文档
crates_docs::cache- 缓存模块crates_docs::config- 配置模块crates_docs::error- 错误处理crates_docs::server- 服务器模块crates_docs::tools- MCP 工具crates_docs::utils- 工具函数
支持
- Issues
- Email: kingingwang@foxmail.com