返回市场
科萨-塞

科萨-塞

作者:M-Gonzalo14 星标更新:2025-03-03

项目介绍

Gemini Docs MCP服务器

smithery徽章

描述

该项目实现了一个MCP服务器,它使用Gemini API(具有2百万令牌的巨大上下文窗口)来访问各种技术文档。该服务器应适用于任何客户端,但特别针对Roo/Cline环境。

这种方法相比简单地浏览网页或使用搜索引擎有以下优势:

  • 访问经过筛选的知识库: 大型语言模型(LLM)使用特定的一组文档,避免了垃圾结果和可能混淆模型的假阳性。
  • 克服上下文窗口限制: 通过直接提供文档,LLM可以访问比单独使用网络搜索更多的信息。
  • 定制且深思熟虑的回答: LLM不仅提供文档片段,还根据整个技术规范精心构建答案。这允许提出更复杂的问题,如“有哪些替代方法可以完成X?”或“这个代码片段是否符合习惯用法?”。

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

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

不过也有一些局限性:

  • 无实时更新: 文档是静态的,不会实时更新。这意味着除非我们手动更新文档或提供自动更新的方式,否则LLM可能不知道最新的功能或技术变化。
  • 大量的令牌并不等同于无限的上下文窗口: LLM一次只能看到大约2百万个令牌,因此对于某些技术来说,它可能无法看到整个文档。特别是对于大量文档的大规模和复杂的堆栈,这一点尤为明显。
  • 速度不是很快: 我们使用的是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自动安装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": "<your_gemini_api_key>"
  },
  "disabled": false,
  "alwaysAllow": [
    "can_x_be_done",
    "hints_for_problem",
    "is_this_good_practice",
    "how_to_do_x"
  ],
  "timeout": 60 // 秒
}

获取并清理知识库

此MCP服务器需要一个文档知识库来回答问题。您必须手动获取此知识库,可以通过下载公共存储库、抓取网站或使用其他方法。

可选的清理过程可以用来清除原始文档中的样式和其他不必要的内容。

这里是一些基本工具,鼓励使用更好的解决方案:

简单的抓取器:

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --directory-prefix=./local_copy --no-verbose --show-progress $1

快速而粗糙的转换器到Markdown-ish:

#!/bin/bash

directory="${1:-.}"  # 如果未提供参数,默认为当前目录
output_file="${2:-concatenated.md}"  # 默认输出文件名

echo "正在将'$directory'中的文件合并到'$output_file'..."

# 清空输出文件(如果存在)
truncate -s 0 "$output_file"

# 查找所有文件(排除目录)并处理它们
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 "完成!输出保存到'$output_file'"

使用

此服务器提供了以下工具:

  • can_x_be_done:检查在给定技术中是否可以执行特定任务。
    • 输入: docs, prompt, x, technology
    • 输出: success, data
  • hints_for_problem:获取解决特定问题的提示。
    1. 输入: docs, prompt, problem, context, environment
    2. 输出: success, data
  • is_this_good_practice:检查代码片段是否遵循良好的实践。
    1. 输入: docs, prompt, snippet, context
    2. 输出: success, data
  • how_to_do_x:获取特定任务的例子和替代方法。
    1. 输入: docs, prompt, x, technology
    2. 输出: success, data

贡献

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

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

许可证

本项目根据MIT许可证发布。

免责声明

这是项目的非常早期版本,很可能存在错误和限制。请报告您发现的任何问题,并随时提出改进或新功能的建议。