Skip to content

feat(mcp): support custom auth header schemes for remote MCP servers (beyond Bearer) #7

Description

@EpisodeYu

背景

产物对远程 HTTP/SSE MCP server 的鉴权目前写死为 Bearer:harness/mcp.py_bearer_headersauth_env 解析出的 token 注入为 Authorization: Bearer <token>,没有别的方案。

现实中的远程 MCP server 常需要别的 header 形态:

  • 自定义 header 名:X-API-Keyapi-keyAuthorization: Token <...>
  • Basic 认证:Authorization: Basic <base64>

对这些 server,当前产物即使填了密钥也连不上。

关联:已完成的「MCP 密钥面板可填」闭环(commit 0ad5c91)只解决了「Bearer token 在面板可填」,本 issue 补「非 Bearer 的 header 方案」。

范围(运行期,不动 spec schema)

  • harness/config.py McpServerConfig 加运行期字段,候选设计二选一:
    • auth_header(header 名,默认 Authorization)+ auth_scheme(默认 Bearer,空串=直接放 token 值);或
    • 更通用的 headers_env:{header名: env变量名} 映射(值经 resolve_env 解析,绝不存值)。
      倾向后者更灵活,但前者对 Bearer 之外的单 header 场景更直观——实现前在 issue 里定一下。
  • harness/mcp.py:_open_streams / _bearer_headers 按新字段构造 headers(stdio 分支不受影响)。
  • interfaces/web_index.html:MCP 卡片的 Auth 折叠区已能填值,补 header 名 / scheme(或 headers 映射)的配置项。
  • 密钥红线不变:config 只存 env 名,值仍走 write-only /env.env

验收

  • 单测覆盖自定义 header 注入(X-API-Key / Basic),全程本地无外网、无 key(参考现有 test_remote_server_injects_bearer_header)。
  • 文档:产物 AGENTS.md MCP 章节 + docs/02-development/12-slice-11-mcp-management.md 同步。
  • 黄金路径(关 MCP 零痕迹)不变;ReadLints clean。

参考

  • harness/mcp.py_bearer_headers / _open_streams
  • docs/02-development/12-slice-11-mcp-management.md §「后续增强 · MCP 密钥面板可填」末尾已记此为后续项

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