⭐ 喜欢这个项目吗?请在 GitHub 上 给仓库加星,以表示支持并保持更新! ⭐
现代AI驱动的编码助手(如Cursor、Cline、Roo Code等)擅长理解代码结构和语法,但在处理快速演进的库和框架的具体细节时往往遇到困难,尤其是在像Rust这样的生态系统中,其中crates频繁更新。它们的训练数据截止日期意味着它们可能缺乏最新的API知识,导致生成的代码建议不正确或过时。
此MCP服务器通过提供针对特定Rust crate的最新知识源来解决这一问题。通过为此crates运行一个实例(例如serde、tokio、reqwest),你可以为你的LLM编码助手提供一个工具(query_rust_docs),它可以在编写与该crates相关的代码之前使用。
当指示使用此工具时,LLM可以就crates的API或用法提出具体问题,并获得基于当前文档的直接答案。这显著提高了生成代码的准确性和相关性,减少了手动修正的需求并加快了开发速度。
可以同时运行多个此服务器实例,允许LLM助手在编码会话期间访问多个不同crates的文档。
此服务器获取指定Rust crate的文档,生成内容的嵌入,并提供一个MCP工具,根据文档上下文回答关于crates的问题。
text-embedding-3-small模型找到与给定问题最相关的文档部分。gpt-4o-mini-2024-07-18模型仅基于检索到的文档上下文生成简洁的答案。~/.local/share/rustdocs-mcp-server/)中,基于crates、版本以及请求的特性,以加速后续启动。OPENAI_API_KEY环境变量中。(服务器还需要网络访问权限以下载crates依赖项并与OpenAI API交互)。推荐的安装方式是从GitHub Releases页面下载适用于您操作系统的预编译二进制文件。
.zip,Linux/macOS上的.tar.gz)。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
新crates的重要注意事项:
首次使用服务器与某个crates(或新版本/特性集)时,它需要下载文档并生成嵌入。此过程可能耗时较长,特别是对于文档详尽的crates,并且需要活跃的互联网连接和OpenAI API密钥。
建议在将任何新的crates配置添加到您的AI编码助手(如Roo Code、Cursor等)之前,先从命令行直接运行一次服务器。这允许初始嵌入生成和缓存完成。一旦看到服务器启动消息表明其已准备好(例如,“MCP服务器正在监听stdio”),您可以关闭它(Ctrl+C)。后续启动,包括由您的编码助手发起的启动,将使用缓存的数据并启动得更快。
服务器从命令行启动,并需要目标crates的包ID规范。此规范遵循Cargo使用的格式(例如,crate_name,crate_name@version_req)。有关完整的规范详情,请参阅man cargo-pkgid或Cargo文档。
可选地,您可以使用-F或--features标志指定所需的crates特性,后跟逗号分隔的特性列表。这对于需要启用特定特性才能成功执行cargo doc的crates是必要的(例如,需要运行时特性如async-stripe的crates)。
# 设置API密钥(替换为您实际的密钥)
export OPENAI_API_KEY="sk-..."
# 示例:为serde的最新1.x版本运行服务器
rustdocs_mcp_server "serde@^1.0"
# 示例:为reqwest的特定版本运行服务器
rustdocs_mcp_server "reqwest@0.12.0"
# 示例:为tokio的最新版本运行服务器
rustdocs_mcp_server tokio
# 示例:为async-stripe运行服务器,启用必需的运行时特性
rustdocs_mcp_server "async-stripe@0.40" -F runtime-tokio-hyper-rustls
# 示例:为另一个具有多个特性的crates运行服务器
rustdocs_mcp_server "some-crate@1.2" --features feat1,feat2
对于特定crates版本和特性集的首次运行,服务器将:
cargo doc(带指定特性)下载crates文档。async-stripe,在测试中生成嵌入的成本也仅为$0.18美元)。对于相同的crates版本和特性集的后续运行,将从缓存加载数据,使启动速度大大加快。
服务器通过模型上下文协议(Model Context Protocol)在标准输入输出(stdio)上进行通信。它公开以下内容:
工具:query_rust_docs
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "关于crates的API或用法的具体问题。"
}
},
"required": ["question"]
}
来自<crate_name>文档:。{
"jsonrpc": "2.0",
"method": "callTool",
"params": {
"tool_name": "query_rust_docs",
"arguments": {
"question": "如何使用reqwest发送简单的GET请求?"
}
},
"id": 1
}
资源:crate://<crate_name>
crate://<crate_name>(例如,crate://serde,crate://reqwest)日志记录: 服务器通过logging/message通知将信息日志(启动消息、查询处理步骤)返回给MCP客户端。
您可以配置MCP客户端如Roo Code以运行多个此服务器实例,每个实例针对不同的crates。以下是Roo Code的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 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_KEY环境变量,让Claude Desktop能够访问它(这可能是系统范围的,或者通过您启动Claude Desktop的方式)。Claude Desktop的MCP配置可能不像Roo Code那样直接支持按服务器设置环境变量。async-stripe等需要特定特性的crates添加-F参数。~/.local/share/rustdocs-mcp-server/<crate_name>/<sanitized_version_req>/<features_hash>/embeddings.bin。sanitized_version_req源自版本要求,而features_hash代表启动时请求的特定特性组合的哈希值。这确保了不同的特性集被单独缓存。bincode序列化进行缓存。clap从命令行解析crates规范和可选特性。Cargo.toml中启用指定特性。cargo库API在临时目录中生成HTML文档。target/doc内动态定位正确的输出目录,通过查找包含index.html的子目录。scraper库解析每个HTML文件并从主要内容区域(<section id="main-content">)提取文本内容。async-openai库和tiktoken-rs为每个提取的文档块使用text-embedding-3-small模型生成嵌入。bincode将提取的文档内容及其对应的嵌入保存到缓存文件中(路径包括特性哈希)。RustDocsServer。rmcp通过标准输入输出(stdio)启动MCP服务器。query_rust_docs工具):
gpt-4o-mini-2024-07-18模型。本项目采用MIT许可证。
版权所有 (c) 2025 Govcraft
如果您发现这个项目有用,请考虑赞助开发!