Koskamo

Iris MCP

An MCP server for on-chain investigations that allows AI assistants to analyze wallet identities, trace fund flows through mixers and bridges, identify token insiders, and check for launch kit usage across Solana, EVM chains, Bitcoin, and Tron.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Iris MCP logo, by IrisCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Iris
You need:Get an API keyAuthorization: Bearer iris_live_… or x-api-key: iris_live_…
MCP endpoint (Streamable HTTP)
https://iriscan.app/mcp
Vendor documentation

What you can do with it

  • Analyze a wallet's identity and risk score
  • Trace fund transfers through privacy pools
  • Identify token insiders and bundlers
  • Check for launch kit usage

Source and maintenance

Community listingRegistry 0.2.0

Protocol and capabilities

Server
iris 0.1.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Iris is on-chain intelligence (https://iriscan.app) for Solana, the EVM chains (Ethereum, Base, Arbitrum, Robinhood Chain, BNB Chain, Polygon), Bitcoin, Tron, dYdX and Noble. Use it to find out who is behind a wallet, where its money came from and went, and whether a Solana token was rigged at launch. - analyze_address (1 credit, 2 over 1000 transactions, or $0.05 with x402, $0.10 deep): start here for any wallet, or a Solana token mint or program. The chain is read from the address (Solana and Tron base58, 0x, bc1/1/3, dydx1, noble1); for a 0x address on an EVM chain other than Ethereum, pass chain. It says what the address is, its risk, database labels, behaviours with example transactions, who first funded it (Solana), its main counterparties, look-alike (poisoning) addresses, and the exchanges and mixers it used. For a token: its creator and who funded it, the launch bundle, red flags, the wallets in its groups and its top holders. Keep depth small (e.g. 200-1000) unless older history matters. - get_connections (free, after analyze_address; without an API key, pass the receipt analyze_address gave): every counterparty of the analyzed address, with amounts and the dates and signatures of its first and last transfers. - trace_transfer (1 trace, or $0.25 with x402): for a transaction where the wallet sent to or received from a mixer, an exchange or an instant-swap service, finds the likely wallets on the other side, by timing and amount. On Solana, Tron, the EVM chains (instant exchanges and privacy pools) and Bitcoin (CoinJoins and instant exchanges). - find_token_insiders (2 credits, or $0.10 with x402): the wallets a Solana token's creator is linked to by money. - scan_launch_tool (free with an API key, or $0.02 with x402): whether a Solana wallet (a dev, or a token's creator) launched or traded with a launch kit (Proxima or BlockX), with the evidence: its fees, fee wallets, creator-fee cuts, nonce cash-outs and the tree of wallets that funded it. - get_credits (free): the plan and the credits left, or the prices per call. With an Iris API key, calls spend the account's credits, and are limited per account: 10 calls a day without a paid plan, more per 10 minutes on a plan (get_credits says the limit). Without one, a paid tool asks for an x402 payment (USDC on Solana, or on Base where offered, at the prices above), and the call made again with it runs; nothing is settled when the call fails. Amounts are in the chain's native coin (SOL, ETH, BNB, BTC, TRX) unless marked in dollars (stablecoins, and all of dYdX and Noble); times are UTC. An analysis reads the latest transactions only (its depth): say so before calling something absent. Every result links to the full view on iriscan.app: share that link with the user. iriscan.app/<x> is for addresses only: link a transaction on its chain's explorer, as each answer's Explorer line shows (Solscan for Solana, Etherscan, BaseScan, Arbiscan, BscScan or Blockscout for the EVM chains, mempool.space for Bitcoin, Tronscan for Tron, Mintscan for dYdX and Noble). Traces and insider links are leads from timing and money flows, not proof: say so when you report them.

Tools

6 advertised

analyze_address — Analyze an address on Solana, an EVM chain, Bitcoin, Tron, dYdX or Noble
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Analyze a wallet with Iris: on Solana (also a token mint or a program), Ethereum, Base, Arbitrum, Robinhood Chain, BNB Chain, Polygon, Bitcoin, Tron, dYdX or Noble. The chain is read from the address (0x is Ethereum unless chain says another EVM chain). Costs 1 credit (2 when depth is over 1000), or without an API key $0.05 ($0.10 deep) paid per call with x402; refunded (never settled) if it fails. A token, or a wallet Iris hasn't read recently, can take about a minute. For a wallet: what it is (exchange, MEV bot, drainer, sniper, scam or poisoning wallet, personal wallet...), its risk score, the database's labels on it, its behaviours with example transactions, who sent it its first SOL (Solana), where its money came from and went (largest counterparties, labeled), look-alike (address poisoning) addresses, and the exchanges and mixers it moved money with, with the latest transaction for each (to use with trace_transfer). For a token mint: its creator and the creator's funder, the launch bundle and who funded it, red flags, the wallets in its groups and its top holders. For a program: who can upgrade it, who deployed it, its top callers. Only the latest transactions (depth) are read. Returns a summary and a link to the full view on iriscan.app.

analyze_address input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "chain": {
      "enum": [
        "solana",
        "ethereum",
        "base",
        "arbitrum",
        "robinhood",
        "bsc",
        "polygon",
        "bitcoin",
        "tron",
        "dydx",
        "noble"
      ],
      "type": "string",
      "description": "The chain, when the address's form doesn't say it: an EVM chain for a 0x address (ethereum by default). Read from the address otherwise."
    },
    "depth": {
      "type": "integer",
      "default": 1000,
      "maximum": 10000,
      "minimum": 1,
      "description": "How many of the most recent transactions to read. Over 1000 is a deep analysis (2 credits, or $0.10 with x402). Smaller is faster: 200 is often enough for a first look."
    },
    "address": {
      "type": "string",
      "maxLength": 90,
      "minLength": 26,
      "description": "The address: Solana or Tron base58, 0x (EVM), Bitcoin (bc1, 1 or 3), dydx1 or noble1. On Solana also a token mint or a program."
    }
  },
  "additionalProperties": false
}
analyze_address annotations
{
  "title": "Analyze an address on Solana, an EVM chain, Bitcoin, Tron, dYdX or Noble",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false
}
trace_transfer — Trace a transfer through a mixer, exchange or swap service
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Follow one transfer through the mixer (Privacy Cash, Cloak, Umbra, encrypt.trade, MagicBlock Private Payments, ShadowWire...), exchange, or instant-swap service (SideShift, ChangeNOW, FixedFloat, SimpleSwap, StealthEX, Changelly...) on its other side, by timing and amount: for a deposit, the withdrawals that match it after; for a withdrawal, the deposits that match it before. Gives the likely wallets with a confidence, and how many transfers of the same amount could also fit (the anonymity set). A swap service pays out in another asset, often on another chain: a deposit into SideShift is matched exactly from SideShift's public record of completed shifts (the coin, network and amount it paid out, and the Solana recipient), any other by value at the prices of the time (1 of N candidates). One-time deposit addresses that sweep to the service count as the service. Give the wallet and the signature (transaction hash) of a transaction where it sent money to, or received money from, a mixer, an exchange or a swap service (analyze_address and get_connections list them). Off Solana: on Tron through an exchange or an instant exchange, on an EVM chain through an instant exchange or a privacy pool (Tornado Cash, Railgun, Privacy Pools), on Bitcoin through a CoinJoin or an instant exchange. The chain is read from the wallet's address (pass chain for an EVM chain other than Ethereum). Costs 1 trace (or 3 pack credits), or without an API key $0.25 paid per call with x402; refunded (never settled) if it fails. Results are leads, not proof.

trace_transfer input schema
{
  "type": "object",
  "required": [
    "wallet",
    "signature"
  ],
  "properties": {
    "chain": {
      "enum": [
        "solana",
        "ethereum",
        "base",
        "arbitrum",
        "robinhood",
        "bsc",
        "polygon",
        "bitcoin",
        "tron"
      ],
      "type": "string",
      "description": "The transfer's chain, when the wallet's address doesn't say it: an EVM chain for a 0x wallet (ethereum by default)."
    },
    "wallet": {
      "type": "string",
      "maxLength": 90,
      "minLength": 26,
      "description": "The wallet whose deposit or withdrawal is traced (not the exchange or the mixer)."
    },
    "direction": {
      "enum": [
        "in",
        "out"
      ],
      "type": "string",
      "description": "Optional, with counterparty: out when the wallet paid it (a deposit), in when it paid the wallet (a withdrawal)."
    },
    "signature": {
      "type": "string",
      "maxLength": 90,
      "minLength": 64,
      "description": "The transaction: a Solana signature (base58), an EVM or Tron transaction hash, or a Bitcoin txid."
    },
    "counterparty": {
      "type": "string",
      "maxLength": 90,
      "description": "Optional: the exchange, swap service or mixer wallet (or pool contract) on the other side, when the transaction moved money with several. Iris picks the one it knows otherwise."
    }
  },
  "additionalProperties": false
}
trace_transfer annotations
{
  "title": "Trace a transfer through a mixer, exchange or swap service",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false
}
find_token_insiders — Find a token's insiders
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find the wallets a token's creator is linked to by money (a Solana token, or a Robinhood Chain or BNB Chain one with chain): wallets it funded, wallets that paid it, wallets with the same funder, among the token's earliest buyers, the wallets handed tokens at launch and its largest holders. Says how much of the supply they bought and hold, with the transactions that link them, and why none were found when none were. Costs 2 credits, or without an API key $0.10 paid per call with x402; refunded (never settled) if it fails. Can take up to two minutes. Results are leads, not proof.

find_token_insiders input schema
{
  "type": "object",
  "required": [
    "mint"
  ],
  "properties": {
    "mint": {
      "type": "string",
      "maxLength": 90,
      "minLength": 26,
      "description": "The token's address: a Solana mint (base58), or a 0x token with chain."
    },
    "chain": {
      "enum": [
        "solana",
        "robinhood",
        "bsc"
      ],
      "type": "string",
      "default": "solana",
      "description": "robinhood for a Robinhood Chain token (Pons launches), bsc for a BNB Chain one (Flap and four.meme launches)."
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 100,
      "minimum": 1,
      "description": "How many candidate wallets to check (early buyers and top holders). Fewer is faster."
    }
  },
  "additionalProperties": false
}
find_token_insiders annotations
{
  "title": "Find a token's insiders",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false
}
scan_launch_tool — Scan a wallet for a launch tool (Proxima, BlockX)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Whether a Solana wallet launched or traded memecoins with a launch kit, Proxima (proxima.tools) or BlockX, with the evidence. Proxima: its 5% sell fees (a separate bare transfer after each sell, built with it), its 5% cut of pump.fun creator-fee claims, its receipt round trips (895,880 lamports out, 890,880 back). BlockX: its fee inside each trade (0.4% to 0.8%), its nonce relay funding, cash-outs through nonce accounts created and emptied within seconds, its sweep of their rent. Lists the tokens the wallet launched and the relays tipped, the sells the tool took its fee on, each fee wallet (what it was paid, its balance now, whether it ever sent anything out), the creator-fee claims, and the tree of wallets that funded it, walked up to its root funder with what Iris knows of that root. A token's mint scans its creator. Free with an API key, or without one $0.02 paid per call with x402; never settled if it fails. Can take up to two minutes.

scan_launch_tool input schema
{
  "type": "object",
  "required": [
    "wallet"
  ],
  "properties": {
    "mint": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]+$",
      "maxLength": 44,
      "minLength": 32,
      "description": "Optional: narrow the report to this token (base58 mint)."
    },
    "wallet": {
      "type": "string",
      "pattern": "^[1-9A-HJ-NP-Za-km-z]+$",
      "maxLength": 44,
      "minLength": 32,
      "description": "The Solana wallet (a dev or trader), or a token's mint to scan its creator (base58)."
    }
  },
  "additionalProperties": false
}
scan_launch_tool annotations
{
  "title": "Scan a wallet for a launch tool (Proxima, BlockX)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false
}
get_connections — Get an address's connections
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every counterparty of an address that analyze_address analyzed in the last hour on this account (without an API key: for the x402 payer whose receipt is given): wallets it sent to or received from and the venues it swapped on, with labels, the native coin (SOL, ETH, BTC, TRX...) and stablecoins moved each way, the number of transactions, and the date and signature of its first and last transfer (for trace_transfer). Covers the transactions that analysis read only. For a token: the wallets in its groups (creator, bundlers, insiders, wallets handed supply) and its top holders. Free, from the earlier analysis; run analyze_address first.

get_connections input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "chain": {
      "enum": [
        "solana",
        "ethereum",
        "base",
        "arbitrum",
        "robinhood",
        "bsc",
        "polygon",
        "bitcoin",
        "tron",
        "dydx",
        "noble"
      ],
      "type": "string",
      "description": "Optional: the chain it was analyzed on, for a 0x address analyzed on several EVM chains. The latest analysis otherwise."
    },
    "limit": {
      "type": "integer",
      "default": 12,
      "maximum": 50,
      "minimum": 1,
      "description": "How many to list, largest by value first."
    },
    "filter": {
      "enum": [
        "all",
        "flagged",
        "exchange",
        "mixer"
      ],
      "type": "string",
      "default": "all",
      "description": "flagged: threats, sanctioned and mixer counterparties, and look-alike (address poisoning) ones; for a token, its creator, bundlers and insiders. exchange or mixer: only those."
    },
    "address": {
      "type": "string",
      "maxLength": 90,
      "minLength": 26,
      "description": "The address analyze_address analyzed."
    },
    "receipt": {
      "type": "string",
      "maxLength": 64,
      "description": "Only without an API key: the receipt analyze_address gave when it was paid with x402."
    }
  },
  "additionalProperties": false
}
get_connections annotations
{
  "title": "Get an address's connections",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_credits — Get credits left
Advertised by the server during the last successful anonymous check.
Advertised read-only

The account's plan and what is left: analyses, traces and pack credits, when the allowance renews, and what each tool costs. Without an API key: what each tool costs per call with x402. Free.

get_credits input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_credits annotations
{
  "title": "Get credits left",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
310 ms
95th percentile latency
310 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 310 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http iris-mcp-iriscan https://iriscan.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add iris-mcp-iriscan --url https://iriscan.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable iris-mcp-iriscan in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "iris-mcp-iriscan": {
      "url": "https://iriscan.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "iris-mcp-iriscan": {
      "type": "streamableHttp",
      "url": "https://iriscan.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start iris-mcp-iriscan and inspect its tools.
VS Code configuration
{
  "servers": {
    "iris-mcp-iriscan": {
      "type": "http",
      "url": "https://iriscan.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http iris-mcp-iriscan https://iriscan.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "iris-mcp-iriscan": {
      "url": "https://iriscan.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "iris-mcp-iriscan": {
      "serverUrl": "https://iriscan.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Iris MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.