mcp-gateway

mcp-gateway

AI gateway to unify authentication and expose internal APIs as MCP tools. Supports SSO, JWT, and basic auth with auto-refresh.

Category
访问服务器

README

MCP Gateway

统一认证网关 —— 让 AI 快速接入企业内部系统。

通过一份 YAML 配置文件或运行时动态注册,自动将内部系统的 API 注册为 MCP (Model Context Protocol) Tools,统一处理 SSO / JWT / 用户名密码 / Playwright 交互式认证,AI 客户端(Claude Desktop、Cursor 等)即装即用。

特性

  • 配置驱动:新增系统只需编辑 systems.yaml,无需写代码
  • 无状态模式:不写配置文件也能用,AI 客户端通过 system_register 工具运行时动态注册系统
  • 四种认证:SSO (OAuth2 + PKCE)、JWT (自动刷新)、用户名密码 (Cookie 管理)、Playwright (浏览器交互式登录)
  • 自动重认证:Token 过期自动刷新,401/403 自动重新登录
  • Playwright 浏览器登录:无 OAuth2 clientId、验证码/2FA/滑块等复杂场景,打开浏览器手动登录后自动复用会话
  • SSO 浏览器登录:OAuth2 系统自动打开浏览器,登录后回调自动完成
  • TypeScript:完整类型支持,易于扩展

快速开始

安装

pnpm install
pnpm build

方式一:配置文件预加载(传统模式)

编辑 src/config/systems.yaml,按示例添加你的内部系统:

systems:
  - name: my-system
    description: 我的内部系统
    baseUrl: https://app.example.com
    auth:
      type: sso          # sso | jwt | basic | playwright
      sso:
        authorizeUrl: https://sso.example.com/oauth2/authorize
        tokenUrl: https://sso.example.com/oauth2/token
        clientId: your-client-id
        scope: user_id
        callbackPort: 9527
    tools:
      - name: get_data
        method: GET
        path: /api/data
        description: 获取数据

方式二:无状态动态注册(推荐)

不创建任何配置文件,直接启动 Gateway,由 AI 客户端通过 MCP 工具动态注册系统:

# 无需 systems.yaml,直接启动
node dist/index.js

AI 客户端连接后,调用 system_register 工具传入系统配置 JSON 即可动态注册,使用完毕后调用 system_remove 注销。

接入 AI 客户端

在 Claude Desktop 的 claude_desktop_config.json 或 Cursor 的 MCP 设置中添加:

{
  "mcpServers": {
    "gateway": {
      "command": "node",
      "args": ["/path/to/mcp-gateway/dist/index.js"]
    }
  }
}

开发模式

pnpm dev

指定配置文件

MCP_GATEWAY_CONFIG=/path/to/your/systems.yaml node dist/index.js

认证方式

SSO (OAuth2 Authorization Code + PKCE)

适用于接入企业 SSO 的系统。首次调用时自动打开浏览器完成登录,Token 自动缓存和刷新。

auth:
  type: sso
  sso:
    authorizeUrl: https://sso.example.com/oauth2/authorize
    tokenUrl: https://sso.example.com/oauth2/token
    loginPortal: https://sso.example.com/login    # 可选:统一登录门户
    clientId: your-client-id
    scope: user_id
    callbackPort: 9527

JWT

适用于有独立登录 API 的系统。支持自动 Token 刷新。

auth:
  type: jwt
  jwt:
    loginUrl: https://api.example.com/auth/login
    refreshUrl: https://api.example.com/auth/refresh
    tokenField: access_token
    refreshField: refresh_token
    expiresIn: 3600

用户名密码

适用于传统 Web 系统。自动管理 Cookie/Session。

auth:
  type: basic
  basic:
    loginUrl: https://erp.example.com/api/login
    cookieName: SESSION_ID

Playwright 交互式登录

适用于没有 OAuth2 clientId、或登录流程复杂(验证码/2FA/滑块)的系统。首次登录打开浏览器让用户手动操作,登录后自动保存会话并复用。

auth:
  type: playwright
  playwright:
    loginUrl: https://sso.example.com/login        # 登录页 URL(必填)
    successUrl: dashboard                           # 登录成功标志(必填)
    probeUrl: https://app.example.com/api/profile  # 会话探测 URL(可选)
    expiresIn: 1800000                             # 会话有效期(默认 30 分钟)
    channel: chrome                                 # 使用系统 Chrome(可选,避免下载 Chromium)
    # script: ./scripts/login.ts                    # 可选:录制脚本自动登录,失败降级交互式

浏览器引擎说明(无需手动安装):

  • 默认使用 Playwright 内置 Chromium,首次运行时自动下载(约 150MB)
  • channel: chrome 直接使用系统已安装的 Chrome,无需下载
  • channel: msedge 直接使用系统已安装的 Edge,无需下载
  • executablePath 指定浏览器路径(优先级最高)

内置管理 Tool

认证管理

Tool 说明
auth_status 查看所有系统的认证状态
auth_login 登录指定系统(SSO/Playwright 弹浏览器,JWT/Basic 传用户名密码)
auth_logout 登出指定系统或所有系统

系统管理(无状态模式)

Tool 说明
system_register 动态注册系统及 API 工具,传入系统配置 JSON
system_list 列出所有已注册系统的名称、类型、工具列表和认证状态
system_remove 注销指定系统,移除其所有工具和认证信息

项目结构

src/
├── index.ts              # MCP Server 入口 + Tool 注册
├── system-manager.ts     # 动态系统注册/注销 + 工具增删管理
├── config/
│   ├── systems.yaml      # 系统配置(可选,无状态模式不需要)
│   ├── types.ts          # 类型定义
│   └── loader.ts         # 配置加载(无配置时返回空列表)
├── auth/
│   ├── types.ts          # AuthProvider 接口
│   ├── sso-provider.ts   # OAuth2 SSO 认证
│   ├── jwt-provider.ts   # JWT 认证 + 自动刷新
│   ├── basic-provider.ts # 用户名密码认证
│   ├── playwright-provider.ts # Playwright 交互式登录
│   └── manager.ts        # 统一认证管理
└── proxy/
    └── requester.ts      # HTTP 请求 + 凭据注入 + 自动重认证

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选