授权与请求诊断

管理 UI 新增客户端授权和请求诊断。配置管理员可按精确用户 Subject、客户端 ID、endpoint 和状态查询并翻页,查看 Scope、工具、资源范围和协议能力,带入权限检查或撤销授权。授权 Scope 只是批准上限,不代表用户当前 Token 的实际权限。撤销立即阻止后续接纳并取消活动流,无法回滚上游副作用。个人门户仍只能访问登录用户自己的授权。

请求诊断将已完成的 MCP POST 保存到托管 SQLite/PostgreSQL,重启后保留。admin.request_retention 默认 720h(30 天),可设为 24h–8760h;到期记录自动清理。默认查询最近 24 小时,支持完成时间筛选、分页和 NDJSON 导出。仅记录请求 ID、已验证身份、已知目标、耗时和固定结果/原因代码,不记录参数、结果、Token 或原始错误正文。详细记录加密保存,查询索引保留身份与路由等元数据,应保护数据库和导出文件。统计覆盖整个筛选窗口,包括 P95 和已恢复操作的平均审批等待时间。

请求记录在处理完成后写入;写入失败不会重放或改变业务操作,服务器记录错误,页面提示本次运行的记录缺口。进程在写入前崩溃、进行中的请求和 GET 流不在此记录中;它不能替代审批审计的独立归档。未启用托管数据库的部署只保留原有短期内存诊断。

GET /api/v1/requests 新增 since、until(RFC3339,按完成时间筛选),实际窗口在 window_start/window_end 中返回。format=ndjson 导出最多 10,000 条,仍受管理员鉴权和相同筛选限制;响应头 X-MCPHub-Next-Cursor 非零时可作为 cursor 继续导出,或在 UI 缩小时间范围。请求历史持久化在新部署的 schema 10 数据库中,备份时保存数据库及匹配密钥。

以下 API 仅位于管理监听器,个人门户不开放跨用户查询:

mcpbridge admin --profile ops get '/client-grants?subject=alice&status=active&limit=25'
mcpbridge admin --profile ops get '/requests?endpoint=database-prod&outcome=scope_denied&limit=25'

两者都返回 next_cursor,保持筛选条件并作为 cursor 传回;请求历史翻页时同时保持返回的时间窗口。授权还可筛选 client、endpoint;诊断还可筛选 request_id、subject、client 和原始 tool。普通分页 limit 范围为 1–100。撤销接口为 POST /api/v1/client-grants/{grant_id}/revoke,正文 {"subject":"alice"}。