Skip to content

feat(mcp): support OAuth 2.1 authorization flow for remote MCP servers (v1+) #8

Description

@EpisodeYu

背景

MCP 规范对远程 server 的官方鉴权标准是 OAuth 2.1(授权码 + PKCE、动态客户端注册、token 刷新),而产物目前完全没有 OAuth——只支持静态 token 注入(Bearer,见 #7 扩展为自定义 header)。

很多托管 / SaaS MCP server(以及越来越多遵循 MCP auth spec 的 server)走 OAuth:用户需要在浏览器里登录授权,产物拿授权码换 access/refresh token,并在过期时刷新。没有这条流程,这类 server 在真实场景下无法接入。

范围(大件,定位 v1+)

独立大功能,远超「填个密钥」:

  • 交互式授权:打开浏览器到 server 的 authorization endpoint,本地起回调接收授权码(serve 进程内一个临时路由或本地端口)。
  • 动态客户端注册(DCR,MCP spec 要求支持)/ 预配置 client。
  • token 生命周期:access/refresh token 的安全存储(write-only,落 .env / .harness/,绝不进 config.yaml/trace/日志)+ 过期自动刷新。
  • harness/mcp.py 连接路径接 OAuth(httpx auth flow);CLI 一次性 run 与 web 常驻 serve 的交互差异要分别处理(CLI 无浏览器时的降级)。
  • 面板:MCP 卡片 Auth 区加「OAuth 登录 / 已授权状态 / 重新授权」。

触发的红线 / 需人审(CLAUDE.md §6)

  • 可能新增运行期依赖(OAuth/httpx-auth 一类)——若进默认核心需评估「薄」(§6.2)。
  • 涉及密钥/令牌落盘路径(§6.5),需严格 write-only + 不入 git/trace/日志。
  • 工作量大、跨多模块,建议单独排期并在 plan 阶段先停下来对齐设计(回调拓扑、token 存储位置、CLI 降级策略)。

验收(待细化)

  • 对一个 mock OAuth server 跑通授权码 + 刷新(本地、无外网真账号)。
  • 文档:产物 AGENTS.md + slice doc;.env.example / 存储位置说明。
  • 关 MCP / 不用 OAuth 的产物零痕迹、零新增依赖(条件渲染)。

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions