Every stablecoin freeze and seize on record, with the evidence.

Use Eagle Virtual in Claude or ChatGPT

Listed in both directories

Add it to Claude or ChatGPT

You add it from inside Claude or ChatGPT, so there is no server address to paste. It only reads, and you do not need an Eagle Virtual account or an API key.

Claude

Listed in the Claude directory since October 2026

Add to Claude Claude steps

ChatGPT

Listed in the ChatGPT Plugins Directory since September 2026

Add to ChatGPT ChatGPT steps

Ask Claude, ChatGPT or Cursor whether Tether, Circle or any other issuer has blacklisted, frozen or seized a wallet. It is the same record as this site.

Server facts as of October 5, 2026. Every tool only reads. You can use them with no account, up to 100 calls a day from one network address.

Add Eagle Virtual to Claude

Eagle Virtual USDT & USDC Blacklist Tracker by Eagle Virtual LLC is listed in the Claude directory. Connect it from its listing. You do not need to add a custom connector or paste a server address.

It does not need an Eagle Virtual sign-in or API key.

Open Eagle Virtual in Claude

Open the Claude directory

  1. Open the listing

    Sign in to Claude and open the Eagle Virtual listing in the directory.

  2. Connect it

    Select Connect to Claude. On a team plan, an owner selects Connect for your team.

  3. Ask in a new chat

    Start a new chat and ask: “Which blockchains does Eagle Virtual check?”

Add Eagle Virtual to ChatGPT

USDT & USDC Blacklist Tracker by Eagle Virtual LLC is listed in the ChatGPT Plugins Directory. Install it from the directory. You do not need Developer mode or a custom MCP connection.

After installation, “no account linked” and authorization “None” are normal. The plugin does not need an Eagle Virtual sign-in or API key.

If installation is disabled in your workspace, ask your administrator to allow the plugin.

Open Eagle Virtual in ChatGPT

Open the ChatGPT Plugins Directory

ChatGPT’s plugin installation guide

  1. Open Plugins

    Sign in to ChatGPT on the web or desktop and open Plugins. If your account shows Apps instead, open Apps.

  2. Find the Eagle Virtual listing

    Search for USDT & USDC Blacklist Tracker. Open the listing from Eagle Virtual LLC.

  3. Install the plugin

    Select the plus (+) button to install it and review any permission prompt. If you see Uninstall instead, the plugin is already installed.

  4. Try it in a new chat

    Start a new chat. Type @ and select USDT & USDC Blacklist Tracker. Ask: “Which blockchains does Eagle Virtual check?”

What it is

These tools read the stablecoin blacklist and freeze record: what each issuer, the business that created a coin and can freeze it, has done to wallets. Every answer comes from the same live record this site shows, and says the date it was read.

What it is
Item Detail
Endpoint https://mcp.eaglevirtual.com/mcp
Transport
A standard way for an AI assistant to call an outside tool. Your assistant sends the question to our server and gets back dated records. You paste the address above into your assistant once, and it does the rest.
Streamable HTTP: JSON-RPC over POST. GET is refused with 405.
Protocol version Up to MCP 2025-11-25, agreed with each client when it connects. The connection follows the 2026-07-28 revision: one POST per call, no GET stream, no sessions.
Server name eagle-virtual, version 1.1.4
Authentication None needed to read. With no account, one network address gets 100 calls a day. Calls from Anthropic's, OpenAI's and Perplexity's own servers are not counted against it. If you sign in or send an API key, the calls count against your plan's daily allowance instead: 1,000 a day on the Free plan.
Hostname https://mcp.eaglevirtual.com, live since August 22, 2026. This is the only supported address.

How to connect

For Claude and ChatGPT, use the directory steps above. For a direct MCP connection in another client, use https://mcp.eaglevirtual.com/mcp. If a menu path below disagrees with the client's own documentation, follow the client's.

  1. Claude (web and desktop)

    Connect Eagle Virtual from the Claude directory using the three steps above. No manual server setup is needed.

  2. ChatGPT

    Install USDT & USDC Blacklist Tracker from the Plugins Directory using the four steps above. No manual server setup is needed.

  3. Claude Code, Cursor, VS Code, or any other MCP client

    Use the snippets below, each in that client's own mcp.json.

Claude Code, Cursor, VS Code
# Claude Code — one command:
claude mcp add --transport http eaglevirtual https://mcp.eaglevirtual.com/mcp

# Claude Code — or .mcp.json at the project root (the type line is required):
{
  "mcpServers": {
    "eaglevirtual": {
      "type": "http",
      "url": "https://mcp.eaglevirtual.com/mcp"
    }
  }
}

# Cursor — .cursor/mcp.json in the project, or ~/.cursor/mcp.json:
{
  "mcpServers": {
    "eaglevirtual": {
      "url": "https://mcp.eaglevirtual.com/mcp"
    }
  }
}

# VS Code — .vscode/mcp.json:
{
  "servers": {
    "eaglevirtual": {
      "type": "http",
      "url": "https://mcp.eaglevirtual.com/mcp"
    }
  }
}

Reading, indexing and bulk access

Search engines and AI assistants are welcome to read, index and cite these pages. To copy the record in bulk, tell us what you are building at sales@eaglevirtual.com.

Training a model on the record, or republishing it in bulk, needs a written agreement. The rules are at /license.

sales@eaglevirtual.com

Try these

Each prompt answers with dated records, from the tool named beside it.

Try these
Item Detail
Which controls has Circle actually used on USDC, and when did it last use each? get_token_policy: every control it has used, with dates and counts.
How many wallets did Tether blacklist in 2025, and how does that compare to 2024? get_token_statistics: USDT counts by year, with events and wallets.
Which chains does this cover, and how current is it? get_coverage: every chain and coin covered, and how current each is.
Has Tether ever frozen or blacklisted this wallet: TNiq9AXBp9EjUqhDhrwrfvAA8U3GUQZH81? get_address_status: its state and one dated record for each event.
Show me recent USDT freezes on Tron. list_freeze_events: the newest published rows, USDT on Tron.
What is the largest stablecoin blacklist and the largest freeze ever recorded? get_biggest, called twice: the largest blacklist and the largest freeze since 2015.
The full tool reference: every tool, field and response

Querying the server directly

You do not need a client library. The server speaks JSON-RPC 2.0 over HTTP: one POST for each call to https://mcp.eaglevirtual.com/mcp. The six tools only read, and you can call them with no account. GET is answered with 405. Four headers are required: Content-Type: application/json; Accept: application/json, text/event-stream; MCP-Protocol-Version: 2026-07-28; and Mcp-Method naming the JSON-RPC method. A tools/call also needs Mcp-Name naming the tool. Because the server implements protocol revision 2026-07-28, every request also includes the per-request envelope in params._meta (the protocol version, your client's name and version, and its capabilities). A request without it is refused with a JSON-RPC error that says which key is missing. A request whose headers and body disagree is refused with -32020 rather than guessed at.

The same call shapes work for every tool: tools/list to read the six schemas, then tools/call with the tool name and its arguments. The example below checks one wallet. The response that follows is what the live server returned for it on October 5, 2026, cut down to one record.

Request: curl, tools/call get_address_status
curl -s https://mcp.eaglevirtual.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: get_address_status' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "get_address_status",
      "arguments": { "address": "0x9b2328055872e7470e9cfdafa0186c1c72c3bac4" },
      "_meta": {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientInfo": { "name": "my-script", "version": "1" },
        "io.modelcontextprotocol/clientCapabilities": {}
      }
    }
  }'

What comes back

A JSON-RPC result. Its content[0].text is the answer as a JSON string, and its structuredContent is the same answer as an object. The state is one of restricted, released, clean, or stale. released was added on September 25, 2026. If your code treated every state other than clean as frozen, check for restricted only. Every record includes a title, a one-sentence text that names the issuer as the actor, a url on this site to cite, the record data (including the amount and the dollar figure where the record has them), and a metadata block with the as-of date and the license. known_name is the wallet's verified ENS primary name where it has one, and null otherwise, as in this sample. No other kind of name is ever served, so known_name_verified is true whenever a name is present. A wallet with nothing on record answers clean while at least one chain it can be on is up to date, and the headline names any of those chains that is behind. It answers stale only when none of them is up to date.

Response, cut down to one record
{
  "jsonrpc": "2.0", "id": 1,
  "result": {
    "content": [{ "type": "text", "text": "{ …the same object as structuredContent… }" }],
    "structuredContent": {
      "address": "0x9b2328055872E7470e9CFDAfA0186C1c72C3bAc4",
      "lookup_key": "0x9b2328055872e7470e9cfdafa0186c1c72c3bac4",
      "recognized": true,
      "known_name": null,
      "known_name_verified": null,
      "state": "restricted",
      "headline": "3 records found",
      "record_count": 3,
      "records": [
        {
          "id": "fae73fe502850f640120e24afa1c075d",
          "title": "USDT — balance taken on Ethereum, block 25,776,080",
          "url": "https://eaglevirtual.com/address/0x9b2328055872e7470e9cfdafa0186c1c72c3bac4",
          "text": "Tether took the balance of 0x9b2328055872e7470e9cfdafa0186c1c72c3bac4 on Ethereum on 2026-08-17, block 25,776,080. Transaction 0xd87f889460d81cb099eb1d617efad22728aae787fb2fb5d7f948bb634add4ad9. Amount 178,835.401131 USDT, as the event logged it ($178,835.40 at the event block, basis peg).",
          "metadata": {
            "source": "Eagle Virtual USDT & USDC Blacklist Tracker",
            "as_of": "2026-10-05",
            "corpus_as_of": "2026-10-04",
            "exported_at": "2026-10-05T00:24:37.000Z",
            "license": "https://eaglevirtual.com/license.xml"
          },
          "data": {
            "address": "0x9b2328055872e7470e9cfdafa0186c1c72c3bac4",
            "chain": "Ethereum", "chain_id": "1", "coin": "USDT", "issuer": "Tether",
            "category": "blacklist", "event_signature": "DestroyedBlackFunds(address,uint256)",
            "is_seizure": true, "is_release": false,
            "observed_at": "2026-08-17T16:44:47.000Z", "block_number": 25776080,
            "transaction_hash": "0xd87f889460d81cb099eb1d617efad22728aae787fb2fb5d7f948bb634add4ad9",
            "amount": "178,835.401131", "amount_unit": "USDT",
            "amount_basis": "logged", "amount_note": "The amount as the event logged it.",
            "usd": "$178,835.40", "usd_basis": "peg"
          }
        }
      ]
    }
  }
}

The six tools

The server lists six tools, in this order, and every one of them only reads. They answer with counts, dates, the one address you supplied, the published feed, or the largest recorded amounts. Nothing here writes anything, and you can call all six with no account. A plan changes one thing: the events behind a month's totals are part of the Business plan.

Every response has the same shape: a state or a count, a list of records, and a metadata block. Every record is one object you can cite: an id, a title, a url on this site, a one-sentence dated text with the issuer as the actor, and a data block of structured fields. A wallet with six recorded events comes back as six records, each pointing at that wallet's page here.

The metadata block has source, as_of (the date of the most recent recorded event, not today's date), corpus_as_of, exported_at (when we last published the data this server answers from), and license. When we cannot vouch for a chain at the moment of the call, not_vouched_for names it: the chain, whether it was never scanned or is behind, and the last verified block. coverage_note says the same in a sentence. When our data does not answer at all, coverage_note says that instead. Neither case is ever left silent.

The six tools
Item Detail
get_address_status Give it one wallet. It returns every recorded freeze, seizure, blacklisting or on-chain sanctions listing against it, with the transaction and block for each. State: clean, restricted, released or stale.
get_token_statistics Counts by coin, chain, month or year. By coin it returns the top 20 by recorded events unless you set limit, and says how many it left out. Returns no addresses.
get_token_policy For each coin, which restriction controls the issuer has actually used, how many times, and the first and most recent dates. Returns no addresses.
get_coverage The chains and coins covered, the as-of date, and which chains we cannot vouch for right now.
list_freeze_events The published feed of recent events, the same rows the events page shows, filterable by coin, chain, kind and date. Give it a month and it returns that month's totals on every plan, and every event behind them on the Business plan. It is one of the two tools that return addresses you did not supply (the other is get_biggest's default view), and it cannot be paged past.
get_biggest The largest recorded blacklistings, freezes, seizures and releases, largest first, filterable by coin, chain and kind. A restriction is ranked by the balance the wallet held. A seizure is ranked by the balance taken. Each row says which. The default scope ranks the 25 latest recorded events and names the wallet. scope all_time covers the whole record back to 2015 and names no wallet, transaction or block.

get_address_status: check a wallet

Give it one address in any form its chain uses. It accepts Ethereum-style addresses (used by Ethereum and many other chains), addresses on Tron, Solana, Stellar, TON, the XRP Ledger, Aptos, Starknet and Sui, and NEAR account names that end in .near. An Ethereum-style address works in all small letters, all capitals, or with the capitals the wallet shows, and all three are the same wallet. Any other mix of capitals is read as a typo, and no lookup is run. For every other kind of address, keep the capital and small letters as the wallet shows them.

What comes back: the full address, the state (clean, restricted, released or stale), a headline ("No freeze, seizure, or blacklist recorded", "N records found", "N records found. As of <date>, every freeze on record had been lifted", or "We cannot vouch for this right now"), and one record for each recorded event. Each record has the issuer, the coin, the chain, the date, the block, the transaction hash, the event signature, and the amount and dollar figure where the record has them. known_name is the wallet's verified, current ENS primary name, or null. An ENS name that is not the primary, an external label or a reported name is never served, so known_name_verified is true whenever a name is present. Each record also includes the coin's contract and full name, the kind word the page prints, and the dollar basis in plain English. A string that is not a valid address on any chain we check returns recognized: false and no lookup is run, so a typo cannot read as a clear wallet. A test-network address, which holds play money, returns recognized: false in the same way, and the answer says it is on a test network. An address on a coin that has no blacklist or freeze function, like Bitcoin, also returns recognized: false, and no lookup is run. The headline names the coin, for example "Bitcoin has no blacklist". An address with extra text on the front or the end also returns recognized: false, and no lookup is run. Two examples are a prefix we do not recognize before the address (foo:0x…) and a Stellar M… address, which adds an account number to the wallet. A known prefix, like eth:0x…, is read as the plain address. The headline is "This address has extra text, so nothing was checked".

restricted means the record shows at least one freeze that has not been lifted. released means every freeze on record was later lifted. Both are as of the date on the answer, and both come with every record, so you can see who froze the wallet and when the freeze was lifted. released was added on September 25, 2026. Before then, a wallet like that came back as restricted.

stale means we could not vouch for the answer at that moment. Either our data did not answer, or a chain the answer depends on was behind. It is a statement about us, not about the wallet.

Amounts and dollar figures are returned where the record has them, and only there. amount is the quantity in the coin's own units. amount_unit names the coin, and amount_basis says where the figure came from: logged, as the event itself named it, or measured on-chain. A measured figure is the balance the wallet held at the event block for a restriction, or in the block before for a seizure, because the seizure block destroyed it. A freeze whose balance was destroyed later in the same block is also measured in the block before, and never shows more than the amount destroyed. usd is the dollar figure at a certified price for that coin at that block, formatted to the cent, with usd_basis naming the price source. Where no certified price exists for that block, usd is null. It is not today's price on an old event. Where we read the balance and it was zero, usd is $0.00 and usd_basis is null. The quantity is zero, so the value is zero and no price is needed. Where the record has no amount at all, amount is null and amount_note says so.

get_address_status: check a wallet
Item Detail
address Required. The wallet address, in any format the chain uses; up to 120 characters.

get_token_statistics: counts, no addresses

Counts of recorded freezes, seizures and blacklistings, grouped by coin, chain, month or year, with the date of the first event and the as-of date. Wallet counts are distinct within each grouping and do not add up to the total on purpose: a wallet restricted by two issuers is one wallet overall and one in each of two rows, and the response says so.

The total is counted over every coin we check, which includes coins that are not stablecoins. The response labels it that way rather than letting "stablecoin wallets" be inferred.

get_token_statistics: counts, no addresses
Item Detail
token Optional. A coin symbol, e.g. USDT. Omit for every coin.
chain Optional. A chain name or chain id, e.g. Ethereum or 1.
group_by Optional. One of token, chain, month, year, overall. Defaults to token.
limit Optional. How many coins the by-coin breakdown returns, the coins with the most recorded events first. Defaults to 20, up to 200. The totals count every coin whatever the limit, and coins_matched says how many coins there are.

get_token_policy: what an issuer has done

For a coin, the record of which restriction controls the issuer has actually used (freezing, blacklisting, taking a balance, lifting a restriction), each with its on-chain event signature, how many times, and the first and most recent dates, on the chains we check, as of the as_of date in the answer.

It reports what has happened. It does not report what a contract is capable of: contract capability inspection is not published, the contract_capability field is null rather than false, and the note beside it says that an absence of recorded events is not evidence that a control is absent. A coin with nothing recorded comes back as nothing recorded, dated and scoped. It does not come back as "cannot freeze".

get_token_policy: what an issuer has done
Item Detail
token Optional. A coin symbol, e.g. USDT, USDC, EURC. Omit for every coin on record.

get_coverage: what we check, and how fresh it is

Takes no arguments. Returns the chains and coins covered, the number of recorded events, the first-event and as-of dates, one record for each chain saying whether we can vouch for it right now, and the same not_vouched_for list every other tool includes. all_lanes_current is true, false, or null. It is null when our data could not be asked, because "we could not check" must not read as "everything is current".

Call it before relying on an answer about a chain or a coin. A chain we are not checking shows as not currently checked, and an absence of records for it means nothing.

list_freeze_events: the published feed

The same recent events the events page shows, capped at the published feed, filterable by coin, chain, kind and date, up to 100 rows in one call and 25 by default. Each row is one record citing that wallet's page.

Give it a month (YYYY-MM) and it answers for one whole recorded month. The month's totals answer on every plan, so a caller is never told there is no data when there is. The events behind those totals are part of the Business plan, and a caller without it gets the totals and one sentence saying so. A month row shows the priced US dollar figure and no native quantity. get_address_status shows the quantity.

It is a published sample, not the whole record, and the response says so: subset_note states the sample size and that there is no way to page past it, and matched_in_published_subset and truncated say what the filters hit. There is no cursor, no offset, no prefix search and no "what changed since". Each of those would hand over the full list a row at a time. For one wallet, use get_address_status. For totals, use get_token_statistics.

list_freeze_events: the published feed
Item Detail
token Optional. A coin symbol, e.g. USDT.
chain Optional. A chain name or chain id, e.g. Tron or 1.
kind Optional. One of blacklist, freeze, seizure, release, sanctions, delisting.
since Optional. Only events on or after this date, YYYY-MM-DD.
month Optional. One whole recorded month, YYYY-MM, instead of the recent feed. The month's totals answer on every plan. The events behind them are part of the Business plan.
limit Optional. Rows to return, 1 to 100. Defaults to 25.

get_biggest: the largest recorded amounts

Blacklistings, freezes, seizures and releases ordered by amount, largest first. Filter by coin, chain or kind.

A blacklisting or a freeze is ranked by the balance the wallet HELD when it was restricted. A seizure is ranked by the balance that was TAKEN. Those are two different quantities and the record keeps them apart. Every row says which basis it used: measured at the event block for a restriction, and at the block before for a seizure, because the seizure block destroyed the balance. A freeze whose balance was destroyed later in the same block is measured at the block before too. A ranking that mixed them would be comparing money frozen with money gone.

The default scope ranks the 25 latest recorded events, the same list the home report shows, and includes the wallet, block and transaction for each row. Our record goes back to 2015, so the largest events in it are very likely older than those.

Inside that scope a priced event ranks above an unpriced one, because a certified US figure and a quantity of some other coin are not comparable. An event with no certified price is ranked by its native quantity, after every priced one.

For those, pass scope all_time. That ranking covers the whole record and names NO wallet, NO transaction and NO block for any row. Leaving those out is what lets it go back that far. The site shows the latest freezes and seizes and the 100 largest ever, with the wallet, to everyone. The full event lists are part of the Business plan. Every count and total is the whole record, and checking one wallet is free for everyone. A ranking of amounts that identifies nobody is not a list of wallets. What you get is the amount, the coin, the chain, the issuer and the date.

An amount appears only where the record has one. Where it does not, the row is left out of the ranking rather than sorted as a zero. A zero would place a wallet whose amount we never recorded below one whose amount was genuinely small, and that is a claim about both that we cannot make.

get_biggest: the largest recorded amounts
Item Detail
token Optional. A coin symbol, e.g. USDT. Omit for every coin.
chain Optional. A chain name or chain id, e.g. Tron or 1.
kind Optional. One of blacklist, freeze, seizure, release or sanctions. Omit for all of them.
scope Optional. recent (the default) ranks the 25 latest recorded events and names the wallet, block and transaction. all_time covers the whole record back to 2015 and names none of them.
limit Optional. Rows to return. Defaults to the server's standard page size.

OpenAI-compatible tool schema

The six tools as function definitions, in the shape the OpenAI chat-completions API and the frameworks that copy it expect: a type, and a function with name, description and parameters. The parameters objects are the server's own input schemas, unchanged. A test fails if this block and the server ever differ.

An agent that cannot speak MCP can show these to its model and relay each call to the endpoint above as an MCP tools/call request with the same arguments. An agent that can speak MCP should just connect. The server lists the same six.

tools, in the OpenAI function-calling shape
[
  {
    "type": "function",
    "function": {
      "name": "get_address_status",
      "description": "Check one wallet address against the record of stablecoin blacklistings, freezes and seizures. Returns every recorded action against that address — which issuer took it, on which blockchain, on what date, and in which transaction and block, so it can be verified independently. Covers USDT, USDC and every other coin in this record, on every blockchain it checks. Returns a dated record of what an issuer did, never a risk score, rating, or opinion about the address or its owner. Needs no account.",
      "parameters": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "The wallet address to check, in any format the chain uses. Accepts Ethereum-style addresses (used by Ethereum and many other chains), addresses on Tron, Solana, Stellar, TON, the XRP Ledger, Aptos, Starknet and Sui, and NEAR account names that end in .near. An Ethereum-style address works in all small letters, all capitals, or with the capitals the wallet shows. Any other mix of capitals is read as a typo. For every other kind of address, keep the capital and small letters as the wallet shows them.",
            "maxLength": 120,
            "examples": [
              "0x000000000000000000000000000000000000dead",
              "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb"
            ]
          }
        },
        "required": [
          "address"
        ],
        "additionalProperties": false
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_token_statistics",
      "description": "Counts of recorded stablecoin blacklistings, freezes and seizures — by coin, by blockchain, by month, or by year. Answers questions like \"how many wallets has Tether blacklisted\", \"which coin is frozen most often\", and \"how many seizures happened in 2025\". Returns counts and dates only; no wallet addresses are returned by this tool.",
      "parameters": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Optional coin ticker, e.g. USDT. A ticker two issuers use returns both coins, each with its issuer. Omit for every coin.",
            "maxLength": 32
          },
          "chain": {
            "type": "string",
            "description": "Optional blockchain name or chain id, e.g. Ethereum or 1.",
            "maxLength": 32
          },
          "group_by": {
            "type": "string",
            "enum": [
              "token",
              "chain",
              "month",
              "year",
              "overall"
            ],
            "description": "Which breakdown to return. Defaults to token."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "How many coins the by-coin breakdown returns, the coins with the most recorded events first. Defaults to 20, up to 200. The totals count every coin whatever the limit. The other breakdowns are short and are returned whole."
          }
        },
        "additionalProperties": false
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_token_policy",
      "description": "For a given coin, the record of which restriction controls the issuer has actually used — blacklisting, freezing, taking a balance, lifting a restriction — with the on-chain event signature, how many times, and the first and most recent dates. Reports what has happened, dated. It does not report what a contract is capable of: contract capability inspection is not published yet, and this tool says so rather than inferring that a coin cannot freeze from an absence of records. Discloses no wallets.",
      "parameters": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Coin ticker, e.g. USDT, USDC, EURC. A ticker two issuers use returns both coins, each with its issuer. Omit for every coin on record.",
            "maxLength": 32
          }
        },
        "additionalProperties": false
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_coverage",
      "description": "The blockchains and coins covered by this stablecoin blacklist and freeze record, the date of the most recent recorded event, and which blockchains have records that are behind right now, so we cannot vouch for them. Call this to find out whether a chain or coin is in scope before relying on an answer about it, and to check whether any part of the record is behind. `chains_claimed`, `coins_covered`, `contracts_checked` and `companies_checked` are what a check covers; the `coins` array lists only the coins that have at least one recorded event, which is a smaller set. A coin is one name run by one issuer, so a name that two issuers use appears once per issuer, with the issuer after it.",
      "parameters": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "list_freeze_events",
      "description": "The published feed of recent stablecoin blacklist, freeze, seizure, release and on-chain sanctions events, the same rows eaglevirtual.com shows publicly, with the wallet, coin, blockchain, date, block and transaction for each. Covers every coin on every chain: omit the filters and it returns all of them, newest first. Filter by coin, blockchain, event kind or date to narrow it. This is a published sample of the record, not the full corpus, and there is no way to page beyond it. Add month (YYYY-MM) for one whole recorded month: every caller gets the month’s totals, and the events behind them need a paid account. To check a specific wallet, use get_address_status; for totals use get_token_statistics.",
      "parameters": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Coin symbol, e.g. USDT.",
            "maxLength": 32
          },
          "chain": {
            "type": "string",
            "description": "Blockchain name or chain id, e.g. Tron or 1.",
            "maxLength": 32
          },
          "kind": {
            "type": "string",
            "enum": [
              "blacklist",
              "freeze",
              "seizure",
              "release",
              "sanctions",
              "delisting"
            ],
            "description": "Restrict to one kind of event. \"blacklist\" is a deny-list entry in the token contract; \"freeze\" locks an account; \"seizure\" took the balance; \"release\" lifted a restriction; \"sanctions\" is an on-chain sanctions listing; \"delisting\" removed one. Omit for all."
          },
          "since": {
            "type": "string",
            "description": "Only events on or after this date, YYYY-MM-DD.",
            "maxLength": 10
          },
          "month": {
            "type": "string",
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "minLength": 7,
            "maxLength": 7,
            "description": "One whole recorded month, YYYY-MM, instead of the recent feed. Every caller gets the month’s totals; the events behind them need a paid account."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Rows to return, up to 100. Defaults to 25."
          }
        },
        "additionalProperties": false
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_biggest",
      "description": "The largest recorded stablecoin blacklistings, freezes, seizures and releases, ranked by amount, largest first. Answers \"what is the largest blacklist\", \"the biggest freeze\", and \"the biggest seizure\". Filter by coin, blockchain or kind. A blacklisting or freeze is ranked by the balance the wallet held when it was restricted; a seizure by the balance that was taken. They are two different quantities and each row says which it is. The default scope ranks the 25 latest recorded events, with the wallet, date, block and transaction for each. Set scope to \"all_time\" for the largest in the whole record, which names no wallet, transaction or block.",
      "parameters": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Coin symbol, e.g. USDT. Omit for every coin.",
            "maxLength": 32
          },
          "chain": {
            "type": "string",
            "description": "Blockchain name or chain id, e.g. Tron or 1.",
            "maxLength": 32
          },
          "kind": {
            "type": "string",
            "enum": [
              "blacklist",
              "freeze",
              "seizure",
              "release",
              "sanctions"
            ],
            "description": "Restrict to one kind of action. \"blacklist\" is a deny-list entry in the token contract; \"freeze\" locks an account; \"seizure\" took the balance; \"release\" lifted a restriction; \"sanctions\" is an on-chain sanctions listing. Omit for all."
          },
          "scope": {
            "type": "string",
            "enum": [
              "recent",
              "all_time"
            ],
            "description": "Defaults to \"recent\": the 25 latest recorded events, with the wallet, block and transaction on every row. \"all_time\" ranks the whole record from its first event and names no wallet, transaction or block for any of it."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Rows to return, up to 50. Defaults to 10."
          }
        },
        "additionalProperties": false
      }
    }
  }
]

What it is not

This is reference data, not advice. It is not a compliance decision and it is not a clearance.

Scope, license and privacy: the full statement

The record, not a judgment

A wallet with nothing recorded has nothing recorded on the coins and chains we check, as of the date on the answer, and that is all it means.

There is no risk score, no band and no opinion about any address or person. The machine state is clean, restricted, released or stale. The sentence beside it says what was found. Neither is a judgment about anyone.

Every record is a dated fact about what an issuer did, with the issuer as the actor: "Tether restricted this wallet on Ethereum on 2026-08-17", not "USDT froze you". Every "none" says which chains and coins it covers, and as of what date.

The full list is not published here or anywhere. list_freeze_events returns the same published feed the site shows, or one month at a time on the Business plan, and cannot be paged past. get_biggest names wallets only in that same published feed, and its all-time view names none. The other four return counts, dates, or the one address you supplied. The site shows the latest freezes and seizes and the 100 largest ever, with the wallet, to everyone. The full event lists are part of the Business plan. Every count and total is the whole record, and checking one wallet is free for everyone. Any wallet, at any age, can be found by asking about that wallet.

We do not invent dollar figures. An amount is returned in the coin's own units where the record has one, and a USD figure only where a certified price exists for that coin at that block. The site follows the same rule and shows a dash where no price exists. The server puts null there instead. It is not today's price on an old event. The one dollar figure that needs no price is $0.00, where we read the balance and the wallet held none of the coin.

Terms, license and privacy

The records are public facts from the blockchain, and they are meant to be cited. When you show a record to a reader, in an answer, on a page or in a report, please credit it: "Data from Eagle Virtual", linked to the url on that record, with its date. Holding our pages in a search or retrieval index needs no credit on its own. We ask for the credit when the record is shown to someone. Customers on a paid plan do not need to credit us. Training a model on the record, or redistributing it in bulk, needs a written agreement. Write to sales@eaglevirtual.com. The rules in full are at /license. The machine-readable form is https://eaglevirtual.com/license.xml, and every record's metadata.license field includes that address.

The terms of use at /terms apply, and the privacy page at /privacy describes what this site stores. For the server itself: a call sets no cookie, and the Worker keeps one usage count for each tool call and nothing else. That count records the tool's name; which token, chain, kind, scope or grouping the question was sliced by; whether a limit or a start date was given; whether the call succeeded; and the client product that asked. It never records the address you asked about, a label you typed, or who asked. An address or any other text passed where a token or chain belongs is counted as "other". Those counts are held in Cloudflare's Workers Analytics Engine for three months. Cloudflare's Workers Logs is also switched on for the Worker, so Cloudflare holds its standard per-request log under Cloudflare's own retention. We do not export either anywhere.

If a record the server returns is wrong, the corrections policy at /corrections applies just as it does to the site. Write to legal@eaglevirtual.com, and include the transaction hash if you can, because that is the fastest way for us to check. Privacy questions also go to legal@eaglevirtual.com. Anything else goes to hello@eaglevirtual.com. Teams can also read the same record over plain HTTP. See /api.

Terms, license and privacy
Item Detail
Records Free to use. Please credit them when you show them to someone else: "Data from Eagle Virtual", linked to the url on the record, with its date. Paid plans do not need to credit us.
Data license /license
Machine-readable license https://eaglevirtual.com/license.xml (RSL). Included in every record as metadata.license.
Terms of use /terms
Privacy /privacy
What the Worker counts One usage count for each tool call: the tool, the filters used, the outcome and the client product. It never counts the address, a label or any text. Held by Cloudflare Analytics Engine for three months.
Cloudflare Workers Logs Switched on for the Worker. Held by Cloudflare and not exported.

Questions people ask

Do I need ChatGPT Developer mode?

No. Install USDT & USDC Blacklist Tracker by Eagle Virtual LLC from the ChatGPT Plugins Directory. Start a new chat and select it with @. You do not need to enter an MCP URL or create a custom connector.

Do I need an account or a key?

No Eagle Virtual account or API key is needed to start. In Claude, sign in to Claude and connect it from the Claude directory. In ChatGPT, sign in to your ChatGPT account and install the directory plugin. Other MCP clients can use the endpoint directly. Every tool only reads. With no Eagle Virtual account, one network address gets 100 calls a day. Sign in free and your calls count against your API key's 1,000 a day instead. The events behind a month's totals are part of the Business plan.

Does it return a risk score?

No. It returns dated records and counts, each with the transaction that did it. It does not characterize any address or person.

Can I download the full list of frozen addresses?

No. list_freeze_events returns the published feed, the same rows the site shows, or one month at a time with the month argument on the Business plan, and it cannot be paged past. The site shows the latest freezes and seizes and the 100 largest ever, with the wallet, to everyone. The full event lists are part of the Business plan. Every count and total is the whole record, and checking one wallet is free for everyone.

Which URL do I paste?

https://mcp.eaglevirtual.com/mcp, including the /mcp path. No other hostname is supported.