@better-auth/mcp

## 技能简介 @better-auth/mcp 是 Better Auth 生态系统的 MCP 插件

AI Agent 部分免费

技能简介

@better-auth/mcp 是 Better Auth 生态系统的 MCP 插件,将任意基于 Better Auth 构建的 OAuth 2.1 授权服务器转换为 MCP 客户端可用的受保护资源。它基于 @better-auth/oauth-provider 插件构建,服务 RFC 9728 受保护资源元数据(Protected Resource Metadata),并支持 MCP 2026-07-28 规范的 Client ID Metadata Document(CIMD)流程。通过配合 cimd() 插件使用,可以实现 MCP 客户端的身份验证和授权——让 AI 代理在调用工具时携带有效的 OAuth 令牌,经 @better-auth/mcp 验证后才放行请求。这解决了 AI 代理通过 MCP 协议访问需要认证的后端服务时的授权问题,是 MCP 协议在企业级 AI 应用中落地的关键组件。


核心能力

  • OAuth 2.1 授权服务器集成:将基于 Better Auth 构建的应用转化为 MCP 可用的受保护资源,支持 Authorization Code Flow 等标准 OAuth 2.1 授权模式
  • RFC 9728 兼容:完整实现 RFC 9728 受保护资源元数据规范,包括 resource 参数验证、令牌 audience 限制等
  • MCP 2026-07-28 CIMD 支持:通过 cimd() 插件实现 Client ID Metadata Document 流程,pin MCP draft-00 版本的元数据 profile,确保协议兼容性
  • 无会话状态的现代架构:基于官方 @modelcontextprotocol/server v2 构建,每个请求独立验证,无需 Redis 等会话存储,支持多实例部署
  • 与 better-auth 生态无缝集成:可组合 jwt()、cimd()、session() 等其他 Better Auth 插件,一次配置同时服务 Web 认证和 MCP 认证
  • 精细化权限控制:通过 Better Auth 本身的 RBAC 体系,可以对不同 MCP 工具设置不同的访问权限
  • 现代化传输层:推荐配合 @modelcontextprotocol/server v2 的 Streamable HTTP 传输,通过 requireMcpAuth 中间件保护

安装配置

前置要求:

  • Node.js 22+
  • 已安装 better-auth 和相关插件
  • 已安装 @modelcontextprotocol/server v2

安装

npm install @better-auth/mcp
# 或
pnpm add @better-auth/mcp

基础配置

在已有的 Better Auth 配置中添加 mcp() 插件:

import { betterAuth } from "better-auth";
import { jwt } from "better-auth/plugins";
import { cimd } from "@better-auth/cimd";
import { fetchClientMetadataResource } from "@better-auth/cimd/node";
import { mcp } from "@better-auth/mcp";

export const auth = betterAuth({
  plugins: [
    jwt(),
    mcp({
      loginPage: "/login",        // MCP 客户端重定向到的登录页
      consentPage: "/consent",    // 用户授权确认页
      resource: "https://api.example.com/mcp",  // 此 MCP 服务器代表的服务资源标识
    }),
    cimd({
      fetchClientMetadataResource,
      metadataProfile: "mcp-2026-07-28",
    }),
  ],
  // ... 其他 better-auth 配置
});

MCP Handler 配置(配合 @modelcontextprotocol/server v2)

import { createMcpHandler } from "@modelcontextprotocol/server";
import { requireMcpAuth } from "@better-auth/mcp";

// 使用 better-auth 的 requireMcpAuth 中间件保护 MCP 路由
app.post(
  "/mcp",
  requireMcpAuth(auth),  // 验证请求中的 MCP 令牌
  createMcpHandler({
    server: yourMcpServer,
    legacy: "reject",     // 拒绝旧版 MCP 协议请求
  })
);

使用步骤

第一步:构建 Better Auth 授权服务器

import { betterAuth } from "better-auth";
import { jwt } from "better-auth/plugins";
import { mcp } from "@better-auth/mcp";

export const auth = betterAuth({
  database: { /* 数据库配置 */ },
  plugins: [
    jwt({ /* JWT 配置 */ }),
    mcp({
      loginPage: "/login",
      consentPage: "/consent",
      resource: "https://api.example.com/mcp",
    }),
  ],
});

第二步:创建 MCP Handler 并挂载路由

import { createMcpHandler } from "@modelcontextprotocol/server";

app.post(
  "/mcp",
  requireMcpAuth(auth),
  createMcpHandler({
    server: yourMcpServer,
    legacy: "reject",
  })
);

第三步:在 AI 客户端中配置 MCP 连接

Claude Code 中配置:

{
  "mcpServers": {
    "my-protected-mcp": {
      "url": "https://api.example.com/mcp",
      "auth": {
        "type": "oauth",
        "clientId": "your-client-id",
        "authorizationServer": "https://api.example.com"
      }
    }
  }
}

第四步:用户授权流程

首次连接时,AI 客户端被重定向到 loginPage,用户登录并同意授权后,令牌被缓存并用于后续所有 MCP 请求。


适用场景

  • 企业 AI 助手访问内部系统:员工通过 AI 代理访问需要 SSO 登录的企业数据库、文档系统、代码仓库,@better-auth/mcp 确保每次访问都经过身份验证
  • 多租户 AI SaaS 平台:每个租户有独立的 OAuth 客户端配置,AI 代理只能访问已授权租户的数据,实现租户隔离
  • AI 代理工具市场的付费墙:开发者发布的 MCP 工具需要付费订阅才能调用,@better-auth/mcp 可以验证调用者是否持有有效的订阅令牌
  • 合规要求严格的数据访问:金融、医疗等行业要求 AI 对敏感数据的每次访问都有审计记录,OAuth 令牌提供了天然的访问审计基础
  • 跨组织 AI 工作流:不同组织的 AI 代理需要互相调用对方的服务,通过 OAuth 的 scope 机制精确控制调用权限

适用人群

  • 后端工程师:构建企业级 AI 应用,需要在现有认证体系上叠加 MCP 工具访问控制
  • 平台架构师:设计 MCP 工具市场或 AI Agent 平台,需要可扩展的授权基础设施
  • 安全工程师:确保 AI 代理的每一次工具调用都经过身份验证和授权审计
  • 全栈开发者:使用 Next.js/Hono/Express 等框架构建 AI 应用,希望用同一套认证系统服务 Web 和 MCP 协议
  • AI 应用产品经理:规划 AI 产品的付费功能或权限分级,需要技术方案能精确控制工具级别的访问

工作原理

@better-auth/mcp 扮演的是"MCP 协议的 OAuth 守卫"角色,其工作流程如下:

  1. 授权阶段:AI 客户端首次连接 MCP 端点时,因无令牌被重定向至 loginPage,用户完成 Better Auth 的 OAuth 授权流程后,服务端向客户端颁发 JWT 令牌

  2. 请求验证阶段:后续每次 MCP 请求携带 Authorization: Bearer 头部,requireMcpAuth() 中间件调用 Better Auth 验证令牌有效性,检查令牌是否针对正确的 resource、scope 是否包含请求的工具

  3. 工具级别授权:Better Auth 的 RBAC 体系可以细化到每个 MCP 工具的访问权限,例如某用户只能调用 search 工具而不能调用 write 工具

  4. 多实例无状态:由于 @better-auth/mcp 不维护会话状态,每个 MCP 请求独立验证,支持 Kubernetes 等容器化部署的横向扩缩容


官方链接

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论