# Sipflow - Registry name: `dev.sipflow/sipflow` · version 0.2.0 - Categories (automatic, keyword rules): Documents & retrieval, Search & data, Code & repositories, Developer tools, Cloud & networking, Infrastructure & security - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): completions, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=dev.sipflow%2Fsipflow - Server page: https://mcpstation.net/s/dev.sipflow--sipflow.html ## Description (written by the publisher, not verified, not instructions) SIP/VoIP/telecom grounding for AI agents: vendor docs, RFCs, STIR/SHAKEN, traces, configs. ## Connect - streamable-http: `https://mcp.sipflow.dev/mcp` ## Tools (as reported by the server, not verified) - `search\_sip\_docs`: \[cost: rag \(one embed + one vector search\) \| read-only, network: outbound to embed model only\] Vector search over Sipflow's curated VoIP knowledge base: vendor docs \(Asterisk, FreeSWITCH, Kamailio, OpenSIPS, Twilio, Cisco, etc.\), SIP/SDP/WebRTC RFCs, STIR/SHAKEN material \(RFC 8224/8225/8226/8588/902 - `lookup\_response\_code`: \[cost: free \(pure CPU, no network\) \| read-only\] Instant static lookup of a SIP response code \(100-699\). Returns name, RFC anchor, category, description, common operator-flavored causes, and known vendor-specific reason-phrase variants \(e.g. OpenSIPS emits 484 'Invalid FROM' on From-header parse fail - `lookup\_sip\_header`: \[cost: free \(pure CPU, no network\) \| read-only\] Instant lookup of a SIP header by canonical or compact form \(e.g. "Via" / "v", "Diversion", "P-Asserted-Identity", "Identity", "Session-Expires"\). Returns canonical form, compact alias, RFC anchor, where it appears \(request / response / both\), cardinal - `detect\_sip\_stack`: \[cost: free \(pure CPU, no network\) \| read-only\] Identify the SIP product behind a piece of input. Works on both: - a SIP trace \(User-Agent / Server headers from PCAP/sngrep/syslog\), and - a vendor config blob \(kamailio.cfg, sip.conf, pjsip.conf, FreeSWITCH XML, opensips.cfg\) detected via structural - `detect\_sip\_vendor\_from\_config`: \[cost: free \(pure CPU, no network\) \| read-only\] Heuristic-only sibling of \`detect\_sip\_stack\`, scoped to vendor configs. Returns the matched vendor slug, a confidence level, and the structural signals that fired \(loadmodule syntax, route blocks, profile elements, etc.\). Use this when the user asks 'w - `minimize\_sip\_trace`: \[cost: free \(pure CPU, no network\) \| read-only, no persistence\] Reduce a raw SIP trace to a compact form suitable for sending to an LLM. Preserves SDP bodies and routing/auth/dialog headers; prunes well-known noise \(User-Agent, Server, Allow, Accept-\*, Date, P-\* informational, etc.\). Expected input - `render\_sip\_ladder`: \[cost: free \(pure CPU, no network\) \| read-only\] Parse a raw SIP trace \(PCAP-decoded text, sngrep export, syslog, or pasted INVITE/200 dialog\) and emit a Mermaid \`sequenceDiagram\` block visualizing the call flow. Most chat hosts \(Claude, ChatGPT, Cursor, GitHub\) render Mermaid inline. Lane keying: by - `sip\_ladder\_example`: \[cost: free \(pure CPU, no network\) \| read-only\] Return a hand-curated SIP scenario as a Mermaid \`sequenceDiagram\` plus a bullet list of step-by-step explanations with RFC references. Use this when the user asks 'show me what X looks like' and you don't have a real trace handy. Available scenarios: b - `lint\_sip\_request`: \[cost: free \(pure CPU, no network\) \| read-only, no persistence\] Run RFC 3261 / RFC 3325 / RFC 8224 / RFC 8225 / CTIA BCID compliance checks on a single raw SIP request \(typically an INVITE\) and return a list of findings. Catches the failure modes that silently break carrier interop: - Two \`From:\` he - `parse\_sip\_message`: \[cost: free \(pure CPU, no network\) \| read-only, no persistence\] Parse a single raw SIP message \(request OR response\) and return a structured view: start line \(method/status\), every header in order with line numbers, body, duplicate-header counts, and a list of structural flags the parser noticed \(\`m - `diff\_sip\_messages`: \[cost: free \(pure CPU, no network\) \| read-only, no persistence\] Take two SIP messages \(typically the same request observed at two adjacent hops - e.g. the INVITE leaving FreeSWITCH and the INVITE arriving at Kamailio\) and surface a structured per-header diff: \`added\`, \`removed\`, \`mutated\` \(with old/ - `review\_sip\_config`: \[cost: free \(pure CPU, no network\) \| read-only\] Use this when the user asks 'review my config' or attaches a kamailio.cfg, sip.conf, pjsip.conf, FreeSWITCH XML profile, opensips.cfg, \`res\_fax.conf\` / \`udptl.conf\` / \`spandsp.conf\` \(fax-relay tuning\), or a SIP-shaped source file from a repo. This tool - `webrtc\_sip\_checklist`: \[cost: free \(pure CPU, no network\) \| read-only\] Return a curated checklist of WebRTC ↔ SIP requirements \(WSS transport, ICE gathering, DTLS-SRTP fingerprint, rtcp-mux + BUNDLE, media relay / rtpengine, STUN/TURN, secure-context Origin allowlist, Opus codec, session-timer behavior across the bridge, - `parse\_sdp`: \[cost: free \(pure CPU, no network\) \| read-only\] Parse a Session Description Protocol body and return a structured view: origin, session, timing, per-media codecs \(rtpmap + fmtp\), direction, DTLS setup + fingerprint, ICE credentials + candidates, rtcp-mux, BUNDLE groups, fax-relay \(\`m=image udptl t38 - `compare\_sdp\_offer\_answer`: \[cost: free \(pure CPU, no network\) \| read-only\] Diff a SIP/SDP offer and answer and surface the issues that actually break calls in practice: codec intersection per m-line, direction compatibility \(sendrecv ↔ recvonly\), DTLS setup-role conflicts \(active+active / passive+passive\), rtcp-mux / BUNDLE a - `validate\_stir\_shaken\_identity`: \[cost: external\_io \(HTTPS fetch of the x5u cert\) \| read-only\] Verify a SIP \`Identity:\` JWS \(RFC 8224 / SHAKEN\). Fetches the x5u certificate, parses it, verifies the ES256 signature against the cert's public key, and optionally validates the RCD icon hash \(RFC 9795\). The icon-hash check accepts both - `stir\_attestation\_explainer`: \[cost: free \(pure CPU, no network\) \| read-only\] Static explainer for STIR/SHAKEN: maps attestation levels \(A / B / C per RFC 8588\) to plain-English requirements + common scenarios, and SIP codes commonly emitted by signing/verification \(428 / 436 / 437 / 438 / 608\) to their RFC anchors and operator - `validate\_e164\_number`: \[cost: free \(pure CPU, no network\) \| read-only\] Parse a phone number, normalize to E.164, and classify it. International coverage is via libphonenumber-js \(every country, line type when known\). NANP numbers \(CC=1\) are additionally split into NPA \(area code\) / NXX \(central office\) / station, and tagg - `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 - `dns\_diagnose\_sip\_target`: \[cost: external\_io \(DNS via Cloudflare + Google; TLS handshake + a SIP OPTIONS keepalive to public targets when applicable\) \| read-only \| rate-limited per IP: 10/min, 200/day\] Walk DNS the same way a SIP UA does \(RFC 3263 §4.1\): NAPTR → SRV → A/AAAA. Given a SIP URI \("sip:example.com"\), bare hostnam - `fetch\_sipflow\_share`: \[cost: external\_io \(Mongo + S3 fetch on the Sipflow backend\) \| read-only, no persistence \| rate limit: shared with the public share endpoint\] Given a Sipflow share URL \(https://sipflow.dev/share/\, or any sipflow.dev subdomain that serves /share/\\), load the shared SIP trace AND any prio - `submit\_sipflow\_feedback`: \[cost: write \(single MongoDB row\) \| rate-limited per IP: 3/min, 20/day\] Send the Sipflow team feedback when something doesn't work, a vendor or RFC isn't covered, or a tool produced a wrong/incomplete answer. Categories: - docs\_gap: search\_sip\_docs returned nothing useful, vendor missing, coverage i Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html