项目简介
该仓库提供了一套基于 Model Context Protocol (MCP) 的后端服务器实现,旨在为大型语言模型(LLM)客户端提供标准化的上下文信息和功能。它包含电子邮件管理、博客文章发布和基于本地知识库的 RAG(检索增强生成)服务,允许 LLM 通过工具调用和 Prompt 模板进行高效交互,扩展其与外部世界的互动能力。
主要功能点
- 电子邮件管理: LLM 可以通过 MCP 服务器提供的 API 工具,实现发送、读取和总结电子邮件等功能,从而与外部通信系统进行交互。
- 博客内容发布与管理: LLM 可以通过一系列工具来管理博客文章,包括列出所有文章、获取特定文章内容、创建新文章、更新现有文章和删除文章。此外,服务器还提供了 Prompt 模板,用于指导 LLM 生成或修改文章内容。
- 知识库检索 (RAG): 提供了基于 FAISS 向量数据库的检索增强生成服务。LLM 可以查询本地 Obsidian 笔记库,检索相关文档作为上下文信息,以帮助回答问题或生成更准确、更丰富的回复。
安装步骤
-
克隆仓库:
git clone https://github.com/ggneilc/mcp_tools.git cd mcp_tools -
安装 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 -
Gmail API 配置 (仅限电子邮件功能):
- 访问 Google Cloud Console,创建一个新项目并启用 Gmail API。
- 创建 OAuth 2.0 客户端 ID 凭据(选择“桌面应用”类型),然后下载 'credentials.json' 文件。
- 将下载的 'credentials.json' 文件放置到 'mcp_tools/gmail/' 目录下。
- 首次运行 MCP 电子邮件服务器时,会提示您通过浏览器完成 Google 账号的 OAuth 认证流程。
-
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 中的文件路径 -
博客后端服务器启动 (可选,如果使用博客功能):
- 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与计算