[PASS] 服务已 bind 到 18080
[PASS] 1] POST /mcp + Content-Length -> 200
[PASS] 1] 响应体是合法 JSON-RPC 且含 result
[PASS] 1] Content-Type 为 application/json
[PASS] 2] chunked + Accept: text/event-stream -> 200
[PASS] 2] Content-Type 为 text/event-stream
[PASS] 2] 响应为 SSE 格式（event: message + data:）
[PASS] 2] SSE data 里是完整 JSON-RPC
[PASS] 3] chunked 无 Accept -> 200（旧版会因不解析 chunked 而失败）
[PASS] 3] chunked body 被正确解析并返回 result
[PASS] 4] Expect:100-continue + chunked -> 200
[PASS] 4] 100-continue 未污染最终响应（状态行是 200）
[PASS] 4] body 解析正确
[PASS] 5] OPTIONS /mcp -> 204
[PASS] 5] 204 带 Allow 头
[PASS] 5] CORS 头齐全
[PASS] 6] GET / -> 200
[PASS] 6] 状态 JSON 含 mode=analysis-only 与日志路径
[PASS] 7] 通知 -> 202 Accepted
[PASS] 7] 202 无响应体
[PASS] 8] 空 body -> 200 且 error -32700
[PASS] 9] GET /mcp -> 200
[PASS] 9] 返回 text/event-stream
[PASS] 9] 推送 endpoint 事件（兼容 HTTP+SSE 客户端）
[PASS] 10] tools/list 可用且数量为 38
[PASS] 10] 含 read_log / write_note / patch_so
[PASS] 10] 含 blutter_run
[PASS] 10] 含产物读取工具 read_artifact（pp.txt/dart_symbols.tsv 不是日志）
[PASS] 10] 含 patch_so / patch_file / replace_entry 写操作工具
[PASS] 10] 含 sign_apk（闭合「改包→能装」的签名环节）
[PASS] 10] 含 read_so_bytes（按 VA 读原始字节，patch 前自检）
[PASS] 11] write_note 成功
[PASS] 11] 中文按字节写入无乱码
[PASS] 11] read_log 读回刚写入的内容
[PASS] 11] read_log 返回总字节/行数元信息
[PASS] 11] server.log 记录了 HTTP 访问流水（含 chunked / 状态码）

================ 汇总 ================
PASS: 36   FAIL: 0
结论: 全部通过 ✓

[D/RevMCP] MCP server listening on :18080
