lookup
Is this number safe to call or text right now? Live carrier, CNAM, spam and SMS checks for agents.
Should I use this
Quality & Safety
Findings (1)
- LOWin vri_bulk_status
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"lookup": {
"command": "npx",
"args": [
"veriroute-intel-mcp"
]
}
}
}Runnable packages
1.2.2stdioRemote endpoints
https://verirouteintel.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢vri_number_lookup(include_sms_assessment, max_cost, phone_number, products, request_id)
Live intelligence for ONE North American phone number: current carrier of record, line type, LRN routing data, porting activation date, and optionally caller-ID name (cnam), spam reputation, and messaging provider. Always a fresh read of live numbering infrastructure — never cached carrier data. Live customer keys spend balance. Repeating a call can charge again; reuse a stable request_id with identical arguments for a safe retry. Use max_cost to cap the quote. Use a test key for integration tests.
Input Schema
{
"type": "object",
"properties": {
"include_sms_assessment": {
"description": "Include SMS assessment from this same lookup. Adds LRN/spam if absent; no second lookup.",
"type": "boolean"
},
"max_cost": {
"description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
"minimum": 0,
"type": "number"
},
"phone_number": {
"description": "US/Canada number, any common format",
"type": "string"
},
"products": {
"description": "Data sets to include. Default ['lrn'] (carrier/line-type/routing).",
"items": {
"enum": [
"lrn",
"cnam",
"spam",
"messaging"
],
"type": "string"
},
"minItems": 1,
"type": "array"
},
"request_id": {
"description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
"type": "string"
}
},
"required": [
"phone_number"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"billed": {
"description": "Whether this lookup was charged",
"type": "boolean"
},
"data": {
"additionalProperties": true,
"type": "object"
},
"partial_results": {
"type": "boolean"
},
"phone_number": {
"description": "Normalized number",
"type": "string"
},
"products_available": {
"items": {
"type": "string"
},
"type": "array"
},
"products_unavailable": {
"items": {
"type": "string"
},
"type": "array"
},
"risk": {
"additionalProperties": true,
"description": "Explainable spam/risk verdict: WHY the number is flagged (or not), with an honest confidence band. A clean verdict means \"nothing found against it\", never \"verified safe\".",
"properties": {
"confidence": {
"description": "How much weight the evidence actually carries",
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"confidence_note": {
"description": "One plain sentence explaining the band",
"type": "string"
},
"reasons": {
"description": "Individual pieces of evidence behind the verdict",
"items": {
"additionalProperties": true,
"properties": {
"code": {
"description": "provider_flag, ftc_complaints, complaint_category, community_reports, line_type_voip, recently_ported, no_complaints",
"type": "string"
},
"signal": {
"enum": [
"negative",
"positive",
"context"
],
"type": "string"
},
"text": {
"description": "Human-readable evidence",
"type": "string"
},
"weight": {
"enum": [
"strong",
"moderate",
"weak"
],
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"verdict": {
"description": "unknown = no reputation data was read for this number",
"enum": [
"scam",
"robocall",
"reported",
"clean",
"unknown"
],
"type": "string"
}
},
"type": "object"
},
"status": {
"enum": [
"success",
"partial",
"failed",
"pending"
],
"type": "string"
},
"total_charged": {
"type": "number"
}
},
"additionalProperties": true,
"description": "Lookup result for the number"
}🟢vri_spam_check(max_cost, phone_number, request_id)
Spam/scam/robocall reputation for one North American phone number, with an explainable `risk` block: the verdict, a confidence band, and the individual reasons behind it (complaint volume and recency, complaint category, community reports, line type, recent porting). Live customer keys spend balance. Repeating a call can charge again; reuse a stable request_id with identical arguments for a safe retry. Use max_cost to cap the quote. Use a test key for integration tests.
Input Schema
{
"type": "object",
"properties": {
"max_cost": {
"description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
"minimum": 0,
"type": "number"
},
"phone_number": {
"description": "US/Canada number, any common format",
"type": "string"
},
"request_id": {
"description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
"type": "string"
}
},
"required": [
"phone_number"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"additionalProperties": true,
"type": "object"
},
"partial_results": {
"type": "boolean"
},
"phone_number": {
"type": "string"
},
"products_available": {
"items": {
"type": "string"
},
"type": "array"
},
"products_unavailable": {
"items": {
"type": "string"
},
"type": "array"
},
"risk": {
"additionalProperties": true,
"description": "Explainable spam/risk verdict: WHY the number is flagged (or not), with an honest confidence band. A clean verdict means \"nothing found against it\", never \"verified safe\".",
"properties": {
"confidence": {
"description": "How much weight the evidence actually carries",
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"confidence_note": {
"description": "One plain sentence explaining the band",
"type": "string"
},
"reasons": {
"description": "Individual pieces of evidence behind the verdict",
"items": {
"additionalProperties": true,
"properties": {
"code": {
"description": "provider_flag, ftc_complaints, complaint_category, community_reports, line_type_voip, recently_ported, no_complaints",
"type": "string"
},
"signal": {
"enum": [
"negative",
"positive",
"context"
],
"type": "string"
},
"text": {
"description": "Human-readable evidence",
"type": "string"
},
"weight": {
"enum": [
"strong",
"moderate",
"weak"
],
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"verdict": {
"description": "unknown = no reputation data was read for this number",
"enum": [
"scam",
"robocall",
"reported",
"clean",
"unknown"
],
"type": "string"
}
},
"type": "object"
},
"status": {
"enum": [
"success",
"partial",
"failed",
"pending"
],
"type": "string"
},
"total_charged": {
"type": "number"
}
},
"additionalProperties": true,
"description": "Spam reputation verdict"
}🟢vri_bulk_status(job_id)
Status and progress of a VRI bulk lookup job by job id.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"description": "Job id returned by vri_submit_job or the REST Jobs API",
"type": "string"
}
},
"required": [
"job_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"processed": {
"description": "Numbers completed so far",
"type": "integer"
},
"status": {
"description": "Job state, e.g. RUNNING or COMPLETED",
"type": "string"
}
},
"additionalProperties": true,
"description": "Job status snapshot"
}🟢vri_bulk_lookup(max_cost, phone_numbers, products, request_id)
Live lookup for up to 100 North American phone numbers in one call (carrier, line type, routing; optional cnam/spam/messaging). Each number is a fresh paid read — spend scope required. Live customer keys spend balance. Repeating a call can charge again; reuse a stable request_id with identical arguments for a safe retry. Use max_cost to cap the quote. Use a test key for integration tests.
Input Schema
{
"type": "object",
"properties": {
"max_cost": {
"description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
"minimum": 0,
"type": "number"
},
"phone_numbers": {
"description": "US/Canada numbers, any common format (max 100)",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
"products": {
"description": "Data sets per number. Default ['lrn'].",
"items": {
"enum": [
"lrn",
"cnam",
"spam",
"messaging"
],
"type": "string"
},
"minItems": 1,
"type": "array"
},
"request_id": {
"description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
"type": "string"
}
},
"required": [
"phone_numbers"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"results": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"total_charged": {
"description": "USD amount billed for this call",
"type": "string"
}
},
"additionalProperties": true,
"description": "Per-number results plus total charged"
}⚪vri_sms_deliverability(max_cost, phone_number, request_id)
Line-type-based SMS capability and reputation signals for a North American number. Not an actual delivery test or guarantee. Unknown reputation never clears a number to message. Returns sms_capable (live line-type read), VoIP flag, spam reputation, the recipient's approximate local time with an 8am-9pm calling-window flag, and plain-language reasons. Deliverability and reputation signals only — not a legal compliance determination (no DNC/reassigned-number/litigator data). Performs its own LRN and spam lookup; avoid calling after number_lookup for the same data. Live customer keys spend balance. Repeating a call can charge again; reuse a stable request_id with identical arguments for a safe retry. Use max_cost to cap the quote. Use a test key for integration tests.
Input Schema
{
"type": "object",
"properties": {
"max_cost": {
"description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
"minimum": 0,
"type": "number"
},
"phone_number": {
"description": "US/Canada number, any common format",
"type": "string"
},
"request_id": {
"description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
"type": "string"
}
},
"required": [
"phone_number"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"line_type": {
"type": [
"string",
"null"
]
},
"ok_to_message_now": {
"description": "sms_capable AND clean AND inside the calling window",
"type": "boolean"
},
"reasons": {
"description": "Plain-language reasons this number is or is not a good send. Empty means nothing is wrong. When reputation is against the number these also carry the evidence behind it (complaint counts and recency, complaint category, community reports, recent porting) and a closing \"reputation confidence: low|medium|high\" line.",
"items": {
"type": "string"
},
"type": "array"
},
"recipient_local": {
"description": "Approximate timezone, local_time, quiet_hours_ok",
"type": [
"object",
"null"
]
},
"sms_capable": {
"description": "Inferred from line type; null when unknown. Not a delivery guarantee.",
"type": [
"boolean",
"null"
]
},
"spam_flagged": {
"type": [
"boolean",
"null"
]
},
"voip": {
"type": "boolean"
}
},
"additionalProperties": true,
"description": "Deliverability verdict"
}🟡vri_submit_job(max_cost, phone_numbers, products, request_id)
Submit an ASYNC bulk lookup job for up to 10000 North American phone numbers. Balance is reserved up front and the job runs in the background; check progress with vri_bulk_status. Requires a customer API key (jobs bill the account that owns the key). Live customer keys spend balance. Repeating a call can charge again; reuse a stable request_id with identical arguments for a safe retry. Use max_cost to cap the quote. Use a test key for integration tests.
Input Schema
{
"type": "object",
"properties": {
"max_cost": {
"description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
"minimum": 0,
"type": "number"
},
"phone_numbers": {
"description": "US/Canada numbers to process asynchronously (max 10000)",
"items": {
"type": "string"
},
"maxItems": 10000,
"minItems": 1,
"type": "array"
},
"products": {
"description": "Default ['lrn'].",
"items": {
"enum": [
"lrn",
"cnam",
"spam",
"messaging"
],
"type": "string"
},
"minItems": 1,
"type": "array"
},
"request_id": {
"description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
"type": "string"
}
},
"required": [
"phone_numbers"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"job_id": {
"description": "Use with vri_bulk_status",
"type": "string"
},
"reserved": {
"description": "USD balance reserved for the job",
"type": "string"
},
"status": {
"type": "string"
}
},
"additionalProperties": true,
"description": "Accepted job receipt"
}🟢vri_account_info
Free: available balance, connection limits and allowed products.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}🟢vri_quote(include_sms_assessment, phone_numbers, products)
Free estimate using account pricing and deduplicated valid numbers; no lookup.
Input Schema
{
"type": "object",
"properties": {
"include_sms_assessment": {
"type": "boolean"
},
"phone_numbers": {
"items": {
"type": "string"
},
"maxItems": 10000,
"minItems": 1,
"type": "array"
},
"products": {
"items": {
"enum": [
"lrn",
"cnam",
"spam",
"messaging"
],
"type": "string"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"phone_numbers"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}🟢vri_job_results(cursor, job_id, limit)
Free, owner-scoped stored results. Follow next_cursor until null; never re-submit a completed job.
Input Schema
{
"type": "object",
"properties": {
"cursor": {
"maxLength": 2048,
"type": "string"
},
"job_id": {
"type": "string"
},
"limit": {
"maximum": 100,
"minimum": 1,
"type": "integer"
}
},
"required": [
"job_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}🟢vri_operation_status(operation_id)
Free: check an operation after an interrupted call; pending work must not be resubmitted with a new ID.
Input Schema
{
"type": "object",
"properties": {
"operation_id": {
"type": "string"
}
},
"required": [
"operation_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}Community
Evidence