Skip to main content
Glama

lookup

Server Details

Is this number safe to call or text right now? Live carrier, CNAM, spam and SMS checks for agents.

Ownership verified
Status
Healthy
Uptime
100.0% over 43 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
verirouteintel/veriroute-intel-mcp
GitHub Stars
0
Server Listing
Veriroute Intel Lookup

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target distinct operations, but single-number lookup, SMS deliverability, and spam check all return overlapping carrier/line-type/reputation signals. Bulk lookup also overlaps with the async submit/status/results job cluster. Descriptions explicitly clarify usage, so confusion is limited but possible.

Naming Consistency4/5

All tools use the same vri_ prefix and snake_case, making the set easy to scan and group. The suffix pattern is mostly predictable, though it mixes noun phrases like account_info and job_results with action-oriented names like submit_job.

Tool Count5/5

Ten tools fit a focused phone-number intelligence service well. The set covers account, quoting, single lookup, synchronous bulk, asynchronous job submission/status/results, spam, SMS, and operation status without obvious padding.

Completeness4/5

The surface covers the main lookup lifecycle: quote, single lookup, bulk sync/async, status, stored results, spam, SMS, and account info. Minor gaps such as explicit job cancellation or job listing/history may exist, but core workflows are covered.

Available Tools

10 tools
vri_account_infoAccount and connection budgetB
Read-onlyIdempotent
Inspect

Free: available balance, connection limits and allowed products.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered. The description's one addition beyond structured data is 'Free', which usefully tells the agent this call consumes no balance or credits — real behavioral context for a budget-related tool. It adds nothing about pagination, latency, or auth, so this is a modest contribution rather than rich disclosure.

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?

One short sentence fragment, front-loaded with the cost signal ('Free') before the payload contents. It is efficient with no padding, though it is arguably terse to the point of under-specification rather than genuinely concise.

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

Completeness3/5

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

With zero parameters, an output schema defining the return shape, and annotations covering safety, the description only needs to establish scope and routing — and it establishes scope adequately. It omits any routing to sibling tools, which for a tool sitting among nine lookups is a real gap. Minimum viable rather than complete.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. The schema is trivially complete and the description correctly avoids inventing inputs.

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

Purpose4/5

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

The description names the resource (the account) and enumerates what it returns: available balance, connection limits, allowed products. That is specific enough for an agent to know this is the account/limits introspection tool. It does not, however, contrast itself with any sibling such as vri_bulk_status or vri_operation_status.

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

Usage Guidelines2/5

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

There is no explicit when-to-use statement, no when-not-to-use, and no named alternative among the ten sibling tools. The 'Free' prefix hints that cost is a decision factor, which is a mild usage signal, but the agent must infer that this is a pre-flight/limits check before submitting jobs.

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

vri_bulk_lookupBulk LookupAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_costNoMaximum quoted cost in USD; rejected before lookup if exceeded.
productsNoData sets per number. Default ['lrn'].
request_idNoStable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.
phone_numbersYesUS/Canada numbers, any common format (max 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
total_chargedNoUSD amount billed for this call

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only flag readOnlyHint=false, idempotentHint=false and openWorldHint=true; the description goes well beyond them by disclosing that each number is a fresh paid read, that a spend scope is required, that live customer keys draw on balance, that repeating a call can charge again, and how request_id converts a repeat into a safe retry. This is exactly the cost/idempotency behavior an agent needs before invoking a billable open-world tool, and it is consistent with the annotations rather than contradicting them.

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 purpose and batch limit are front-loaded, followed by cost, retry and testing guidance in short declarative clauses with no filler. The telegraphic style ('Live customer keys spend balance') is dense but every sentence carries a distinct operational fact.

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?

An output schema exists, so return values need not be described, and the description covers the critical unknowns for a billable bulk tool: spend scope, re-charge risk, retry safety, cost capping and test keys. The remaining gap is sibling routing — nothing tells the agent when to prefer vri_number_lookup, vri_quote or vri_spam_check instead.

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 already documents phone_numbers, products, max_cost and request_id thoroughly, and the baseline is 3. The description largely restates the schema's cost-cap and request_id semantics ('Use max_cost to cap the quote', 'reuse a stable request_id with identical arguments'), adding only the retry-charge linkage that the schema implies, so there is little net-new parameter meaning.

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

Purpose4/5

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

The description gives a specific verb and resource ('Live lookup'), the batch ceiling (up to 100 North American phone numbers in one call) and the returned data sets (carrier, line type, routing, optional cnam/spam/messaging). It clearly reads as the bulk counterpart to the sibling vri_number_lookup, though it never names that sibling explicitly, so differentiation is inferred from 'bulk'/'up to 100' rather than stated.

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?

It gives actionable operational context: use max_cost to cap the quote, use a test key for integration tests, and reuse request_id with identical arguments for a safe retry. What it does not provide is an explicit when-not or a named alternative (e.g. vri_number_lookup for a single number, vri_quote for pricing only), which keeps it short of a 5.

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

vri_bulk_statusBulk Job StatusB
Read-onlyIdempotent
Inspect

Status and progress of a VRI bulk lookup job by job id.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id returned by vri_submit_job or the REST Jobs API

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idNo
statusNoJob state, e.g. RUNNING or COMPLETED
processedNoNumbers completed so far

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds only that this reports 'status and progress', implying a pollable job, but says nothing about terminal states, polling cadence, or job expiry. Some value added, but thin.

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?

A single efficient sentence with the resource and key front-loaded and zero filler. It is arguably too terse rather than too long, but structurally it is clean.

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

Completeness3/5

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

An output schema exists so return values need not be described, and the single required param is documented. However, the description omits the workflow context (submit -> poll status -> fetch results) that would tell an agent where this tool fits relative to vri_submit_job and vri_job_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?

One parameter with 100% schema description coverage, which already explains the job_id comes from vri_submit_job or the REST Jobs API. The description's 'by job id' restates the schema rather than adding format or constraint detail, so baseline 3 applies.

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

Purpose4/5

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

States a specific resource (VRI bulk lookup job) and what is returned (status and progress), keyed by job id. It is clear on its own, but it never distinguishes itself from the closely related siblings vri_job_results and vri_operation_status, leaving the agent to infer the boundary.

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

Usage Guidelines2/5

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

No when-to-use guidance, no polling guidance, and no mention of alternatives. Given siblings like vri_job_results (results of a job) and vri_operation_status (status of an operation), the absence of any routing cue is a real gap.

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

vri_job_resultsRead job resultsA
Read-onlyIdempotent
Inspect

Free, owner-scoped stored results. Follow next_cursor until null; never re-submit a completed job.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds non-annotation context: zero cost, owner-scoped visibility, and cursor-termination behavior — genuinely useful traits beyond the structured fields.

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?

Two short front-loaded clauses, no filler, purpose stated before the operational caveats. It is arguably under-specified rather than padded, so conciseness itself is fine.

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?

With an output schema present, return values need not be explained, and annotations cover safety, so the remaining burden is modest. The description covers cost, scope and pagination; the only real omission is sibling disambiguation among the several status/lookup tools.

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

Parameters2/5

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

Schema coverage is 0%, so the description must carry all three parameters and it does not. It explains cursor iteration (as 'next_cursor', which does not match the schema's 'cursor' field name) but says nothing about limit's cap or job_id's meaning, and the naming mismatch risks confusing an agent.

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

Purpose4/5

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

The fragments 'Free, owner-scoped stored results' plus 'never re-submit a completed job' identify this as the retrieval side of the job lifecycle, implicitly contrasted with vri_submit_job. It stops short of an explicit verb and does not differentiate from other status/result readers such as vri_operation_status or vri_bulk_status.

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

Usage Guidelines3/5

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

Gives concrete operational instructions ('Follow next_cursor until null', 'never re-submit a completed job') and a cost signal ('Free'), which is useful when-versus-when-not context. However it never says when to call this instead of sibling status tools, leaving selection to inference.

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

vri_number_lookupNumber LookupAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_costNoMaximum quoted cost in USD; rejected before lookup if exceeded.
productsNoData sets to include. Default ['lrn'] (carrier/line-type/routing).
request_idNoStable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.
phone_numberYesUS/Canada number, any common format
include_sms_assessmentNoInclude SMS assessment from this same lookup. Adds LRN/spam if absent; no second lookup.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
riskNoExplainable 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".
billedNoWhether this lookup was charged
statusNo
phone_numberNoNormalized number
total_chargedNo
partial_resultsNo
products_availableNo
products_unavailableNo

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: live keys spend balance, repeat calls can charge again, request_id reuse with identical arguments avoids a second charge, and the read is never cached. This explains why readOnlyHint is false and idempotentHint is false, and gives the agent an actual safe-retry path.

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-loads the capability, then layers billing and retry guidance in short declarative sentences. It is on the longer side and slightly repetitive around charging, but every sentence carries actionable information.

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?

Covers scope, cost, retry semantics, test mode, and optional data sets for a tool with a complete schema and an output schema that handles return values. Nothing needed to call it correctly is missing.

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 baseline is 3. The description restates max_cost as a cap and request_id as a retry key, and names the optional products (cnam/spam/messaging), but adds no syntax or format detail the schema does not already carry.

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?

States a specific verb and resource ('Live intelligence for ONE North American phone number') and enumerates exactly what comes back: carrier, line type, LRN routing, porting date, plus optional cnam/spam/messaging. The capitalized 'ONE' cleanly separates it from the vri_bulk_lookup sibling.

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?

Gives concrete operational guidance: cap spend with max_cost, use a test key for integration tests, reuse request_id for safe retries. It does not explicitly name vri_bulk_lookup as the alternative for multi-number work, so the routing is implied by 'ONE' rather than stated.

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

vri_operation_statusCheck request receiptB
Read-onlyIdempotent
Inspect

Free: check an operation after an interrupted call; pending work must not be resubmitted with a new ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description still adds real value by disclosing cost ('Free') and a non-obvious operational constraint about not resubmitting pending work with a new ID.

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?

A single dense sentence that front-loads the cost signal and the usage trigger with zero filler. It is perhaps terse to the point of omitting needed detail, but nothing is wasted.

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

Completeness3/5

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

An output schema exists, so return-value explanation is unnecessary, and annotations cover the safety profile. Still, for a tool whose entire contract is 'pass an operation ID', the description says nothing about acquiring that ID, which is the main completeness gap.

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

Parameters2/5

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

Schema description coverage is 0% and operation_id is undocumented in both the schema and the description. The description never explains what an operation ID is or where the agent obtains it, leaving the sole parameter's semantics entirely unexplained.

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

Purpose3/5

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

States a recognizable verb+resource ('check an operation') with a specific condition ('after an interrupted call'). However, it does not distinguish this from siblings like vri_bulk_status or vri_job_results, which all sound like status-checking tools; the agent must guess from the name alone which one applies.

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?

Gives concrete when-to-use context ('after an interrupted call') plus an important behavioral rule ('pending work must not be resubmitted with a new ID'). It lacks explicit named alternatives, but the triggering scenario is clear enough to route an agent.

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

vri_quoteEstimate lookup costB
Read-onlyIdempotent
Inspect

Free estimate using account pricing and deduplicated valid numbers; no lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
productsNo
phone_numbersYes
include_sms_assessmentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond them: the estimate is free, it uses account pricing, and it deduplicates valid numbers rather than performing lookups.

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?

A single dense sentence with the most decision-relevant fact ('Free') front-loaded and no filler. It is terse to the point of being elliptical, but nothing is wasted.

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

Completeness3/5

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

An output schema exists, so return-value explanation is unnecessary, and the description covers cost and non-lookup behavior. However, with 0% schema description coverage it leaves the products enum and include_sms_assessment undocumented and gives no guidance on when a quote should precede a real lookup.

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

Parameters2/5

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

Schema description coverage is 0% across 3 parameters. The description implies phone_numbers are validated and deduplicated, which adds some meaning, but products and include_sms_assessment receive no explanation anywhere, leaving the agent guessing about the enum options and the SMS assessment flag.

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

Purpose4/5

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

The description states a specific action (free estimate of lookup cost) and a key constraint (no lookup is performed), which cleanly separates it from the lookup siblings like vri_bulk_lookup and vri_number_lookup. It is clear but leans on the title 'Estimate lookup cost' to fully name the resource.

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

Usage Guidelines3/5

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

Usage is only implied: the 'free' and 'no lookup' phrasing suggests calling this before committing to a paid lookup or submit_job, but there is no explicit when-to-use or when-not-to-use statement and no sibling is named as an alternative.

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

vri_sms_deliverabilitySMS Deliverability CheckAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_costNoMaximum quoted cost in USD; rejected before lookup if exceeded.
request_idNoStable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.
phone_numberYesUS/Canada number, any common format

Output Schema

ParametersJSON Schema
NameRequiredDescription
voipNo
reasonsNoPlain-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.
line_typeNo
sms_capableNoInferred from line type; null when unknown. Not a delivery guarantee.
spam_flaggedNo
recipient_localNoApproximate timezone, local_time, quiet_hours_ok
ok_to_message_nowNosms_capable AND clean AND inside the calling window

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false (it costs money), idempotentHint=false, and openWorldHint=true; the description adds the crucial context behind those flags — live keys spend balance, repeat calls can charge again, and a stable request_id is the safe-retry path. It also discloses the semantic caveat that unknown reputation never clears a number to message, which no annotation conveys.

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?

Dense but front-loaded: capability statement first, then the negative scope, then return contents, then operational cautions. A few clauses overlap (the delivery-test disclaimer and the compliance disclaimer), but nearly every sentence carries distinct operational value.

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?

Covers what the tool is, what it returns (sms_capable, VoIP flag, spam reputation, local time with calling-window flag, reasons), its limits, cost/retry behavior, and its relationship to sibling tools. An output schema exists, so return-format detail is appropriately delegated.

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 coverage is 100%, so the baseline is 3, but the description adds cross-parameter behavioral meaning: request_id is framed as both a billing-safety and receipt-retrieval mechanism, and max_cost as a pre-lookup quote cap. These tie the parameters to consequences rather than merely restating their types.

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?

States a specific verb+resource — line-type-based SMS capability and reputation signals for a North American number — and names exactly what it is not (delivery test, compliance check). It also differentiates from siblings by noting it performs its own LRN and spam lookup so vri_number_lookup need not precede it.

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 when/when-not guidance: avoid calling after number_lookup for the same data, use a test key for integration tests, use max_cost to cap the quote, reuse request_id for safe retries. Alternatives and exclusions are spelled out rather than implied.

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

vri_spam_checkSpam CheckAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_costNoMaximum quoted cost in USD; rejected before lookup if exceeded.
request_idNoStable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.
phone_numberYesUS/Canada number, any common format

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
riskNoExplainable 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".
statusNo
phone_numberNo
total_chargedNo
partial_resultsNo
products_availableNo
products_unavailableNo

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: annotations say idempotentHint=false and nothing about cost, while the description discloses that live keys spend balance, that repeat calls can charge again, and that reusing a request_id with identical arguments yields a safe no-charge retry. It also documents the max_cost cap and the explainable risk block.

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-loads the purpose, then packs billing/retry/cost/test-key guidance into four short sentences with no filler. Slightly telegraphic and dense, but every sentence carries actionable information.

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?

An output schema exists, so return values need no further explanation; the description nonetheless summarizes the risk block. With billing, retry, cost-cap, and test-key behavior all covered, an agent has everything needed to invoke it 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 already documents all three parameters, including the request_id retry semantics and the max_cost rejection rule. The description largely restates that (cost cap, safe retry) rather than adding new syntax or format detail, 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?

States a specific verb+resource and scope: 'Spam/scam/robocall reputation for one North American phone number.' The 'one number' scoping and the named `risk` output distinguish it from bulk/other lookup siblings without needing to open a schema.

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?

Gives clear operating context — live keys spend balance, test keys for integration tests, max_cost to cap the quote — but never explicitly says when to prefer this over vri_number_lookup, vri_bulk_lookup, or vri_quote. Context is clear; alternatives are left to inference.

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

vri_submit_jobSubmit Async JobAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_costNoMaximum quoted cost in USD; rejected before lookup if exceeded.
productsNoDefault ['lrn'].
request_idNoStable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.
phone_numbersYesUS/Canada numbers to process asynchronously (max 10000)

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idNoUse with vri_bulk_status
statusNo
reservedNoUSD balance reserved for the job

TDQS

A4.5/5.0
Behavior5/5

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

With annotations only covering the read/write/idempotency profile, the description adds substantial behavioral context the annotations cannot: balance is reserved up front, the job runs in the background, a customer API key is required, live keys actually spend balance, and a repeated call can charge again unless a stable request_id is reused. This is exactly the cost/billing disclosure an agent needs before invoking a billable tool.

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 scope statement is front-loaded, followed by cost, auth, retry and testing guidance. Every sentence carries distinct operational information 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?

An output schema exists, so return values need no explanation. Combined with the annotations covering the safety profile and the description covering billing, auth, retry and monitoring, an agent has everything required to call this 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 all four parameters are already documented in the schema, including max_cost's rejection behavior and request_id's retry semantics. The description's mentions of max_cost and request_id restate that information rather than adding new syntax or format detail, 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 names a specific verb, resource and scope: 'Submit an ASYNC bulk lookup job for up to 10000 North American phone numbers.' It differentiates from the synchronous sibling by emphasizing ASYNC/background execution and explicitly routes to vri_bulk_status for progress.

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?

It gives clear operational guidance: check progress with vri_bulk_status, cap spend with max_cost, use a test key for integration tests, and reuse request_id to avoid double charges. It does not explicitly state when to prefer this over the synchronous vri_bulk_lookup sibling, so the alternative-selection rule is implied rather than stated.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • Addedvri_account_info
    • Changedvri_bulk_lookup5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_cost
        Added value: +{
        +  "description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / phone_numbers / minItems
        Added value: +1
      • addedInput schema / properties / products / minItems
        Added value: +1
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
        +  "type": "string"
        +}
    • Changedvri_bulk_status2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / job_id / description
        Previous value: -"Job id returned by vri_bulk_lookup or vri_submit_job"New value: +"Job id returned by vri_submit_job or the REST Jobs API"
    • Addedvri_job_results
    • Changedvri_number_lookup12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / include_sms_assessment
        Added value: +{
        +  "description": "Include SMS assessment from this same lookup. Adds LRN/spam if absent; no second lookup.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_cost
        Added value: +{
        +  "description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / products / minItems
        Added value: +1
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / data / description
        Removed value: -"Carrier, line type, LRN, and any requested cnam/spam/messaging fields"
      • addedOutput schema / properties / partial_results
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / products_available
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / products_unavailable
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / status / description
        Removed value: -"success or error"
      • addedOutput schema / properties / status / enum
        Added value: +[
        +  "success",
        +  "partial",
        +  "failed",
        +  "pending"
        +]
      • addedOutput schema / properties / total_charged
        Added value: +{
        +  "type": "number"
        +}
    • Addedvri_operation_status
    • Addedvri_quote
    • Changedvri_sms_deliverability6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_cost
        Added value: +{
        +  "description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / sms_capable / description
        Previous value: -"Wireless line that can receive SMS"New value: +"Inferred from line type; null when unknown. Not a delivery guarantee."
      • changedOutput schema / properties / sms_capable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / spam_flagged / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedvri_spam_check11 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_cost
        Added value: +{
        +  "description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedOutput schema / properties / is_spam
        Removed value: -{
        -  "description": "True if flagged spam/scam/robocall",
        -  "type": "boolean"
        -}
      • addedOutput schema / properties / partial_results
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / products_available
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / products_unavailable
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / spam_type
        Removed value: -{
        -  "description": "SCAM, ROBOCALL, or null when clean",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / status
        Added value: +{
        +  "enum": [
        +    "success",
        +    "partial",
        +    "failed",
        +    "pending"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / total_charged
        Added value: +{
        +  "type": "number"
        +}
    • Changedvri_submit_job5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_cost
        Added value: +{
        +  "description": "Maximum quoted cost in USD; rejected before lookup if exceeded.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / phone_numbers / minItems
        Added value: +1
      • addedInput schema / properties / products / minItems
        Added value: +1
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "Stable unique ID for this operation. Reuse with identical arguments to retrieve its receipt without another charge.",
        +  "type": "string"
        +}
  2. 3 tool updates
    • Changedvri_number_lookup1 field changed
      • addedOutput schema / properties / risk
        Added value: +{
        +  "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"
        +}
    • Changedvri_sms_deliverability1 field changed
      • addedOutput schema / properties / reasons / description
        Added value: +"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."
    • Changedvri_spam_check1 field changed
      • addedOutput schema / properties / risk
        Added value: +{
        +  "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"
        +}
  3. 6 tool updates
    • First observedvri_bulk_lookup
    • First observedvri_bulk_status
    • First observedvri_number_lookup
    • First observedvri_sms_deliverability
    • First observedvri_spam_check
    • First observedvri_submit_job

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Validates SMS-capable phone numbers via x402 pay-per-call, detecting mobile vs landline, carrier type, and E.164 format.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides North American (NANP) area code and phone number intelligence for AI agents, including area code lookup, phone validation, carrier info, city/state coverage, local time, and scam context.
    8
    40 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables phone number intelligence and spam-risk detection by combining metadata, FTC complaint history, and IPQS reputation into explainable risk scores with confidence levels.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Remote MCP server that checks a US phone number's line type, carrier, activity score and TCPA litigator status, plus your prepaid balance. Connect from Claude Code, Cursor, Claude Desktop, VS Code or Windsurf with a NumberBroom API key; $0.20 per lookup.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.