背景
产物对远程 HTTP/SSE MCP server 的鉴权目前写死为 Bearer:harness/mcp.py 的 _bearer_headers 把 auth_env 解析出的 token 注入为 Authorization: Bearer <token>,没有别的方案。
现实中的远程 MCP server 常需要别的 header 形态:
- 自定义 header 名:
X-API-Key、api-key、Authorization: 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 密钥面板可填」末尾已记此为后续项
背景
产物对远程 HTTP/SSE MCP server 的鉴权目前写死为 Bearer:
harness/mcp.py的_bearer_headers把auth_env解析出的 token 注入为Authorization: Bearer <token>,没有别的方案。现实中的远程 MCP server 常需要别的 header 形态:
X-API-Key、api-key、Authorization: Token <...>等Authorization: Basic <base64>对这些 server,当前产物即使填了密钥也连不上。
范围(运行期,不动 spec schema)
harness/config.pyMcpServerConfig加运行期字段,候选设计二选一: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 映射)的配置项。/env→.env。验收
X-API-Key/ Basic),全程本地无外网、无 key(参考现有test_remote_server_injects_bearer_header)。AGENTS.mdMCP 章节 +docs/02-development/12-slice-11-mcp-management.md同步。ReadLintsclean。参考
harness/mcp.py→_bearer_headers/_open_streamsdocs/02-development/12-slice-11-mcp-management.md§「后续增强 · MCP 密钥面板可填」末尾已记此为后续项