首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页
学习
活动
专区
圈层
工具
MCP广场
MCP广场 >详情页
cosa-sai2025-05-290分享
github
通过Gemini API提供精选的文档访问,使用户能够通过克服上下文和搜索限制,有效查询和交互技术文档。
By M-Gonzalo
2025-05-290
github
详情内容

Gemini文档MCP服务器

smithery徽章

项目说明

本项目实现了一个MCP服务器,通过Gemini API(拥有200万token的超大上下文窗口)访问各类技术文档。该服务器适用于任何客户端,但特别针对Roo/Cline环境设计。

相比直接浏览网页或使用搜索引擎,这种方法具有以下优势:

  • 访问精选知识库:大语言模型使用特定文档集,避免垃圾结果和可能导致混淆的误报
  • 突破上下文窗口限制:直接提供文档内容,使大语言模型能获取比单纯网络搜索更多的信息
  • 定制化且深思熟虑的回答:大语言模型不仅提供文档片段,还会综合考虑相关技术的完整规范,给出经过充分思考的答案。这使得可以处理更复杂的问题,如"有哪些替代方案可以实现X?"或"这个代码片段是否符合惯用法?"

同时,该方法还克服了传统RAG系统的一些问题:

  • 无需分块处理:大语言模型可以一次性访问整个文档,无需将其分割成小块,也无需痛苦地测试和选择各种分割方式
  • 无需检索器:Gemini API本身就是一个强大的检索器,可以访问整个文档,因此无需实现自定义检索器
  • 无需向量化、向量数据库或其他复杂系统:我们直接处理纯文本,由于可以一次性查看所有内容,因此不需要用于相似性搜索的向量。如果内容相关,我们就能识别出来

不过也存在一些限制:

  • 无法实时更新:文档是静态的,不会实时更新。这意味着除非我们手动更新文档或提供自动化更新方式,否则大语言模型可能不知道技术的最新功能或变更
  • 大量token不等于无限上下文窗口:大语言模型一次只能看到大约200万token,因此可能无法看到某些技术的全部文档。对于包含大量文档的大型复杂技术栈尤其如此
  • 速度不是很快:我们使用的是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文档服务器:

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": "<您的Gemini API密钥>"
  },
  "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风格转换器:

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

贡献指南

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

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

许可证

本项目采用MIT许可证。

免责声明

这是项目的非常早期版本,可能存在错误和限制。如果您发现问题,请报告,也可以提出改进建议或新功能需求。

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档