项目简介
本项目是一个基于 Model Context Protocol (MCP) 构建的服务器,旨在为大型语言模型 (LLM) 客户端提供电子报纸相关的数据和服务。它通过标准化的接口,允许 LLM 获取电子报纸列表、查询单篇报纸、处理购买请求,并利用 RAG(检索增强生成)技术提供相关的历史背景和内容推荐。服务器与一个独立的后端应用服务器交互来管理电子报纸数据、存储和交易,并利用 ChromaDB 和外部 LLM 模型(如 Groq)进行文档向量检索和内容生成。
主要功能点
- 获取电子报纸列表: 允许 LLM 获取系统中所有可用的电子报纸列表。
- 获取单篇电子报纸: 根据指定的 ID 获取某一篇电子报纸的详细信息。
- 购买电子报纸: 处理 LLM 发起的电子报纸购买请求,通常涉及与支付系统的交互(在此项目中是与后端应用服务器交互)。
- 获取历史背景: 根据查询描述,从后端应用服务器检索与主题相关的历史背景信息。
- 推荐电子报纸: 利用向量检索技术(通过 ChromaDB 和 Ollama embeddings),根据用户提供的主题,查找并推荐相关的电子报纸内容,并使用外部 LLM 进行内容生成和摘要。
安装步骤
本项目包含两个主要部分:'app-server'(处理数据存储、文件上传、交易等后端逻辑)和 'epaper-mcp-server'(实现 MCP 协议并调用 'app-server' 和 RAG 组件)。
- 克隆仓库: 将 GitHub 仓库克隆到本地。
- 安装依赖: 分别进入 'app-server' 和 'epaper-mcp-server' 目录,运行包管理器命令安装依赖(例如 'npm install' 或 'yarn install')。
- 配置环境: 在 'app-server' 和 'epaper-mcp-server' 目录中创建 '.env' 文件,配置数据库 (PGlite)、对象存储 (Minio/S3)、消息队列 (RabbitMQ)、向量数据库 (ChromaDB)、嵌入模型 (Ollama) 和 LLM (Groq/DeepSeek) 等服务的连接信息和密钥。具体变量名请参考项目代码中的 'env.js' 或 '.env.example' 文件(如果存在)。
- 启动后端服务: 启动 'app-server' 所需的外部服务(数据库、Minio、RabbitMQ、ChromaDB、Ollama 等),然后启动 'app-server'(例如运行 'node ./app-server/src/server.js' 或使用 'npm start' 命令,具体启动方式请查看项目文件)。
- 运行数据库迁移: 如果使用了数据库,可能需要运行迁移脚本初始化数据库结构(例如运行 'node ./app-server/src/migrate.js')。
- 启动 MCP 服务器: 启动 MCP 服务器。本项目提供了 Stdio 和 SSE 两种传输方式的服务器入口。根据您的需求选择启动方式(例如运行 'node ./epaper-mcp-server/src/stdio-server.js' 启动 Stdio 服务器,或运行 'node ./epaper-mcp-server/src/sse-server.js' 启动 SSE 服务器)。
服务器配置
对于兼容 Model Context Protocol 的客户端,通常需要配置如何启动或连接到 MCP 服务器。以下是连接到此服务器的典型配置信息示例(根据您选择的传输方式和启动脚本可能需要调整):
使用 Stdio 传输方式 (本地启动):
{ "name": "epaper-mcp-server", "command": "node", "args": [ "path/to/your/cloned/repo/epaper-mcp-server/src/stdio-server.js" ], "transports": [ {"type": "stdio"} ], "description": "电子报纸 MCP 服务器,通过 Stdio 传输。", "icon": "可选图标路径或 URL" }
- 'name': MCP 服务器的唯一名称。
- 'command': 用于启动服务器进程的可执行文件(例如 'node')。
- 'args': 传递给 command 的参数,这里是服务器入口文件的路径。
- 'transports': 声明支持的传输协议,'stdio' 表示标准输入输出。
- 'description': 服务器的简要描述。
- 'icon': 可选的服务器图标。
使用 SSE 传输方式 (连接到已运行的服务器):
{ "name": "epaper-mcp-server-sse", "transports": [ { "type": "sse", "url": "http://localhost:10203/sse", "postUrl": "http://localhost:10203/messages" } ], "description": "电子报纸 MCP 服务器,通过 SSE 传输连接到已运行的实例。", "icon": "可选图标路径或 URL" }
- 'name': MCP 服务器的唯一名称(与 Stdio 服务器不同)。
- 'transports': 声明支持的传输协议,'sse' 表示 Server-Sent Events。
- 'url': SSE 连接的端点 URL。
- 'postUrl': 用于发送客户端消息的 POST 端点 URL。
- 'description': 服务器的简要描述。
- 'icon': 可选的服务器图标。
请根据您的实际项目路径和启动端口调整 'args' 中的文件路径或 'url'、'postUrl'。确保 MCP 服务器在客户端尝试连接前已经启动并运行。
基本使用方法
LLM 客户端(例如一个聊天应用集成)可以通过配置连接到这个 MCP 服务器。一旦连接建立,LLM 就可以根据其内部逻辑和用户的指令,通过 MCP 协议调用服务器提供的工具。
用户可以通过向 LLM 提出与电子报纸相关的请求来使用此服务器的功能,例如:
- "显示所有电子报纸。" (LLM 可能会调用 'get-publications' 工具)
- "查找 ID 为 'abc-123' 的电子报纸。" (LLM 可能会调用 'get-single-publication' 工具)
- "我想购买 ID 为 'xyz-456' 的电子报纸,我的邮箱是 [email protected],价格是 50 元。" (LLM 可能会调用 'purchase-publication' 工具,需要参数 publicationId, email, amount)
- "给我介绍一下关于 '历史性事件' 主题的电子报纸的背景。" (LLM 可能会调用 'get-historical-context' 工具)
- "推荐一些关于 '科技发展' 主题的最新电子报纸。" (LLM 可能会调用 'recommend-publications' 工具,需要参数 topic)
LLM 会将用户请求解析为对相应 MCP 工具的调用,服务器执行工具逻辑(可能涉及查询数据库、调用外部 API、进行向量检索和 LLM 调用),并将结果以结构化的方式返回给 LLM。LLM 再将结果呈现给用户。
信息
分类
AI与计算