Skip to main content
Glama

PG1 Sovereign Threat Intelligence

check_wallet_sanctions

PG1 Sovereign Threat Intelligence: checks a cryptocurrency wallet address against the OFAC SDN (Specially Designated Nationals) sanctions list, synced daily from US Treasury data. No payment required — this tool is always free. SIBLING DIFFERENTIATION: Use for wallet/address sanctions screening only. Do NOT use for IP/domain/hash/URL threat lookups (use get_ioc_context) or CVE data (use get_cve_details). BEHAVIOR: Returns { listed: true|false, matches, source, list_last_synced }. A listed:false result means the address is not on the OFAC SDN list as of the reported sync time — it is informational only, not legal or sanctions-compliance advice, and is never phrased as "safe" or "clean". Fails loudly (returns an error) if the sanctions data is empty or unreachable, rather than ever reporting listed:false on a data failure. VALIDATION: if the address does not match a recognised format for any supported currency (EVM, BTC/LTC/BCH/DOGE/DASH/ZEC base58 or bech32/cashaddr, TRON, Monero, Solana), returns an MCP tool error (isError: true, code invalid_address) instead of a result — it never reports listed:false for malformed input.

Input Schema

NameRequiredDescriptionDefault
addressYesMandatory wallet address to screen, e.g. an EVM 0x address, a bech32 (bc1/tb1/ltc1...) address, or a base58 address.
currencyNoOptional currency/chain filter to narrow the match, e.g. 'BTC', 'ETH', 'XMR'.

Output Schema

NameRequiredDescriptionDefault
checksNoWhich underlying sources were checked for this result and whether each one completed.
listedYes
sourceYes
statusNo"unknown" whenever a source needed for this answer timed out, errored, or was skipped - never "no_flags" in that case.
addressYesThe address exactly as submitted.
matchesYes
messageNo
reasonsNoMachine-readable reason codes for anything flagged in this result. Empty when nothing was flagged.
disclaimerNo
request_idNoUUID for this request, also sent as the X-Request-Id response header.
test_fixtureNotrue only when the input was a documented integration test fixture and this response is canned; absent on real results.
list_last_syncedYes
address_normalizedYesThe address after normalization, used to match against sanctioned_wallets.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedOutput schema / properties / checks
      Added value: +{
      +  "description": "Which underlying sources were checked for this result and whether each one completed.",
      +  "items": {
      +    "properties": {
      +      "checked_at": {
      +        "type": "string"
      +      },
      +      "data_as_of": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "result": {
      +        "enum": [
      +          "ok",
      +          "timeout",
      +          "error",
      +          "skipped"
      +        ],
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Generic label for the data source checked, never a vendor name.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "source",
      +      "result",
      +      "checked_at",
      +      "data_as_of"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / reasons
      Added value: +{
      +  "description": "Machine-readable reason codes for anything flagged in this result. Empty when nothing was flagged.",
      +  "items": {
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / request_id
      Added value: +{
      +  "description": "UUID for this request, also sent as the X-Request-Id response header.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "description": "\"unknown\" whenever a source needed for this answer timed out, errored, or was skipped - never \"no_flags\" in that case.",
      +  "enum": [
      +    "flagged",
      +    "no_flags",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / test_fixture
      Added value: +{
      +  "description": "true only when the input was a documented integration test fixture and this response is canned; absent on real results.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "address": {
      +      "description": "The address exactly as submitted.",
      +      "type": "string"
      +    },
      +    "address_normalized": {
      +      "description": "The address after normalization, used to match against sanctioned_wallets.",
      +      "type": "string"
      +    },
      +    "disclaimer": {
      +      "type": "string"
      +    },
      +    "list_last_synced": {
      +      "type": "string"
      +    },
      +    "listed": {
      +      "type": "boolean"
      +    },
      +    "matches": {
      +      "items": {
      +        "properties": {
      +          "currency": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "programs": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "sdn_name": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "sdn_uid": {
      +            "type": [
      +              "string",
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "address",
      +    "address_normalized",
      +    "listed",
      +    "matches",
      +    "source",
      +    "list_last_synced"
      +  ],
      +  "type": "object"
      +}
  3. Added

TDQS

A4.9/5.0
Behavior5/5

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

No annotations, so the description carries full burden and does so richly: discloses it is always free, the exact return shape, that listed:false is informational and never phrased 'safe'/'clean', that it fails loudly on empty/unreachable data rather than reporting listed:false, and that malformed input returns an isError with code invalid_address. This is unusually thorough behavioral disclosure.

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?

Front-loads the core purpose, then uses labeled sections (SIBLING DIFFERENTIATION, BEHAVIOR, VALIDATION) that earn their space. Despite its length, every sentence conveys distinct operational information; nothing is 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?

Has an output schema, so return-value documentation is not strictly needed, yet the description still adds interpretation (listed:false semantics, failure mode, validation behavior). For a sanctions-screening tool where misreading a false result is high-stakes, this is 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?

Schema coverage is 100%, so the schema already documents both parameters; baseline would be 3. The description adds value by enumerating supported address formats (EVM, BTC/LTC/BCH/DOGE/DASH/ZEC base58/bech32/cashaddr, TRON, Monero, Solana), which clarifies what 'address' and 'currency' accept beyond the schema's brief examples.

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: 'checks a cryptocurrency wallet address against the OFAC SDN sanctions list.' It also explicitly names the sibling tools it is NOT for (get_ioc_context for IP/domain/hash/URL, get_cve_details for CVE), letting an agent route correctly without opening any schema.

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?

Gives an explicit 'Use for wallet/address sanctions screening only' clause plus named alternatives and the conditions that select them. This is textbook when/when-not guidance with alternatives spelled out.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.