这是一个基于Model Context Protocol (MCP) 构建的服务器实现,旨在帮助大型语言模型(LLM)便捷地访问流行Python库的官方文档。通过实现一个标准的MCP工具,它允许LLM客户端(如Claude Desktop)调用此服务器的功能,获取特定查询在目标库文档中的相关信息。

主要功能点:

  • 文档搜索: 允许搜索指定库(当前支持'langchain'、'openai'、'llama-index')的官方文档。
  • 网页内容提取: 能抓取搜索结果页面的内容,并提取可见文本,作为提供给LLM的上下文。
  • MCP工具实现: 将文档搜索功能封装为一个标准的MCP工具 ('get_docs'),供MCP客户端调用。
  • 标准协议通信: 通过STDIO传输方式,遵循MCP协议与客户端进行JSON-RPC通信。

安装步骤:

  1. 安装uv包管理器: 按照uv官方文档安装'uv'。这是一个快速的Python包管理器。
  2. 创建项目目录:
    uv init mcp-server-docs # 创建并进入一个新目录
    cd mcp-server-docs
  3. 创建并激活虚拟环境:
    uv venv
    source .venv/bin/activate # Windows上使用:.venv\Scripts\activate
  4. 安装依赖:
    uv add "mcp[cli]" httpx beautifulsoup4 python-dotenv
  5. 创建服务器代码文件:
    touch main.py # 或使用你喜欢的编辑器创建
  6. 将仓库中的 main.py 代码复制到你创建的 main.py 文件中。
  7. 配置Serper.dev API密钥:
    • 你需要一个Serper.dev API密钥。
    • 在项目根目录('mcp-server-docs')下创建一个名为 '.env' 的文件。
    • 在 '.env' 文件中添加以下内容,将'your_serper_api_key'替换为你实际的API密钥:
      SERPER_API_KEY=your_serper_api_key

服务器配置 (供MCP客户端使用):

MCP客户端(例如Claude Desktop)需要知道如何启动这个MCP服务器。你需要将以下配置信息添加到客户端的相应配置文件中(例如Claude Desktop的'claude_desktop_config.json'),告诉客户端服务器的启动命令及其参数。

配置示例如下(这是一个JSON结构,你需要根据你的MCP客户端的具体要求进行添加):

{
    "mcpServers": {
        "mcp-docs-server": {  // 给你的服务器取一个名称,客户端会用它来引用
            "command": "uv",  // 用于启动服务器的可执行命令
            "args": [         // 启动命令的参数列表
                "--directory",
                "/绝对/路径/到你的/mcp-server-docs", // **重要:替换为你项目目录的绝对路径**
                "run",
                "main.py"     // 启动main.py脚本
            ]
        }
    }
}

请根据你的客户端软件文档找到正确的配置文件位置和格式,然后填入类似上述示例中的 'command' 和 'args' 信息。

基本使用方法:

  1. 启动MCP服务器: 在你的项目目录 ('mcp-server-docs') 中,确保虚拟环境已激活 ('source .venv/bin/activate'),然后运行:

    uv run main.py

    服务器将在STDIO上启动并监听来自MCP客户端的连接。

  2. 连接客户端: 启动配置好此服务器信息的MCP客户端(例如Claude Desktop)。客户端应该会自动连接到服务器。

  3. LLM调用工具: 一旦连接成功,你的LLM客户端(如果它支持调用MCP工具)就可以识别并调用服务器提供的 'get_docs' 工具了。当你在与LLM交互时提出与支持库文档相关的问题时,LLM可能会自动或在你的确认下调用 'get_docs' 工具来获取信息,然后利用这些信息来回答你的问题。

    'get_docs' 工具需要两个参数:

    • 'query' (字符串): 你想要搜索的文档内容,例如“如何使用Agent”。
    • 'library' (字符串): 你想要搜索的库名称,目前支持'"langchain"'、'"openai"'或'"llama-index"'。

    例如,如果你问LLM关于LangChain中Agents的问题,LLM可能会调用 'get_docs(query="Agents", library="langchain")' 来获取相关文档内容。

信息

分类

AI与计算