Numbers Online — phone intelligence

Read-only phone intelligence for AI voice agents — line type, risk, DNC, signed receipts.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~891Tokens (tool definitions)
~995 BTypical response size
Moderate attention impact (0.70% of 128k context)

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": {
    "numbers-online": {
      "url": "https://numbers.online/api/v1/mcp"
    }
  }
}

Remote endpoints

https://numbers.online/api/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢phone_lookup(number, verstat, max_cache_age_seconds)

Return a supplementary, low-confidence intelligence bundle for a phone number: validity, formatting, line type, range carrier, country, caller name (CNAM, where available), STIR/SHAKEN verstat (supply the call's verstat to fold it into the spam signal), a labeled spam signal, and a first-party do-not-contact (DNC) signal — a suppression preference registered by the number's own owner, never a copy of any government registry. Advisory only — the agent keeps every routing and dialing decision.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Phone number in E.164, e.g. +14155552671 (loose input is normalized)."
    },
    "verstat": {
      "type": "string",
      "description": "Optional STIR/SHAKEN verstat for THIS call — TN-Validation-Passed / -Failed / No-TN-Validation, or a full Identity / P-Asserted-Identity header value. When supplied it folds into the risk signal (a failed validation raises it)."
    },
    "max_cache_age_seconds": {
      "type": "integer",
      "minimum": 0,
      "description": "Operator TTL control; 0 forces a fresh dip."
    }
  },
  "required": [
    "number"
  ]
}
🟢line_type(number)

Return only the deterministic fields for a number — validity, line type (mobile / fixed line / VoIP / …), range carrier, country, and formatting. No paid dip; a free, fast classification a voice agent can call before deciding to enrich.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Phone number in E.164, e.g. +14155552671 (loose input is normalized)."
    }
  },
  "required": [
    "number"
  ]
}
🟢caller_risk(number, verstat)

Return a labeled, low-confidence risk read for an inbound caller: a spam signal (0–100, higher = riskier), verstat passthrough, and a first-party do-not-contact (DNC) signal — without a name dip. A supplementary input to the agent's own policy, never a verdict on whether to accept or reject the call. Supply the call's STIR/SHAKEN verstat to fold it into the signal — a failed validation raises the risk.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Phone number in E.164, e.g. +14155552671 (loose input is normalized)."
    },
    "verstat": {
      "type": "string",
      "description": "Optional STIR/SHAKEN verstat for THIS call — TN-Validation-Passed / -Failed / No-TN-Validation, or a full Identity / P-Asserted-Identity header value. When supplied it folds into the risk signal (a failed validation raises it)."
    }
  },
  "required": [
    "number"
  ]
}
🟢dnc_check(number)

Return a first-party do-not-contact signal (suppress / no_match / unknown) for a number, sourced ONLY from suppression preferences registered and verified by the number's own owner inside Numbers Online — never a copy of any government or licensed do-not-call registry. "suppress" = the owner asked not to be contacted on this channel; "no_match" = no suppression preference on record (absence of suppress is not consent); "unknown" = the number could not be evaluated. Comes with a signed receipt recording the status "as of T". Advisory input to the agent's own process — it does not assert that a call is lawful.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Phone number in E.164, e.g. +14155552671 (loose input is normalized)."
    }
  },
  "required": [
    "number"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools