Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.Ringer/warp

NPM · WARP-MCP · SCANNED SEP 21

SIP trunking, numbers, porting, messaging, billing, and CDR analytics on the Ringer WARP platform

Available components

0 this week 93 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security92
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Ringer/warp-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 24 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 21945 tokens (~162/item across 135 items; 135 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety99
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 17 of 18 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "port_preview_transfer" implies "transfer" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 136 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.Ringer/warp MCP server?

io.github.Ringer/warp runs locally as an npm package, launched with npx -y warp-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · warp-mcp

# add to Claude Code
claude mcp add ringer-warp -- npx -y warp-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "ringer-warp": {
      "command": "npx",
      "args": [
        "-y",
        "warp-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ringer-warp": {
      "command": "npx",
      "args": [
        "-y",
        "warp-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ringer-warp -- npx -y warp-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ringer-warp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "warp-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ringer-warp --command npx --arg -y --arg warp-mcp
# ~/.hermes/config.yaml
mcp_servers:
  ringer-warp:
    command: "npx"
    args: ["-y", "warp-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ringer-warp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "warp-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ringer-warp -t stdio -c npx -a -y warp-mcp
// mcp.json
{
  "mcpServers": {
    "ringer-warp": {
      "command": "npx",
      "args": [
        "-y",
        "warp-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 0
    • Security disclosure: unverified → fail functional
  • 18 Sept 26 +1
    • Security disclosure: fail → unverified functional
  • 16 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 15 Sept 26 +1
    • Stability: 0.97 → pass security
  • 14 Sept 26 0
    • Security disclosure: unverified → fail functional
  • 13 Sept 26 +1
    • Security disclosure: fail → unverified functional
  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/warp-mcp@1.1.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo Ringer/warp-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Ringer/warp-mcp/.github/workflows/publish.yml@refs/tags/v1.1.0
Rekor log index 2618784581
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:10f60e5839f4a9e8bb7105d5d97942aef3c653db2237ed7ff4c40a8598fdbf6a18e8835651873fa8eb5da4621f1d854a411a17fe9b2974061bff63538

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed node postinstall.js

Background: Why install scripts are a supply-chain risk →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 135 exposed · ~17,897 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
msg_update_campaign ~619

Update (PUT) one of your 10DLC campaigns — e.g. fix sample messages or opt-in flow after a carrier rejection, then resubmit with msg_resubmit_campaign. Errors: INVALID_PAYLOAD (400), NOT_FOUND (404), TNIQ_ERROR (502).

NameTypeReqDescription
age_gatedbooleanTrue if content is age-gated (alcohol, gambling, etc.)
auto_renewalbooleanAuto-renew the campaign at TCR each billing cycle
brand_idstringParent brand ID (messaging-backend UUID from msg_list_brands). Required when creating a campaign.
descriptionstringWhat this campaign sends and to whom (reviewed by carriers)
direct_lendingbooleanTrue if content relates to direct lending or loan arrangements
embedded_linkbooleanTrue if messages may contain URLs/links
embedded_phonebooleanTrue if messages may contain phone numbers
help_keywordsstringComma-separated help keywords, e.g. "HELP,INFO"
help_messagestringReply sent when a subscriber texts a help keyword
idstringyesCampaign ID (messaging-backend UUID, as returned by msg_list_campaigns / msg_create_campaign)
message_flowstringHow subscribers opt in to receive messages (consent flow description; heavily weighted in carrier review)
number_poolbooleanTrue if the campaign uses 50+ sending numbers (number pooling)
optin_keywordsstringComma-separated opt-in keywords, e.g. "START,SUBSCRIBE"
optin_messagestringConfirmation message sent after a subscriber opts in
optout_keywordsstringComma-separated opt-out keywords, e.g. "STOP,UNSUBSCRIBE"
optout_messagestringConfirmation message sent after a subscriber opts out
reference_idstringYour own free-form reference ID for this campaign
sample1stringSample message 1 (representative outbound text)
sample2stringSample message 2
sample3stringSample message 3
sample4stringSample message 4
sample5stringSample message 5
sub_usecasesarraySub-use-case codes for MIXED/LOW_VOLUME campaigns
subscriber_helpbooleanTrue if subscribers can request help via keyword (HELP handling)
subscriber_optinbooleanTrue if subscribers can opt in via keyword
subscriber_optoutbooleanTrue if subscribers can opt out via keyword (STOP handling)
terms_and_conditionsbooleanAffirm the campaign complies with carrier terms and conditions
usecasestringCampaign use case code, e.g. MARKETING, 2FA, CUSTOMER_CARE (see msg_list_use_cases; check msg_get_use_case_requirements first)

No output schema declared.

No examples provided.

net_get_ingress_ips ~54

Get the customer-facing WARP SIP edge servers (UDP/TCP/TLS hosts, IPs, ports) to point a trunk or PBX at. Use when configuring SIP endpoints or firewall rules toward WARP.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

net_get_vendor_ips ~52

Get the WARP egress/origination IPs you must allowlist in your firewall for symmetric SIP signaling. Use when inbound calls from WARP are being blocked or when setting up a new network edge.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

num_bulk_order ~298

Procure and assign up to 200 telephone numbers in one idempotent batch. THIS COSTS MONEY — each number incurs purchase and recurring charges, so confirm the list with the user first. Requires a UUID idempotency key (reused as procurement_request_id); reuse the same key to safely retry. Per-TN failures do not abort the batch. Find candidates with num_search; for a single number use num_order; to route many held numbers to a trunk use num_bulk_route. Errors: INVALID_REQUEST, MISSING_IDEMPOTENCY_KEY, INVALID_IDEMPOTENCY_KEY, TRUNK_UNOWNED (whole-request 403 on default_trunk_id).

NameTypeReqDescription
default_trunk_idstringTrunk-group UUID to route all assigned numbers to (403 TRUNK_UNOWNED if not yours)
idempotency_keystringyesUUID idempotency key for the batch (sent as the Idempotency-Key header; reuse it to retry the same batch safely)
notestringFree-text note recorded on the procurement request
per_tn_overridesobjectMap of TN -> per-number override object, overriding tn_metadata/default_trunk_id for that TN
tn_metadataobjectMetadata applied to every TN in the batch (e.g. friendly_name, description fields)
tnsarrayyesTelephone numbers to procure and assign (max 200)

No output schema declared.

No examples provided.

num_bulk_route ~118

Assign up to 200 HELD numbers you already own to a single voice trunk-group in one request (idempotent at the SQL level). Use after num_bulk_order to bring purchased numbers into service, or to re-home existing numbers. For per-number routing details use num_update_voice. Errors: INVALID_REQUEST, TRUNK_UNOWNED (whole-request 403).

NameTypeReqDescription
tnsarrayyesHeld telephone numbers to route (max 200)
trunk_idstringyesVoice trunk-group UUID to route all listed numbers to

No output schema declared.

No examples provided.

num_delete_sms_config ~79

Remove the SMS usage row from a number you own, disabling SMS on it. To change SMS settings instead of removing them, use num_update_sms. Errors: TN_NOT_OWNED.

NameTypeReqDescription
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_delete_voice_config ~88

Remove the voice usage row from a number you own, DISABLING voice routing on it (inbound calls will stop routing). To change routing instead of removing it, use num_update_voice. Errors: TN_NOT_OWNED.

NameTypeReqDescription
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_get ~80

Get one telephone number you own, including its voice and SMS usage configuration. Use after num_list to inspect a specific TN before updating it with num_update_voice, num_update_sms, or num_update_metadata.

NameTypeReqDescription
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_get_port_out_pin ~106

Check whether a port-out PIN is set on a number you own, and if verification attempts locked it out, when the lock expires (locked_until). The PIN itself is never returned. Set a PIN with num_set_port_out_pin; clear it with num_remove_port_out_pin. Errors: TN_NOT_OWNED.

NameTypeReqDescription
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_list ~197

List the telephone numbers you own, with each number's voice/SMS configuration state. Use to browse or audit your DID/TFN inventory; filter by status, type, search text, or configuration flags. To find NEW purchasable numbers use num_search instead; to inspect one owned number use num_get.

NameTypeReqDescription
pageintegerPage number, 1-based (default 1)
searchstringFree-text search on TN digits or metadata
sizeintegerResults per page (default 50)
sms_configuredbooleanFilter to numbers with (true) or without (false) SMS configuration
statusstringFilter by number status
typestringFilter by number type: did (local) or tfn (toll-free)
voice_configuredbooleanFilter to numbers with (true) or without (false) voice configuration

No output schema declared.

No examples provided.

num_order ~161

Procure a telephone number from upstream inventory and assign it to your account. THIS COSTS MONEY — ordering a number incurs purchase and recurring charges, so confirm the TN with the user first. Find candidates with num_search; after ordering, configure it with num_update_voice / num_update_sms. For up to 200 numbers at once use num_bulk_order. Errors: TN_ALREADY_ASSIGNED, TN_UNAVAILABLE, TNIQ_UPSTREAM_ERROR.

NameTypeReqDescription
descriptionstringFree-text description to set on the new number
friendly_namestringHuman-friendly label to set on the new number
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_release ~124

Release a telephone number you own back to inventory. IRREVERSIBLE from your account's perspective — the number leaves your inventory and may be picked up by others, so confirm with the user first. Errors: TN_NOT_OWNED, POI_LOCKED (number is a POI fallback ANI), TNIQ_UPSTREAM_ERROR.

NameTypeReqDescription
reasonstringFree-text reason for releasing the number (for audit)
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_remove_port_out_pin ~105

Clear the port-out PIN on a number you own (idempotent), removing PIN protection against port-outs. Requires step-up MFA. Returns 204 No Content on success. Check state with num_get_port_out_pin; set a new PIN with num_set_port_out_pin. Errors: TN_NOT_OWNED.

NameTypeReqDescription
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_search ~270

Search upstream inventory for PURCHASABLE telephone numbers by area code, rate center, locality, or digit pattern. Returns paginated candidates you do not yet own. Use this before ordering; then buy a candidate with num_order (or many with num_bulk_order). For numbers you already own use num_list.

NameTypeReqDescription
citystringCity name
last_4_prefixstringPrefix the last 4 digits must start with
localitystringLocality name
npastringArea code (NPA), 3 digits, e.g. "303"
nxxstringExchange (NXX), 3 digits, e.g. "629"
pageintegerPage number, 1-based (default 1)
patternstringDigit pattern to match within the number, e.g. "1234"
rate_centerstringLERG rate center name, e.g. "DENVER"
sizeintegerResults per page (default 25)
statestring2-letter state code, e.g. "CO"
typestringNumber type: "did" (local, default) or "tfn" (toll-free)

No output schema declared.

No examples provided.

num_set_port_out_pin ~136

Set the customer-chosen 4-10 digit port-out PIN on a number you own (hashed at rest; also resets the failed-attempt lock). Requires step-up MFA on the session. Check current state with num_get_port_out_pin; clear with num_remove_port_out_pin. Errors: INVALID_REQUEST, INVALID_PIN, TN_NOT_OWNED.

NameTypeReqDescription
pinstringyesPort-out PIN, 4-10 digits, e.g. "482913"
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_update_metadata ~126

Update the friendly name and/or description on a number you own. Use to label numbers for humans; for routing/E911/CNAM use num_update_voice, for messaging use num_update_sms. Errors: INVALID_REQUEST, TN_NOT_OWNED.

NameTypeReqDescription
descriptionstringLonger free-text description of the number's purpose
friendly_namestringHuman-friendly label for the number, e.g. "Support line"
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_update_sms ~179

Update the customer-owned SMS fields on a number you own: inbound webhook URL/secret, fallback URL, and MMS toggle. Requests containing tniq-owned fields are rejected. To remove SMS entirely use num_delete_sms_config. Errors: INVALID_REQUEST, TN_NOT_OWNED.

NameTypeReqDescription
fallback_inbound_urlstringFallback URL used when the primary inbound webhook fails
inbound_webhook_secretstringShared secret used to sign inbound webhook deliveries
inbound_webhook_urlstringHTTPS URL that receives inbound SMS webhooks, e.g. "https://example.com/sms"
mms_enabledbooleanEnable or disable MMS on this number
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1

No output schema declared.

No examples provided.

num_update_voice ~290

Set or update the voice routing, E911, and CNAM configuration on a number you own. Use after ordering a number (num_order) to bring it into voice service, or to change routing later. To disable voice entirely use num_delete_voice_config; to route many numbers to one trunk use num_bulk_route. Errors: INVALID_REQUEST, TN_NOT_OWNED.

NameTypeReqDescription
cnam_display_namestringCNAM display name shown to called parties (typically max 15 chars)
cnam_enabledbooleanEnable or disable outbound CNAM (caller name) on this number
e911_address_idstringValidated E911 address record ID to associate with this number
e911_enabledbooleanEnable or disable E911 emergency service on this number
tnstringyesTelephone number, 10 digits (e.g. "3035551234") or 11 digits with leading 1
trunk_idstringVoice trunk-group UUID to route inbound calls to
voice_destinationstringPrimary inbound voice destination (e.g. SIP URI or endpoint)
voice_failover_destinationstringFailover destination used when the primary is unreachable
voice_routing_typestringRouting type for inbound voice (e.g. "trunk" or a URI-based type per your account setup)

No output schema declared.

No examples provided.

port_activate ~94

Activate numbers that have reached FOC (the final step of the port-in lifecycle). Gated on the project being activatable — check port_get_progress first. Requires step-up MFA. To have this happen automatically instead, use port_set_auto_activation. Errors: NOT_FOUND, CONFLICT (not activatable), TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_add_note ~119

Add a note to the port request. visibility="internal" is operator-only (customers get FORBIDDEN); customers may only post "customer" notes. Read notes with port_list_notes. Errors: INVALID_PAYLOAD, FORBIDDEN, NOT_FOUND, INTERNAL_ERROR.

NameTypeReqDescription
bodystringyesNote text
idstringyesPort request UUID (from port_list_requests or port_create_request)
visibilitystringNote visibility: "customer" (default; visible to the customer) or "internal" (operator-only)

No output schema declared.

No examples provided.

port_add_tns ~115

Normalise a free-form TN list and upload it to the draft port request's TNIQ project. Step 2 of the port-in lifecycle, after port_create_request and before port_set_group_details / port_validate_request. Errors: INVALID_PAYLOAD, VALIDATION_ERROR, NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)
tnsarrayyesFree-form list of 10-digit telephone numbers to add to the port request

No output schema declared.

No examples provided.

port_auto_fix ~134

Apply TNIQ auto-fixes to the project, optionally scoped to one error group (from port_get_error_groups) or a TN subset. After fixing, run port_revalidate_tns or port_resubmit_request as appropriate. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
error_group_idstringError group ID (from port_get_error_groups) to scope the fix to
idstringyesPort request UUID (from port_list_requests or port_create_request)
tnsarrayOptional subset of 10-digit TNs to fix; omit to fix all affected TNs

No output schema declared.

No examples provided.

port_cancel_request ~78

Cancel a submitted port. Gated on the project being cancellable — a CONFLICT is returned otherwise. For unsubmitted drafts use port_delete_draft instead. Requires step-up MFA. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_create_request ~153

Create a draft port-in request (TNIQ project + WARP mirror row). This is step 1 of the port-in lifecycle: create draft → port_add_tns → port_set_group_details → port_validate_request → port_generate_loa → port_submit_request → track with port_get_progress → port_activate. Run port_preview first to check portability. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, TNIQ_ERROR, INTERNAL_ERROR, GATEWAY_UNAVAILABLE.

NameTypeReqDescription
desired_due_datestringDesired port due date (FOC date), ISO 8601 date, e.g. 2026-08-01
namestringHuman-friendly name for the port request

No output schema declared.

No examples provided.

port_delete_document ~93

Delete a document from the port project. Get document IDs from port_list_documents. Deleting a group's only current LOA will re-block port_submit_request for that group. Errors: NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.

NameTypeReqDescription
doc_idstringyesDocument ID (from port_list_documents)
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_delete_draft ~90

Delete a pre-submission draft port request (TNIQ project + WARP mirror row). Only allowed in states with zero submitted TNs — after submission use port_cancel_request instead. Requires step-up MFA. Errors: NOT_FOUND, CONFLICT (already submitted), TNIQ_ERROR, INTERNAL_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_download_document ~105

Download one port document's raw bytes (Content-Type mirrors the stored document). Get document IDs from port_list_documents. Note: binary content (e.g. PDF) is returned inline and may not be readable as text. Errors (JSON): NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.

NameTypeReqDescription
doc_idstringyesDocument ID (from port_list_documents)
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_execute_transfer ~135

Transfer on-net numbers between WARP tenants without an NPAC port. Each item authorizes with the current owner's port-out PIN; items succeed or fail INDEPENDENTLY within an HTTP 200 response — check per-TN results. Per-TN failure reasons: not_in_warp_inventory, already_yours, poi_locked, invalid_pin, pin_locked, lookup_failed, transfer_failed, invalid_tn. Preview eligibility first with port_preview_transfer. Requires step-up MFA. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD.

NameTypeReqDescription
itemsarrayyesNumbers to transfer, each with the owning tenant's port-out PIN

No output schema declared.

No examples provided.

port_generate_loa ~249

Render a WARP-branded LOA PDF for one off-net SPID group and upload it to the project, superseding prior LOAs for that group. Only valid BEFORE the port is submitted; every off-net group needs a current LOA before port_submit_request will succeed. Requires attestation=true plus all authorizing-party, losing-carrier, and signer fields. Requires step-up MFA. Alternatively upload an existing signed LOA with port_upload_document. Errors: INVALID_PAYLOAD (error.details.fields lists missing fields), INVALID_PARAM, CONFLICT (already submitted), TNIQ_ERROR, INTERNAL_ERROR, GATEWAY_UNAVAILABLE.

NameTypeReqDescription
attestationbooleanyesMust be true — attests the signer is authorized to port the numbers
authorizing_partyobjectAuthorizing party details for the LOA
idstringyesPort request UUID (from port_list_requests or port_create_request)
losing_carrierobjectLosing-carrier account details for the LOA
signerobjectSigner details for the LOA
spidstringyesLosing-carrier SPID (from port_get_request's SPID groups)

No output schema declared.

No examples provided.

port_get_error_groups ~88

Get the TNIQ validation/port error groups for the project. Use after port_validate_request or a rejected submission to see what's blocking the port, then resolve with port_auto_fix (pass an error_group_id) or port_set_group_details. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_get_history ~72

Get the audit timeline for the port request (tenant-scoped, newest-first). Use to see who did what and when — submissions, cancels, document uploads, state changes. Errors: NOT_FOUND, INTERNAL_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_get_progress ~87

Get the live TNIQ progress snapshot for the port project. Use to track a submitted port (per-TN states, FOC readiness) and to check whether it is activatable before port_activate. For aggregate counts use port_get_statistics. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_get_request ~107

Get one port-in request: the WARP mirror row, the live TNIQ project, and per-SPID grouped TN details. Also reconciles any ACTIVATED TNs into inventory (idempotent). Use this as the primary status view for a port; for the lighter progress snapshot use port_get_progress. Errors: NO_ACTIVE_CUSTOMER, INVALID_ID, NOT_FOUND, CONFLICT.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_get_statistics ~77

Get the live TNIQ statistics for the port project (also opportunistically refreshes the WARP snapshot). Use for aggregate TN state counts; for per-TN detail use port_get_progress. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_list_documents ~117

List the port project's documents (LOAs, bills, CSRs, etc.), optionally filtered by doc_type or TN. signer_ip is present only for operator callers. Use to verify LOA coverage before port_submit_request. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
doc_typestringFilter by document type: LOA | BILL | CSR | OTHER
idstringyesPort request UUID (from port_list_requests or port_create_request)
tnstringFilter by 10-digit telephone number

No output schema declared.

No examples provided.

port_list_notes ~64

List the port request's notes. Operators also see internal notes; customers see only customer-visibility notes. Add notes with port_add_note. Errors: NOT_FOUND, INTERNAL_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_list_requests ~53

List the active customer's port-in requests, most-recent first. Use to find an existing port request's UUID before calling port_get_request or any other per-request tool. Errors: NO_ACTIVE_CUSTOMER, INTERNAL_ERROR.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

port_lookup_company_details ~150

Retrieve detailed company information from TinComply by company name and optional address. Used during the port-in flow for entity verification (e.g. before drafting an LOA). See also port_lookup_ein (by EIN) and port_verify_tin_name (TIN/name match). Errors: INVALID_REQUEST, COMPANY_NAME_REQUIRED, TINCOMPLY_ERROR, LOOKUP_FAILED.

NameTypeReqDescription
citystringCity
company_namestringyesLegal company name to look up
statestringState, 2-letter code, e.g. CO
streetstringStreet address
zip_codestringZIP code, e.g. 80202

No output schema declared.

No examples provided.

port_lookup_ein ~100

Retrieve company information from TinComply by EIN/Tax ID. Used during the port-in flow for entity verification. Validate the format first with port_validate_ein_format if unsure. Errors: EIN_REQUIRED, INVALID_EIN, TINCOMPLY_ERROR, LOOKUP_FAILED.

NameTypeReqDescription
einstringyesEIN/Tax ID, 9 digits with or without hyphen, e.g. 12-3456789 or 123456789

No output schema declared.

No examples provided.

port_preview ~133

Run an instant Telique-backed portability preview for a free-form list of TNs, grouped by current losing-carrier SPID. No project is created — use this BEFORE port_create_request to see which carriers hold the numbers and whether they are portable. For numbers already on-net (WARP-to-WARP), use port_preview_transfer instead. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR, GATEWAY_UNAVAILABLE.

NameTypeReqDescription
tnsarrayyesFree-form list of 10-digit telephone numbers to check for portability, e.g. ["3035551234", "7205556789"]

No output schema declared.

No examples provided.

port_preview_transfer ~131

For a free-form TN list, report which numbers are on-net (an active WARP assignment) and eligible for on-net transfer between WARP tenants (no NPAC port needed). The owning customer's BAN is masked. Per-TN ineligibility reasons: not_in_warp_inventory, already_yours, poi_locked, lookup_failed. Use before port_execute_transfer; for off-net numbers use port_preview instead. Errors: NO_ACTIVE_CUSTOMER, INVALID_PAYLOAD, VALIDATION_ERROR.

NameTypeReqDescription
tnsarrayyesFree-form list of 10-digit telephone numbers to check for on-net transfer eligibility

No output schema declared.

No examples provided.

port_resubmit_request ~86

Resubmit a port that is in an error/rejection/exception state (e.g. after fixing issues with port_auto_fix or port_set_group_details). Only valid from those states — a CONFLICT is returned otherwise. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_revalidate_tns ~109

Send a REVALIDATE bulk action for selected (or all) TNs in the port request. Use after fixing individual TN errors when you don't need the full re-validation of port_validate_request. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)
tnsarrayOptional subset of 10-digit TNs to revalidate; omit to revalidate all TNs in the request

No output schema declared.

No examples provided.

port_set_auto_activation ~166

Update the port project's auto-activation mode so numbers activate without a manual port_activate call. Modes: DISABLED (manual only), ASAP (activate as soon as FOC is reached), SCHEDULED (activate at scheduled_at, which is required for that mode). Errors: INVALID_PAYLOAD, NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)
modestringyesAuto-activation mode: DISABLED | ASAP | SCHEDULED (SCHEDULED requires scheduled_at)
scheduled_atstringISO 8601 timestamp for SCHEDULED mode, e.g. 2026-08-01T14:00:00Z; required when mode=SCHEDULED

No output schema declared.

No examples provided.

port_set_group_details ~222

Apply losing-carrier account details (account number, BTN, PIN, service address, names) to EVERY TN in one SPID group. Group membership is recomputed from live TNIQ details, not client-supplied. Get SPID groups from port_get_request; run before port_validate_request. Errors: INVALID_PAYLOAD, INVALID_PARAM, NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
account_numberstringAccount number with the losing carrier
btnstringBilling telephone number (10-digit) on the losing account
business_namestringBusiness name on the losing account
end_user_namestringEnd-user name on the losing account
idstringyesPort request UUID (from port_list_requests or port_create_request)
pinstringAccount PIN/passcode with the losing carrier
service_addressstringService address on file with the losing carrier
spidstringyesLosing-carrier SPID (from port_get_request's SPID groups)

No output schema declared.

No examples provided.

port_submit_request ~170

Submit the port to NPAC. Gated on (1) every off-net SPID group having a current LOA (generate one with port_generate_loa or upload with port_upload_document) and (2) the project being submittable (validate first with port_validate_request). Requires step-up MFA. On the LOA gate a 409 CONFLICT is returned whose error.details has reason="loa_required" and groups=[{spid, tn_count, reason: "missing"|"stale"}]; other 409s carry error.details.reason from the submit blocker. After submitting, track with port_get_progress and port_get_statistics. Errors: NOT_FOUND, CONFLICT, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_supplement_due_date ~142

Change the desired due date of a submitted port (SUP_DDD), optionally for a subset of TNs. Only valid before activation — a CONFLICT is returned otherwise. Errors: INVALID_PAYLOAD, NOT_FOUND, CONFLICT, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)
new_dddstringyesNew desired due date (FOC date), ISO 8601 date, e.g. 2026-08-15
tnsarrayOptional subset of 10-digit TNs to supplement; omit to apply to all TNs

No output schema declared.

No examples provided.

port_upload_document ~150

Upload a supporting document (LOA, bill copy, CSR, or other; max 25MB) to the port's TNIQ project from a local file. Use for a customer-signed LOA or supporting evidence; to have WARP generate the LOA instead, use port_generate_loa. Errors: INVALID_PAYLOAD, NOT_FOUND, TNIQ_VALIDATION, TNIQ_ERROR.

NameTypeReqDescription
doc_typestringyesDocument type: LOA | BILL | CSR | OTHER
file_pathstringyesAbsolute path to the local file to upload (max 25MB)
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

port_validate_ein_format ~75

Check whether an EIN is well-formed (9 digits) WITHOUT calling the external TinComply API. Use as a cheap pre-check before port_lookup_ein or port_verify_tin_name. Errors: EIN_REQUIRED.

NameTypeReqDescription
einstringyesEIN to validate, e.g. 12-3456789

No output schema declared.

No examples provided.

port_validate_request ~108

Trigger a TNIQ-side re-validation of ALL TNs in the port request. Run after adding TNs (port_add_tns) and applying carrier details (port_set_group_details), then inspect failures via port_get_error_groups and fix them with port_auto_fix. To revalidate only a subset of TNs use port_revalidate_tns. Errors: NOT_FOUND, TNIQ_ERROR.

NameTypeReqDescription
idstringyesPort request UUID (from port_list_requests or port_create_request)

No output schema declared.

No examples provided.

Common questions

What is the io.github.Ringer/warp MCP server?

io.github.Ringer/warp is an MCP server listed in the public MCP registry as io.github.Ringer/warp. SIP trunking, numbers, porting, messaging, billing, and CDR analytics on the Ringer WARP platform. This page covers its npm package (warp-mcp).

Is the io.github.Ringer/warp MCP server safe to use?

io.github.Ringer/warp scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.Ringer/warp MCP server expose?

io.github.Ringer/warp exposes 135 tools: warp_status, acct_get_capacity, acct_get_balance, acct_get_utilization, acct_list_scopes, and 130 more. Their descriptions and schemas cost roughly 17,897 tokens of context every time the server is loaded.

Is the io.github.Ringer/warp MCP server still maintained?

io.github.Ringer/warp is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.Ringer/warp MCP server under?

io.github.Ringer/warp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.