Sipflow
Ce que fait ce MCP
Analyzes SIP, SDP, VoIP, WebRTC, and STIR/SHAKEN messages and configurations, with protocol validation, troubleshooting, documentation search, and trace visualization.
Outils
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['offer', 'answer'], 'properties': {'offer': {'type': 'string', 'maxLength': 65536, 'minLength': 1, 'description': 'SDP offer body.'}, 'answer': {'type': 'string', 'maxLength': 65536, 'minLength': 1, 'description': 'SDP answer body.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'kind': {'enum': ['auto', 'trace', 'config'], 'type': 'string', 'default': 'auto', 'description': 'What the input is. "trace" looks at SIP headers only, "config" runs vendor-config heuristics, "auto" tries trace first then falls back to config detection.'}, 'text': {'type': 'string', 'maxLength': 2000000, 'minLength': 1, 'description': 'Raw SIP trace text OR a vendor config blob.'}, 'filenameHint': {'type': 'string', 'maxLength': 200, 'description': 'Optional filename (e.g. "kamailio.cfg", "pjsip.conf"). Strongly improves config-mode detection when supplied.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 2000000, 'minLength': 1, 'description': 'Config blob (UTF-8 plaintext).'}, 'filenameHint': {'type': 'string', 'maxLength': 200, 'description': 'Optional filename ("kamailio.cfg", "pjsip.conf", "sofia/external.xml") to bias detection.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['before', 'after'], 'properties': {'after': {'type': 'string', 'maxLength': 64000, 'minLength': 1, 'description': 'SIP message as observed at the *downstream* hop (e.g. what Kamailio believes it received).'}, 'before': {'type': 'string', 'maxLength': 64000, 'minLength': 1, 'description': 'SIP message as observed at the *upstream* hop (e.g. what FreeSWITCH believes it sent).'}, 'labelAfter': {'type': 'string', 'default': 'after', 'maxLength': 80, 'description': 'Display label for the downstream side. Default "after".'}, 'labelBefore': {'type': 'string', 'default': 'before', 'maxLength': 80, 'description': 'Display label for the upstream side. Default "before".'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['target'], 'properties': {'target': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'SIP URI ("sip:example.com"), "example.com:5060", or bare hostname ("example.com"). Userinfo is stripped before lookup.'}, 'transport': {'enum': ['any', 'udp', 'tcp', 'tls', 'ws', 'wss'], 'type': 'string', 'default': 'any', 'description': 'Transport hint. "any" surfaces all NAPTR services; specific transports filter the SRV walk to that service.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'maxLength': 2048, 'minLength': 1, 'description': 'Full Sipflow share URL. Example: "https://sipflow.dev/share/eyJqb2JJZCI6Ii4uLiJ9.abc123". The path must be /share/<token>; /api/share/... endpoints are not accepted.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 64000, 'minLength': 1, 'description': 'Raw SIP request text. Should start with the request line (e.g. `INVITE sip:...@... SIP/2.0`). Headers must be CRLF or LF separated.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['code'], 'properties': {'code': {'type': 'integer', 'maximum': 699, 'minimum': 100, 'description': 'SIP response code (e.g. 488 for Not Acceptable Here).'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'Header name (canonical, e.g. "Via", or compact, e.g. "v"). Case-insensitive.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 2000000, 'minLength': 1, 'description': 'Raw SIP trace text. Multiple messages may be concatenated.'}, 'maxBytes': {'type': 'integer', 'default': 200000, 'maximum': 2000000, 'minimum': 1024, 'description': "Truncate the minimized output if it exceeds this many bytes (default 200000, matches Sipflow's analyze pipeline)."}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sdp'], 'properties': {'sdp': {'type': 'string', 'maxLength': 65536, 'minLength': 1, 'description': 'SDP body - the section after the empty line in an INVITE/200/UPDATE.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 64000, 'minLength': 1, 'description': 'Raw SIP message text. Should start with a request line (`INVITE sip:...@... SIP/2.0`) or status line (`SIP/2.0 200 OK`). Headers must be CRLF or LF separated.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 2000000, 'minLength': 1, 'description': 'Raw SIP trace text. Multiple messages may be concatenated.'}, 'callId': {'type': 'string', 'description': 'Render only this Call-ID. Required when the trace contains multiple calls; otherwise the only call is used.'}, 'aliases': {'type': 'object', 'description': 'Friendly lane labels. Match order: exact "ip:port" â\x86\x92 bare "ip" â\x86\x92 top-Via host (with or without port) â\x86\x92 Contact host (with or without port). Most-specific match wins; otherwise the lane is labeled with its raw "ip:port" (never "unknown"). Example: `{"192.0.2.10:5060":"Alice","203.0.113.50":"Carrier"}`.', 'additionalProperties': {'type': 'string'}}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Drop OPTIONS keepalives and retransmissions. Hidden counts are summarized in a `Note over` line.'}, 'groupByIp': {'type': 'boolean', 'default': True, 'description': 'Collapse multiple ports on the same IP into one participant lane (default). Set to `false` to fall back to the legacy one-column-per-`ip:port` layout when you specifically need port-level granularity in the rendered Mermaid.'}, 'maxMessages': {'type': 'integer', 'default': 60, 'maximum': 200, 'minimum': 1, 'description': 'Hard cap on rendered arrows. Extra messages produce a truncation note. Hard ceiling is 200.'}, 'includeTiming': {'type': 'boolean', 'default': False, 'description': 'Append `+Nms` (delta from previous arrow) to each arrow label.'}, 'groupRetransmits': {'type': 'boolean', 'default': True, 'description': 'Collapse adjacent identical retransmissions on the same direction into a single arrow + `Note over: xN over Tms`. Independent of `compact` (which drops them entirely).'}, 'splitOnNewBranch': {'type': 'boolean', 'default': False, 'description': 'Emit a `--- failover to <ip[:port]> ---` separator before any request sent to a previously-unseen destination. Useful when the trace fails over between gateway IPs.'}, 'highlightFailures': {'type': 'boolean', 'default': True, 'description': 'Bold the first non-1xx final response per request leg (CSeq) so the failure jumps out in the ladder.'}, 'correlationHeaders': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Header names to use for cross-leg call correlation (value-equality). When provided, calls sharing the same value for any listed header are merged into one ladder. Example: `["X-ACME-Session-ID","X-ACME-Call-ID"]`.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 2000000, 'minLength': 1, 'description': 'The full config blob (or a representative excerpt). UTF-8 plaintext.'}, 'vendorHint': {'enum': ['asterisk', 'freeswitch', 'kamailio', 'opensips', 'freepbx', 'yate', 'cisco-cube', 'ribbon', 'oracle-acme', 'audiocodes', 'cisco-cucm', 'avaya', 'mitel', 'metaswitch', '3cx', 'nec', 'twilio', 'telnyx', 'bandwidth', 'bandwidth-bxf', 'vonage', 'plivo', 'signalwire', 'aws-chime', 'didww', 'voxbone', 'genband', 'cisco-bts', 'teams', 'zoom-phone', 'ringcentral', 'webex-calling', 'eight-by-eight', 'polycom', 'yealink', 'cisco-phone', 'grandstream', 'snom', 'linphone', 'microsip', 'bria', 'zoiper', 'jssip', 'sip-js', 'stir-shaken'], 'type': 'string', 'description': 'Skip auto-detection and force a specific vendor. Use when the heuristics return low confidence or the wrong vendor.'}, 'filenameHint': {'type': 'string', 'maxLength': 200, 'description': 'Optional filename or path (e.g. "kamailio.cfg", "etc/asterisk/pjsip.conf", "sofia/external.xml"). Strongly improves vendor detection.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 5, 'maximum': 15, 'minimum': 1, 'description': 'Maximum number of snippets to return (1-15).'}, 'query': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'Natural-language question or keywords. Be specific - include vendor name, header, error code, module, or RFC if known. Multi-sentence queries are fine.'}, 'vendor': {'enum': ['asterisk', 'freeswitch', 'kamailio', 'opensips', 'freepbx', 'yate', 'cisco-cube', 'ribbon', 'oracle-acme', 'audiocodes', 'cisco-cucm', 'avaya', 'mitel', 'metaswitch', '3cx', 'nec', 'twilio', 'telnyx', 'bandwidth', 'bandwidth-bxf', 'vonage', 'plivo', 'signalwire', 'aws-chime', 'didww', 'voxbone', 'genband', 'cisco-bts', 'teams', 'zoom-phone', 'ringcentral', 'webex-calling', 'eight-by-eight', 'polycom', 'yealink', 'cisco-phone', 'grandstream', 'snom', 'linphone', 'microsip', 'bria', 'zoiper', 'jssip', 'sip-js', 'stir-shaken'], 'type': 'string', 'description': 'Restrict results to a single vendor/stack (e.g. "asterisk", "kamailio"). Omit to search all vendors.'}, 'sourceType': {'anyOf': [{'enum': ['rfc', 'pbx', 'sbc', 'cpaas', 'uc-cloud', 'endpoint', 'stir-shaken', 'transport', 'regulatory', 'observability'], 'type': 'string'}, {'type': 'array', 'items': {'enum': ['rfc', 'pbx', 'sbc', 'cpaas', 'uc-cloud', 'endpoint', 'stir-shaken', 'transport', 'regulatory', 'observability'], 'type': 'string'}}], 'description': 'Restrict by document type. Available: rfc | pbx (Asterisk/FreeSWITCH/Kamailio/OpenSIPS) | sbc (SBCs) | cpaas (Twilio/Telnyx/...) | uc-cloud (Teams/Zoom/...) | endpoint (phones/softphones) | stir-shaken | transport (RTP/SRTP/DTLS/ICE/STUN/TURN RFCs) | regulatory | observability.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['scenario'], 'properties': {'verbose': {'type': 'boolean', 'default': False, 'description': "Also include the scenario's long Markdown explanation. Useful when the LLM is going to teach the user; off by default to keep responses small."}, 'scenario': {'enum': ['basic-call', 'auth-challenge', 'cancel-before-answer', 'early-media', 'hold-resume', 'refer-blind', 'proxy-with-record-route', 'shaken-attested-invite', 'bye-glare', 'redirect-302'], 'type': 'string', 'description': 'Which scenario to render. Valid ids: basic-call, auth-challenge, cancel-before-answer, early-media, hold-resume, refer-blind, proxy-with-record-route, shaken-attested-invite, bye-glare, redirect-302.'}, 'actorNames': {'type': 'object', 'properties': {'uac': {'type': 'string'}, 'uas': {'type': 'string'}, 'proxy': {'type': 'string'}}, 'description': 'Override the default actor display names (Alice/Bob/Proxy). Maps to the first/second/third lane in left-to-right order.', 'additionalProperties': False}, 'includeExplanation': {'type': 'boolean', 'default': True, 'description': 'Append a bulleted **Notes** section with RFC references for each step.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'code': {'type': 'integer', 'maximum': 699, 'minimum': 100, 'description': 'SIP response code commonly seen in STIR/SHAKEN flows (428, 436, 437, 438, 608).'}, 'attestation': {'enum': ['A', 'B', 'C'], 'type': 'string', 'description': 'Attestation level: "A" Full / "B" Partial / "C" Gateway.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category', 'summary', 'userConsent'], 'properties': {'contact': {'type': 'string', 'maxLength': 200, 'description': 'Optional email the user can be reached at. Only include when the user explicitly provides one and asks you to attach it.'}, 'details': {'type': 'string', 'maxLength': 4000, 'description': 'Longer description: what the user was trying to do, what happened, what they expected. PII-free.'}, 'summary': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'Short one-line description of the feedback. Will be shown to humans triaging. PII-free.'}, 'category': {'enum': ['docs_gap', 'tool_bug', 'wrong_answer', 'feature_request', 'general'], 'type': 'string', 'description': 'Bucket. Use docs_gap for missing RAG coverage, tool_bug for broken behavior, wrong_answer for incorrect output, feature_request for new asks, general for anything else.'}, 'relatedTool': {'type': 'string', 'maxLength': 200, 'description': 'Name of the Sipflow MCP tool the feedback relates to, if any (e.g. `search_sip_docs`, `troubleshoot_response_code`).'}, 'userConsent': {'type': 'boolean', 'const': True, 'description': 'MUST be true. Set this only after you have shown the user the exact payload above (including any `traceExcerpt`) and they have confirmed they want it sent.'}, 'relatedQuery': {'type': 'string', 'maxLength': 200, 'description': 'The search query / question that failed or returned poor results. PII-free.'}, 'traceExcerpt': {'type': 'string', 'maxLength': 32000, 'description': 'Optional sanitized SIP message text the user explicitly approved attaching. Use the output of `minimize_sip_trace` (or a hand-scrubbed Via/From/To/Call-ID/CSeq block, optionally with minimal SDP). NEVER paste raw INVITE / REGISTER bodies, full pcap text, or anything containing phone numbers / IPs / Call-IDs you have not already redacted. The server runs a backstop sanitizer that redacts phones, IPs, and emails. Hard cap 32 kB.'}, 'vendorOrTopic': {'type': 'string', 'maxLength': 200, 'description': "Vendor slug, RFC number, or topic the feedback relates to (e.g. 'freeswitch', 'RFC 3261', 'fax-over-IP')."}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['code'], 'properties': {'code': {'type': 'integer', 'maximum': 699, 'minimum': 100, 'description': 'SIP response code (e.g. 488, 503, 438).'}, 'context': {'type': 'string', 'maxLength': 8000, 'description': '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': {'enum': ['asterisk', 'freeswitch', 'kamailio', 'opensips', 'freepbx', 'yate', 'cisco-cube', 'ribbon', 'oracle-acme', 'audiocodes', 'cisco-cucm', 'avaya', 'mitel', 'metaswitch', '3cx', 'nec', 'twilio', 'telnyx', 'bandwidth', 'bandwidth-bxf', 'vonage', 'plivo', 'signalwire', 'aws-chime', 'didww', 'voxbone', 'genband', 'cisco-bts', 'teams', 'zoom-phone', 'ringcentral', 'webex-calling', 'eight-by-eight', 'polycom', 'yealink', 'cisco-phone', 'grandstream', 'snom', 'linphone', 'microsip', 'bria', 'zoiper', 'jssip', 'sip-js', 'stir-shaken'], 'type': 'string', 'description': 'Vendor slug to filter the RAG search (e.g. "kamailio", "freeswitch", "twilio"). Strongly recommended.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['number'], 'properties': {'number': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'Phone number in any common form. E.164 (+CCNNNâ\x80¦) is preferred; 10-digit US numbers are accepted as a convenience.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['headerB64', 'payloadB64', 'signatureB64'], 'properties': {'rcdi': {'type': 'object', 'description': 'Full `payload.rcdi` claim. The validator looks up `/icn` first (RFC 9795 §6.1 spec form), then falls back to the legacy `icn` key (still seen in the wild). A legacy hit produces a `rcdi-pointer-form` warning unless `strictRfc9795: true` (then it fails).', 'additionalProperties': {'type': 'string'}}, 'iconUrl': {'type': 'string', 'format': 'uri', 'description': 'RCD icon URL - `payload.rcd.icn`. Omit if no Rich Call Data icon.'}, 'infoUrl': {'type': 'string', 'format': 'uri', 'description': 'Cert URL from the SIP Identity header `info=` param (or the JWT `x5u`). If omitted, signature verification is skipped.'}, 'headerB64': {'type': 'string', 'minLength': 1, 'description': 'Base64url-encoded JWS protected header (the first dot-separated segment).'}, 'payloadB64': {'type': 'string', 'minLength': 1, 'description': 'Base64url-encoded JWS payload (the second segment).'}, 'signatureB64': {'type': 'string', 'minLength': 1, 'description': 'Base64url-encoded ES256 signature (the third segment, raw R||S, 64 bytes).'}, 'strictRfc9795': {'type': 'boolean', 'description': "When true, reject the legacy `rcdi['icn']` key as a hard failure rather than warning. Default false."}, 'expectedIconHash': {'type': 'string', 'description': 'Pre-extracted icon hash, e.g. `sha256-XYZ` (RFC 9795 §6.1 form `<algorithm>-<base64>`). Pass this OR `rcdi`.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'vendor': {'enum': ['asterisk', 'freeswitch', 'kamailio', 'opensips', 'freepbx', 'yate', 'cisco-cube', 'ribbon', 'oracle-acme', 'audiocodes', 'cisco-cucm', 'avaya', 'mitel', 'metaswitch', '3cx', 'nec', 'twilio', 'telnyx', 'bandwidth', 'bandwidth-bxf', 'vonage', 'plivo', 'signalwire', 'aws-chime', 'didww', 'voxbone', 'genband', 'cisco-bts', 'teams', 'zoom-phone', 'ringcentral', 'webex-calling', 'eight-by-eight', 'polycom', 'yealink', 'cisco-phone', 'grandstream', 'snom', 'linphone', 'microsip', 'bria', 'zoiper', 'jssip', 'sip-js', 'stir-shaken'], 'type': 'string', 'description': 'Vendor slug. Omit and supply `configText` to auto-detect.'}, 'configText': {'type': 'string', 'maxLength': 2000000, 'description': 'Optional config blob. When supplied, items with matching signals are marked as present; vendor is auto-detected if not supplied.'}, 'filenameHint': {'type': 'string', 'maxLength': 200, 'description': 'Optional filename ("kamailio.cfg", etc.) to bias auto-detection.'}}, 'additionalProperties': False}
Modifications récentes des outils
Serveurs MCP similaires
Courier
Provides notification delivery infrastructure for users, tenants, lists, templates, preferences, journeys, automations, brands, a…
FlowCastle
Enables users to build, edit, and deploy Telegram bots through FlowCastle’s hosted visual workflow platform.
Postmark
Provides Postmark email delivery monitoring, including outbound messages, raw message details, delivery statistics, bounces, and …
MinuteMail
Provides temporary mailboxes, simulated inbound email, attachments, custom-domain verification, and mock OAuth identities for tes…
Slack channel name shape, value discarded
Checks the shape of Slack channel names without accessing Slack, alongside generic developer validation utilities.
E.164 shape, number discarded
Validates the shape of E.164 phone numbers without retaining the number.
mailto: shape, address discarded
Validates the shape of a mailto URI.
Slack Webhook Shape
Validates the shape of Slack webhook URLs without retaining secrets, alongside generic developer validation utilities.