Troubleshoot a SIP response code (RAG, vendor-aware)
troubleshoot_response_code[cost: rag (one embed + one vector search) | read-only, network: outbound to embed model only | rate-limited per IP]
Like lookup_response_code but augmented: returns the static RFC entry PLUS the top vendor-specific RAG hits for the exact code (and any free-text context the user pasted). When the static entry carries known vendor-specific reason-phrase variants (e.g. 484 + opensips → 'Invalid FROM' from parse_from.c), those phrases are folded into the embed query so the right vendor docs surface.
Use when the user asks 'why did reject this with ?' and you want vendor-grounded common causes, not just the RFC text. Especially helpful for fax-rejection paths - 488 / 415 / 606 on a T.38 reinvite (m=image udptl t38) is one of the most common 488 variants and the tool surfaces FreeSWITCH mod_spandsp / Cisco CUBE / AudioCodes T.38 docs alongside the RFC text.
Pair with: lookup_response_code first (cheaper); lint_sip_request when the code is 4xx and they have the offending request; compare_sdp_offer_answer for 488/415 caused by a T.38 reinvite SDP mismatch; validate_stir_shaken_identity when the code is 438; stir_attestation_explainer for STIR-shaped codes (428/436/437/438/608); dns_diagnose_sip_target when the code is 503 / 408 and routing is suspect.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | SIP response code (e.g. 488, 503, 438). | |
| context | No | Optional free-text context: a snippet of the trace, the Reason header, the Warning header, or a one-line description of what the user was trying to do. | |
| vendorHint | No | Vendor slug to filter the RAG search (e.g. "kamailio", "freeswitch", "twilio"). Strongly recommended. |