Token导航 LogoToken导航TokenDH.com
MCP Server Hosting logo
运维云端未说明官方级别未说明来源级核验

MCP Server Hosting

MCP Server

一个基于Ubuntu EC2的多租户托管控制平台,提供Postgres注册表、Redis/BullMQ配置队列、Docker运行时工作器、OIDC/JWT认证和RBAC功能。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
多租户DockerCursorCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Charley-Forey-AI

提供方

Charley-Forey-AI

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

MCP托管平台

Ubuntu EC2的多租户MCP托管控制平面:

  • 公共URL模式: ${PUBLIC_BASE_URL}/mcp/{UNIQUE_SOLUTION}
  • 每个MCP的内部端口(默认池 30001-30200)
  • 平台认证(X-API-Key 或持有人),加上可选的浏览器电子邮件/密码登录以访问仪表板
  • Postgres-based注册表+管理员API+健康检查程序+仪表板
  • Redis/BullMQ配置队列+Docker支持的运行时工作器
  • OIDC/JWT认证+RBAC(admin, publisher, viewer)+审计日志
  • 定额计量(request_counters)每分钟/每天执行
  • Prometheus指标+结构化日志+可选的OpenTetry跟踪
  • 通过AWS SSM/Secrets Manager进行秘密引用(commandEnvSecrets)
  • 根据MCP具有身份验证要求的公共注册表和元数据端点
  • Nginx反向代理配置已针对类似HTTP/SSE的流式响应进行了优化

建筑

flowchart TB
  User[Cursor / Agent] --> Proxy[Nginx reverse proxy]
  Proxy --> Platform[MCP Platform service]
  Platform --> Registry[(Postgres registry)]
  Platform --> Backends[MCP backend services by internal ports]
  Platform --> Dash[Dashboard + index]

快速入门(本地)

  1. 安装依赖项:

- npm install

  1. 启动平台:

- npm run start

  1. 打开:

- http://127.0.0.1:8080/dashboard - http://127.0.0.1:8080/mcp/index.json

  1. 注册示例后端:

- POST /admin/servers 带有id echo,目标 http://127.0.0.1:30001 - 从以下内容开始 POST /admin/servers/echo/start

环境变量

  • PORT (默认值 8080)
  • HOST (默认值 0.0.0.0)
  • PUBLIC_BASE_URL 代码段/索引中显示的公共基础URL
  • PLATFORM_AUTH_DESCRIPTION 平台身份验证指南如所示 /registry
  • PLATFORM_SIGNUP_URL 用户访问平台的可选链接
  • PLATFORM_API_KEYS 平台身份验证的逗号分隔键
  • WEB_ADMIN_EMAIL 可选的浏览器登录电子邮件 /dashboard
  • WEB_ADMIN_PASSWORD 的可选浏览器登录密码 /dashboard
  • WEB_SESSION_COOKIE_NAME 浏览器登录的会话cookie名称(mcp_session 默认)
  • WEB_SESSION_TTL_MS 浏览器会话生存期(毫秒)(默认为12小时)
  • JWT_ISSUER 预期JWT发行人
  • JWT_AUDIENCE 预计JWT观众
  • JWT_JWKS_URI OIDC JWKS端点(用于RS256/ES256验证)
  • JWT_HS256_SECRET HS256令牌的共享密钥替代方案
  • JWT_ROLES_CLAIM 包含用户角色的声明名称(默认 roles)
  • DATABASE_URL Postgres连接URL
  • REDIS_URL 配置队列的Redis连接URL
  • PROVISIONING_QUEUE_NAME BullMQ队列名称
  • IMPORT_JOB_TIMEOUT_MS 超时 import-repo 作业(默认 600000)
  • IMPORT_FETCH_TIMEOUT_MS 每个尝试分支的GitHub tarball下载超时(45000 默认)
  • IMPORT_FETCH_STREAM_TIMEOUT_MS tarball体流不活动超时(45000 默认)
  • IMPORT_FETCH_TOTAL_TIMEOUT_MS 硬帽,用于完整的tarball下载持续时间(180000 默认)
  • IMPORT_FETCH_MAX_BYTES tarball大小的硬上限(以字节为单位)(262144000 默认值=250MB)
  • GITHUB_TOKEN 回购导入期间API利率上限更高的可选GitHub代币
  • DOCKER_SOCKET worker的Docker套接字路径(/var/run/docker.sock)
  • DOCKER_NETWORK 已推出MCP集装箱的集装箱网络模式
  • DOCKER_IMAGE_PULL 是否在开始前拉取图像
  • REQUESTS_PER_MINUTE_PER_SUB 每位租户+主题分钟配额
  • REQUESTS_PER_DAY_PER_SUB 每位租户+主题日配额
  • IMPORT_REQUESTS_PER_MINUTE 每个主题的导入请求速率限制(5 违约, 0 禁用)
  • LOG_LEVEL 结构化日志级别(info 默认情况下)
  • OTEL_ENABLED 启用OpenTetry(true / false)
  • OTEL_EXPORTER_OTLP_ENDPOINT OTLP导出器端点
  • AWS_REGION SSM/秘密管理器秘密解析区域
  • POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD (组成默认值)
  • PORT_MIN / PORT_MAX 内部端口分配范围
  • HEALTH_INTERVAL_MS 定期健康检查间隔

核心终点

  • GET /health 整体平台状态
  • GET /metrics Prometheus指标端点
  • GET /mcp/index.json 托管MCP的公共索引
  • GET /mcp/:serverId/meta.json 一个MCP的公共元数据(auth-docs+代码段)
  • GET /registry 带有身份验证要求和代码段的公共HTML注册表
  • GET /dashboard 托管MCP列表+可复制的MCP.json代码段
  • GET /login 仪表板会话身份验证的浏览器登录页面
  • GET /api/servers 经过身份验证的服务器列表
  • GET /api/auth/whoami 检查当前令牌的已解决主题/角色
  • GET /api/audit-logs 最近的管理员审核事件(admin 角色)
  • GET /api/provisioning-jobs 最近排队的启动/停止作业
  • GET /api/import-jobs 最近的GitHub导入作业
  • GET /api/import-jobs/:id 导入作业状态/结果以进行轮询
  • GET /api/usage/current?serverId=... 受试者的当前分钟/天计数器(admin 角色)
  • GET /api/usage/summary 聚合每台服务器的分钟/天使用率+运行状况和24小时作业计数(publisher/admin)
  • GET /api/analytics/summary?hours=24 请求事件分析摘要(参与者、租户、IP、延迟、错误率)
  • GET /api/analytics/top-servers?hours=24&limit=10 按请求量和质量列出的顶级MCP路由
  • POST /admin/servers 创建并注册MCP服务器
  • POST /admin/import-repo 将GitHub仓库导入排队(githubUrl,可选 branch/subdir/serverId, autoStart)
  • PATCH /admin/servers/:id 更新元数据/标头策略
  • DELETE /admin/servers/:id 删除服务器
  • POST /admin/servers/:id/start 启动托管进程
  • POST /admin/servers/:id/stop 停止管理进程
  • POST /admin/servers/:id/restart 重新启动服务器({ "recreate": true, "forcePull": false } 支持)
  • POST /admin/analytics/retention 清理旧请求事件(admin 角色、身体 { "days": 30 })
  • ALL /mcp/:serverIdALL /mcp/:serverId/* 代理MCP呼叫
  • GET /dashboard 包括GitHub导入、服务器操作(启动/停止/删除)、代码段和可折叠作业/审核部分

公共注册和授权要求

  • 访问 GET /registry 获取托管MCP的公共列表。
  • 平台级身份验证指南来自:

- PLATFORM_AUTH_DESCRIPTION - PLATFORM_SIGNUP_URL (可选)

  • 每个MCP身份验证详细信息来自每个服务器定义:

- requiredHeaders - authType - authInstructions - docsUrl - signupUrl

  • 对于每台服务器的深度链接,请使用 GET /mcp/:serverId/meta.json.

添加新的托管MCP

使用管理员端点(或 scripts/register-server.ps1):

.\scripts\register-server.ps1 `
  -Id "n8n" `
  -Name "n8n MCP" `
  -Description "Hosted n8n MCP endpoint" `
  -TargetUrl "http://127.0.0.1:30020" `
  -RequiredHeaders @("Authorization") `
  -ForwardHeaders @("authorization","x-tenant-id") `
  -ApiKey "
"

如果满足以下条件,平台将分配内部端口 TargetUrl / internalPort 省略。

光标 mcp.json 示例

examples/cursor.mcp.json:

{
  "mcpServers": {
    "echoHosted": {
      "url": "https://mcp.your-real-domain.com/mcp/echo",
      "headers": {
        "X-API-Key": "
",
        "Authorization": "Bearer "
      }
    }
  }
}

测试和验证托管MCP身份

使用此顺序以避免 401 Unauthorized 验证托管MCP时:

  1. 首先需要平台身份验证 为了 /mcp/:serverId:

- X-API-Key: 或 - Authorization: Bearer 或 - 浏览器会话cookie来自 /login

  1. 上游身份验证是独立的 如果需要,应转发到MCP后端(例如 Authorization: Bearer x-portfolio-id).
  2. /dashboard:

- 填充 仪表板请求身份验证 (可选API密钥/承载器)。 - 按服务器设置 测试/发现标头JSON 您的MCP使用的上游集管。 - 点击 测试连接 运行一个 initialize 请求通过 /mcp/:serverId 并验证端到端身份验证。 - 点击 发现工具initialize + tools/list 使用相同的测试头直接对抗目标MCP。

  1. 对于外部客户端(Cursor、Trimble Agent Studio等),始终在客户端配置中包含平台身份验证标头。如果MCP需要,包括上游集管。

部署(Ubuntu EC2)

选项A:Docker编写

  1. 将仓库复制到 /opt/mcp-servers.
  2. 复制 .env.example.env 并设置实际值:

- PUBLIC_BASE_URL=https://mcp.your-real-domain.com - DATABASE_URL=postgres://postgres:postgres@postgres:5432/mcp_hosting - PLATFORM_API_KEYS=key1,key2

  1. 运行:

- docker compose up -d --build

  1. 可选的旧版导入:

- npm run migrate:json -- ./data/servers.json

  1. Nginx配置:

- deploy/nginx/nginx.conf - deploy/nginx/conf.d/mcp-platform.conf

  1. 在中添加证书 deploy/nginx/certs (或在主机和挂载证书路径上使用certbot)。

这将启动:

  • mcp-platform (API/网关)
  • mcp-worker (为MCP服务器启动/停止Docker容器的队列工作器)
  • postgres (注册表+审计+作业记录)
  • redis (队列代理)
  • nginx (边缘代理)

注册服务器时:

  • command 应该是Docker镜像(例如。 ghcr.io/your-org/my-mcp:latest)
  • commandArgs 作为容器传递 Cmd
  • commandEnv 变为容器环境变量(加号 PORT)
  • commandEnvSecrets 支持秘密引用:

- ssm:///path/to/parameter - secretsmanager://secret-id - secretsmanager://secret-id#jsonKey

  • authType 可以是 bearer, api_key, oauth,或 custom
  • authInstructions 告诉用户如何获取凭证和格式头
  • docsUrlsignupUrl 公开展示于 /registry/mcp/index.json
  • start/stop是异步的并返回 queuedJobId

选项B:systemd+主机nginx

  1. 复制服务文件 deploy/systemd/mcp-platform.service/etc/systemd/system/.

- 也复制 deploy/systemd/mcp-worker.service 用于异步配置。

  1. 添加env文件 /etc/mcp-platform.env:

- PLATFORM_API_KEYS=... - REDIS_URL=redis://127.0.0.1:6379 - DATABASE_URL=postgres://...

  1. 启动服务:

- sudo systemctl daemon-reload - sudo systemctl enable --now mcp-platform - sudo systemctl enable --now mcp-worker

  1. 从以下位置应用nginx vhost deploy/systemd/nginx-mcp.conf.example.

安全/操作检查表

  • 保持MCP后端绑定到 127.0.0.1 或仅限专用网络。
  • 在边缘使用HTTPS,旋转密钥并记录请求ID。
  • 在Nginx或网关上使用每路径/每密钥速率限制。
  • 保持转发策略的一致性,以避免凭据泄漏。
  • 在扩展到100-200台服务器之前,添加中央日志+指标。

Auth+RBAC快速设置

角色从JWT声明中读取(默认声明: roles):

  • viewer:可以浏览仪表板并使用托管的MCP路由
  • publisher:可以创建/更新/启动/停止MCP服务器
  • admin:完全控制,包括删除+审核日志

示例 .env OIDC/JWKS验证:

JWT_ISSUER=https://YOUR_AUTH_DOMAIN/
JWT_AUDIENCE=mcp-platform-api
JWT_JWKS_URI=https://YOUR_AUTH_DOMAIN/.well-known/jwks.json
JWT_ROLES_CLAIM=roles

仅用于本地测试,您仍然可以使用 PLATFORM_API_KEYS 退路。

浏览器登录(可选)可以通过以下方式启用:

WEB_ADMIN_EMAIL=charles_forey@trimble.com
WEB_ADMIN_PASSWORD=replace-me

配置后,浏览器访问 /dashboard* 重定向到 /login 登录后接收HttpOnly会话cookie。 将Nginx设置为代理两者 /dashboard/login (加 /logout)到平台服务,并重定向 //dashboard.

GitOps入职培训

将MCP定义存储在 servers/*.yaml.

  • 在本地验证清单:

- npm run gitops:validate

  • 向平台API提交清单:

- ADMIN_API_BASE_URL=https://mcp.your-real-domain.com ADMIN_API_KEY=... npm run gitops:submit

  • CI工作流程:

- .github/workflows/gitops-onboarding.yml - PR验证清单 - 推至 main 验证后将清单提交给 /admin/servers

请参阅示例清单: servers/example-echo.yaml.

队列+Docker运行时说明

  • POST /admin/servers/:id/startPOST /admin/servers/:id/stop 现在回来 202 随着 queuedJobId.
  • Worker消耗队列作业并管理名为的容器 mcp-server-{id}.
  • 检查进度 GET /api/provisioning-jobs.
  • 对于GitHub摄取流,请调用 POST /admin/import-repo 和投票 GET /api/import-jobs/:id 直到 completed/failed.
  • 导入管道具有弹性:它首先尝试存储库 Dockerfile 如果存在,并在repo Docker构建失败时自动重试生成的运行时Dockerfile。
  • 如果在repo根目录中找不到运行时文件,import还会自动检测可能嵌套的子目录(用于单repo样式布局),并从那里继续。
  • 配置/导入队列作业现在使用唯一的ID(基于UUID),以避免Redis重启后出现过时的状态/结果冲突。

操作和扩展

  • API/代理节点是无状态的;在负载平衡器后面水平缩放。
  • 共享州居住在Postgres(servers、作业、审计、请求计数器)和Redis(BullMQ队列)。
  • 运行多个worker(npm run worker)以获得更高的启动/停止/导入吞吐量。
  • 随着API/工作副本计数的增长,请使用连接池(例如PgBouncer)。
  • 定期备份Postgres,并记录您环境的恢复过程。
  • 保持队列/作业表有界(定期清理旧表 provisioning_jobs/import_jobs 行)。
  • 定期清理未使用的本地Docker镜像,以恢复工作主机上的磁盘。
  • 服务器删除流程为: POST /admin/servers/:id/stop (可选)然后 DELETE /admin/servers/:id.

分析、警报和保留

  • 代理现在将每个请求的事件写入Postgres(request_events)包含服务器id、租户id、参与者子、客户端IP、状态代码、路径和延迟。
  • Prometheus现在包括每服务器代理延迟直方图和每服务器状态代码计数器:

- mcp_platform_mcp_proxy_latency_ms{server_id,status_code} - mcp_platform_mcp_proxy_status_code_total{server_id,status_code}

  • 仪表板包括一个分析块,用于:

- 请求量 - p95潜伏期 - 错误率 - 独特的演员/租户/IP - 按流量划分的顶级服务器

  • 建议的Grafana面板:

- 请求/秒 server_id - p95潜伏期 server_id - 4xx/5xx费率 server_id - 随时间变化的活动流 - 顶级演员/租户(来自 /api/analytics/summary)

  • 建议警报:

- p95潜伏期>2000ms,持续5m - 5m误差率>5% - 10m内服务器不健康大于0 - 身份验证失败峰值>基线

  • 保留:

- 跑 POST /admin/analytics/retention 随着 {"days":30} 每日(cron/作业调度程序) - 保持高基数原始事件比聚合计数器短

冒烟测试

在本地运行烟雾检查:

npm test

对已部署的实例运行:

BASE_URL=https://mcp.your-real-domain.com API_KEY=
 MCP_SERVER_ID=echo node scripts/smoke-test.js

MCP_SERVER_ID 是可选的;设置后,烟雾测试还会检查MCP代理路径,并断言它不会返回 502.

目录标签

目录标签

多租户DockerCursorJavaScript本地部署托管平台OIDCRBAC

支持客户端

Cursor

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP