Skip to main content
Glama

Revettr

Glama MCP server

Counterparty risk scoring for agentic commerce. One API call answers: "Should this agent send money to this counterparty?"

Revettr scores counterparties by analyzing domain intelligence, IP reputation, on-chain wallet history, and sanctions lists. It's designed for AI agents transacting via x402 on Base.

Install

pip install revettr

Related MCP server: agentradar

Quick Start

from revettr import Revettr

client = Revettr()

# Score a counterparty — send whatever data you have
score = client.score(
    domain="uniswap.org",
    ip="104.18.28.72",
    wallet_address="0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
)

print(f"Score: {score.score}/100 ({score.tier})")
print(f"Confidence: {score.confidence}")
print(f"Flags: {score.flags}")

if score.tier == "critical":
    print("DO NOT TRANSACT")

What Gets Scored

Send any combination of inputs. More data = higher confidence.

Input

Signal Group

What It Checks

domain

Domain Intelligence

WHOIS age, DNS config (MX, SPF, DMARC), SSL certificate

ip

IP Intelligence

Geolocation, VPN/proxy/Tor detection, datacenter vs residential

wallet_address

Wallet Analysis

Transaction count, wallet age, counterparty diversity, on-chain behavior

company_name

Sanctions Screening

OFAC SDN, EU consolidated, UN consolidated sanctions lists

Response

{
  "score": 90,
  "tier": "low",
  "confidence": 0.75,
  "signals_checked": 3,
  "flags": [],
  "signal_scores": {
    "domain": {
      "score": 80,
      "flags": [],
      "available": true,
      "details": {
        "domain_age_days": 2673,
        "dns": {"has_mx": true, "has_spf": true, "has_dmarc": true}
      }
    },
    "ip": {
      "score": 100,
      "flags": [],
      "available": true,
      "details": {
        "country": "US",
        "asn_org": "Cloudflare, Inc.",
        "is_private": false
      }
    },
    "wallet": {
      "score": 100,
      "flags": [],
      "available": true,
      "details": {
        "blockchain": {"tx_count": 100, "unique_counterparties": 29},
        "onchain": {"nonce": 16, "eth_balance": 0.072}
      }
    }
  },
  "metadata": {
    "inputs_provided": ["domain", "ip", "wallet_address"],
    "latency_ms": 1185,
    "version": "0.1.0"
  }
}

Score Tiers

Score

Tier

Meaning

80-100

low

Counterparty appears legitimate

60-79

medium

Some signals warrant caution

30-59

high

Multiple risk indicators present

0-29

critical

Strong risk signals — do not transact

A score of 0 means a hard match (e.g., exact sanctions hit). This overrides all other signals.

Risk Flags

Flags tell you exactly what triggered a score reduction. They are grouped by signal category:

Category

Examples

What It Covers

Domain

domain_age_under_*, no_mx_records, ssl_*

Domain age, DNS hygiene, SSL validity

IP

tor_exit_node, known_vpn, high_risk_country_*

Anonymization, geolocation risk

Wallet

wallet_never_transacted, wallet_age_under_*

On-chain history, activity patterns

Sanctions

sanctions_exact_match, sanctions_high_confidence_match

OFAC/EU/UN sanctions screening

The full set of flags and their descriptions are returned in the API response. Flag names are stable and machine-readable.

Usage Examples

Wallet only (minimal)

score = client.score(wallet_address="0xabc...")

Domain + IP (web service check)

score = client.score(domain="some-api.xyz", ip="185.220.101.42")

Full check

score = client.score(
    domain="merchant.com",
    ip="104.18.28.72",
    wallet_address="0xabc...",
    company_name="Merchant LLC",
)

With x402 auto-payment

The client handles x402 payment automatically. You need a funded wallet:

from revettr import Revettr

client = Revettr(
    wallet_private_key="0xYOUR_PRIVATE_KEY",  # Wallet that pays for the API call
)

# Client automatically handles the 402 → payment → retry flow
score = client.score(wallet_address="0xabc...")

Security: Never hardcode private keys. Use environment variables or a secrets manager in production.

With Virtuals Protocol (ACP)

Score seller agents before creating jobs on the Agent Commerce Protocol:

from revettr import Revettr

client = Revettr()
result = client.score(wallet_address=seller_wallet)
if result.score >= 60:
    # Safe to create ACP job
    job_id = chosen_offering.initiate_job(
        service_requirement={"task": "Analyze Q1 sales data"},
        evaluator_address=evaluator_address,
    )

See examples/virtuals_acp_safe_buyer.py for the full buyer agent flow.

Safe Agent Payments

Drop-in replacement for x402 payments that automatically checks counterparty risk before sending money. If the counterparty scores below your threshold, the payment is blocked.

from revettr import SafeX402Client, PaymentBlocked

async with SafeX402Client(
    wallet_private_key="0x...",
    min_score=60,    # Block "high" and "critical" risk
    on_fail="block", # Raise PaymentBlocked (default)
) as http:
    try:
        # Automatically scores the counterparty before paying
        response = await http.post("https://some-api.com/endpoint", json=data)
    except PaymentBlocked as e:
        print(f"Blocked: {e.url} scored {e.score}/100")

on_fail

Behavior

"block" (default)

Raise PaymentBlocked exception

"warn"

Log warning, proceed with payment

"log"

Silently log, proceed with payment

Pricing

Tier

Price

What You Get

Standard

$0.01 USDC

All available signals based on inputs provided

Payment is via x402 protocol — USDC on Base network. No API keys, no accounts, no contracts.

API Reference

POST /v1/score

Payment: x402 — $0.01 USDC on Base per request

Request body (JSON):

Field

Type

Required

Description

domain

string

No

Domain or URL

ip

string

No

IPv4 address

wallet_address

string

No

EVM address (0x...)

chain

string

No

Blockchain network (default: base)

company_name

string

No

Name to screen against sanctions

email

string

No

Email (future — not scored yet)

amount

float

No

Transaction amount in USD (context only)

At least one of domain, ip, wallet_address, or company_name is required.

GET /health

Payment: None (always free)

Returns API status and signal source availability.

Direct HTTP (without SDK)

# Without payment (returns 402):
curl -X POST https://revettr.com/v1/score \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'

# Returns HTTP 402 with payment-required header containing x402 payment terms

Disclaimer

Revettr is an informational tool. It aggregates publicly available signals and returns a risk score. It is not a compliance certification, legal advice, or guarantee of counterparty legitimacy. You are responsible for your own transaction decisions.

Built by

L Squared Digital Holdings

Available Tools

1 tool
score_counterpartyAInspect

Score a counterparty before sending money. Returns risk score 0-100.

Only use data explicitly provided by the user or retrieved from trusted sources. Do not fabricate input values.

Send any combination of inputs — more data means higher confidence. At least one field is required.

Args: domain: Domain or URL of the counterparty (e.g., "uniswap.org") ip: IP address of the counterparty server (e.g., "104.18.28.72") wallet_address: EVM wallet address on Base (e.g., "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045") chain: Blockchain network for wallet analysis (default: "base") company_name: Legal name to screen against OFAC/EU/UN sanctions lists stellar_wallet: Stellar wallet address (e.g., "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7")

Returns: Risk assessment with score (0-100), tier, confidence, flags, and per-signal breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNo
ipNo
wallet_addressNo
chainNobase
company_nameNo
stellar_walletNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the risk assessment nature, mentions sanctions list screening (OFAC/EU/UN), and details the return structure including score range (0-100) and response components. Could clarify if this makes external API calls or has side effects, but adequately covers the core behavioral traits.

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?

Well-structured with clear sections (purpose, constraints, usage, args, returns). Front-loaded with critical constraints. Slightly verbose due to long wallet address examples, but every section provides necessary information without redundancy.

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?

Given 6 parameters with complex financial domain concepts and existing output schema, the description is nearly complete. It covers input requirements, validation rules, and return value structure. Could elaborate on risk tier meanings or confidence scoring methodology, but sufficient for agent operation.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates with an 'Args:' section documenting all 6 parameters with semantic meanings (e.g., company_name screens 'against OFAC/EU/UN sanctions lists') and concrete examples for each. This significantly exceeds the baseline requirement given the schema deficiency.

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?

Opens with specific verb 'Score' + resource 'counterparty' + context 'before sending money', clearly defining the tool's function. No siblings exist to confuse with, but the description establishes a clear, specific purpose.

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?

Provides explicit constraints ('Only use data explicitly provided...', 'Do not fabricate input values'), explains the flexible input pattern ('Send any combination... At least one field is required'), and specifies when to use ('before sending money'). Lacks explicit 'when not to use' or alternatives, but none exist in this server.

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

TDQS

A4.3/5.0
Disambiguation5/5

With only a single tool available, there is no possibility of overlap or confusion with other tools. The 'score_counterparty' tool has a unique, specific purpose with no alternatives to misselect.

Naming Consistency5/5

The single tool follows a clear verb_noun pattern ('score_counterparty'). With only one tool in the set, there are no naming convention inconsistencies to evaluate.

Tool Count3/5

A single tool represents a minimal surface that feels thin for a financial risk assessment domain. While it covers the core scoring action, the lack of supporting tools (e.g., retrieving historical scores, listing past screenings) limits workflow flexibility.

Completeness3/5

The tool covers the primary 'score' operation but lacks complementary lifecycle operations such as retrieving previous scores, listing screening history, or batch processing. Notable gaps exist for audit trails and historical verification workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AlexanderLawson17/revettr-python'

If you have feedback or need assistance with the MCP directory API, please join our Discord server