Investigate fraud from Claude, Cursor or any MCP client. Explain any verdict with the evidence behind it, pivot from one signup to every account sharing its device, IP or inbox, check an entity against a cross-operator abuse network, and work the review queue. Read-only by default.
Strong tool definitions with complete schemas, clear descriptions, and proper tool annotations. All 11 tools have explicit input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (check_*, list_*, get_*, score_*, add_*, label_*, investigate_*, explain_*). Descriptions are detailed and context-rich (100-300 chars typical), explaining WHAT the tool does, WHEN to use it, and consequences (quota consumption, idempotence). Tool annotations (READ_ONLY, RECORDS_EVENT, ADDITIVE_WRITE, APPENDS_LABEL) are explicit and complete for all tools. Error handling is present but minimal, no recovery guidance or actionable error messages visible in source. Output schemas are not formally documented in the code (responses are JSON-stringified but structure not declared). Parameter descriptions are thorough but some lack explicit format/constraint details (e.g., 'phone' accepts 'E.164 or national' but no validation rules shown).
Add an entity to a list (allowlist, blocklist, or review list). Additive list write: adding the same entry twice leaves the tenant in the same state, and an entry can be removed again from the dashboard, so this is a non-destructive update even though it changes live verdicts at once.
Enrichment and in-network reputation for one email address: disposable/throwaway domain, deliverability, fraud score, plus how often the address has been seen abusing other operators. Also returns `canonical`, the identity key: every alias that reaches one mailbox (+tags, gmail dot tricks, googlemail.com) collapses to the same string, so compare THAT across accounts to tell whether two signups are one person. `is_aliased` and `alias_tricks` say which trick was used, and `reject_reason` says why an address is unusable. Consumes one row of monthly quota.
Enrichment and in-network reputation for one IP: proxy/VPN/Tor, datacenter ASN, geo, fraud score, and cross-operator abuse history. Consumes one row of monthly quota.
Validity, line type, carrier and fraud score for one phone number. Consumes one row of monthly quota.
Output schemas not formally documented. Responses are JSON-stringified but structure (fields, types, required properties) is not declared in tool definitions. LLMs cannot plan downstream calls or extract specific fields without guessing.
Error handling lacks recovery guidance. Source shows generic error wrapping ('Kaidn error: ...') but no categorization (retryable vs fatal), no actionable next steps, and no invalid-value echoing. LLMs cannot self-correct or decide whether to retry.
Parameter format constraints not explicit. 'phone' accepts 'E.164 or national' but no regex, length limits, or character restrictions stated. 'country' is ISO code but no validation shown. LLMs may pass invalid formats.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
The 'why was this blocked?' tool. Returns the event with every check that fired, its weight, and the raw evidence behind it, so the reasoning can be narrated with receipts rather than guessed at. Free.
This tenant's weight and threshold overrides plus the effective merged engine config. Free. Useful for explaining why a score landed where it did.
Aggregate view over a rolling window: totals by verdict, average score and the most common reasons. Free — does not consume quota. Start here to see what changed before drilling into individual events.
Full ring pivot: every account that shares a device, IP or inbox with the target. Returns the entity (device/IP/email) and every event that touched it, newest first, so you can see the whole fraud ring at once. Free.
Append a label to an event (e.g. 'chargeback', 'friendly_fraud', 'account_takeover'). Each label appends another outcome record, so twice differs from once.
Scored events for this tenant, newest first. Free — does not consume quota. Filter by verdict or event type, or search by device fingerprint or user id with `q`, to narrow an investigation. `q` is matched by the store across the whole history, so it finds records far older than one page.
Score a new event and record it. Returns the verdict (allow/review/block), the fraud score, and every check that fired with its weight and evidence. Scores AND records an event, so a second identical call is not a no-op.
Pagination limits not enforced in code. list_events accepts 'limit' and 'offset' but no visible bounds checking (e.g., max 100). Agents could request 10,000 events, exhausting context or API quota.
Quota consumption not surfaced in responses. check_email, check_ip, check_phone consume quota but responses do not indicate remaining quota or cost. Agents cannot reason about quota exhaustion or plan calls accordingly.