状态:已实施(2026-11-04)。补充 ADR-0021(第三方 MCP 服务)。
每个 MCP 服务各自保存请求头(mcp_servers.headers)或环境变量(env)。同一个后端提供多个 MCP 服务时,令牌要在每个服务里重复填写;更换令牌时要逐个修改。
凭据是一组命名的密钥值,服务引用而不是复制:
| 字段 | 说明 |
|---|---|
| 名称、说明 | 名称唯一 |
| 类型 | http:请求头,用于远程服务;stdio:环境变量,用于本地进程 |
| 值 | 若干键值(如 Authorization: Bearer …),保存后不再返回明文 |
| 适用地址 | 仅 http:若干地址前缀;不填表示可用于任意地址 |
credential_id。连接时合并:{ ...凭据的值, ...服务自己的值 },同名以服务自己填写的为准。McpServerService 交给连接层之前(rows()、列工具、测试连接),连接层的连接键包含合并后的值:凭据修改后,下次使用自动按新值重新连接;修改值时还会主动刷新使用它的服务。https://a.com/mcp 匹配 /mcp、/mcp/orders,不匹配 /mcp2;https://a.com 不匹配 https://a.com.evil.com。POST /admin/v1/mcp/credentials、PUT|DELETE /admin/v1/mcp/credentials/:id、POST /admin/v1/mcp/servers/:id/save-credential;GET /admin/v1/mcp 返回 credentials。OAuth 授权的服务:令牌与各自的授权流程绑定,按服务保存,不纳入凭据。
services/mcp-credentials.ts(凭据、前缀匹配、合并、保存为凭据),services/mcp-servers.ts 在连接前合并;迁移 0022_mcp_credentials。McpView.vue。test/mcp-credentials.test.ts:前缀匹配与规范化、引用凭据连接、同名覆盖、地址 / 类型限制、更换令牌后重新连接、保存为凭据、本地进程的环境变量。