Skip to main content
Glama

Server Details

SIP/VoIP/telecom grounding for AI agents: vendor docs, RFCs, STIR/SHAKEN, traces, configs.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cmendes0101/sipflow-cursor-plugin
GitHub Stars
0
Server Listing
sipflow

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 22 of 22 tools scored.

Server CoherenceA
Disambiguation4/5

Most tools have clearly distinct purposes. The only notable overlap is between detect_sip_stack and detect_sip_vendor_from_config, which could cause confusion. Otherwise, each tool covers a unique aspect of SIP debugging.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., compare_sdp_offer_answer, detect_sip_stack, validate_stir_shaken_identity). No mixing of styles.

Tool Count4/5

22 tools is slightly above the typical 3-15 range, but each tool serves a specific and necessary function for comprehensive SIP debugging. The count is justified by the server's broad scope.

Completeness4/5

The tool set covers a wide range of SIP debugging tasks: parsing, diffing, DNS, STIR validation, config review, codec comparison, etc. Minor gaps exist (e.g., no dedicated RTP analysis tool), but core workflows are well-supported.

Available Tools

22 tools
compare_sdp_offer_answerCompare an SDP offer/answer pair (RFC 3264)A
Read-only
Inspect

[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 asymmetry, missing DTLS fingerprints when DTLS-SRTP is negotiated, ICE asymmetry, and fax reinvite mismatches (e.g. offer m=image udptl t38 answered with audio-only, or T38FaxVersion / T38FaxMaxBuffer / T38FaxRateManagement drift).

Use when the user has both halves of a negotiation and is debugging 488 Not Acceptable Here, no-audio, one-way-audio, or a failed T.38 reinvite (488 / 415 / 606 on a m=image offer).

Pair with: parse_sdp to inspect either side in isolation; search_sip_docs(vendor=...) to ground vendor-specific fixes (FreeSWITCH mod_spandsp, Cisco CUBE fax protocol t38); lookup_response_code(488) for the static SIP-side context.

ParametersJSON Schema
NameRequiredDescriptionDefault
offerYesSDP offer body.
answerYesSDP answer body.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description starts with '[cost: free (pure CPU, no network) | read-only]', adding non-obvious details beyond the readOnlyHint annotation, such as no network calls and CPU-only operation. It also discloses the exact checks it performs (DTLS setup-role conflicts, ICE asymmetry, fax reinvite mismatches), making its analysis behavior transparent. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it opens with the core diff function, lists concrete issue categories, then gives usage scenarios and complementary tools. While somewhat long, every sentence serves a purpose—no filler. The cost/read-only prefix is slightly redundant with annotations but adds specific context (pure CPU, no network).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description compensates by enumerating issue categories and linking them to failure symptoms (488, no-audio, T.38 reinvite failures), giving a clear expectation of diagnostic output. It doesn't specify the return format, but the scope of analysis is well defined for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions 'SDP offer body.' and 'SDP answer body.' Baseline is 3. The description adds no additional parameter-level syntax or constraints beyond the schema, but it contextualizes the offer/answer pair within RFC 3264 negotiation, which is marginal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb+resource: 'Diff a SIP/SDP offer and answer'. It then lists specific analysis dimensions (codec intersection, direction compatibility, DTLS roles, etc.), which distinguishes it from siblings like parse_sdp. The 'Pair with' note explicitly names parse_sdp as an alternative for inspecting each side in isolation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage scenarios: 'Use when the user has both halves of a negotiation and is debugging 488 Not Acceptable Here, no-audio, one-way-audio, or a failed T.38 reinvite...' It also conditions on having both halves, and names complementary tools for single-side inspection and vendor-specific fixes, effectively differentiating when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_sip_stackDetect SIP stack / vendor from a trace OR a configA
Read-only
Inspect

[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 signatures (loadmodule, route blocks, [transport-*] sections, <profile name=>, etc.).

Returns a vendor slug (e.g. "kamailio", "freeswitch", "asterisk", "twilio", "cisco-cube") aligned with the vendor filter on search_sip_docs, so you can pipe the output of this tool directly into a follow-up doc search.

Pair with: search_sip_docs(vendor=<slug>, ...) for grounded vendor docs; review_sip_config when the input is a config and you also want extracted modules + risk flags; troubleshoot_response_code(vendorHint=<slug>, ...) when chasing a status code.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWhat the input is. "trace" looks at SIP headers only, "config" runs vendor-config heuristics, "auto" tries trace first then falls back to config detection.auto
textYesRaw SIP trace text OR a vendor config blob.
filenameHintNoOptional filename (e.g. "kamailio.cfg", "pjsip.conf"). Strongly improves config-mode detection when supplied.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint annotation by specifying 'cost: free (pure CPU, no network)' and explaining detection methods (structural signatures for configs, headers for traces). It also explains the 'auto' mode's fallback behavior. However, it doesn't disclose potential error cases or limitations, but the annotation already signals safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It opens with the cost/read-only note, clearly states the purpose, lists supported input types in a compact list, and then offers concise pairing suggestions. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description adequately explains the return value (vendor slug) and provides examples of slugs. It also contextualizes the output by noting its alignment with the 'vendor' filter. It slightly lacks discussion of when the tool might fail or return unknown, but for a detection tool this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description adds some context about input types (trace/config) and examples, but doesn't significantly enhance parameter understanding beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's action ('Identify the SIP product behind a piece of input') and its scope (trace or config). It distinguishes itself from the sibling 'detect_sip_vendor_from_config' by covering both trace and config, and differentiates from 'review_sip_config' by focusing on vendor detection rather than modules/risk flags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool (for traces or configs), and pairs it with alternatives: 'search_sip_docs(vendor=<slug>)' for doc search, 'review_sip_config' when config details are needed, and 'troubleshoot_response_code(vendorHint=<slug>)' for status codes. This gives clear guidance on choosing this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_sip_vendor_from_configDetect SIP vendor from a config fileA
Read-only
Inspect

[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 'what is this config?' or attaches a SIP config file. Detect-only - does not extract directives or flag risks.

Pair with: review_sip_config for the structured outline + risk flags; search_sip_docs(vendor=<slug>, ...) to ground each directive.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesConfig blob (UTF-8 plaintext).
filenameHintNoOptional filename ("kamailio.cfg", "pjsip.conf", "sofia/external.xml") to bias detection.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds valuable context: 'cost: free (pure CPU, no network)' and 'read-only'. It also discloses the heuristic nature, expected return fields, and limitations ('detect-only', does not extract directives or flag risks). This goes well beyond structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with cost/read-only context. Each sentence adds substantive value: purpose, output, usage, and tool pairings. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description is complete enough. It covers what the tool does, what it returns, when to use it, and how it relates to sibling tools. Even without an output schema, the return fields are specified. The cost/network behavior adds essential context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% description coverage for both parameters, so the baseline is 3. The description implicitly refers to the config blob input ('attaches a SIP config file') and mentions structural signals like 'loadmodule syntax, route blocks, profile elements', but does not significantly enhance parameter semantics beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: detect a SIP vendor from a config file, returning the vendor slug, confidence level, and structural signals. It explicitly distinguishes itself from the sibling `detect_sip_stack` by being a 'heuristic-only sibling scoped to vendor configs', and clarifies it does not extract directives or flag risks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Use this when the user asks "what is this config?" or attaches a SIP config file.' It also explains pairing with `review_sip_config` and `search_sip_docs`, and explicitly states what the tool does NOT do, setting clear boundaries vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_sip_messagesStructurally diff two SIP messagesA
Read-only
Inspect

[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/new value), duplicated (single header → many), de-duplicated, whitespace-only-change, parameter-reorder (Via params, From tag), and body-changed. SDP bodies on both sides are delegated to compareSdp for codec / DTLS / ICE diffs.

Use FIRST when the user has two captures or two log lines that should be carrying the same message and wants to know what an intermediate proxy / SBC / B2BUA changed. Far more reliable than visual inspection.

Pair with: parse_sip_message to inspect either side in isolation; lint_sip_request if the diff reveals the downstream side became malformed; search_sip_docs(vendor=<intermediate>) once you know which hop's behavior is the source of the change.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterYesSIP message as observed at the *downstream* hop (e.g. what Kamailio believes it received).
beforeYesSIP message as observed at the *upstream* hop (e.g. what FreeSWITCH believes it sent).
labelAfterNoDisplay label for the downstream side. Default "after".after
labelBeforeNoDisplay label for the upstream side. Default "before".before
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, but description adds 'cost: free (pure CPU, no network) | read-only, no persistence' and details internal behavior like delegating SDP to compareSdp. This is genuinely useful context beyond annotations, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although longer than minimal, every sentence earns its place: it opens with cost/read-only tag, then a concise functional summary, followed by explicit usage guidance and sibling pairings. The structure is front-loaded and scannable with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex (diff categories, SDP delegation, hop semantics), but the description covers all essential behavioral aspects without an output schema. It explains the diff output categories, edge cases like parameter reordering, and the delegation to compareSdp, making it self-sufficient for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter already has a clear description (e.g., 'before' and 'after' with hop directions). The description reinforces this with examples but does not add significant new parameter-specific meaning beyond the schema's coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Take two SIP messages ... and surface a structured per-header diff' with specific categories (added, removed, mutated, etc.). It distinguishes from siblings by naming exact alternatives and when to use them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('when the user has two captures or two log lines that should be carrying the same message'), and provides direct alternatives and pairings: 'parse_sip_message to inspect either side in isolation; lint_sip_request if the diff reveals the downstream side became malformed; search_sip_docs(vendor=<intermediate>)'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dns_diagnose_sip_targetRFC 3263 NAPTR/SRV/A walk + sips TLS cert diagnostic for a SIP targetA
Read-only
Inspect

[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 hostname ("example.com"), or "host:port" string, return the records that exist and the resolution ladder a UA would try.

When the queried target uses TLS (sips: URI, transport=tls/wss, or any _sips._tcp SRV record), the tool also performs a TLS handshake against each resolved sips target and reports the negotiated TLS version + cipher, the leaf certificate's subject / issuer / SANs / validity, the chain length and whether it validates against Node's default trust store, plus two cert-domain checks: RFC 5922 §7.2 strict (cert must cover the original SIP domain) and a lenient SAN match against the SRV target hostname.

SIP liveness: DNS resolving and a TLS handshake succeeding do NOT prove the endpoint actually speaks SIP - a load-balanced node can accept TCP/TLS yet black-hole SIP. So the tool ALSO sends a real SIP OPTIONS keepalive to each resolved public IP across the relevant transports (UDP/TCP on 5060, TLS on 5061 / SRV port) and reports per-IP answered / timeout / refused. Any SIP response (even 405/403/404) proves the stack is alive on that IP. When a name resolves to multiple IPs it is treated as a load-balancer fan-out and each IP is probed individually, with a warning about the known failure modes of fronting stateful SIP/RTP with a cloud L4 LB (AWS NLB/ALB etc.): cross-zone-off targets that black-hole, the ~120s UDP idle timeout, and per-5-tuple hashing splitting signaling from media.

Egress safety:

  • Per-IP rate limited.

  • Hostnames that resolve only to RFC 1918 / loopback / link-local / documentation / multicast space are refused (SSRF guard).

  • Walk depth capped to prevent runaway NAPTR / CNAME chains.

  • TLS probes capped at 6 (host, port, ip) tuples per call, 5 s handshake timeout each, public-IP only (we connect to the resolved IP, not the hostname, so the system resolver cannot redirect us into private space).

  • SIP OPTIONS probes capped at 6 (ip, transport) tuples per call, 3 s timeout each, public-IP only; the request carries no SDP/body and an unroutable Via, and only the response status line is captured.

Use to diagnose:

  • "carrier doesn't answer" / "wrong port" / "TLS instead of UDP" routing puzzles

  • "DNS looks healthy but calls fail" - per-IP SIP OPTIONS surfaces nodes that resolve and accept the transport but never answer SIP (the decisive step for load-balanced / multi-IP targets)

  • "carrier rejects our target because no SRV is published" - when A/AAAA resolves but SRV is missing the tool synthesises a copy-pasteable suggested zone-record block pointing at the resolved canonical hostname

  • "TLS handshake works but cert isn't valid for the SIP domain" - RFC 5922 §7.2 compliance is checked separately from generic chain validation, since the SAN must cover the original SIP domain (not the SRV-redirected target)

ACL caveat: a SIP OPTIONS timeout can also mean the target authorizes inbound SIP by source IP whitelist on the trunk (Twilio, Telnyx, Bandwidth, …; see https://www.twilio.com/docs/sip-trunking/api/ipaccesscontrollist-resource) and is dropping our probe because our egress IP is not on the ACL. An answered result is conclusive (the node speaks SIP); a timeout is suggestive, not proof of a dead node - confirm reachability from the SBC itself.

Pair with: troubleshoot_response_code when 503 / 408 / 480 are involved; search_sip_docs(vendor=...) for carrier-specific routing docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesSIP URI ("sip:example.com"), "example.com:5060", or bare hostname ("example.com"). Userinfo is stripped before lookup.
transportNoTransport hint. "any" surfaces all NAPTR services; specific transports filter the SRV walk to that service.any
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses specific external behaviors: DNS queries to Cloudflare/Google, TLS handshakes, and SIP OPTIONS keepalives. It details rate limits (10/min, 200/day), SSRF protections, timeout caps (3s/5s), probe caps (6 tuples), and failure modes (load-balanced black-holing, UDP idle timeouts, per-5-tuple hashing). This far exceeds annotation-only transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear sections (cost, walk, TLS, SIP liveness, egress safety, use cases, ACL caveat, pairing). Every sentence serves a purpose given the tool's complexity; the front-loaded 'cost' and 'walk' lines immediately convey scope. While not brief, it is contextually concise—no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully informs what the tool returns: DNS records, resolution ladder, TLS certificate details, per-IP SIP OPTIONS outcomes, and even a suggested zone-record block. It also anticipates common diagnostic questions and explains how to interpret inconclusive results (e.g., ACL timeouts vs. dead nodes). The description is self-sufficient for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has full coverage (target and transport with detailed descriptions). The tool description adds extra meaning by explaining that 'any' surfaces all NAPTR services while specific transports filter the SRV walk, and by tying transport to TLS triggering conditions (sips:, transport=tls/wss, _sips._tcp SRV). This adds value beyond the enum/default descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: a DNS resolution walk following RFC 3263 (NAPTR → SRV → A/AAAA), plus TLS certificate diagnostic and SIP OPTIONS liveness probes for a SIP target. It distinguishes itself from siblings by focusing on SIP DNS/lifecycle diagnostics, and explicitly names companion tools like troubleshoot_response_code and search_sip_docs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit 'Use to diagnose' section listing concrete scenarios (e.g., 'carrier doesn't answer', 'DNS looks healthy but calls fail') and even includes a 'Pair with' recommendation naming sibling tools and when to use them. It also clarifies a key caveat (ACL-based timeouts) that prevents misinterpreting results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_sipflow_shareHydrate a Sipflow share link into the conversationA
Read-only
Inspect

[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 prior AI analysis attached to it in a single round trip. Use this whenever a user pastes a /share/<token> URL: the tool fetches the redacted trace text, the AI executive summary / root-cause / remediation steps (if present), and metadata (vendor, filename, source format, pseudonymized flag), so the agent can review the trace alongside the user's own configs without manual download + paste.

In addition to the AI output, the response includes rule-based diagnostics: detected issues (severity-tagged SIP/SDP/media problems with RFC references), WebRTC signal checklist scores, multi-leg call correlation (Session-ID grouping), and detected SIP stacks (User-Agent/Server header values). These diagnostics are computed at share-creation time; for older shares without persisted diagnostics, the tool parses the trace on the fly.

When the share includes media quality data (from PCAP-sourced captures), the response includes per-call MOS/jitter/loss summaries in the text output and full mediaQuality stats in structuredContent. If hasRawCapture is true, the sharer included their original PCAP for full RTP playback on the web UI - this raw binary is not returned to agents.

Privacy: the share endpoint deliberately strips the original problem and architecture fields the sharer typed in (those may contain customer-internal context). This tool returns the same public projection - only the trace, the AI output, diagnostics, and basic metadata. Traces are pseudonymized by default (phone numbers / IPs / Call-IDs replaced with consistent fakes); the pseudonymized field tells you whether the sharer opted to keep raw values.

Trace bytes are capped at 200kB (matching the budget the Sipflow AI worker uses). For very large captures the response sets trace.truncated=true - pair with minimize_sip_trace to compact further before passing to your own LLM, or with render_sip_ladder to visualize the call flow.

Pair with: review_sip_config to compare the shared trace against the user's own kamailio.cfg / pjsip.conf / FreeSWITCH XML; render_sip_ladder to draw the shared call flow inline; minimize_sip_trace if trace.truncated is true; troubleshoot_response_code for any failing transactions surfaced in the AI analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull Sipflow share URL. Example: "https://sipflow.dev/share/eyJqb2JJZCI6Ii4uLiJ9.abc123". The path must be /share/<token>; /api/share/... endpoints are not accepted.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint/openWorldHint annotations by detailing cost, rate limits, no persistence, privacy projection (stripped fields, pseudonymization), trace size cap with truncation flag, and that raw PCAP is not returned to agents. It also explains the dual behavior of using persisted diagnostics vs. parsing on the fly. This fully discloses behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded with a concise cost/read-only/rate-limit banner, then moves from core behavior to details and pairings. Every section serves a purpose for a complex tool; however, the length is substantial and some details (e.g., media-quality explanation) could be trimmed without losing essential guidance. Still well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description thoroughly inventories what the agent can expect: trace text, AI analysis, metadata, rule-based diagnostics, media quality stats, truncation, raw-capture exclusion, and privacy projection. It also gives practical next-step tool pairings, making the response complete enough for an agent to decide and act correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a detailed description for the url parameter (full URL, path must be /share/<token>, not /api/share). The tool description adds useful semantic context about accepted URL forms ('any sipflow.dev subdomain') and what the tool does with the URL, but the parameter itself is already well-covered by the schema. Baseline is 3, and the added subdomain detail and context raise it to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('load', 'fetch', 'hydrate') and clearly identifies the resource: a Sipflow share URL. It distinguishes the tool from siblings by stating its unique role: fetching shared SIP traces plus AI analysis in one round trip, and explicitly names sibling tools for different purposes (e.g., render_sip_ladder, review_sip_config).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use this whenever a user pastes a /share/<token> URL.' It also frames alternatives and complementary tools ('Pair with: review_sip_config... minimize_sip_trace... troubleshoot_response_code'), clarifying the tool's role relative to siblings. It does not need an explicit when-not because the positive trigger is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lint_sip_requestLint a raw SIP request for RFC complianceA
Read-only
Inspect

[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: headers in one request (RFC 3261 §7.3 / §20.20).

  • Missing CRLF between consecutive header lines (RFC 3261 §7.3).

  • ;tag= (or any other) parameter on P-Asserted-Identity / P-Preferred-Identity (RFC 3325 §9.1).

  • PASSporT orig.tn not matching the From caller TN (RFC 8224 §5).

  • PASSporT dest.tn not matching the To callee TN (RFC 8224 §5).

  • Non-canonical TN inside a PASSporT claim (RFC 8225 §5.2.1).

  • Branded display name in From with no ppt=rcd Identity header (CTIA BCID §5).

Use FIRST when chasing 422 / 400 Bad Request / 484 Invalid FROM on a single INVITE - these usually have a structural cause this tool catches mechanically.

Pair with: parse_sip_message for purely structural checks on any SIP message (responses included); validate_stir_shaken_identity for the cryptographic verdict on Identity headers; search_sip_docs({ sourceType: 'stir-shaken', ... }) to ground the explanation in RFC text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw SIP request text. Should start with the request line (e.g. `INVITE sip:...@... SIP/2.0`). Headers must be CRLF or LF separated.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds cost-free, no-network, no-persistence details, plus a list of specific failure modes it catches. It does not describe the output format in detail, but that is minor since it returns 'findings'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose, bulleted failure modes, and usage guidance. It is longer than minimal, but every section carries useful information; there is slight redundancy in the opening but not excessive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool of this complexity, the description covers input format, typical use cases, and related tools, making it self-sufficient for selection and invocation. The absence of an output schema is offset by the clear statement that it returns a list of findings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a well-described 'text' parameter, so the description doesn't need to add parameter details. It adds minimal context (typical INVITE use, header separator expectations already in schema) but doesn't go beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: running RFC compliance checks on a single raw SIP request and returning a list of findings. It uses a specific verb (lint) and resource (SIP request), and distinguishes itself from siblings by naming them with complementary roles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use first (chasing 422/400/484 on a single INVITE) and provides pairing alternatives for different needs (parse_sip_message, validate_stir_shaken_identity, search_sip_docs). This is a clear usage guide with both positive and negative cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_response_codeLook up a SIP response code (instant, RFC-cited)A
Read-only
Inspect

[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 failure).

USE FIRST when the user pastes or asks about any 3-digit SIP code - sub-millisecond, no API cost.

Pair with: troubleshoot_response_code for vendor-specific RAG hits beyond the static entry; lint_sip_request when the code is 4xx and the user has the offending request; stir_attestation_explainer for STIR-shaped codes (428/436/437/438/608); validate_stir_shaken_identity when the code is 438 and they have the JWS.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesSIP response code (e.g. 488 for Not Acceptable Here).
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds context beyond these: cost (free, pure CPU), no network, sub-millisecond performance, static nature, and the type of data returned (name, RFC anchor, category, etc.). It does not contradict annotations, and the added speed/cost details are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a cost/read-only tag, a single-sentence purpose, a clear 'USE FIRST' directive, and a compact paired-tools list. Every sentence serves a distinct purpose without verbose padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, single-parameter, read-only lookup with no output schema, the description is complete. It explains what the tool returns, when to use it, and how it relates to other tools. No additional behavioral or return-value detail is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents 'code' with type, range (100-699), and an example. The description adds marginal value by mentioning that the code maps to name/RFC category and gives a vendor-specific example (OpenSIPS 484), but these do not significantly extend the parameter's meaning beyond the schema's coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Instant static lookup of a SIP response code (100-699).' It clearly states the tool's scope and differentiates from siblings like troubleshoot_response_code (RAG hits) and lookup_sip_header (header lookup).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'USE FIRST when the user pastes or asks about any 3-digit SIP code.' It also lists paired tools with specific conditions (e.g., lint_sip_request for 4xx with offending request, validate_stir_shaken_identity for 438 with JWS), which fully covers when to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_sip_headerLook up a SIP header (RFC-cited)A
Read-only
Inspect

[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), cardinality (exactly-one / at-most-one / one-or-more / any), allowed/forbidden URI parameters with RFC citations, short description, and related headers.

USE FIRST when the user asks about a specific header they saw in a trace - sub-millisecond, no API cost. The cardinality + paramRules fields surface failure modes (e.g. two From: headers, ;tag= on P-Asserted-Identity) without needing a RAG round-trip.

Pair with: lint_sip_request to mechanically check a real request against these rules; search_sip_docs for vendor-specific or 3GPP P-headers not in the bundled registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHeader name (canonical, e.g. "Via", or compact, e.g. "v"). Case-insensitive.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, and the description adds cost and network behavior ('pure CPU, no network') and performance ('sub-millisecond'). It does not cover error handling or result formatting, but the added context is useful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a cost banner, core functionality, usage guidance, and pairing suggestions. Every sentence serves a purpose, and the length is appropriate given the lack of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one parameter and no output schema, the description fully enumerates the return fields, gives use-case examples, and points to complementary tools. It is comprehensive for the tool's complexity and leaves no critical gap for an agent deciding whether to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the name parameter thoroughly, including case-insensitivity and examples. The description reinforces this with additional examples of canonical and compact forms, adding practical context without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Instant lookup of a SIP header' and provides concrete examples, making the action and resource unmistakable. It distinguishes itself from sibling tools like lint_sip_request or search_sip_docs by focusing on the definitional lookup use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states 'USE FIRST when the user asks about a specific header they saw in a trace' and names specific alternative tools ('lint_sip_request', 'search_sip_docs') for checking or vendor-specific headers. This gives clear when-to-use and when-to-defer guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

minimize_sip_traceMinimize a SIP traceA
Read-only
Inspect

[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 format: raw SIP messages separated by blank lines, each starting with a request line (INVITE sip:...@... SIP/2.0) or status line (SIP/2.0 200 OK). PCAP-decoded text from sngrep / ngrep / tcpdump / tshark, syslog with SIP body, sipflow's own export format, or a hand-pasted INVITE/200 dialog all work. Annotation lines like # [timestamp] sender -> receiver or ngrep-style U <ip>:<port> -> <ip>:<port> between blocks are tolerated.

Safe to run on production traces - the input is processed in-memory and is not persisted or sent off-server.

Pair with: detect_sip_stack to identify the vendor, then search_sip_docs(vendor=...) for vendor-grounded analysis; render_sip_ladder to visualize the trace as a Mermaid call-flow ladder; lint_sip_request / parse_sip_message to mechanically validate any single message in the trace.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw SIP trace text. Multiple messages may be concatenated.
maxBytesNoTruncate the minimized output if it exceeds this many bytes (default 200000, matches Sipflow's analyze pipeline).
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, and description adds 'no persistence', 'not sent off-server', 'in-memory', and 'safe on production traces'. Also discloses exactly what is preserved/pruned, going beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with cost/read-only tag and single-sentence summary, but the input format paragraph is fairly long. All content earns its place given the tool's input complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema tool, the description fully covers input requirements, transformation behavior, safety, and integration with sibling tools. No missing critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters at 100%, and description adds input format details not in schema, such as accepted PCAP/syslog/sngrep formats and tolerated annotation lines. For maxBytes it reiterates truncation purpose but adds pipeline context; minor extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it reduces a raw SIP trace to compact form for LLM, preserving SDP and pruning noise. This distinguishes it from siblings like render_sip_ladder and parse_sip_message. The listed pairing also clarifies its niche.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Expected input format' enumerates accepted sources and tolerates annotation lines. Explicitly states when safe and pairs with detect_sip_stack, render_sip_ladder, lint/parse for analysis flow, giving both when-to-use and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_sdpParse an SDP body (RFC 8866)A
Read-only
Inspect

[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 plus the a=T38Fax* attribute family), and crypto attributes.

Useful for debugging WebRTC ↔ SIP interop (codec negotiation, DTLS-SRTP fingerprints, ICE candidate gathering, bundle alignment), and for inspecting fax negotiation (T.38 reinvite SDP, T38FaxMaxBuffer/T38FaxUdpEC/T38FaxRateManagement) without an LLM having to re-derive the SDP grammar each call.

Pair with: compare_sdp_offer_answer when the user has both halves of the negotiation (including T.30→T.38 reinvites); webrtc_sip_checklist for the bridge-config angle.

ParametersJSON Schema
NameRequiredDescriptionDefault
sdpYesSDP body - the section after the empty line in an INVITE/200/UPDATE.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already state readOnlyHint=true; the description adds value by disclosing cost ('pure CPU, no network'), reinforcing read-only behavior, and detailing the exact scope of parsing (including T.38 fax attributes). It does not cover error handling or edge cases, but for a read-only parser with annotations covering safety, this is solid context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a cost/read-only line, a concise first sentence, a 'Useful for' paragraph, and a 'Pair with' list. Every sentence earns its place, front-loading the purpose before usage context. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description thoroughly enumerates return fields, includes practical use cases, and names sibling tools for further analysis. It even covers niche fax (T.38) negotiation details, making it complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single 'sdp' parameter, already explaining it is the body after the empty line. The tool description does not add param-specific details beyond that, so the baseline 3 applies since the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Parse') and resource ('Session Description Protocol body') and enumerates the structured output fields (origin, session, timing, codecs, DTLS, ICE, fax-relay, crypto). It clearly distinguishes itself from siblings like compare_sdp_offer_answer and parse_sip_message by focusing on SDP payload parsing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'debugging WebRTC ↔ SIP interop' and 'inspecting fax negotiation' without re-deriving SDP grammar. It names sibling tools for related scenarios: compare_sdp_offer_answer for both halves, webrtc_sip_checklist for bridge-config. This provides clear when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_sip_messageStructurally parse a single SIP messageA
Read-only
Inspect

[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 (missing-crlf, tag-on-pai, tag-on-ppi, invalid-folding, duplicate-single-instance, content-length-mismatch).

Use FIRST when the user pastes a single INVITE / 200 / NOTIFY and asks 'what does this look like to a parser?' or 'is this even valid?'. The output makes header-level bugs (two From: headers, ;tag= on PAI/PPI, missing CRLF between headers, broken Identity folding) obvious without an LLM having to scan visually.

Pair with: lint_sip_request for the full RFC compliance suite (request only); diff_sip_messages to compare two parsed messages structurally; validate_stir_shaken_identity if the message carries an Identity header.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw 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.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'read-only, no persistence' and adds cost-free/pure CPU/no-network details. It also discloses the structural flags the parser detects, which is valuable behavioral context beyond the annotations. No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a cost/read-only prefix, a detailed output summary, explicit usage guidance, and a pairing section. Every sentence is purposeful, and there is no wasted or redundant wording despite the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description enumerates the exact return elements: start line, headers in order with line numbers, body, duplicate-header counts, and a list of structural flags. It also names sibling tools and gives clear scope boundaries, making it fully complete for an agent to decide to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'text' has 100% schema description coverage, including max length and delimiter expectations. The tool description adds the context of 'single raw SIP message' but does not introduce new parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Parse a single raw SIP message (request OR response) and return a structured view', followed by detailed output components. It additionally distinguishes itself from siblings by naming lint_sip_request, diff_sip_messages, and validate_stir_shaken_identity as complementary tools with different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool ('Use FIRST when the user pastes a single INVITE / 200 / NOTIFY...') and gives concrete alternative tools for related tasks. This makes the selection decision unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_sip_ladderRender a SIP trace as a Mermaid call-flow ladderA
Read-only
Inspect

[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 default participants are keyed by IP, not ip:port, so an endpoint that sends from an ephemeral source port and listens on 5060 collapses into one column. Multi-port IPs list their ports in the participant label (e.g. 10.0.0.1 :5060,:53412) and arrows touching them get a (:srcPort→:dstPort) suffix. Pass groupByIp: false to restore the legacy one-column-per-ip:port layout.

Lane labeling: aliases are matched against (in order) ${ip}:${port} from message source/dest, then bare ${ip}, then top-Via host, then Contact host. The most-specific match wins. When no alias matches the renderer falls back to the peer's address rather than emitting unknown:5060.

Pair with: minimize_sip_trace first to compact a noisy trace; diff_sip_messages when two adjacent INVITEs in the ladder differ unexpectedly; lint_sip_request to validate a single message you pulled from the ladder.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw SIP trace text. Multiple messages may be concatenated.
callIdNoRender only this Call-ID. Required when the trace contains multiple calls; otherwise the only call is used.
aliasesNoFriendly lane labels. Match order: exact "ip:port" → bare "ip" → top-Via host (with or without port) → 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"}`.
compactNoDrop OPTIONS keepalives and retransmissions. Hidden counts are summarized in a `Note over` line.
groupByIpNoCollapse 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.
maxMessagesNoHard cap on rendered arrows. Extra messages produce a truncation note. Hard ceiling is 200.
includeTimingNoAppend `+Nms` (delta from previous arrow) to each arrow label.
groupRetransmitsNoCollapse adjacent identical retransmissions on the same direction into a single arrow + `Note over: xN over Tms`. Independent of `compact` (which drops them entirely).
splitOnNewBranchNoEmit a `--- failover to <ip[:port]> ---` separator before any request sent to a previously-unseen destination. Useful when the trace fails over between gateway IPs.
highlightFailuresNoBold the first non-1xx final response per request leg (CSeq) so the failure jumps out in the ladder.
correlationHeadersNoHeader 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"]`.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true; the description reinforces this with '[cost: free (pure CPU, no network) | read-only]'. Beyond annotations, it discloses rich behavioral details: lane keying by IP (not ip:port), merging ephemeral ports, port suffix notation, alias matching precedence order, fallback to peer address rather than 'unknown:5060', truncation notes, hidden-count summarizing in compact mode, and failover separators. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence serves a purpose: cost/read-only, core function, rendering compatibility, lane keying rules, alias matching, and sibling-tool usage. It is logically structured with clear sections and front-loads the primary action. Despite its length, there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 params, no output schema), the description covers output format ('Mermaid sequenceDiagram block'), input parsing sources, edge-case behaviors (multi-port, aliases, truncation), and when to use related tools. It provides a thorough operational picture without needing an output schema to clarify results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Parameters already have detailed descriptions in the schema (e.g., groupByIp, compact, aliases). The main description adds some high-level context such as the alias matching order and groupByIp rationale, but largely repeats what the schema already captures. It does not significantly elevate parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Parse a raw SIP trace... and emit a Mermaid sequenceDiagram block visualizing the call flow.' It uses a specific verb ('Parse') and resource ('SIP trace' → 'Mermaid ladder'). It distinguishes itself from siblings through the 'Pair with' section naming related tools and their different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Pair with' paragraph gives explicit guidance on when to use alternative tools: 'minimize_sip_trace first to compact a noisy trace; diff_sip_messages when two adjacent INVITEs in the ladder differ unexpectedly; lint_sip_request to validate a single message you pulled from the ladder.' It also specifies when to change default behavior, e.g., 'Pass groupByIp: false to restore the legacy layout when you specifically need port-level granularity.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_sip_configGround-truth review of a SIP/VoIP config or repo fileA
Read-only
Inspect

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

  1. Detects the vendor from filename + structural signatures (loadmodule, route blocks, [transport-*] sections, <profile name=>, KEMI calls).

  2. Extracts a structured outline: loaded modules, modparams, listen lines, route blocks, profiles, gateways, dialplan extensions.

  3. Surfaces risk flags - e.g. websocket loaded without TLS, nathelper without rtpengine, chan_sip used in modern Asterisk, AND the Kamailio/OpenSIPS lump-vs-subst race (subst('/^From:.../...') colliding with KSR.hdr.append/remove or uac_replace_* or append_hf/remove_hf on the same header - corrupts the buffer at serialization).

  4. Returns a list of suggestedQueries for search_sip_docs so you can ground the actual review in vendor docs.

Pair with: one or more search_sip_docs calls (cite returned source_url values verbatim instead of recalling vendor behavior from memory); webrtc_sip_checklist when the config is a WebRTC ↔ SIP bridge.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe full config blob (or a representative excerpt). UTF-8 plaintext.
vendorHintNoSkip auto-detection and force a specific vendor. Use when the heuristics return low confidence or the wrong vendor.
filenameHintNoOptional filename or path (e.g. "kamailio.cfg", "etc/asterisk/pjsip.conf", "sofia/external.xml"). Strongly improves vendor detection.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses additional behavioral traits: 'pure CPU, no network', free cost, a four-step internal workflow, and the specific high-risk race condition it flags (lump-vs-subst). It also explains that it returns suggestedQueries for grounding reviews in vendor docs, which is significant behavioral context not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear trigger statement, a numbered workflow, and a pairing note. Every sentence contributes operational or contextual value: cost/read-only status, when to use, what the tool does, and how to integrate with sibling tools. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex config-review tool with no output schema, the description thoroughly conveys what the user can expect: a structured outline of loaded modules/routes/profiles, risk flags with specific examples, and a list of suggestedQueries. It also covers the filenameHint/vendorHint usage context through the detection step and pairing guidance. This is sufficient for an agent to invoke the tool and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with 100% coverage, including descriptions for text, vendorHint, and filenameHint. The description adds minimal parameter-specific value beyond schema, though step 1 references filename+structural signatures aligning with filenameHint. Baseline 3 is appropriate because the schema does the heavy lifting and the description does not meaningfully enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool reviews SIP/VoIP config files, enumerates specific file types and vendors, and explicitly lists what it does (detect vendor, extract outline, surface risk flags, return suggestedQueries). It also distinguishes itself from siblings like detect_sip_vendor_from_config by focusing on full config review, not just vendor detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit trigger phrases ('review my config') and example files, and recommends pairing with search_sip_docs and webrtc_sip_checklist for specific cases. However, it does not explicitly state when NOT to use this tool or contrast with the highly similar detect_sip_vendor_from_config sibling, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sip_docsSearch SIP / VoIP documentation (RAG)A
Read-only
Inspect

[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/9027/9795), branded-calling guidance (ATIS-1000074/094/084, CTIA Branded Calling ID), and fax-over-IP references (RFC 3362 image/t38, RFC 6913 ipfax-info, RFC 7345 UDPTL, SpanDSP/HylaFAX, Asterisk res_fax/udptl.conf, FreeSWITCH mod_spandsp/t38_gateway, Cisco CUBE T.38).

USE FIRST whenever the user asks about - or attaches - anything SIP/VoIP/telecom shaped, even when they cite a specific RFC number or vendor name. The corpus has the current text and your training data may not. Trigger conditions: vendor configs (kamailio.cfg, sip.conf, pjsip.conf, FreeSWITCH XML profile, opensips.cfg, res_fax.conf / udptl.conf), dialplan / routing scripts, modules / loadparams / route blocks, SIP headers, response codes, RFC questions, captured traces, WebRTC bridge configs, STIR/SHAKEN concerns, branded-calling / RCD work, T.38 / T.30 fax decoding or reinvite failures.

Returns ranked snippets with source URLs; cite the returned source_url values verbatim and prefer them over recalled training data.

Examples of when to use:

  • "does this kamailio.cfg look standard for WebRTC + SIP users?"

  • "why would Asterisk PJSIP reject this re-INVITE?"

  • "what does Kamailio's loose_route() do? show me docs"

  • "explain FreeSWITCH session-timer behavior"

  • "how do I set up STIR/SHAKEN signing on OpenSIPS?"

  • "what does ATIS-1000074 say about A-level attestation?"

  • "RFC 9795 rcdi JSON pointer canonical form"

  • "CTIA Branded Calling ID requirements for originating SP"

  • "RFC 8225 PASSporT canonical JSON / lexicographic key ordering"

  • "why is my T.38 reinvite getting 488 from a Cisco CUBE?"

  • "Asterisk res_fax_spandsp ECM and rate-management knobs"

  • "what are the required SDP attributes for m=image udptl t38?"

Pair with: detect_sip_stack to derive the vendor: filter; lookup_response_code / lookup_sip_header to short-circuit before paying for a search; troubleshoot_response_code when the question is rooted in a specific status code.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of snippets to return (1-15).
queryYesNatural-language question or keywords. Be specific - include vendor name, header, error code, module, or RFC if known. Multi-sentence queries are fine.
vendorNoRestrict results to a single vendor/stack (e.g. "asterisk", "kamailio"). Omit to search all vendors.
sourceTypeNoRestrict 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.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the description adds meaningful extra context: cost (one embed + one vector search), network direction (outbound to embed model only), return behavior (ranked snippets with source URLs), and an instruction to cite source_url verbatim. It also warns that the corpus has current text that training data may not, adding important reliability context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence is information-dense. It is front-loaded with a cost/network/read-only summary, then organized into corpus scope, trigger conditions, return behavior, examples, and tool-pairing guidance. The structure makes the length justified for a tool with many trigger categories and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a RAG search tool with no output schema, the description fully covers what is searched, when to use it, what it returns, and how to cite sources. It also references alternative tools and the optional vendor filter, leaving no obvious gaps for an agent to misuse the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description doesn't need to restate parameter meanings. It adds only mild context, such as using detect_sip_stack to derive the vendor filter and illustrating query specificity with examples, but the schema already instructs users to include vendor/header/code/RFC. Baseline 3 is appropriate because the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Vector search over Sipflow's curated VoIP knowledge base' and enumerates the corpus (vendor docs, RFCs, STIR/SHAKEN, branded-calling, fax-over-IP). It clearly distinguishes this RAG search from sibling lookup tools by stating 'USE FIRST whenever the user asks about - or attaches - anything SIP/VoIP/telecom shaped' and naming alternatives in the Pair-with line.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit 'USE FIRST whenever' guidance plus extensive trigger conditions: vendor configs, dialplan/routing scripts, SIP headers, response codes, RFC questions, captured traces, STIR/SHAKEN, and T.38 fax issues. It also provides 13 concrete examples and explicitly says to pair with detect_sip_stack, lookup_response_code/lookup_sip_header to short-circuit, and troubleshoot_response_code for status-code-rooted questions, covering when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sip_ladder_exampleCanonical SIP scenario as a Mermaid ladderA
Read-only
Inspect

[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: basic-call, auth-challenge, cancel-before-answer, early-media, hold-resume, refer-blind, proxy-with-record-route, shaken-attested-invite, bye-glare, redirect-302.

Pair with: search_sip_docs for vendor-specific quirks of the scenario; render_sip_ladder if the user does have a real trace.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoAlso include the scenario's long Markdown explanation. Useful when the LLM is going to teach the user; off by default to keep responses small.
scenarioYesWhich 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.
actorNamesNoOverride the default actor display names (Alice/Bob/Proxy). Maps to the first/second/third lane in left-to-right order.
includeExplanationNoAppend a bulleted **Notes** section with RFC references for each step.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint annotation: '[cost: free (pure CPU, no network) | read-only]' and notes it is hand-curated. This gives the agent useful constraints about side effects and resource usage without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured. It front-loads cost/read-only info, states the output, gives usage context, lists scenarios, and pairs with sibling tools—all in a few sentences with zero fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the return value (Mermaid sequenceDiagram + bullet list with RFC references). It covers usage scenarios, available options, and alternatives. Combined with the rich input schema, the description is fully sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds the list of available scenarios (also in the enum) but does not provide substantial extra meaning for any parameter. Baseline 3 applies; schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Return a hand-curated SIP scenario as a Mermaid sequenceDiagram plus a bullet list of step-by-step explanations with RFC references.' It clearly distinguishes from siblings by explicitly pairing with render_sip_ladder for real traces and search_sip_docs for vendor quirks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance is provided: 'Use this when the user asks "show me what X looks like" and you don't have a real trace handy.' It also names alternatives and when to use them, giving clear when/when-not direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stir_attestation_explainerExplain STIR/SHAKEN attestation levels and codesA
Read-only
Inspect

[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 causes.

Provide either attestation (A/B/C) or code (e.g. 438).

Pair with: validate_stir_shaken_identity when the user has the JWS segments and wants the cryptographic verdict; search_sip_docs({ sourceType: 'stir-shaken', ... }) for ATIS / CTIA / RFC depth.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoSIP response code commonly seen in STIR/SHAKEN flows (428, 436, 437, 438, 608).
attestationNoAttestation level: "A" Full / "B" Partial / "C" Gateway.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds 'cost: free (pure CPU, no network)' and 'static' to reinforce non-mutating behavior, plus details about mapping to RFC anchors and operator causes. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a cost/read-only note, a clear statement of what the tool does, an input instruction, and pairings with alternatives. It is front-loaded and every segment earns its place, staying compact without sacrificing useful details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers inputs, purpose, and relationship to siblings, which is sufficient for an agent to decide when to invoke it. Minor gap: no output format is described, but for a static explainer with no output schema this is not a significant deficiency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with both parameters described ('Attestation level: A Full / B Partial / C Gateway' and 'SIP response code commonly seen in STIR/SHAKEN flows'). The description adds the either/or usage rule and RFC 8588 context, but the schema already carries the core meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a 'static explainer' that maps attestation levels (A/B/C) and SIP codes to plain-English explanations. It distinguishes from siblings by explicitly noting it is not a validator and pairing it with validate_stir_shaken_identity for cryptographic verdicts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance: 'Provide either attestation or code' and names two sibling tools with specific use cases (validate_stir_shaken_identity for JWS verification, search_sip_docs for ATIS/CTIA/RFC depth). Lacks explicit 'do NOT use when' exclusions, but the pairings effectively communicate scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_sipflow_feedbackSubmit feedback about Sipflow tools, docs, or coverageAInspect

[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 incomplete

  • tool_bug: a tool errored, returned garbage, or behaved unexpectedly on a real input

  • wrong_answer: the answer it produced was incorrect for the SIP/VoIP question asked

  • feature_request: a new tool, dataset, or behavior the user wants

  • general: anything else

PRIVACY CONTRACT (MUST FOLLOW):

  1. Use this tool only when the user explicitly asks to send feedback, OR when you have completed the user's primary task and there is a clear, actionable gap worth reporting.

  2. ALWAYS show the user the exact summary + details + other fields you plan to send and wait for an explicit yes before calling this tool. Set userConsent: true only after that confirmation.

  3. NEVER include raw SIP traces, INVITE/REGISTER bodies, SDP, phone numbers, IP addresses, Call-IDs, or any other PII. Summarize in your own words instead. The server runs a sanitizer as a backstop, but you are the first line of defense.

  4. The contact field is optional and may only be filled when the user explicitly provides an email and asks you to include it.

  5. The traceExcerpt field is optional and accepts a sanitized SIP message text block (Via/From/To/Call-ID, optional minimal SDP) the user explicitly approved attaching. Pipe minimize_sip_trace output here, NEVER raw INVITE / REGISTER bodies or full pcap text. Phone numbers, IPs, and emails are scrubbed server-side as a backstop; the agent must still summarize / minimize first. The same userConsent: true covers both the text fields and the excerpt - if the user wants the excerpt included you must show it to them before sending.

The tool returns a ticket id (fb_xxxxxxxx) and stores one anonymous row keyed by your daily-rotating IP hash (no raw IP, no account). Rate-limited at 3/min and 20/day per IP hash.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactNoOptional email the user can be reached at. Only include when the user explicitly provides one and asks you to attach it.
detailsNoLonger description: what the user was trying to do, what happened, what they expected. PII-free.
summaryYesShort one-line description of the feedback. Will be shown to humans triaging. PII-free.
categoryYesBucket. 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.
relatedToolNoName of the Sipflow MCP tool the feedback relates to, if any (e.g. `search_sip_docs`, `troubleshoot_response_code`).
userConsentYesMUST 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.
relatedQueryNoThe search query / question that failed or returned poor results. PII-free.
traceExcerptNoOptional 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.
vendorOrTopicNoVendor slug, RFC number, or topic the feedback relates to (e.g. 'freeswitch', 'RFC 3261', 'fax-over-IP').
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond annotations by disclosing cost ('write (single MongoDB row)'), rate limits ('3/min, 20/day per IP hash'), storage behavior ('anonymous row keyed by daily-rotating IP hash'), return value ('ticket id (fb_xxxxxxxx)'), and a server-side sanitizer backstop. It also details the privacy contract, including when userConsent is required. This is rich behavioral context that the annotations alone ('readOnlyHint: false, idempotentHint: false') do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every section earns its place. It front-loads the core purpose and cost/rate line, then uses structured headers, numbered privacy rules, and bullet-point categories. The layout makes complex consent requirements easy to follow, and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully explains the return value (ticket id), rate limits, data retention, category taxonomy, and the step-by-step consent workflow. It covers all operational and safety aspects an agent needs to invoke this tool correctly, making it exceptionally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema covers 100% of parameters, the description adds meaningfully to parameter semantics. For example, it instructs to 'Pipe minimize_sip_trace output here' for traceExcerpt, mandates that userConsent 'must be set only after you have shown the user the exact payload above and they have confirmed', and restricts contact to when 'the user explicitly provides an email and asks to include it'. These operational guidelines exceed the schema descriptions and are essential for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with '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' – a specific verb, resource, and scope. It clearly distinguishes this tool from all sibling analysis tools by being the only feedback submission tool, and enumerates feedback categories to further clarify intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: only when the user explicitly asks to send feedback, or after completing the primary task with a clear actionable gap. It also provides category selection criteria (docs_gap, tool_bug, wrong_answer, feature_request, general) and includes explicit exclusions such as not including raw PII and waiting for consent. This is comprehensive guidance with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

troubleshoot_response_codeTroubleshoot a SIP response code (RAG, vendor-aware)A
Read-only
Inspect

[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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesSIP response code (e.g. 488, 503, 438).
contextNoOptional 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.
vendorHintNoVendor slug to filter the RAG search (e.g. "kamailio", "freeswitch", "twilio"). Strongly recommended.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=true, openWorldHint=true), the description discloses cost (rag: one embed + one vector search), read-only nature, outbound network only to embed model, rate-limited per IP, and how vendor-specific reason phrases are folded into the embed query. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a leading cost/read-only line, a core behavior sentence, a use-case paragraph, and a pairing list. Every sentence adds distinct value; length is justified by the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must explain return behavior, which it does (static RFC entry plus RAG hits). It also covers cost, network, rate limits, use cases, and pairings. Minor gap: no explicit output format or number of hits, but otherwise comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds some context on how vendorHint and context influence the RAG query (folded into embed), but mostly reinforces the schema's existing semantics, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the static RFC entry plus vendor-specific RAG hits for a SIP response code, and distinguishes it from sibling `lookup_response_code` by highlighting the augmented RAG capability and the 'why did <vendor> reject this' use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use ('Use when the user asks why did <vendor> reject this with <code>?') and provides alternatives and pairings with specific sibling tools for different situations (e.g., `lint_sip_request` for 4xx, `compare_sdp_offer_answer` for T.38 reinvite SDP mismatch).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_e164_numberValidate / classify a phone number (E.164 + NANP)A
Read-only
Inspect

[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 tagged as toll-free / premium / personal / machine-to-machine / easily-recognizable / reserved / geographic.

Use when validating From / P-Asserted-Identity / SHAKEN orig.tn, deciding whether an outbound call needs full attestation, or sanity-checking caller ID format.

Pair with: lint_sip_request to validate that PASSporT orig.tn matches the From caller TN; stir_attestation_explainer for attestation level guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYesPhone number in any common form. E.164 (+CCNNN…) is preferred; 10-digit US numbers are accepted as a convenience.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true is reinforced and expanded with additional behavioral context: free CPU-only cost, no network, libphonenumber-js international coverage, NANP splitting and tagging categories. This goes well beyond the annotation and fully discloses the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with cost/read-only info and flows logically through purpose, use cases, and related tools. It is slightly longer than necessary, but every sentence adds value and it remains well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single-param tool with no output schema, the description provides substantial context: input formats, classification output categories, and use cases. It does not explicitly describe the return type or error behavior, which is a minor gap, but overall it is quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the `number` parameter is fully documented). The description does not add new parameter semantics beyond the schema, but it reiterates the input format. Baseline of 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Parse', 'normalize', 'classify') and resource (phone number in E.164 and NANP). It differentiates from sibling tools by emphasizing NANP-specific classification and its use in SIP/SHAKEN contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool (validating From/P-Asserted-Identity/SHAKEN orig.tn, deciding attestation needs, sanity-checking caller ID) and pairs it with related tools (lint_sip_request, stir_attestation_explainer), providing clear alternatives and complementarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_stir_shaken_identityValidate STIR/SHAKEN Identity JWTA
Read-only
Inspect

[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 payload.rcdi["/icn"] (RFC 9795 §6.1 spec form) and the legacy payload.rcdi["icn"] form deployed in the wild - the legacy form raises a warning unless strictRfc9795: true (then it fails). Returns per-check pass/fail/warning with details - useful for diagnosing 438 Invalid Identity Header rejections, expired certs, and tampered PASSporTs.

Pair with: stir_attestation_explainer for the human-readable A/B/C interpretation; lookup_response_code(438) for the SIP-side context; lint_sip_request for non-cryptographic structural checks on the host INVITE.

ParametersJSON Schema
NameRequiredDescriptionDefault
rcdiNoFull `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).
iconUrlNoRCD icon URL - `payload.rcd.icn`. Omit if no Rich Call Data icon.
infoUrlNoCert URL from the SIP Identity header `info=` param (or the JWT `x5u`). If omitted, signature verification is skipped.
headerB64YesBase64url-encoded JWS protected header (the first dot-separated segment).
payloadB64YesBase64url-encoded JWS payload (the second segment).
signatureB64YesBase64url-encoded ES256 signature (the third segment, raw R||S, 64 bytes).
strictRfc9795NoWhen true, reject the legacy `rcdi['icn']` key as a hard failure rather than warning. Default false.
expectedIconHashNoPre-extracted icon hash, e.g. `sha256-XYZ` (RFC 9795 §6.1 form `<algorithm>-<base64>`). Pass this OR `rcdi`.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, openWorldHint), the description discloses an external IO cost (HTTPS fetch of x5u cert), the read-only nature, specific edge-case behavior (legacy rcdi['icn'] form handling, strictRfc9795 warning/fail), and that it returns per-check pass/fail/warning. This adds significant behavioral context not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: it leads with a cost annotation, then a concise functional summary, followed by edge-case details, use-case rationale, and explicit sibling pairings. It is well-structured and front-loaded, with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool's complexity (8 params, no output schema), the description is thorough: it covers cost, safety, functionality, edge cases, diagnostics use cases, and companion tools. The input schema fully documents all parameters, so the description is complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (per context signals) and the schema already elaborately describes rcdi, strictRfc9795, expectedIconHash, and the B64 segments. The tool description adds no additional parameter-level meaning beyond what the schema states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Verify) and resource (SIP Identity: JWS) with detailed cryptographic operations: fetches x5u certificate, parses it, verifies ES256 signature, and validates RCD icon hash. It also differentiates from sibling tools by naming stir_attestation_explainer for A/B/C interpretation and lookup_response_code(438) for SIP context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when the tool is useful ('diagnosing 438 Invalid Identity Header rejections, expired certs, and tampered PASSporTs') and gives explicit alternatives to pair with: stir_attestation_explainer, lookup_response_code(438), and lint_sip_request. This provides clear when-to-use and when-to-use-other tools guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webrtc_sip_checklistWebRTC ↔ SIP interop checklist (config-aware)A
Read-only
Inspect

[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, STIR/SHAKEN signing). When configText is supplied, each item is marked as 'looks present' or 'check needed' based on simple regex signals.

Use when the user is building a WebRTC ↔ SIP bridge or troubleshooting one (no media, one-way audio, ICE failures).

Pair with: review_sip_config for the full structured outline; search_sip_docs(vendor=...) to ground each unchecked item in vendor docs; parse_sdp / compare_sdp_offer_answer when the bug is in SDP negotiation.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendorNoVendor slug. Omit and supply `configText` to auto-detect.
configTextNoOptional config blob. When supplied, items with matching signals are marked as present; vendor is auto-detected if not supplied.
filenameHintNoOptional filename ("kamailio.cfg", etc.) to bias auto-detection.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses behavior beyond the annotations: it states cost/free, pure CPU, no network, and read-only at the very front. It also explains the regex-based matching behavior for configText ('marked as looks present or check needed based on simple regex signals'). This adds meaningful context that the readOnlyHint alone does not provide, such as the lack of network dependency and the heuristic nature of the analysis.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the cost/read-only note, then immediately states the purpose, followed by usage and pairing. Every sentence carries value: the cost bracket, the topic list, the configText behavior, the use case, and the sibling tool pointers. No fluff or redundant repetition of schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three optional parameters and no output schema, the description covers the primary use cases and clarifies how configText alters results. It does not specify the exact output format or what happens when neither vendor nor configText is supplied, but that is inferable (a generic checklist). The mention of specific SIP/WebRTC domains and the 'Pair with' recommendations make it sufficiently complete for an agent to select and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with detailed parameter descriptions (e.g., configText: 'When supplied, items with matching signals are marked as present'; vendor: 'Omit and supply configText to auto-detect'). The description adds little beyond the schema—only restating the regex-signal idea that is already in the schema. Since schema coverage is high, the baseline is 3, and there is no additional semantic enrichment to justify a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Return a curated checklist of WebRTC ↔ SIP requirements' followed by a specific list of items (WSS transport, ICE gathering, DTLS-SRTP, etc.). This clearly states the verb, resource, and scope, and distinguishes it from sibling tools like parse_sdp or review_sip_config by focusing on the WebRTC-to-SIP bridge checklist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: 'Use when the user is building a WebRTC ↔ SIP bridge or troubleshooting one (no media, one-way audio, ICE failures).' Also names specific alternatives and companions in 'Pair with: review_sip_config for the full structured outline; search_sip_docs... parse_sdp / compare_sdp_offer_answer...' This goes beyond implied usage and gives clear when/where-to-use versus other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Enables AI assistants to search and retrieve information from 3GPP specification documents, including full-text search and specific lookup for LTE and 5G NAS cause values. It comes with pre-processed data for major specifications covering NAS, RRC, and protocol conformance testing.
    14
    3
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for the Ringer WARP platform giving AI agents 135 tools to manage SIP trunking, phone numbers, porting, messaging, billing, and analytics.
    100
    56
    MIT
  • A
    license
    -
    quality
    A
    maintenance
    Phone, SMS & email for AI agents. One remote MCP server (Streamable HTTP, OAuth or API-key auth, no local install) exposing call, sms, email, and event tools; also usable via CLI, Python SDK, and OpenAPI. Self-hostable, AGPLv3.
    22
    AGPL 3.0

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.