一个统一的API服务器,通过一致的接口实现与多个AI模型提供商(如Anthropic和OpenAI)的交互,支持聊天完成、工具调用和上下文处理。
320 查看 · 2026-07-07 更新
简介
一个统一的API服务器,通过一致的接口实现与多个AI模型提供商(如Anthropic和OpenAI)的交互,支持聊天完成、工具调用和上下文处理。
简介
一个统一的API服务器,通过一致的接口实现与多个AI模型提供商(如Anthropic和OpenAI)的交互,支持聊天完成、工具调用和上下文处理。
模型上下文协议 (MCP) 服务器
一个简单的模型上下文协议服务器实现,为多个 AI 模型提供商提供统一的 API。
特性
- 多个 AI 提供商(Anthropic、OpenAI)的统一 API
- 支持聊天补全和传统补全
- 工具调用支持
- 上下文/系统消息处理
- 基于环境的配置
- 使用 MongoDB 数据库进行持久化和状态管理
- 工具执行历史记录和分析
安装
bash
克隆仓库
git clone
安装依赖
npm install
运行交互式设置
npm run setup
设置脚本将引导您完成必要的 API 密钥配置:
ANTHROPIC_API_KEY- 用于 Claude 模型OPENAI_API_KEY- 用于 GPT 模型和 DALL-E 图像生成STABILITY_API_KEY- 用于 Stable Diffusion 图像生成GOOGLE_CSE_API_KEY和GOOGLE_CSE_ID- 用于网络搜索功能BING_SEARCH_API_KEY- 用于备用网络搜索
如果您愿意,也可以手动编辑 .env 文件。
MongoDB 设置
MCP 服务器使用 MongoDB 进行数据持久化。您可以选择以下几种方式来设置 MongoDB:
选项 1:自动化设置(推荐)
运行 MongoDB 设置脚本,该脚本将引导您完成整个过程:
bash
运行 MongoDB 设置脚本
npm run setup-mongodb
此脚本将:
- 检查 Docker 是否可用
- 使用 Docker Compose 启动 MongoDB(如果可用)
- 在您的 .env 文件中配置连接
- 验证 MongoDB 连接
选项 2:手动 Docker 设置
最简单的方法是使用包含的 Docker Compose 配置来启动 MongoDB:
bash
在 Docker 中启动 MongoDB 和 Mongo Express
docker compose up -d
更新您的 .env 文件中的连接字符串
echo "MONGODB_URI=mongodb://mcpuser:mcppassword@localhost:27017/mcp-server" >> .env
MongoDB 将在 mongodb://mcpuser:mcppassword@localhost:27017/mcp-server 可用
Mongo Express(Web 管理界面)将在 http://localhost:8081 可用
选项 3:本地 MongoDB 安装
如果您希望在本地安装 MongoDB:
-
从 https://www.mongodb.com/try/download/community 下载并安装 MongoDB
-
启动 MongoDB 服务
-
更新您的
.env文件:MONGODB_URI=mongodb://localhost:27017/mcp-server
选项 4:MongoDB Atlas(云)
对于生产环境,推荐使用 MongoDB Atlas:
-
创建一个新的集群
-
设置数据库用户并白名单您的 IP 地址
-
获取连接字符串并更新您的
.env文件:MONGODB_URI=mongodb+srv://
: @ .mongodb.net/mcp-server?retryWrites=true&w=majority
数据库迁移
要将现有数据迁移到 MongoDB:
bash
运行迁移脚本
npm run migrate-mongodb
此脚本将:
- 将工具定义迁移到 MongoDB
- 将配置(如 API 密钥)迁移到 MongoDB
- 如果有备份数据,则导入备份数据
使用
启动服务器
bash
交互式启动(检查 API 密钥)
npm start
开发模式,带自动重载
npm run dev
快速启动(跳过环境检查)
npm run quick-start
使用 PM2 进程管理器启动服务器
npm run pm2:start
在生产模式下使用 PM2 启动服务器
npm run pm2:start:prod
服务器将在 http://localhost:3000(或您在 .env 中指定的端口)上运行。
启动选项
-
标准启动 (
npm start):- 检查是否已配置 API 密钥
- 如果未找到密钥则提示进行设置
- 推荐首次用户使用
-
开发模式 (
npm run dev):- 使用 nodemon 实现代码更改时自动重载
- 仍然执行环境检查
- 最适合开发
-
快速启动 (
npm run quick-start):- 跳过所有环境检查- 立即启动服务器
- 当您确定配置正确时非常有用
- PM2 生产模式 (
npm run pm2:start:prod):- 使用 PM2 进程管理器运行服务器
- 如果服务器崩溃,会自动重启
- 为生产环境优化
- 跳过环境检查
使用 PM2 进程管理器
可以使用 PM2(一个用于 Node.js 应用程序的生产进程管理器)来运行服务器。PM2 提供了以下功能:
- 进程管理(崩溃后重启)
- 日志管理
- 性能监控
- 负载均衡(适用于多个实例)
PM2 命令
bash
使用 PM2 启动服务器
npm run pm2:start
以生产模式启动
npm run pm2:start:prod
查看日志
npm run pm2:logs
监控性能
npm run pm2:monit
重启服务器
npm run pm2:restart
停止服务器
npm run pm2:stop
从 PM2 中移除服务器
npm run pm2:delete
PM2 的配置存储在 ecosystem.config.js 文件中。您可以修改此文件以更改:
- 进程名称
- 环境变量
- 内存限制
- 部署配置
- 实例数量(用于负载均衡)
API 端点
POST /mcp/:provider
通过统一的 API 向 AI 模型发起请求。
URL 参数:
provider: 要使用的 AI 提供商 (anthropic或openai)
请求体: json { "messages": [ { "role": "user", "content": "您的提示内容" } ], "model": "claude-3-opus-20240229", // 可选,特定于提供商的模型名称 "tools": [...], // 可选,用于函数调用的工具 "context": "系统消息或上下文" // 可选 }
或者(旧格式):
json { "prompt": "您的提示内容", "model": "claude-3-opus-20240229", // 可选 "context": "系统消息或上下文" // 可选 }
响应: 返回来自提供商 API 的原始响应。
GET /tools/available
获取所有可用工具的详细信息列表。
查询参数:
format- 响应格式:json(默认)、yaml、table或htmlcategory- 按类别筛选工具(可选)enabled- 按启用状态筛选:true(默认)或falsesearch- 按名称、描述或标签搜索工具provider- 按提供商筛选工具(例如openai、google)limit- 返回的最大工具数量(用于分页)offset- 分页偏移量(默认:0)
响应(JSON 格式): json { "success": true, "count": 10, "metadata": { "categories": ["web", "image", "utility"], "providers": ["openai", "anthropic", "internal"], "totalCount": 24, "offset": 0, "limit": 10 }, "tools": [ { "name": "web_search", "description": "在网络上搜索信息", "category": "web", "version": "1.0.0", "provider": "google", "enabled": true, "parameters": { "query": { "type": "string", "description": "搜索查询", "required": true }, "limit": { "type": "number", "description": "最大结果数", "required": false, "default": 5 } }, "usage": { "endpoint": "/tools/web/search", "method": "POST", "parameters": { /* 同上 */ } }, "metadata": { "createdAt": "2023-10-15T12:00:00Z", "updatedAt": "2024-04-20T09:30:00Z", "usageCount": 1245 } } // ... 更多工具 ] }
GET /health
健康检查端点,如果服务器正在运行则返回状态码 200。
数据管理
数据库备份
您可以创建和管理数据库备份:
bash
创建完整备份
npm run backup-mongodb
创建包含执行历史的备份
npm run backup-mongodb -- --with-executions
列出现有备份
npm run backup-mongodb -- --list
测试数据库连接
要验证您的 MongoDB 设置:
bash
运行数据库测试脚本
npm run test-mongodb### 示例客户端
命令行客户端
测试客户端包含在 src/client.js 中。要运行它:
bash node src/client.js
Web 客户端
当服务器运行时,可以在 http://localhost:3000 访问一个简单的 Web 界面。您可以直接从浏览器中使用此界面来测试 API。
可用工具
MCP 服务器提供了一个工具发现端点,允许用户和 AI 代理以编程方式列出所有可用工具:
工具发现
GET /tools/available - 列出所有带有详细信息的可用工具。
- 支持多种格式:JSON、YAML、HTML 和 ASCII 表格
- 提供按类别、提供商和搜索词过滤的功能
- 包含每个工具的详细元数据和使用示例
示例用法: bash
获取 JSON 格式的全部工具
curl http://localhost:3000/tools/available
获取特定类别的工具
curl http://localhost:3000/tools/available?category=web
搜索与图像相关的工具
curl http://localhost:3000/tools/available?search=image
获取所有工具的格式化 HTML 页面
curl http://localhost:3000/tools/available?format=html > tools.html
Web 搜索工具
服务器包括内置的 Web 搜索和检索工具:
-
Web 搜索 (
/tools/web/search)- 根据给定查询搜索网络上的信息
- 参数:
query(必需),limit(可选) - 需要环境变量:
GOOGLE_CSE_API_KEY和GOOGLE_CSE_ID - 如果 Google 搜索失败,则回退到
BING_SEARCH_API_KEY
-
Web 内容 (
/tools/web/content)- 从特定 URL 检索并提取内容
- 参数:
url(必需),useCache(可选)
-
Web 批处理 (
/tools/web/batch)- 并行从多个 URL 检索内容
- 参数:
urls(必需数组),useCache(可选)
图像生成工具
服务器还包括图像生成、编辑和变体工具:
-
生成图像 (
/tools/image/generate)- 根据文本提示生成图像
- 参数:
prompt(必需):图像的详细描述provider(可选):openai或stability(默认为openai)options(可选):特定于提供商的选项
-
编辑图像 (
/tools/image/edit)- 使用文本提示编辑现有图像
- 参数:
imagePath(必需):要编辑的图像路径prompt(必需):要进行的编辑的描述maskPath(可选):掩码图像路径
-
创建图像变体 (
/tools/image/variation)- 创建现有图像的变体
- 参数:
imagePath(必需):要创建变体的图像路径
注意: 要使用这些工具,您需要在
.env文件中设置 API 密钥:
- 对于 OpenAI 图像:
OPENAI_API_KEY- 对于 Stability AI 图像:
STABILITY_API_KEY- 对于 Web 搜索:
GOOGLE_CSE_API_KEY和GOOGLE_CSE_ID
与 AI 模型的工具集成
MCP 服务器自动处理与 AI 模型的工具调用和执行。当模型决定使用某个工具时,服务器会:
- 使用提供的参数执行请求的工具
- 将工具的响应返回给模型
- 模型可以将工具的响应整合到其最终答案中
AI 模型的工具发现
AI 模型可以使用 /tools/available 端点来发现可用的工具及其使用方法。这特别适用于:
- 运行时动态工具发现
- AI 代理的自文档化
- 使 AI 系统能够适应可用功能
示例系统提示用于 AI 模型:
您可以通过 MCP 服务器访问外部工具。 在使用任何工具之前,您应该通过调用以下命令检查可用的工具: GET /tools/available
这将返回所有可用工具及其参数和使用说明的列表。 然后,您可以按照提供的使用模式使用这些工具。
示例工具用法请参阅 /examples 目录以获取演示工具使用方法的示例代码。
添加新的提供商或工具
添加新的AI提供商
要添加新的AI提供商,请执行以下步骤:
- 将提供商的SDK添加到项目中
- 在
server.js中创建一个新的处理函数 - 在主路由处理程序中添加一个新的情况
添加新工具
要在服务器上添加新工具,请执行以下步骤:
- 在
/src/tools目录下创建一个新的工具实现 - 将工具定义添加到
tool-definitions.js - 更新
server.js中的工具执行函数 - 如果需要,为直接使用工具添加新的API端点
许可证
ISC
来源
- 来源:github
- 链接:https://github.com/infinyte/mcp-server