Real-time video KYC (Know Your Customer) server for identity verification using AWS Rekognition, Textract, and Comprehend. Implements RBI VCIP requirements with liveness detection, document OCR, face matching, and NLP analysis.
21 tools with basic schemas and descriptions, but significant quality gaps. Most tools have 1-5 parameters with type info and brief descriptions (10-50 chars), falling below the 50-200 char baseline for LLM-optimized descriptions. No output schemas documented. Parameter descriptions lack format constraints, ranges, or dependency hints. Error handling is absent, no recovery guidance, retryability classification, or actionable error messages. Security concerns: auth_login exposes credentials as parameters; no audit trail or permission gates visible. Composition issues: get_liveness_result and post_liveness_result are near-duplicates; comprehend_* tools lack batch efficiency guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Average tool description ~35 chars (well below 194-char baseline); average params ~2.5 (below 4-param baseline). Naming is verb-first and mostly clear, but some tools conflate concerns (document_comprehend_pipeline combines OCR + NLP).
Textract AnalyzeID on uploaded ID image(s)
Exchange username/password for a signed role token (RBAC)
Batch NLP over multiple texts
Comprehend entity extraction
Comprehend key-phrase extraction
Detect + mask PII (Comprehend)
Persist an NLP artifact to a session
Comprehend sentiment analysis
Credentials exposed as parameters: auth_login accepts username/password directly. Secrets must use server-side injection via environment variables or vault. Agent traces log all parameters, credentials leak into logs and prompt history.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., sessionId, confidence, matched faces). Every tool response is opaque.
Duplicate/near-duplicate tools: get_liveness_result and post_liveness_result both operate on sessionId. LLMs conflate similar names and waste reasoning cycles. Consolidate or clarify distinction (GET vs POST semantics).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | 2026-07-28+ | v2 |
Create a real-time KYC session
Create a Rekognition Face Liveness session
Document OCR (Textract) → NLP (Comprehend) pipeline
Compare ID portrait vs reference selfie (Rekognition)
List active sessions (verifier dashboard)
Fetch/persist liveness result (legacy alias of POST)
Ordered artifact timeline for a session
Health check endpoint
List all mounted routes (self-describing)
Upload a mock reference selfie (demo path)
Ingest + persist liveness result (geo-validated; canonical verb)
Index a face into the Rekognition collection
Search the collection by face image
Parameter descriptions lack format constraints and ranges. E.g., 'confidence' has no bounds (0-1? 0-100?), 'lat'/'lon' lack precision hints, 'languageCode' has no enum (en, es, fr, etc.). LLMs hallucinate invalid values.
No error handling guidance. Tools return no recovery hints, retryability classification, or actionable error messages. An LLM receiving a 400 or 500 has no idea what to do next.