KB-223D

GPT Connector Deep Investigation — P0 — 2026-05-13

9 min read Revision 1
gptconnectorinvestigationp0agent-datavps

Đ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:

  1. GPT requests có đến VPS không? (Phase 1)
  2. Nếu có, response status code là gì? (Phase 1, 2)
  3. Nếu không đến, vấn đề ở DNS/SSL/firewall/GPT gateway? (Phase 5)
  4. OpenAPI schema có đúng? (Phase 3)
  5. REST endpoints có hoạt động? (Phase 4)
  6. Resource có đủ? (Phase 6)
  7. Nginx config có blocking? (Phase 7, 8)
  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