AI模型统一API服务

Model Context Protocol (MCP) Server 是一个为多种AI模型提供商提供统一API接口的服务器实现,支持聊天补全、工具调用和上下文管理等功能,适用于AI模型集成与开发。

  • by infinyte
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 infinyte/mcp-server

使用说明

模型上下文协议(MCP)服务器

模型上下文协议的简单服务器实现,为多个人工智能模型提供商提供统一的API。

特性

  • 适用于多个人工智能提供商的统一API(Anthropic、OpenAI)
  • 支持聊天完成和传统完成
  • 工具调用支持
  • 上下文/系统消息处理
  • 基于环境的配置
  • 用于持久性和状态管理的MongoDB数据库
  • 工具执行历史和分析

安装

# Clone the repository
git clone <repository-url>
cd testmcp

# Install dependencies
npm install

# Run the interactive setup
npm run setup

设置脚本将指导您配置必要的API密钥:

  • ANTHROPIC_API_KEY -适用于克劳德模特
  • OPENAI_API_KEY -用于GPT模型和DALL-E映像生成
  • STABILITY_API_KEY -用于生成稳定扩散图像
  • GOOGLE_CSE_API_KEY 和 GOOGLE_CSE_ID -用于网络搜索功能
  • BING_SEARCH_API_KEY -用于回退网络搜索

您还可以手动编辑 .env 文件,如果你喜欢。

MongoDB设置

MCP服务器使用MongoDB进行数据持久化。您有几个设置MongoDB的选项:

选项1:自动设置(推荐)

运行MongoDB安装脚本,它将指导您完成整个过程:

# Run the MongoDB setup script
npm run setup-mongodb

此脚本将:

  1. 检查Docker是否可用
  2. 使用Docker Compose启动MongoDB(如果可用)
  3. 在.env文件中配置连接
  4. 验证MongoDB连接

选项2:手动Docker设置

开始使用MongoDB的最简单方法是使用附带的Docker Compose配置:

# Start MongoDB and Mongo Express in Docker
docker compose up -d

# Update your .env file with the connection string
echo "MONGODB_URI=mongodb://mcpuser:mcppassword@localhost:27017/mcp-server" >> .env

MongoDB将在 mongodb://mcpuser:mcppassword@localhost:27017/mcp-server
Mongo Express(网络管理员)将在 http://localhost:8081

选项3:本地MongoDB安装

如果您更喜欢在本地安装MongoDB:

  1. 从以下位置安装MongoDB https://www.mongodb.com/try/download/community
  2. 启动MongoDB服务
  3. 更新您的 .env 文件包含:
    MONGODB_URI=mongodb://localhost:27017/mcp-server
    

选项4:MongoDB Atlas(云)

对于生产使用,建议使用MongoDB Atlas:

  1. 在以下网址创建帐户 https://www.mongodb.com/cloud/atlas
  2. 创建新集群
  3. 设置数据库用户并将您的IP地址列入白名单
  4. 获取您的连接字符串并更新您的 .env 文件:
    MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/mcp-server?retryWrites=true&w=majority
    

数据库迁移

要将现有数据迁移到MongoDB:

# Run the migration script
npm run migrate-mongodb

此脚本将:

  1. 将工具定义迁移到MongoDB
  2. 将配置(如API密钥)迁移到MongoDB
  3. 导入任何可用的备份数据

用法

启动服务器

# Interactive startup (checks for API keys)
npm start

# Development mode with auto-reload
npm run dev

# Quick start (skips environment checks)
npm run quick-start

# Start server with PM2 process manager
npm run pm2:start

# Start server with PM2 in production mode
npm run pm2:start:prod

服务器将在以下时间运行http://localhost:3000(或您在.env中指定的端口)。

启动选项

  1. 标准启动 (npm start):

    • 检查是否配置了API密钥
    • 如果找不到密钥,则提示进行设置
    • 建议首次使用
  2. 发展模式 (npm run dev):

    • 使用nodemon在代码更改时自动重新加载
    • 仍执行环境检查
    • 最有利于发展
  3. 快速开始 (npm run quick-start):

    • 绕过所有环境检查
    • 立即启动服务器
    • 当您知道您的配置正确时很有用
  4. PM2生产模式 (npm run pm2:start:prod):

    • 使用PM2进程管理器运行服务器
    • 如果服务器崩溃,则自动重新启动
    • 针对生产环境进行了优化
    • 绕过环境检查

使用PM2流程管理器

该服务器可以使用PM2运行,PM2是Node.js应用程序的生产流程管理器。PM2提供以下功能:

  • 进程管理(崩溃时重新启动)
  • 日志管理
  • 性能监控
  • 负载平衡(适用于多个实例)

PM2命令

# Start the server with PM2
npm run pm2:start

# Start in production mode
npm run pm2:start:prod

# View logs
npm run pm2:logs

# Monitor performance
npm run pm2:monit

# Restart the server
npm run pm2:restart

# Stop the server
npm run pm2:stop

# Remove the server from PM2
npm run pm2:delete

PM2配置存储在 ecosystem.config.js。您可以修改此文件以更改:

  • 进程名称
  • 环境变量
  • 内存限制
  • 部署配置
  • 实例数(用于负载平衡)

API终点

POST /mcp/:provider

通过统一的API向人工智能模型提出请求。

URL参数:

  • provider:要使用的AI提供商(anthropic 或 openai)

请求正文:

{
  "messages": [
    { "role": "user", "content": "Your prompt here" }
  ],
  "model": "claude-3-opus-20240229",  // Optional, provider-specific model name
  "tools": [...],  // Optional, tools for function calling
  "context": "System message or context"  // Optional
}

OR(传统格式):

{
  "prompt": "Your prompt here",
  "model": "claude-3-opus-20240229",  // Optional
  "context": "System message or context"  // Optional
}

答复: 返回来自提供程序的API的原始响应。

GET /tools/available

获取所有可用工具的完整列表和详细信息。

查询参数:

  • format -响应格式: json (默认), yaml, table,或 html
  • category -按类别筛选工具(可选)
  • enabled -按启用状态筛选: true (默认)或 false
  • search -按名称、描述或标签搜索工具
  • provider -按提供商过滤工具(例如。, openai, google)
  • limit -要返回的最大工具数(用于分页)
  • offset -分页偏移量(默认值:0)

响应(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": "Search the web for information",
      "category": "web",
      "version": "1.0.0",
      "provider": "google",
      "enabled": true,
      "parameters": {
        "query": {
          "type": "string",
          "description": "The search query",
          "required": true
        },
        "limit": {
          "type": "number",
          "description": "Maximum number of results",
          "required": false,
          "default": 5
        }
      },
      "usage": {
        "endpoint": "/tools/web/search",
        "method": "POST",
        "parameters": { /* same as above */ }
      },
      "metadata": {
        "createdAt": "2023-10-15T12:00:00Z",
        "updatedAt": "2024-04-20T09:30:00Z",
        "usageCount": 1245
      }
    }
    // ... more tools
  ]
}

GET /health

如果服务器正在运行,则返回状态200的健康检查端点。

数据管理

数据库备份

您可以创建和管理数据库备份:

# Create a full backup
npm run backup-mongodb

# Create a backup with execution history
npm run backup-mongodb -- --with-executions

# List existing backups
npm run backup-mongodb -- --list

测试数据库连接

要验证您的MongoDB设置:

# Run the database test script
npm run test-mongodb

客户示例

命令行客户端

测试客户端包含在 src/client.js。要运行它,请执行以下操作:

node src/client.js

网络客户端

一个简单的web界面可在http://localhost:3000当服务器正在运行时。您可以使用它直接从浏览器测试API。

可用工具

MCP服务器提供了一个工具发现端点,允许用户和AI代理以编程方式列出所有可用工具:

工具发现

GET /tools/available -列出所有可用工具及其详细信息。

  • 支持多种格式:JSON、YAML、HTML和ASCII表
  • 提供按类别、提供者和搜索词进行筛选
  • 包括每个工具的详细元数据和使用示例

示例用法:

# Get all tools in JSON format
curl http://localhost:3000/tools/available

# Get tools in a specific category
curl http://localhost:3000/tools/available?category=web

# Search for image-related tools
curl http://localhost:3000/tools/available?search=image

# Get a formatted HTML page of all tools
curl http://localhost:3000/tools/available?format=html > tools.html

网络搜索工具

该服务器包括内置的网络搜索和检索工具:

  1. 网页搜索 (/tools/web/search)

    • 在网络上搜索给定查询的信息
    • 参数: query (必填), limit (可选)
    • 要求: GOOGLE_CSE_API_KEY 和 GOOGLE_CSE_ID 环境变量
    • 回落到 BING_SEARCH_API_KEY 如果谷歌搜索失败
  2. Web内容 (/tools/web/content)

    • 从特定URL检索和提取内容
    • 参数: url (必填), useCache (可选)
  3. Web批处理 (/tools/web/batch)

    • 并行从多个URL检索内容
    • 参数: urls (所需数组), useCache (可选)

图像生成工具

该服务器还包括图像生成、编辑和变体工具:

  1. 生成图像 (/tools/image/generate)

    • 根据文本提示生成图像
    • 参数:
      • prompt (必填):图像的详细描述
      • provider (可选): openai 或 stability (默认为 openai)
      • options (可选):特定于提供商的选项
  2. 编辑图像 (/tools/image/edit)

    • 使用文本提示编辑现有图像
    • 参数:
      • imagePath (必填):要编辑的图像的路径
      • prompt (必填):要进行的编辑的描述
      • maskPath (可选):遮罩图像的路径
  3. 创建图像变体 (/tools/image/variation)

    • 创建现有图像的变体
    • 参数:
      • imagePath (必填):创建图像变体的路径

注: 要使用这些工具,您需要在 .env 文件:

  • 对于OpenAI图像: OPENAI_API_KEY
  • 对于Stability AI图像: STABILITY_API_KEY
  • 对于网络搜索: GOOGLE_CSE_API_KEY 和 GOOGLE_CSE_ID

工具与AI模型的集成

MCP服务器自动处理AI模型的工具调用和执行。当模型决定使用工具时,服务器:

  1. 使用提供的参数执行请求的工具
  2. 返回工具对模型的响应
  3. 然后,模型可以将工具的响应纳入其最终答案中

AI模型的工具发现

AI模型可以使用 /tools/available 端点,以发现可用的工具以及如何使用它们。这对于以下情况特别有用:

  • 运行时动态工具发现
  • AI代理的自我文档
  • 使人工智能系统能够适应可用功能

AI模型的示例系统提示:

You have access to external tools through the MCP server. 
Before using any tools, you should check what tools are available by calling:
GET /tools/available

This will return a list of all available tools with their parameters and usage instructions.
You can then use these tools by following the provided usage patterns.

工具使用示例

看 /examples 演示工具使用的示例代码目录。

添加新的提供者或工具

添加新的AI提供商

要添加新的AI提供商:

  1. 将提供者的SDK添加到项目中
  2. 在中创建新的处理程序函数 server.js
  3. 在主路由处理程序中添加新案例

添加新工具

要向服务器添加新工具,请执行以下操作:

  1. 在中创建新的工具实现 /src/tools 目录
  2. 将工具定义添加到 tool-definitions.js
  3. 更新中的工具执行功能 server.js
  4. 添加新的API端点以直接使用工具(如果需要)

许可证

GNU MIT