# LayerCall

> Score an IP, email, phone, domain or device for fraud in one call, with the signals behind it.

- name: com.layercall/trust-api
- version: 1.0.0
- connection class: R1 (autonomous)
- trust: 97/100
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.layercall%2Ftrust-api
- tools: https://api.protogrid.dev/v1/servers/com.layercall%2Ftrust-api/tools

**An agent can connect on its own if it already holds `TRUST_API_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "trust-api": {
      "type": "http",
      "url": "https://www.layercall.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ${TRUST_API_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${TRUST_API_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 85
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% ~updated-77d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: score_user (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); lookup_phone (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); score_domain (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,023 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 1,023 tokens to load them all
- tool set hash: 5baf1e219d99c3354cbb6e03c356dd29
- badge: [![protogrid quality](https://protogrid.dev/badge/com.layercall/trust-api.svg)](https://protogrid.dev/servers/com.layercall/trust-api)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://www.layercall.com/api/mcp (streamable-http, auth api_key ${TRUST_API_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `lookup_phone`: Validate a phone number worldwide against its national numbering plan. Returns E.164, country, line type (mobile/fixed/VoIP/toll-free/premium) and a risk score. Works globally, not US-only.
- `score_device`: Judge a browser fingerprint from /fp.js: headless detection, automation frameworks (Selenium, Puppeteer, Playwright), timezone-versus-IP mismatch and repeat-device history. Note the ceiling honestly — the declared signals it relies on are the first thing stealth tooling patches, so a clean result is weaker evidence than a dirty one.
- `score_domain`: Profile a domain: registration date from RDAP, registrar, MX/SPF/DMARC configuration, disposable-mail and risky-TLD detection. newly_registered is null when the age genuinely could not be determined — treat that as unknown, not as 'established'.
- `score_ip`: Risk-score an IPv4 or IPv6 address. Detects commercial VPNs (naming the provider where its own published list confirms it), proxies, Tor exit nodes and datacenter hosting, and returns geolocation, ASN and a 0-100 risk score with an allow/review/block verdict.
- `score_user`: Score an entire signup in one call — any combination of IP, email, phone and domain — returning a single weighted risk score, a verdict, and the top contributing signals. A hard block on any component is never averaged away. This is the tool to use when judging a person rather than a value. Costs one lookup PER COMPONENT supplied, not one per call, so four identifiers cost four; the response reports the exact figure as billable_lookups, and cached components are refunded.
- `verify_agent`: Cryptographically verify a Web Bot Auth signature (RFC 9421) — proof of WHICH agent is calling, not a guess from the user-agent. Returns verified true/false plus the agent's identity and declared purpose. This is the only check here that proves rather than infers, so it carries no score and no verdict: a verified assistant acting for a real user is usually welcome, a verified scraper usually is not, and that policy is the caller's. Pass the request the agent made to YOU — the signature covers its method, authority and path.
- `verify_email`: Check an email for syntax, MX records, disposable/throwaway providers, role accounts (info@, admin@), homograph lookalikes and domain age. Returns a 0-100 risk score and an allow/review/block verdict.
