GPT Connector Deep Investigation — P0 — 2026-05-13
Điều tra dứt điểm GPT Custom Action → VPS Agent Data — ClientResponseError toàn bộ operations
Date: 2026-05-13 Priority: P0 — GPT connector chết hoàn toàn, block mọi tương tác GPT ↔ KB Mode: READ-ONLY investigation + targeted fix if root cause found Agent: Claude Code / Codex
Bối cảnh
GPT Custom Action connector đến Agent Data đã lỗi liên tục 2 ngày (12-13/05/2026). Pattern: PASS → FAIL → fix → PASS → FAIL. Đổi phiên GPT mới vẫn lỗi. Tất cả operations đều lỗi (search, list, create, health) → ClientResponseError không có chi tiết status code.
Trong khi đó, Claude MCP connector hoạt động bình thường 100% suốt thời gian này.
Nguyên nhân ĐÃ LOẠI BỎ (không điều tra lại)
1. VPS down / container crash — containers healthy, Claude works, uptime >24h
2. OGV-2C write gate — chỉ affect create_document, không affect read/search/list
3. Phiên GPT quá dài — đã đổi phiên mới vẫn lỗi
4. listDocuments param mapping path/prefix — đã fix server-side 12/05 (commit eaf2140 area)
5. healthCheck stale MCP wrapper — đã fix server-side 12/05
6. Response quá lớn — đã thêm pagination + limit 12/05
7. Qdrant timeout — đã fix từ tháng 3 (PR #337)
8. Single Uvicorn worker blocking — đã fix từ tháng 3 (PR #337, 2 workers)
Điều cần điều tra MỚI
Phase 1 — Nginx access/error logs gần đây (GPT requests)
# Lọc nginx access log 6 tiếng gần nhất cho requests từ GPT
# GPT User-Agent thường chứa "ChatGPT-User" hoặc IP từ OpenAI
docker exec incomex-nginx cat /var/log/nginx/access.log | tail -200
# Lọc nginx error log
docker exec incomex-nginx cat /var/log/nginx/error.log | tail -100
# Tìm cụ thể: có request nào từ GPT bị 4xx/5xx?
docker exec incomex-nginx cat /var/log/nginx/access.log | grep -i "chatgpt\|openai" | tail -50
# Tìm upstream timeout/error
docker exec incomex-nginx cat /var/log/nginx/error.log | grep -i "upstream\|timeout\|connect\|refused" | tail -30
Report: Có GPT request nào đến VPS trong 6 tiếng gần nhất? Status code là gì? Hay GPT requests KHÔNG ĐẾN ĐƯỢC VPS?
Phase 2 — Agent Data container logs gần đây
# Agent Data logs 6 tiếng gần nhất
docker logs incomex-agent-data --since 6h 2>&1 | tail -200
# Tìm error/exception
docker logs incomex-agent-data --since 6h 2>&1 | grep -i "error\|exception\|traceback\|fail\|500\|401\|403" | tail -50
# Tìm connector_call logs (đã thêm ngày 12/05)
docker logs incomex-agent-data --since 6h 2>&1 | grep -i "connector_call" | tail -30
Report: Agent Data có nhận được request từ GPT? Nếu có, response status là gì?
Phase 3 — OpenAPI schema hiện tại
# Kiểm tra OpenAPI JSON được served đúng không
curl -s https://vps.incomexsaigoncorp.vn/api/openapi.json | head -100
# Kiểm tra status code
curl -sI https://vps.incomexsaigoncorp.vn/api/openapi.json
# Validate JSON syntax
curl -s https://vps.incomexsaigoncorp.vn/api/openapi.json | python3 -c "import json,sys; json.load(sys.stdin); print('VALID JSON')" 2>&1
# Schema version
curl -s https://vps.incomexsaigoncorp.vn/api/openapi.json | python3 -c "import json,sys; d=json.load(sys.stdin); print('version:', d.get('info',{}).get('version','MISSING')); print('servers:', d.get('servers','MISSING'))"
Report: OpenAPI schema có served đúng? JSON có valid? Server URL trong schema trỏ đúng?
Phase 4 — REST endpoint health từ bên ngoài
# Health endpoint
curl -sv https://vps.incomexsaigoncorp.vn/api/health 2>&1
# Search endpoint (POST /chat)
curl -sv -X POST https://vps.incomexsaigoncorp.vn/api/chat \
-H "Content-Type: application/json" \
-H "X-API-Key: $(cat /opt/incomex/.env | grep AGENT_DATA_API_KEY | cut -d= -f2)" \
-d '{"message":"test connection"}' 2>&1
# List endpoint
curl -sv "https://vps.incomexsaigoncorp.vn/api/kb/list?prefix=knowledge/dev/laws/dieu44-trien-khai/notes&limit=5" \
-H "X-API-Key: $(cat /opt/incomex/.env | grep AGENT_DATA_API_KEY | cut -d= -f2)" 2>&1
Report: Từ VPS gọi chính mình qua HTTPS, các endpoint có trả 200? Response body có đúng format?
Phase 5 — SSL certificate
# Kiểm tra SSL certificate
echo | openssl s_client -connect vps.incomexsaigoncorp.vn:443 -servername vps.incomexsaigoncorp.vn 2>/dev/null | openssl x509 -noout -dates -subject 2>&1
# Kiểm tra certificate chain
curl -vI https://vps.incomexsaigoncorp.vn/api/health 2>&1 | grep -i "ssl\|certificate\|expire\|issuer"
Report: SSL cert còn valid? Có sắp hết hạn?
Phase 6 — Docker resource constraints
# Memory usage per container
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"
# Disk space
df -h /
# Agent Data process count (should be 2 workers + master)
docker exec incomex-agent-data ps aux | grep -c uvicorn
Report: Có container nào OOM? Disk đầy? Uvicorn workers đang chạy đủ?
Phase 7 — Nginx config cho API routing
# Đọc nginx config cho agent-data routing
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 20 "location /api"
# Kiểm tra rate limiting nếu có
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -i "limit_req\|limit_conn\|rate"
# Kiểm tra proxy timeout
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -i "proxy_read_timeout\|proxy_connect_timeout\|proxy_send_timeout"
Report: Có rate limiting? Proxy timeout bao nhiêu?
Phase 8 — So sánh GPT path vs Claude MCP path
# Claude MCP đi qua đường nào?
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "location /api/mcp"
# GPT REST đi qua đường nào?
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "location /api/health"
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "location /api/kb"
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "location /api/chat"
docker exec incomex-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "location /chat"
Report: Hai đường có cùng upstream? Có config khác nhau (timeout, buffer)?
Phase 9 — Auth mechanism GPT sử dụng
# Kiểm tra OpenAPI security scheme
curl -s https://vps.incomexsaigoncorp.vn/api/openapi.json | python3 -c "
import json,sys
d=json.load(sys.stdin)
print('security:', json.dumps(d.get('security','MISSING'), indent=2))
print('securitySchemes:', json.dumps(d.get('components',{}).get('securitySchemes','MISSING'), indent=2))
# Check each path for security
for path, methods in d.get('paths',{}).items():
for method, spec in methods.items():
if isinstance(spec, dict):
sec = spec.get('security', 'inherit')
print(f'{method.upper()} {path}: security={sec}')
"
# Kiểm tra API key trong .env
cat /opt/incomex/.env | grep -i "API_KEY\|AUTH\|TOKEN" | sed 's/=.*/=<REDACTED>/'
Report: GPT dùng auth gì (API key header, bearer token, URL param)? Có khớp với server expect?
Phase 10 — Tổng hợp và đề xuất fix
Sau khi có đủ evidence từ Phase 1-9, viết report tổng hợp:
- GPT requests có đến VPS không? (Phase 1)
- Nếu có, response status code là gì? (Phase 1, 2)
- Nếu không đến, vấn đề ở DNS/SSL/firewall/GPT gateway? (Phase 5)
- OpenAPI schema có đúng? (Phase 3)
- REST endpoints có hoạt động? (Phase 4)
- Resource có đủ? (Phase 6)
- Nginx config có blocking? (Phase 7, 8)
- Auth có khớp? (Phase 9)
Hard boundaries
ALLOWED: Read logs, read configs, curl endpoints, check resources
FORBIDDEN: Restart containers (unless explicitly found as needed and reported first), modify nginx config, modify agent-data code, modify .env, modify OpenAPI schema
If root cause found and fix is clear: REPORT FIRST, propose fix, wait for approval.
Report path
knowledge/current-state/reports/gpt-connector-deep-investigation-2026-05-13.md
Final fields
gpt_requests_reaching_vps=true|false
gpt_response_status=<status_codes_observed>
ssl_cert_valid=true|false
openapi_schema_valid=true|false
rest_endpoints_working=true|false
docker_resources_ok=true|false
nginx_config_issue=true|false|not_found
auth_mismatch=true|false
root_cause_identified=true|false
root_cause=<description>
fix_proposed=<description>
fix_applied=false (wait for approval)
GPT Connector Deep Investigation Prompt | P0 | 2026-05-13