M

MCP代理服务

@brianintegrationapp/mcpservice
0 Stars 302 次浏览 brianintegrationapp 更新于 2026-08-23

一种代理服务器,允许多个租户通过模型上下文协议使用自己的隔离凭据和访问工具连接到集成应用程序的MCP服务器。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

多租户MCP服务器

一个多租户模型上下文协议(MCP)服务器,允许多个租户使用自己的凭证连接到集成应用程序的MCP服务器。

特性

  • 支持多租户并具有隔离连接
  • 数据库持久化存储租户信息
  • 从集成应用程序实时发现工具
  • 审计日志
  • 速率限制和安全中间件
  • 健康检查端点
  • 优雅关闭处理

前提条件

  • Node.js >= 18.0.0
  • PostgreSQL数据库
  • 集成应用程序账户和凭证

环境变量

创建一个.env文件,并包含以下变量:

env

服务器配置

PORT=3000
NODE_ENV=development

数据库

DATABASE_URL="postgresql://user:password@localhost:5432/mcp_service"

安全

ADMIN_API_KEY="your-admin-api-key"

安装

  1. 克隆仓库:
    bash
    git clone
    cd mcp-service

  2. 安装依赖项:
    bash
    npm install

  3. 运行数据库迁移:
    bash
    npm run migrate

  4. 启动服务器:
    bash
    npm start

开发模式下运行:
bash
npm run dev

API端点

健康检查

GET /health

创建租户

POST /api/tenants
Authorization: Bearer

{
"integrationKey": "hubspot|notion|etc",
"integrationAppToken": "your-integration-app-token"
}

列出工具

POST /api/tenant/:tenantId/tool
Authorization: Bearer

{
"method": "listTools"
}

执行工具

POST /api/tenant/:tenantId/tool
Authorization: Bearer

{
"method": "tool-name",
"params": {
// 工具参数
}
}

部署

Heroku

  1. 创建一个新的Heroku应用:
    bash
    heroku create

  2. 添加PostgreSQL插件:
    bash
    heroku addons:create heroku-postgresql:hobby-dev

  3. 设置环境变量:
    bash
    heroku config:set NODE_ENV=production
    heroku config:set ADMIN_API_KEY=your-admin-api-key

  4. 部署:
    bash
    git push heroku main

Docker

  1. 构建镜像:
    bash
    docker build -t mcp-service .

  2. 运行容器:
    bash
    docker run -p 3000:3000
    -e DATABASE_URL=postgresql://user:password@host.docker.internal:5432/mcp_service
    -e ADMIN_API_KEY=your-admin-api-key
    mcp-service

开发

数据库迁移

创建新的迁移:
bash
npx prisma migrate dev --name migration-name

应用迁移:
bash
npm run migrate

测试

运行测试:
bash
npm test

运行代码检查器:
bash
npm run lint

架构

服务器作为多租户代理,位于MCP客户端和集成应用程序的MCP服务器之间:

MCP Client -> 多租户服务器 -> 集成应用程序MCP服务器
(代理/路由器)

每个租户获得:

  • 独立的MCP客户端连接
  • 单独的集成应用程序凭证
  • 独立的工具发现
  • 审计日志

安全

  • 每个租户的速率限制
  • CORS保护
  • Helmet安全头
  • 请求ID跟踪
  • 审计日志
  • 基于令牌的身份验证

监控

/health端点提供:

  • 服务器状态
  • 活跃租户数量
  • 数据库连接状态
  • 内存使用情况
  • 运行时间

许可证

MIT

MCP服务文档

概述

此服务通过模型上下文协议(MCP)提供一个多租户API来管理集成和工具。每个租户都是隔离的,只能访问他们自己的工具和数据。


1. 创建租户

要创建新租户,您必须拥有管理员令牌。请按照以下步骤操作:

第一步:获取管理员令牌

发送POST请求到/api/auth/token,并附上您的管理员API密钥:

bash
curl -X POST https:///api/auth/token
-H "Content-Type: application/json"
-d {"key": "<ADMIN_API_KEY>"}

响应:
json
{"token": "<ADMIN_JWT_TOKEN>"}

第二步:创建租户

发送POST请求到/api/tenants,并在Authorization头部中附上管理员令牌:

bash
curl -X POST https:///api/tenants
-H "Content-Type: application/json"
-H "Authorization: Bearer <ADMIN_JWT_TOKEN>"
-d {
"name": "",
"integrationKey": "",
"integrationAppToken": ""
}响应:
json
{
"tenantId": "tenant-xxxxxxx",
"apiKey": "<TENANT_API_KEY>",
...
}


2. 生成租户令牌

要以租户身份与 API 交互,您需要一个租户 JWT 令牌。使用租户的 API 密钥生成它:

bash
curl -X POST https:///api/auth/tenant-token
-H "Content-Type: application/json"
-H "x-api-key: <TENANT_API_KEY>"

响应:
json
{"token": "<TENANT_JWT_TOKEN>"}


3. 列出租户可用的工具

要列出租户可用的工具,请使用以下端点,并同时提供租户 API 密钥和 JWT 令牌:

bash
curl -X POST https:///api/tenant//tool
-H "Content-Type: application/json"
-H "x-api-key: <TENANT_API_KEY>"
-H "Authorization: Bearer <TENANT_JWT_TOKEN>"
-d {"method": "listTools"}

响应:
json
{
"tools": [
{ "name": "create-contact", ... },
...
]
}


4. 作为租户执行工具

要执行一个工具(例如,创建联系人):

bash
curl -X POST https:///api/tenant//tool
-H "Content-Type: application/json"
-H "x-api-key: <TENANT_API_KEY>"
-H "Authorization: Bearer <TENANT_JWT_TOKEN>"
-d {
"method": "create-contact",
"params": {
"email": "test.user@example.com",
"fullName": "Test User"
}
}

响应:
json
{
"content": [
{ "type": "text", "text": "{"id":"120688589560"}" }
],
"isError": false
}


5. 连接 MCP 客户端应用程序

要将 MCP 客户端连接为租户:

  • 使用租户的 integrationKeyintegrationAppToken(来自租户创建响应)来初始化客户端。
  • 如上所示,使用租户 API 密钥和租户 JWT 令牌对 API 请求进行身份验证。

示例客户端初始化:
js
const client = new IntegrationAppClient({
token:
});
const integration = await client.integration( ).get();
// ...


6. 故障排除

  • 确保在数据库外键引用中使用正确的租户 id 而不是 tenantId
  • 所有特定于租户的 API 调用都需要租户 API 密钥和 JWT 令牌。
  • 如果遇到外键错误,请检查您的数据库模式和迁移。
  • 对于速率限制问题,如果您在代理后面运行,请考虑设置 app.set('trust proxy', 1)(参见 Express 速率限制文档)。

7. 示例 .env 文件

DATABASE_URL=postgresql://user:password@host:port/dbname
ADMIN_API_KEY=your_admin_api_key


8. 有用的端点

  • POST /api/auth/token — 获取管理员令牌
  • POST /api/tenants — 创建租户(仅限管理员)
  • POST /api/auth/tenant-token — 获取租户 JWT 令牌
  • POST /api/tenant/:tenantId/tool — 作为租户列出或执行工具

有关更多详细信息,请参阅 src/server.tssrc/api/auth.ts 中的代码。

相关 MCP 服务