使用说明
Rust Docs MCP服务器
⭐ 像这个项目?请 将存储库星化 上 GitHub显示您的支持并保持更新! ⭐
动机
现代人工智能驱动的编码助手(如Cursor、Cline、Roo Code等)表现出色 理解代码结构和语法,但经常难以理解细节 快速发展的库和框架,特别是在Rust这样的生态系统中 板条箱经常更新。他们的训练数据中断意味着他们可能 缺乏对最新API的了解,导致代码不正确或过时 建议。
此MCP服务器通过提供集中、最新的
特定Rust机箱的知识源。通过运行此的实例
用于板条箱的服务器(例如。, serde, tokio, reqwest),你给你的LLM编码
辅助工具(query_rust_docs)它可以使用 之前 编写与以下内容相关的代码
那个箱子。
当被指示使用此工具时,LLM可以询问有关 板条箱的API或用法,并接收直接从 当前的 文档。这大大提高了 生成代码,减少手动更正的需要并加快速度 发展。
此服务器的多个实例可以同时运行,从而允许LLM 在编码过程中访问多个不同板条箱的文档的助手 会议。
此服务器获取指定Rust crate的文档,生成 嵌入内容,并提供MCP工具来回答以下问题 基于文档上下文的crate。
特性
- 目标文档: 专注于每台服务器一个Rust机箱 例子
- 功能支持: 允许指定所需的机箱功能 文档生成。
- 语义搜索: 使用OpenAI
text-embedding-3-small模型来寻找 给定问题的最相关文档部分。 - LLM总结: 利用OpenAI
gpt-4o-mini-2024-07-18模型到 基于生成简洁的答案 仅 在检索到的文档上下文中。 - 缓存: 缓存生成的文档内容和嵌入
用户的XDG数据目录(
~/.local/share/rustdocs-mcp-server/或类似) 基于板条箱、版本、, 和 请求的功能可加快后续 发射。 - MCP集成: 作为标准MCP服务器在stdio上运行,公开工具 以及资源。
先决条件
- OpenAI API密钥: 需要用于生成嵌入和总结答案。
服务器希望此密钥在
OPENAI_API_KEY环境变量。(服务器还需要网络访问才能下载 板条箱依赖性并与OpenAI API交互)。
安装
建议的安装方式是下载预编译的二进制文件 操作系统从 GitHub发布页面.
- 去 发布页面.
- 下载相应的存档(
.zip对于Windows,.tar.gz为了 Linux/macOS)。 - 提取
rustdocs_mcp_server(或rustdocs_mcp_server.exe)二进制。 - 将二进制文件放置在系统中包含的目录中
PATH环境 变量(例如。,/usr/local/bin,~/bin).
从源头构建(替代方案)
如果你更喜欢从源代码构建,你需要 Rust工具链 安装。
- 克隆存储库:
git clone https://github.com/Govcraft/rust-docs-mcp-server.git cd rust-docs-mcp-server - 构建服务器:
cargo build --release
用法
新板条箱的重要注意事项:
当服务器首次与机箱一起使用(或与新版本/功能集一起使用)时,它需要下载文档并生成嵌入。这个过程可能需要一些时间,尤其是对于有大量文档的板条箱,并且需要活跃的互联网连接和OpenAI API密钥。
对于任何新的机箱配置,建议直接从命令行运行服务器一次 之前 将其添加到您的AI编码助手中(如Roo Code、Cursor等)。这允许完成初始嵌入生成和缓存。一旦你看到服务器启动消息表明它已准备就绪(例如,“MCP服务器正在侦听stdio”),你就可以关闭它(Ctrl+C)。后续的启动,包括由您的编码助手启动的启动,将使用缓存的数据,并启动得更快。
运行服务器
服务器从命令行启动,需要 包裹编号
规格说明 用于目标板条箱。本规范遵循所使用的格式
通过货物(例如。, crate_name, crate_name@version_req).对于完整
规格详细信息,请参见 man cargo-pkgid 或
货物文件.
您可以选择使用以下命令指定所需的机箱功能 -F 或
--features 标志,后面是逗号分隔的功能列表。这是
对于需要启用特定功能的板条箱来说是必要的
cargo doc 成功(例如,需要运行时功能的板条箱,如
async-stripe).
# Set the API key (replace with your actual key)
export OPENAI_API_KEY="sk-..."
# Example: Run server for the latest 1.x version of serde
rustdocs_mcp_server "serde@^1.0"
# Example: Run server for a specific version of reqwest
rustdocs_mcp_server "reqwest@0.12.0"
# Example: Run server for the latest version of tokio
rustdocs_mcp_server tokio
# Example: Run server for async-stripe, enabling a required runtime feature
rustdocs_mcp_server "async-stripe@0.40" -F runtime-tokio-hyper-rustls
# Example: Run server for another crate with multiple features
rustdocs_mcp_server "some-crate@1.2" --features feat1,feat2
在特定机箱版本的第一次运行中 和功能集,服务器 将:
- 使用下载crate文档
cargo doc(具有指定功能)。 - 解析HTML文档。
- 使用OpenAI API为文档内容生成嵌入(此
可能需要一些时间并产生成本,尽管通常只有美国的一小部分
大多数板条箱都是便士;即使是一个大箱子
async-stripe超过5000 文档页面的嵌入生成成本仅为0.18美元 测试)。 - 缓存文档内容和嵌入,这样成本就不会增加 再次发生。
- 启动MCP服务器。
同一机箱版本的后续运行 和功能集 将加载数据 从缓存中提取数据,使启动速度更快。
MCP交互
服务器使用标准之上的模型上下文协议进行通信 输入/输出(stdio)。它揭示了以下内容:
-
工具:
query_rust_docs- 说明: 查询服务器上特定Rust机箱的文档 开始使用语义搜索和LLM摘要。
- 输入架构:
{ "type": "object", "properties": { "question": { "type": "string", "description": "The specific question about the crate's API or usage." } }, "required": ["question"] } - 输出: 包含基于LLM生成的答案的文本响应
在相关文档上下文中,前缀为
From <crate_name> docs:. - MCP呼叫示例:
{ "jsonrpc": "2.0", "method": "callTool", "params": { "tool_name": "query_rust_docs", "arguments": { "question": "How do I make a simple GET request with reqwest?" } }, "id": 1 }
-
资源:
crate://<crate_name>- 说明: 提供此服务器实例的Rust crate的名称 配置为。
- URI:
crate://<crate_name>(例如。,crate://serde,crate://reqwest) - 内容: 包含板条箱名称的纯文本。
-
登录中: 服务器发送信息日志(启动消息、查询 处理步骤)通过以下方式返回MCP客户端
logging/message通知。
客户端配置示例(Roo代码)
您可以配置MCP客户端,如Roo Code,以运行多个实例
服务器,每个都针对不同的机箱。以下是Roo的示例代码片段
代码 mcp_settings.json 文件,配置服务器 reqwest 和
async-stripe (请注意添加的功能参数 async-stripe):
{
"mcpServers": {
"rust-docs-reqwest": {
"command": "/path/to/your/rustdocs_mcp_server",
"args": [
"reqwest@0.12"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE"
},
"disabled": false,
"alwaysAllow": []
},
"rust-docs-async-stripe": {
"command": "rustdocs_mcp_server",
"args": [
"async-stripe@0.40",
"-F",
" runtime-tokio-hyper-rustls"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE"
},
"disabled": false,
"alwaysAllow": []
}
}
}
注:
- 替换
/path/to/your/rustdocs_mcp_server与实际路径 如果不在PATH中,请在系统上编译二进制文件。 - 替换
YOUR_OPENAI_API_KEY_HERE使用您的实际OpenAI API密钥。 - 钥匙(
rust-docs-reqwest,rust-docs-async-stripe)是任意名称 您可以选择在Roo Code中标识服务器实例。
客户端配置示例(Claude桌面)
对于Claude Desktop用户,您可以在MCP设置中配置服务器。
以下是一个配置服务器的示例 serde 和 async-stripe:
{
"mcpServers": {
"rust-docs-serde": {
"command": "/path/to/your/rustdocs_mcp_server",
"args": [
"serde@^1.0"
]
},
"rust-docs-async-stripe-rt": {
"command": "rustdocs_mcp_server",
"args": [
"async-stripe@0.40",
"-F",
"runtime-tokio-hyper-rustls"
]
}
}
}
注:
- 确保
rustdocs_mcp_server位于系统的PATH中或提供完整路径 (例如。,/path/to/your/rustdocs_mcp_server). - 钥匙(
rust-docs-serde,rust-docs-async-stripe-rt)是任意名称 您可以选择标识服务器实例。 - 记得设置
OPENAI_API_KEYClaude Desktop所在的环境变量 可以访问它(这可能是系统范围内的,也可能是通过您启动Claude的方式 桌面)。Claude Desktop的MCP配置可能不直接支持 为每台服务器设置环境变量,如Roo Code。 - 该示例显示了如何添加
-F像这样的板条箱的论点async-stripe这需要特定的功能。
缓存
- 地点: 缓存的文档和嵌入存储在XDG数据中
目录,通常位于
~/.local/share/rustdocs-mcp-server/<crate_name>/<sanitized_version_req>/<features_hash>/embeddings.bin. 这sanitized_version_req源自版本要求,以及features_hash是表示特定特征组合的哈希 启动时请求。这可确保缓存不同的功能集 单独。 - 格式: 数据缓存使用
bincode序列化。 - 再生: 如果缓存文件丢失、损坏或无法访问 解码后,服务器将自动重新生成文档 嵌入。
它是如何工作的
- 初始化: 解析机箱规格和可选功能
命令行使用
clap. - 缓存检查: 查找特定机箱的预先存在的缓存文件, 版本要求和功能集。
- 文档生成(如果缓存未命中):
- 仅根据目标机箱创建临时Rust项目,
启用其中的指定功能
Cargo.toml. - 跑动
cargo doc使用cargo库API生成HTML 临时目录中的文档。 - 在以下位置动态定位正确的输出目录
target/doc通过 搜索包含以下内容的子目录index.html.
- 仅根据目标机箱创建临时Rust项目,
启用其中的指定功能
- 内容提取(如果缓存未命中):
- 在找到的文档目录中浏览生成的HTML文件。
- 使用
scrapercrate解析每个HTML文件并提取文本内容 从主要内容区域(<section id="main-content">).
- 嵌入生成(如果缓存未命中):
- 使用
async-openai板条箱和tiktoken-rs为生成嵌入 使用text-embedding-3-small模型。 - 根据处理的令牌数量计算估计成本。
- 使用
- 缓存(如果缓存未命中): 保存提取的文档内容及其
缓存文件的相应嵌入(路径包括特征哈希)
使用
bincode. - 服务器启动: 初始化
RustDocsServer随着 加载/生成文档和嵌入。 - MCP服务: 使用启动MCP服务器
rmcp超过stdio。 - 查询处理(
query_rust_docs工具):- 为用户的问题生成嵌入。
- 计算问题嵌入和所有问题之间的余弦相似度 缓存的文档嵌入。
- 标识相似度最高的文档块。
- 发送用户的问题和最匹配文档的内容
大块到
gpt-4o-mini-2024-07-18通过OpenAI API模型。 - LLM被提示回答以下问题 仅 在提供 背景。
- 将LLM的响应返回给MCP客户端。
许可证
该项目根据MIT许可证获得许可。
版权所有(c)2025 Govcraft
赞助商
Govcraft是一个人的商店——没有企业支持,没有投资者,只有我在构建有用的工具。如果这个项目对你有帮助, 赞助 继续工作。
