跳转到主要内容
MCP 服务器是一个配置,告诉 MetaMCP 如何启动和管理模型上下文协议服务器。这些服务器提供工具、资源和提示,可以通过 MetaMCP 端点聚合和暴露。

什么是 MCP 服务器?

MCP 服务器是 MetaMCP 的构建块。每个服务器配置定义:
  • 如何启动服务器(命令、参数、环境)
  • 服务器类型(STDIO、SSE、可流式 HTTP)
  • 身份验证要求(如果有)
  • 资源依赖(Python 包、Node 模块等)

配置示例

{
  "name": "HackerNews",
  "type": "STDIO", 
  "command": "uvx",
  "args": ["mcp-hn"],
  "description": "访问 HackerNews 故事和评论"
}

服务器类型

MetaMCP 支持三种类型的 MCP 服务器:
最常见类型 - 通过标准输入/输出流通信
{
  "type": "STDIO",
  "command": "uvx", 
  "args": ["mcp-server-package"],
  "env": {
    "API_KEY": "your-api-key"
  }
}
使用场景:
  • 通过 uvx 安装的 Python 包
  • 通过 npx 的 Node.js 包
  • 自定义可执行脚本
服务器发送事件 - 通过 SSE(服务器发送事件)通信
{
  "type": "SSE",
  "url": "https://api.example.com/sse",
  "bearerToken": "your-bearer-token"
}
如果服务器使用 OAuth,您可以将 bearerToken 留空。
基于 HTTP 的流式传输 - 可流式 HTTP 现在是远程 MCP 的标准
{
  "type": "STREAMABLE_HTTP",
  "url": "https://api.example.com/mcp",
  "bearerToken": "your-bearer-token"
}
如果服务器使用 OAuth,您可以将 bearerToken 留空。

配置选项

基本配置

{
  "name": "unique-server-name",
  "type": "STDIO|SSE|STREAMABLE_HTTP",
  "command": "command-to-run", // 仅 STDIO
  "args": ["arg1", "arg2"],     // 仅 STDIO
  "url": "https://...",         // 仅 SSE/STREAMABLE_HTTP
}

环境变量

向 STDIO 服务器传递环境变量:
{
  "name": "TimeServer",
  "type": "STDIO",
  "command": "uvx",
  "args": ["mcp-server-time", "--local-timezone=America/New_York"],
  "env": {
    "TZ": "America/New_York"
  }
}

环境变量插值

使用 ${ENV_VAR} 语法在运行时引用环境变量:
{
  "name": "ExampleServer",
  "type": "STDIO",
  "command": "uvx",
  "args": ["mcp-example"],
  "env": {
    "API_KEY": "${API_KEY}",
    "DEBUG": "true"
  }
}
优势:
  • 安全:API 密钥和密钥不会硬编码在配置中
  • 灵活:值从容器环境中解析
  • 向后兼容:原始值仍然像以前一样工作
工作原理:
  • ${VAR_NAME} 在运行时被 process.env.VAR_NAME 替换
  • 缺失的变量会记录警告但不会使服务器崩溃
  • 密钥在日志中自动被隐藏

身份验证

对于需要身份验证的服务器:
{
  "env": {
    "API_KEY": "your-secret-key"
  }
}

管理 MCP 服务器

添加服务器

  1. 导航到 MetaMCP 仪表板中的 MCP 服务器
  2. 点击”添加服务器”
  3. 配置服务器详细信息
  4. 测试配置
  5. 保存使其可用于命名空间

批量导入/导出

MetaMCP 支持批量导入和导出 MCP 服务器配置,便于迁移和备份。

导出服务器

将所有配置的 MCP 服务器导出到 JSON 文件:
  1. 导航到仪表板中的 MCP 服务器
  2. 点击”导出 JSON”按钮
  3. 选择下载文件或复制到剪贴板

导出格式

{
  "mcpServers": {
    "HackerNews": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-hn"],
      "description": "访问 HackerNews 故事和评论"
    },
    "TimeServer": {
      "type": "stdio", 
      "command": "uvx",
      "args": ["mcp-server-time"],
      "env": {
        "TZ": "America/New_York"
      },
      "description": "时间和时区实用工具"
    },
    "RemoteAPI": {
      "type": "streamable_http",
      "url": "https://api.example.com/mcp",
      "bearerToken": "your-bearer-token",
      "description": "通过 HTTP 的远程 MCP 服务器"
    }
  }
}

导入服务器

从 JSON 配置导入多个 MCP 服务器:
  1. 导航到仪表板中的 MCP 服务器
  2. 点击”导入 JSON”按钮
  3. 粘贴或输入您的 JSON 配置
  4. 点击”导入”添加服务器
{
  "mcpServers": {
    "ServerName": {
      "type": "stdio",
      "command": "uvx",
      "args": ["package-name"],
      "env": {
        "API_KEY": "your-key"
      },
      "description": "可选描述"
    }
  }
}
类型值(不区分大小写):
  • "stdio", "STDIO", "std" → STDIO
  • "sse", "SSE" → SSE
  • "streamable_http", "STREAMABLE_HTTP", "streamablehttp", "http" → STREAMABLE_HTTP
导入行为:
  • 具有现有名称的服务器将使用新配置更新
  • 新服务器将被创建
  • 无效配置将被跳过并显示错误消息
  • 导入过程显示成功/失败计数
使用批量导入/导出用于:
  • 环境迁移(开发 → 测试 → 生产)
  • 团队协作(共享服务器配置)
  • 备份和恢复(配置备份)
  • 快速设置(一次部署多个服务器)

空闲会话管理

MetaMCP 预分配空闲会话以获得更好的性能:

冷启动优化

  • 默认:每个服务器 1 个空闲会话
  • 可配置:根据使用模式调整
  • 自动扩展:按需创建会话
  • 清理:超时后回收空闲会话

依赖项的自定义 Dockerfile

如果您的 MCP 服务器需要 uvxnpx 之外的额外依赖项,您可以自定义 MetaMCP Dockerfile:
FROM metamcp:latest

# 安装 Python 依赖项
RUN pip install requests beautifulsoup4

# 安装系统包
RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

# 全局安装 Node.js 包
RUN npm install -g some-mcp-package
自定义依赖项会增加 Docker 镜像大小和启动时间。尽可能考虑使用轻量级替代方案。

故障排除

常见原因:
  • 缺少依赖项(通过自定义 Dockerfile 安装)
  • 命令或参数不正确
  • 环境变量未设置
  • 网络连接问题(对于 SSE/可流式 HTTP)
调试步骤:
  1. 在 MetaMCP 仪表板中检查服务器日志
  2. 在终端中手动测试命令
  3. 验证环境变量
  4. 检查网络连接
优化策略:
  • 为频繁使用的服务器增加空闲会话计数
  • 尽可能使用本地服务器而不是远程服务器
  • 在自定义 Docker 镜像中预安装依赖项
  • 配置适当的超时值
常见问题:
  • API 密钥或 bearer token 过期
  • 环境变量名称不正确
  • 缺少必需的标头
  • 外部 API 的速率限制
解决方案:
  1. 刷新 API 密钥/token
  2. 检查服务器文档了解必需的身份验证
  3. 实现适当的错误处理
  4. 添加带有退避的重试逻辑

下一步