G

Gemini文档查询

@M-Gonzalo/cosa-sai
0 Stars 391 次浏览 M-Gonzalo 更新于 2026-08-23

通过Gemini API提供精选的文档访问,使用户能够通过克服上下文和搜索限制,有效查询和交互技术文档。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

Gemini Docs MCP Server

smithery badge

描述

该项目实现了一个MCP服务器,通过Gemini API及其巨大的2M tokens上下文窗口,使用户能够访问各种技术的文档。它应该适用于任何客户端,但特别针对Roo/Cline环境。

与简单地浏览网页或使用搜索引擎相比,这种方法提供了几个优势:

  • 访问精选的知识库: LLM使用特定的一组文档,避免了垃圾结果和可能混淆模型的误报。
  • 克服上下文窗口限制: 通过直接提供文档,LLM可以访问比单独使用网络搜索更多的信息。
  • 量身定制且深思熟虑的回答: LLM不仅仅提供文档片段,而是根据所涉及技术的整体规范精心制作合理的答案。这允许提出更复杂的问题,如“有哪些替代方法可以做X?”或“这个代码片段是否符合惯用法?”

它还克服了一些传统RAG系统的问题:

  • 无需分块: LLM可以一次性访问整个文档,而不需要将其分割成较小的部分,并痛苦地测试和选择所有可能的方法。
  • 无需检索器: Gemini API本身就是一个强大的检索器,可以直接访问整个文档,因此无需实现自定义的检索器。
  • 无需向量化、向量数据库或其他复杂系统: 我们直接处理纯文本,由于可以一次性看到所有内容,因此不需要用于相似性搜索的向量。如果相关内容存在,我们就会知道。

不过,也有一些限制:

  • 没有实时更新: 文档是静态的,不会实时更新。这意味着除非我们手动更新文档或提供自动更新的方法,否则LLM可能不知道技术的最新功能或变更。
  • 大量的tokens并不等同于无限的上下文窗口: LLM一次只能看到大约2百万个tokens,因此对于某些技术,它可能无法看到完整的文档。这对于具有大量文档的大而复杂的堆栈尤其如此。
  • 速度不是很快: 我们使用的是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 安装

要通过 Smithery 自动安装 Claude Desktop 的 Gemini Docs Server:

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": "<your_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:检查特定任务是否可以在给定技术中完成。
    • 输入docspromptxtechnology
    • 输出successdata
  • hints_for_problem:获取解决特定问题的提示。
    • 输入docspromptproblemcontextenvironment
    • 输出successdata
  • is_this_good_practice:检查代码片段是否遵循良好的实践。
    • 输入docspromptsnippetcontext
    • 输出successdata
  • how_to_do_x:获取特定任务的示例和替代方法。
    • 输入docspromptxtechnology
    • 输出successdata

贡献

欢迎贡献!请遵循以下指南:

  1. 叉分仓库。
  2. 为你的功能或错误修复创建一个新的分支。
  3. 进行更改,并提交带有描述性提交信息的更改。
  4. 提交拉取请求。

许可证

该项目根据 MIT 许可证许可。

免责声明

这是项目的非常早期版本,可能会存在一些错误和局限性。如果您发现任何问题,请报告给我们,并随时提出改进建议或新功能建议。

相关 MCP 服务