Gemini Docs MCP服务器
](https://smithery.ai/server/@M-Gonzalo/cosa-sai)
描述
该项目实现了一个MCP服务器,可以使用Gemini API及其2M令牌的巨大上下文窗口访问各种技术的文档。它应该适用于任何客户端,但特别针对Roo/Cline环境。
与简单地浏览网页或使用搜索引擎相比,这种方法具有几个优点:
- 访问精心策划的知识库: LLM使用一组特定的文档,避免了可能混淆模型的垃圾结果和误报。
- 克服上下文窗口限制: 通过直接提供文档,LLM可以访问比单独使用网络搜索更多的信息。
- 量身定制和深思熟虑的回应: LLM不仅提供文档中的片段,还制定了考虑到所讨论技术的整个规范的合理答案。这允许提出更复杂的问题,比如“有什么替代方法来做X?”或“这个代码段是否符合习惯?”。
它还克服了传统RAG系统的一些问题障碍:
- 不需要分块: LLM可以一次性访问整个文档,而不需要将其分成更小的部分,也不必痛苦地测试和选择所有可能的方法。
- 不需要寻回犬: Gemini API本身就是一个强大的检索器,可以访问整个文档,因此不需要实现自定义的检索器。
- 无矢量化、矢量数据库或其他复杂系统: 我们直接使用纯文本,由于我们可以一次看到所有内容,因此我们不需要向量进行相似性搜索。如果相关,我们知道。
然而,存在一些局限性:
- 无实时更新: 文档是静态的,不会实时更新。这意味着LLM可能不知道技术的最新功能或变化,除非我们手动更新文档或提供自动更新方式。
- 许多令牌与无限上下文窗口不同: LLM一次只能看到大约200万个令牌,因此它可能无法看到某些技术的完整文档。对于具有大量文档的大型复杂堆栈尤其如此。
- 没那么快: 我们使用的是Gemini 1.5 Pro(不是Flash),我们正在加载一大堆文档,所以可能需要一段时间才能得到响应。对于第一个查询尤其如此,因为服务器需要将文档上传到API。
特性
- 使客户能够采用“询问您的文档”的方法来学习和调试任意数量的技术,包括一些晦涩难懂或鲜为人知的技术。
- 使用Gemini API回答有关文档的问题。
- 支持多种查询文档的工具:
- can_x_be_done:检查特定任务是否可以在给定的技术中完成。 - hints_for_problem:获取解决特定问题的提示。 - is_this_good_practice:检查代码片段是否遵循良好实践。 - how_to_do_x:获取特定任务的示例和替代方法。
- 提供用于调试的日志记录系统(通过启用
--verbose旗)。
入门指南
通过Smithery安装
通过以下方式自动安装Gemini Docs Server for Claude Desktop 史密瑟里:
npx -y @smithery/cli install @M-Gonzalo/cosa-sai --client claude此MCP服务器由客户端自动启动和管理。要启用它,您需要在设置文件中配置它(例如, ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json).通常在客户端中有一个打开设置文件的按钮。
以下是此服务器的配置:
{
"command": "bun",
"args": [
"--watch",
"path/to/repo/cosa-sai-mcp/src/index.ts",
"--verbose"
],
"env": {
"GEMINI_API_KEY": ""
},
"disabled": false,
"alwaysAllow": [
"can_x_be_done",
"hints_for_problem",
"is_this_good_practice",
"how_to_do_x"
],
"timeout": 60 // in seconds
}知识库的采购和消毒
此MCP服务器需要一个文档知识库来回答问题。您必须通过下载公共存储库、抓取网站或使用其他方法手动获取此知识库。
可以执行可选的卫生过程来清理原始文档中的样式和其他不必要的内容。
以下是一些基本的工具。我们鼓励更好的解决方案:
幼稚刮板:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --directory-prefix=./local_copy --no-verbose --show-progress $1快速而肮脏的Markdown语言转换工具:
#!/bin/bash
directory="${1:-.}" # Default to current directory if no argument is provided
output_file="${2:-concatenated.md}" # Default output file name
echo "Concatenating files in '$directory' into '$output_file'..."
# Clear output file if it exists
truncate -s 0 "$output_file"
# Find all files (excluding directories) and process them
find "$directory" -type f -name '*.html' | while IFS= read -r file; do
echo "=== ${file#./} ===" >> "$output_file"
cat "$file" \
| grep -v 'base64' \
| html2markdown >> "$output_file"
echo -e "\n" >> "$output_file"
done
echo "Done! Output saved to '$output_file'"用法
此服务器提供以下工具:
- can_x_be_done: 检查特定任务是否可以在给定的技术中完成。
- 输入: docs, prompt, x, technology - 输出: success, data
- hints_for_prouble问题: 获取解决特定问题的提示。
- 输入: docs, prompt, problem, context, environment - 输出: success, data
- 这很好: 检查代码段是否遵循良好实践。
- 输入: docs, prompt, snippet, context - 输出: success, data
- how_to_do_x: 获取特定任务的示例和替代方法。
- 输入: docs, prompt, x, technology - 输出: success, data
贡献
欢迎投稿!请遵循以下指南:
- 分叉存储库。
- 为您的功能或错误修复创建一个新分支。
- 进行更改,并使用描述性提交消息进行提交。
- 提交拉取请求。
许可证
该项目根据MIT许可证获得许可。
免责声明
这是该项目的早期版本,可能存在错误和限制。请报告您发现的任何问题,并随时提出改进或新功能的建议。

