项目简介

该仓库提供了一套基于 Model Context Protocol (MCP) 的后端服务器实现,旨在为大型语言模型(LLM)客户端提供标准化的上下文信息和功能。它包含电子邮件管理、博客文章发布和基于本地知识库的 RAG(检索增强生成)服务,允许 LLM 通过工具调用和 Prompt 模板进行高效交互,扩展其与外部世界的互动能力。

主要功能点

  • 电子邮件管理: LLM 可以通过 MCP 服务器提供的 API 工具,实现发送、读取和总结电子邮件等功能,从而与外部通信系统进行交互。
  • 博客内容发布与管理: LLM 可以通过一系列工具来管理博客文章,包括列出所有文章、获取特定文章内容、创建新文章、更新现有文章和删除文章。此外,服务器还提供了 Prompt 模板,用于指导 LLM 生成或修改文章内容。
  • 知识库检索 (RAG): 提供了基于 FAISS 向量数据库的检索增强生成服务。LLM 可以查询本地 Obsidian 笔记库,检索相关文档作为上下文信息,以帮助回答问题或生成更准确、更丰富的回复。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/ggneilc/mcp_tools.git
    cd mcp_tools
  2. 安装 Python 依赖:

    pip install mcp-server typer requests pydantic markdown2 google-api-python-client google-auth-oauthlib faiss-cpu sentence-transformers flask flask-sqlalchemy langchain_community
  3. Gmail API 配置 (仅限电子邮件功能):

    • 访问 Google Cloud Console,创建一个新项目并启用 Gmail API。
    • 创建 OAuth 2.0 客户端 ID 凭据(选择“桌面应用”类型),然后下载 'credentials.json' 文件。
    • 将下载的 'credentials.json' 文件放置到 'mcp_tools/gmail/' 目录下。
    • 首次运行 MCP 电子邮件服务器时,会提示您通过浏览器完成 Google 账号的 OAuth 认证流程。
  4. RAG 知识库准备 (仅限知识库检索功能):

    • 编辑 'rag/indexer.py' 文件,修改 'DATA_DIR' 变量为您的本地 Markdown 或 PDF 文档目录的路径。
    • 运行 'rag/indexer.py' 来处理文档并生成元数据文件 ('docs_metadata.pkl')。
    • 运行 'rag/embedder.py' 来计算文档嵌入并构建 FAISS 索引 ('docs_index.faiss')。
    • 重要提示: 'servers/mcp_files.py' 中硬编码了 'docs_index.faiss' 和 'docs_metadata.pkl' 的绝对路径。请根据您实际生成文件的位置,手动修改 'servers/mcp_files.py' 中的相应路径。
    python rag/indexer.py
    python rag/embedder.py
    # 根据实际路径,手动修改 servers/mcp_files.py 中的文件路径
  5. 博客后端服务器启动 (可选,如果使用博客功能):

    • MCP 博客服务器依赖一个 Flask 应用作为其底层数据存储和 API 接口。在启动 MCP 博客服务器之前,请先启动这个 Flask 应用:
    python blog/server.py

    此命令将启动一个本地的 Flask Web 服务器(通常运行在 'http://localhost:5000'),MCP 博客服务器会通过 HTTP 请求与之通信。

服务器配置 (面向 MCP 客户端)

MCP 客户端需要通过 JSON 格式的配置信息来连接和使用 MCP 服务器。以下是本仓库中三个 MCP 服务器的示例配置,您可以将其整合到 MCP 客户端的配置文件中:

  • 电子邮件服务器 (Email Server):

    {
        "name": "mcp_email",
        "command": "python",
        "args": ["servers/mcp_email.py"]
    }
    • 'name': 此 MCP 服务器在客户端中的唯一标识符。
    • 'command': 启动 MCP 电子邮件服务器所需的命令行命令。
    • 'args': 传递给 'command' 的参数,这里是指定要运行的 Python 脚本路径。
  • 博客服务器 (Blog Server):

    {
        "name": "mcp_blog",
        "command": "python",
        "args": ["servers/mcp_blog.py"]
    }
    • 'name': 此 MCP 服务器在客户端中的唯一标识符。
    • 'command': 启动 MCP 博客服务器所需的命令行命令。
    • 'args': 传递给 'command' 的参数,指定要运行的 Python 脚本路径。
  • 文件/知识库服务器 (Obsidian Note Indexer):

    {
        "name": "mcp_files",
        "command": "python",
        "args": ["servers/mcp_files.py"]
    }
    • 'name': 此 MCP 服务器在客户端中的唯一标识符。
    • 'command': 启动 MCP 文件/知识库服务器所需的命令行命令。
    • 'args': 传递给 'command' 的参数,指定要运行的 Python 脚本路径。

请注意,这些 MCP 服务器通常在后台运行,并在被 LLM 客户端或代理(如 'mcp_agent')需要时按需启动。

基本使用方法 (通过 MCP 客户端)

您可以使用仓库中 'agents/' 目录下的示例脚本(如 'agents/doc_to_post.py' 或 'agents/agent.py')作为 MCP 客户端来与这些服务器进行交互。

例如,要通过客户端自动化从知识库中总结信息并发布到博客:

python agents/doc_to_post.py --topic "您希望总结和发布的具体主题"

MCP 客户端(例如 'mcp_agent.core.fastagent.FastAgent')会根据其内部逻辑和配置,自动连接到相应的 MCP 服务器,并调用其提供的工具和 Prompt 模板来完成任务。

信息

分类

AI与计算