OAuth代理服务

一个轻量级的OAuth 2.1客户端凭证流代理,用于MCP STDIO服务器,自动获取Bearer令牌并将JSON-RPC请求代理到HTTP MCP服务器。

  • by Manoj-R-Kulkarni
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 Manoj-R-Kulkarni/mcp-oauth-proxy

使用说明

MCP OAuth代理

轻量级的 OAuth 2.1客户端凭据流 MCP STDIO服务器的代理。自动获取承载令牌并将JSON-RPC请求代理到HTTP MCP服务器。

特性

  • ✅ 自动OAuth令牌管理 -获取并缓存令牌,过期时自动刷新
  • ✅ STDIO到HTTP网桥 -使用OAuth标头将STDIO协议转换为HTTP
  • ✅ 终端用户零配置 -只需设置一个环境变量并使用mcp.json配置
  • ✅ 客户端凭据流 -非常适合服务器到服务器身份验证
  • ✅ 交叉平台的 -适用于macOS、Linux、Windows
  • ✅ 轻量级 -最小的依赖性,快速启动

安装

选项1:全局安装

npm install -g mcp-oauth-proxy

选项2:与npx一起使用(无需安装)

npx mcp-oauth-proxy

快速开始

1.设置OAuth密钥

export MCP_CLIENT_SECRET="your-oauth-client-secret"

2.在VS代码中配置(mcp.json)

添加到您的VS代码设置文件(~/.config/Code/User/mcp.json):

{
  "servers": {
    "my-mcp-server": {
      "command": "npx",
      "args": ["-y", "mcp-oauth-proxy"],
      "type": "stdio",
      "env": {
        "MCP_CLIENT_ID": "your-oauth-client-id",
        "MCP_CLIENT_SECRET": "${env:MCP_CLIENT_SECRET}",
        "MCP_AUTH_SERVER_URL": "https://your-auth-server.com/token",
        "MCP_SERVER_URL": "http://localhost:8000/mcp"
      }
    }
  }
}

3.重新加载VS代码

按 Cmd+K Cmd+W (macOS)或 Ctrl+K Ctrl+W (Windows/Linux)重新加载VS代码窗口。

配置

所需的环境变量

变量 描述 示例
MCP_CLIENT_ID OAuth 2.1客户端ID my-client-id
MCP_CLIENT_SECRET OAuth 2.1客户端密钥 在系统环境中设置,参考 ${env:MCP_CLIENT_SECRET}
MCP_SERVER_URL 您的HTTP MCP服务器端点 http://localhost:8000/mcp

可选环境变量

变量 描述 默认值
MCP_AUTH_SERVER_URL OAuth令牌端点 执行身份验证(Keycloak)

运作原理

VS Code (STDIO)
    ↓ (JSON-RPC message)
mcp-oauth-proxy
    ├─ Fetches OAuth token from MCP_AUTH_SERVER_URL
    └─ Adds "Authorization: Bearer <token>" header
        ↓ (HTTP POST)
Your MCP Server (HTTP)
    ↓ (Validates Bearer token)
    ← Returns JSON-RPC response
    ↓
VS Code (STDIO)

许可证管理

  • 缓存:令牌缓存在内存中以供重用
  • 自动刷新:令牌在到期前30秒自动刷新
  • 错误处理:无效凭据返回正确的JSON-RPC错误响应

用例

  1. Perforce OAuth -与Perforce身份验证服务器集成
  2. 钥匙孔 -适用于任何Keycloak实例
  3. 通用OAuth 2.1 -与任何支持客户端凭据流的OAuth 2.1服务器兼容
  4. 安全MCP服务器 -向现有HTTP MCP服务器添加身份验证层

建筑

  • bin/cli.js -入口点,使用环境变量初始化代理
  • lib/proxy.js -核心代理逻辑,处理OAuth和请求转发

调试

代理将日志记录到stderr:

[OAuth Proxy] Initialized with:
  Client ID: your-client-id
  Client Secret length: 32
  Auth Server: https://...
  MCP Server: http://localhost:8000/mcp
[OAuth Proxy] Starting STDIO proxy...
[OAuth] Token fetched successfully (expires in 300s)

检查VS代码输出面板(视图→ 输出),然后从下拉列表中选择“MCP服务器”。

故障排除

问题:“客户端密钥长度:未设置”

解决方案:确保设置 MCP_CLIENT_SECRET 在启动VS Code之前,请先在系统环境中执行以下操作:

export MCP_CLIENT_SECRET="your-secret"

问题:“OAuth令牌获取失败:401未经授权”

解决方案:检查您的客户端ID和密码是否适用于OAuth服务器。

问题:“MCP服务器返回:406”

解决方案:确保您的MCP服务器正在运行 MCP_SERVER_URL 是正确的。

许可证

MIT许可证-请参阅 许可证 详细信息文件

贡献

欢迎投稿!请随时打开问题或PR。

相关项目