mcp修复
This commit is contained in:
1 parent
801c0af692
commit
3080b17d02
9 files changed
+378
-73
No files matched your search
+19
-14
@@ -4,14 +4,14 @@
|
||||
| --- | --- |
|
||||
| 最近更新 | 2026-09-05 |
|
||||
| 当前分支 | `main` |
|
||||
| 当前阶段 | 对话、SuperAgent、空间 MCP 与测试环境容器部署基线已完成;目标机镜像构建成功,Chat 短凭证兼容方案已完成并待部署 |
|
||||
| 当前重点 | 部署默认关闭的 Chat 短凭证兼容开关,完成容器启动后再验证 health 与公网链路 |
|
||||
| 当前阶段 | 对话、SuperAgent、空间 MCP 与测试环境容器部署基线已完成;公网 `/mcp` 已到达 Go,已按稳定接通的 th-hotel SuperAgent compatibility profile 完成版本兼容调整,待部署验证 |
|
||||
| 当前重点 | 审查并部署 proven-profile 兼容实现,重建目标机容器后验证 health 和完整公网 MCP 工具链路 |
|
||||
|
||||
## 1. 当前 Checkpoint
|
||||
|
||||
- 名称:`fire-safety-ymd-test-server-build-network-recovery`
|
||||
- 名称:`fire-safety-ymd-superagent-mcp-proven-profile-compatibility`
|
||||
- 状态:In Progress
|
||||
- 目标:在不关闭 Go module 校验的前提下,让 Docker 构建可显式选择目标服务器可达且经认可的模块代理,并处理已交付旧 Chat 短凭证的受控兼容,完成 `/home/firee-safety-ymd` 容器启动。
|
||||
- 目标:让无法配置协议版本的 SuperAgent 按已稳定接通的 `th-hotel-simple-superagent` compatibility profile 调用 `/mcp`:版本字段和 `MCP-Protocol-Version` Header 不作为拒绝门禁,`initialize` 固定返回 `2025-06-18`,同时保持鉴权、数据范围和只读工具契约不变,并在 `/home/firee-safety-ymd` 重建后完成完整工具链路验收。
|
||||
- 非目标:替用户提交或推送 Git、直接修改远程服务器、创建数据库容器、迁移生产数据、签发证书、改变 DNS/安全组、实现真实用户认证、动态授权、会话持久化或生产审计。
|
||||
|
||||
当前进展:
|
||||
@@ -22,6 +22,7 @@
|
||||
- 现有 PostgreSQL/PostGIS 不进入 Compose;同宿主机数据库需要使用容器可达的宿主机地址,且仍需受 `listen_addresses`、`pg_hba.conf` 和防火墙约束。
|
||||
- Nginx 示例增加 HTTP 到 HTTPS 跳转和 HTTP 429 JSON 限流响应,仍不比较、保存或注入 Chat、MCP、SuperAgent 或数据库 Secret。
|
||||
- 运维手册记录 Git 前置条件、服务器目录、Secret 权限、Compose/Nginx 启停、Chat/MCP 冒烟、SuperAgent 回调、更新和回滚。
|
||||
- SuperAgent 无法在其配置中指定 MCP 协议版本;同一 SuperAgent 中 `th-hotel-simple-superagent` 已稳定启用/调用,现场实现不读取 `initialize.params.protocolVersion`,不读取或校验 `MCP-Protocol-Version` Header,并固定返回 `2025-06-18`。消防 MCP 按该 proven profile 兼容:版本字段和 Header 不作为拒绝门禁,响应固定为 `2025-06-18`。这不表示支持任意其他版本,也不是追求最新协议;日志只使用 `direct_success`/`compatibility_success`,不记录原始版本值。
|
||||
|
||||
已实现验收项:
|
||||
|
||||
@@ -29,13 +30,14 @@
|
||||
- Compose 配置不包含明文 Secret,且没有数据库容器、数据卷或迁移命令;现有业务数据库不会被部署动作重建。
|
||||
- Nginx 上游固定为宿主机回环地址,兼容 Chat SSE 禁用缓冲和自动重试,未列出路径固定 404。
|
||||
- 目标机执行步骤包含不渲染 `.env` 内容的 Compose 检查、`nginx -t` 前置门禁和可恢复的配置替换。
|
||||
- 目标服务器已开始部署:Nginx 配置语法检查通过,Docker 镜像已构建成功;容器启动日志显示 `FIRE_SAFETY_CHAT_AUTH_TOKEN` 未通过默认至少 32 字符门禁而反复重启,`16587/health` 尚未验证。
|
||||
- 目标服务器已开始部署:Nginx 配置语法检查和 Docker 镜像构建已通过;曾因 Chat 短凭证门禁发生重启,随后最新公网 `/mcp` 请求已到达 Go,说明服务已至少恢复到可处理请求的状态,但独立 `16587/health` 通过证据尚未提供。
|
||||
- SuperAgent 现场截图证明公网 `/mcp` 请求已经到达 Go 服务,Bearer、`Content-Type` 和 JSON-RPC 前置校验均已通过;随后旧版本门禁返回错误。截图没有捕获客户端版本字段是否存在、类型和值,公网 SuperAgent 尚未调用数据库工具。
|
||||
|
||||
## 2. 当前优先级
|
||||
|
||||
1. 由用户审查、提交并部署显式 legacy 兼容开关;仅在已交付旧 Chat 短凭证的受控测试/迁移窗口开启,并确保轮换后恢复关闭。
|
||||
2. 由用户审查本 checkpoint 变更后提交并推送 `origin/main`;服务器只部署明确提交的 revision。
|
||||
3. 在 `/home/firee-safety-ymd` recreate Compose,确认宿主机 16587 只绑定回环地址、容器内 8080 健康可达且数据库连接正常。
|
||||
1. 由用户审查本 checkpoint 变更后提交并推送 `origin/main`;服务器只部署明确提交的 revision。
|
||||
2. 在 `/home/firee-safety-ymd` 重建 Compose,确认宿主机 16587 只绑定回环地址、容器内 8080 健康可达且数据库连接正常。
|
||||
3. 使用 SuperAgent 无版本配置的实际握手重测:通过 `direct_success` 或 `compatibility_success` 日志确认请求已按 proven profile 处理,并验证 `initialize` → `notifications/initialized` → `tools/list` → 至少一个 `tools/call`;版本字段/Header 不需要配置,也不作为拒绝门禁。
|
||||
4. reload 已通过语法检查的 Nginx 配置,只公开 HTTPS 兼容路径、`/mcp` 和可选 `/health`。
|
||||
5. 使用项目专属测试 Key 和已发布消防 Profile 做兼容 `completion` 首轮/多轮真实冒烟,核对最终回答、用量和会话复用。
|
||||
6. 为所有查询表补齐适用 GiST 索引并验证查询计划;当前小数据可做联调,但生产前必须完成索引与并发验证。
|
||||
@@ -43,7 +45,7 @@
|
||||
|
||||
## 3. 已确认事实
|
||||
|
||||
- 仓库已初始化 Git,当前分支是 `main`,已有远程 `origin`;基线提交 `8a6c31c` 已推送到 `origin/main`。
|
||||
- 仓库已初始化 Git,当前分支是 `main`,已有远程 `origin`;当前已推送基线为 `801c0af`。
|
||||
- `docs/import/字段组.xlsx` 和 `docs/import/数据表映射.xlsx` 是用户已有、已暂存的变更,本 checkpoint 未修改。
|
||||
- 用户已使用项目只读 probe 成功连接数据库 `fire_safety_ymd`;PostGIS 报告版本 `3.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1`,8 表合计 4,055 条记录。
|
||||
- 实库 4,048 条非空几何已在 2026-09-05 的受控事务中从 SRID 0 补齐为 SRID 4326;坐标 extent 约为经度 121.16 至 121.93、纬度 37.07 至 37.49,类型与预期一致且未发现 WGS84 数值越界。数据提供方确认 8 表源数据均为 EPSG:4326 且无坐标偏移,严格 readiness 已通过。
|
||||
@@ -63,6 +65,7 @@
|
||||
- 用户确认真实数据包含大量镇街,环境变量不适合枚举全量值;MCP 现支持显式数据库全范围 `all` 和默认镇街白名单 `town_allowlist` 两种服务端范围。
|
||||
- 用户选择先实现简单地名能力、后续再优化;当前只查询既有森林防火记录,不调用外部地图服务,也不把候选代表点自动认定为演练点。
|
||||
- 本地真实 MCP 冒烟已完成:7 个工具均成功访问实库,响应和错误边界符合契约;该结果不等于公网、SuperAgent 或生产并发已验证。
|
||||
- SuperAgent 无法配置 MCP 协议版本;已稳定接通的 `th-hotel-simple-superagent` 作为 proven profile 参照,不读取/校验 initialize 版本字段或 `MCP-Protocol-Version` Header,并固定返回 `2025-06-18`。消防服务按该 profile 处理,版本字段/Header 不作为拒绝门禁;固定返回不等于支持任意其他版本,也不是追求最新协议。
|
||||
- 防火通道现有字段不能支持可靠路线规划;防火网格现有字段不能支持实时队伍位置或正式集结点。
|
||||
|
||||
## 4. Known Issues 与未确认项
|
||||
@@ -71,11 +74,11 @@
|
||||
- 35 条无效面几何和 7 条空几何会被查询排除;尤其 4 条无效防火网格可能造成所属网格和责任中队结果缺口,27 条无效墓地面可能造成风险区域漏项。
|
||||
- 除防火网格外 7 张表缺少 GiST 几何索引;当前 geography 距离表达式的生产索引方案需根据实库查询计划确认。
|
||||
- 水源/设施 `syzt`、水源 `hc_datetime` 等字段的枚举、单位、时区和更新责任人尚未确认。
|
||||
- SuperAgent MCP 的公网/内网 URL、TLS、网络白名单、Header 行为、Token 注入和轮换尚未联调。
|
||||
- SuperAgent MCP 的公网 URL 已有一次请求到达 Go 的现场证据,Bearer、`Content-Type`、JSON-RPC 已通过;旧版本门禁返回错误,但现场证据未捕获客户端版本字段是否存在、类型和值。同一 SuperAgent 的 th-hotel 服务已稳定调用,为 proven profile 参照;消防服务兼容实现、TLS、网络白名单、Token 轮换和公网真实工具调用仍待联调。是否发送协议 Header 不构成兼容阻塞。
|
||||
- `/api/chat` 静态 Bearer 和兼容路径 `xtoken` 只适用于受控联调,浏览器用户可以看到它;真实用户身份、动态授权、生产速率限制和滥用防护尚未实现。Chat 短凭证仅可通过默认关闭的显式 legacy 开关在受控测试/迁移窗口使用,MCP Token 仍要求至少 32 个可打印 ASCII 字符,三种凭证必须不同。
|
||||
- 目标公网机器的 Docker/Compose 和 Nginx 版本、配置 include 层级、证书、DNS、安全组及 PostgreSQL 网络拓扑尚未完整验证;用户已开始远程部署,仓库资产与服务器现场配置仍需完成一致性核验。
|
||||
- 目标服务器此前连续两次访问 `proxy.golang.org:443` 均在约 91 秒后超时,随后已通过可达的构建路径完成 Docker 镜像构建;该事实不代表所有外部 HTTPS 都可达。
|
||||
- 目标机当前容器因 `FIRE_SAFETY_CHAT_AUTH_TOKEN` 为已交付短凭证而未通过默认配置门禁,反复重启;`curl http://127.0.0.1:16587/health` 因服务未稳定监听而返回 connection refused。仓库已加入 `FIRE_SAFETY_CHAT_ALLOW_LEGACY_SHORT_TOKEN` 显式兼容方案,待用户提交并部署;公网 HTTPS、reload 和健康检查均尚未验证。
|
||||
- 目标机曾因已交付的 Chat 短凭证未通过默认配置门禁而反复重启;`801c0af` 已包含显式兼容方案。最新公网 `/mcp` 请求已到达 Go 并通过前置校验,说明该启动阻塞已不再是当前首要问题;但独立 health、公网 Chat、MCP 完整握手和工具调用仍未形成通过证据。
|
||||
- Chat 会话只在单个 Go 进程内存中保存;重启或多实例切换会丢失上下文,且当前没有历史查询、持久审计或主动取消 Provider Run。
|
||||
- 当前 `all`/`town_allowlist` 都是服务账号静态范围,不是最终用户级授权;`all` 会授权当前数据库中 MCP 固定查询表内所有镇街和镇街字段为空的记录,身份提供方、角色、租户和精确位置权限尚未确定。
|
||||
- 地名搜索是无索引的有界包含匹配;真实数据量下的耗时、重名率和名称字段质量尚未验证,生产优化可能需要标准地名表、别名词典或 `pg_trgm` 索引。
|
||||
@@ -107,17 +110,19 @@
|
||||
- Chat legacy 短凭证回归:默认仍拒绝少于 32 个字符的 Chat Token;仅在 `FIRE_SAFETY_CHAT_ALLOW_LEGACY_SHORT_TOKEN=true` 时接受非空、最多 4096 字节且仅含 ASCII `0x21-0x7e` 的短值;原生与兼容入口均通过,MCP 至少 32 字符和三凭证分离门禁保持不变。
|
||||
- 模拟 SuperAgent Chat 端到端:原生与兼容入口均通过;应用创建 Provider Session、发送消息、解析严格完成事件,原生返回 `conversation/message/done`,兼容入口返回 `result` 且最终 `finish_reason=stop`。
|
||||
- Nginx:配置已完成静态检查且未包含真实 Secret;开发机未安装 Nginx。据用户截图,目标机 `nginx -t` 已通过,reload 和 HTTPS 实际响应尚未验证。
|
||||
- Docker/Compose:部署文件已通过 YAML/静态安全断言;开发机未安装 Docker。目标机后续 Docker 镜像构建已成功,但容器因 Chat 短凭证默认门禁反复重启;`docker compose config --quiet`、稳定健康状态和公网运行容器仍待现场确认。
|
||||
- Docker/Compose:部署文件已通过 YAML/静态安全断言;开发机未安装 Docker。目标机 Docker 镜像构建已成功,曾因 Chat 短凭证默认门禁反复重启;最新公网 `/mcp` 请求证明服务随后已恢复处理请求,但 `docker compose config --quiet`、独立 health 和完整公网链路仍待现场确认。
|
||||
- 构建代理回归检查:修复前静态反馈命令返回 `RED: Docker build has no configurable GOPROXY`;修复后确认 Compose build arg、Dockerfile `GOPROXY` 和运行容器清空边界,返回 GREEN。
|
||||
- `CGO_ENABLED=0 GOOS=linux go build -buildvcs=false -trimpath ./cmd/server`:通过,生成 Linux 静态服务二进制;不替代目标机真实 Docker build。
|
||||
- 目标机首次 Docker 构建:失败;`go mod download` 获取 `github.com/jackc/pgpassfile@v1.0.0` 时连接 `proxy.golang.org:443` 超时,镜像/容器未生成,随后 `curl http://127.0.0.1:16587/health` 得到 connection refused,符合前置构建失败。
|
||||
- 目标机后续 Docker 构建:成功;但 `docker compose logs --tail=100 api` 报 `FIRE_SAFETY_CHAT_AUTH_TOKEN must contain at least 32 printable ASCII characters`,容器因配置校验失败重启,故 `curl http://127.0.0.1:16587/health` 仍未形成通过证据。
|
||||
- 目标机 Nginx:用户截图显示 `nginx -t` 配置语法检查成功;是否已 reload 以及 HTTPS 实际响应仍待确认。
|
||||
- SuperAgent MCP 公网现场:用户截图中的服务端错误证明请求已到达 Go 服务,Bearer、`Content-Type`、JSON-RPC 校验通过,随后旧版本门禁返回错误;截图未捕获客户端版本字段是否存在、类型和值。数据库 readiness 虽已在本地通过,但公网 SuperAgent 尚未调用任何数据库工具。
|
||||
- MCP proven-profile 回归:旧实现对 SuperAgent 请求返回截图中的 `MCP_PROTOCOL_VERSION_UNSUPPORTED`(RED);兼容实现对版本字段缺失、空值、非字符串、直接匹配或其他值均固定返回 `2025-06-18`,并覆盖带/不带/不同值 Header;同一 Handler 内的 `initialize` → `notifications/initialized` → `tools/list` → `tools/call` 回归通过,日志仅输出 `direct_success` 或 `compatibility_success`(GREEN)。公网完整链路仍待部署验证。
|
||||
- SRID 迁移预检:通过;使用临时 `admin` 连接确认 4,048 条候选、8 表 UPDATE 权限和 7 表 ALTER 权限,未输出 DSN 或业务记录。
|
||||
- SRID 数据迁移:通过;事务更新 4,048 条非空几何,7 张二维表改为 `geometry(Geometry,4326)`,防火通道保持裸 `geometry`,迁移前后几何载荷指纹与维度一致。
|
||||
- 真实 PostGIS 严格 audit:通过;运行时只读账号报告 8 表 SRID 均为 4326、类型与范围门禁通过。预期保留 7 条空几何、35 条无效面几何和 7 张缺 GiST 索引表 warning。
|
||||
- 本地真实 MCP 冒烟:通过;health、鉴权、Origin、方法限制、协议初始化、7 工具发现、7 tools/call、无结果、非法参数、响应一致性、字段脱敏、warning 和结构化日志均符合契约。第二轮实库查询约 0.35 至 0.99 秒。
|
||||
- 数据导入:用户报告 8 份 SQL 已导入,防火通道在使用裸 `geometry` 保留混合二维/Z 后重导成功;这是现场反馈,不替代项目只读 probe 的最终验证。
|
||||
- 真实 SuperAgent 对话与 MCP 联调:对话 API 仅完成模拟 Provider 端到端测试,真实消防 Profile 尚未测试;MCP readiness 和本地真实工具冒烟已通过,公网 HTTPS 回调未配置。
|
||||
- 真实 SuperAgent 对话与 MCP 联调:对话 API 仅完成模拟 Provider 端到端测试,真实消防 Profile 尚未测试;MCP readiness 和本地真实工具冒烟已通过。公网 `/mcp` 已收到 SuperAgent initialize,但旧版本门禁返回错误,尚未完成 proven-profile 兼容部署,公网数据库工具尚未调用,不能宣称公网工具联调或部署完成。th-hotel 成功只证明同一 SuperAgent 的兼容档案可行,不替代消防 endpoint 的完整链路验收。
|
||||
- 样例 SQL:未执行;含受限数据的 `*.sql` 已被 Git 忽略。
|
||||
- Git:基线提交已存在并推送;本 checkpoint 变更尚未提交,未执行自动 commit/push。
|
||||
- Git:`801c0af`(Chat 门禁兼容修复)已由用户提交并推送到 `origin/main`;本次 MCP 协商变更尚未提交,未执行自动 commit/push。
|
||||
Reference in new issue
Block a user