Koskamo

TokenBank MCP

An MCP server providing tools for querying tokenized real-world assets, comparing yields, building portfolios, and accessing agent buying guides for investment research.

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.

TokenBank MCP logo, by NumericalsAI Inc.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by NumericalsAI Inc.
MCP endpoint (Streamable HTTP)
https://mcp.tokenbank.world
Vendor documentation

What its tools do

16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

16 of 16 have a description · 16 of 16 declare behavior hints · 15 of 15 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Endpoint and vendor documentation share a domain
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for yield products and tokenized securities
  • Build diversified portfolios based on risk and amount
  • Compare assets with savings accounts or each other
  • Get agent buying guides and purchase steps

Source and maintenance

Vendor evidence
mcp-registry: world.tokenbank/tokenbank@1.8.0

Protocol and capabilities

Server
tokenbank 1.7.0
MCP protocol negotiated in check
2025-06-18
Tools
16 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

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

TokenBank: curated, sourced data on earning yield with crypto and tokenized real-world assets. If you are building or running an agent that buys tokens on its own, call get_agent_buying_guide first (steps, purchase paths, which tokens qualify, guardrails, guides). Before buying more than one product, call build_portfolio: it spreads the amount over several sources of yield so one failure cannot take everything, and explains why and how to rebalance. For one specific token, call get_purchase_steps. For explainers, find_answer also returns guides. Always relay the risk label and the disclaimer when presenting figures to a user. targetArea describes who an issuer aims a product at and where; it is not an eligibility check, and TokenBank does not say who may buy anything.

Tools

16 advertised

find_answer — Find an answer page
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find TokenBank answer pages for a natural-language question — e.g. "can I buy Tesla as a token", "best stablecoin yield on Base", "euro stablecoins MiCA", "pre-IPO OpenAI token", "fixed yield on-chain". Returns the best-matching questions with the first sentence of each computed answer (figures from the live dataset), the page URL to cite and a JSON URL with every row, plus the matching guides (explainers such as how a bot buys a token, how to verify a contract, what happens if an issuer fails), each with a JSON URL. A question in Arabic, German, Spanish, Japanese, Chinese, Korean, Thai, Vietnamese or Indonesian also returns our pages written in that language (localPages), e.g. "صكوك مرمّزة". Use this first for a question a person would type; use the other tools to filter beyond it.

find_answer input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "How many answers (default 3)"
    },
    "query": {
      "type": "string",
      "description": "The question, in plain words"
    }
  }
}
find_answer annotations
{
  "title": "Find an answer page",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
yield_picks_of_the_week — Yield picks of the week
Advertised by the server during the last successful anonymous check.
Advertised read-only

Per category (treasury tokens, staking, private credit, yield stablecoins, reinsurance, stablecoin pools, fixed rate), the tokens an AI agent can buy on its own whose stated yield is highest right now — with a risk level 1-5 next to each, the purchase route (DEX pool, deposit contract, Pendle market), contracts and the page. Categories are ordered from low to high risk. Ranked by yield under printed rules, not recommended. Use it for "what looks good this week" or "top tokens a bot can buy".

yield_picks_of_the_week input schema
{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "description": "Your agent name, added to the page links as utm_source"
    },
    "max_risk": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Leave out picks above this risk level (default 5)"
    },
    "per_category": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Picks per category (default 2)"
    }
  }
}
yield_picks_of_the_week annotations
{
  "title": "Yield picks of the week",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_yield_products — Search yield products
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search and filter TokenBank's instruments for earning yield with crypto. Searches the CURATED tier by default (the rows that state a yield, minimum and risk); pass tier to reach the imported issuer-catalogue rows (tokenized treasuries, yield stablecoins, gold, real estate, tokenized stocks, staking, DeFi/CeFi earn, alternative funds). Returns compact records; use get_product_details for the full record.

search_yield_products input schema
{
  "type": "object",
  "properties": {
    "tier": {
      "enum": [
        "curated",
        "imported",
        "all"
      ],
      "type": "string",
      "description": "Which tier to search. Default \"curated\": the instruments that state a yield, minimum and risk — the only ones that can answer \"what does this pay\". \"imported\" and \"all\" reach the issuer-catalogue rows, which carry identity and classification only. Use them for identity questions (\"is X tokenized\"), never for yield rankings."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 20)"
    },
    "query": {
      "type": "string",
      "description": "Free-text match on name, ticker, issuer or type"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many matches before returning. Use the nextOffset from the previous answer to walk the whole set; its absence means you reached the end."
    },
    "pillar": {
      "enum": [
        "Fixed Income",
        "Real Assets",
        "Market Tokens",
        "Staking"
      ],
      "type": "string",
      "description": "Limit to one category pillar"
    },
    "max_risk": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Maximum risk on a 1-5 scale (1=very low, 3=medium, 5=high)"
    },
    "min_yield_pct": {
      "type": "number",
      "description": "Minimum headline yield in percent"
    }
  }
}
search_yield_products output schema
{
  "type": "object",
  "required": [
    "count",
    "totalMatching",
    "results"
  ],
  "properties": {
    "tier": {
      "type": "string"
    },
    "count": {
      "type": "integer",
      "description": "Rows returned"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "totalMatching": {
      "type": "integer",
      "description": "Rows that matched before the limit"
    }
  }
}
search_yield_products annotations
{
  "title": "Search yield products",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_product_details — Get instrument details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full record for one instrument by ticker (case-insensitive): yield, risk, custody, availability, how to buy, source link, verification date.

get_product_details input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "e.g. USDY, stETH, PAXG"
    }
  }
}
get_product_details output schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "tier": {
      "type": "string"
    },
    "ticker": {
      "type": "string"
    }
  }
}
get_product_details annotations
{
  "title": "Get instrument details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_agent_buying_guide — How agents buy tokens
Advertised by the server during the last successful anonymous check.
Advertised read-only

Start here when building or running an AI agent or trading bot that buys tokens on its own. Returns the whole how-to as data: the six steps from wallet to confirmed purchase with the MCP/API call for each, the purchase paths (wallet only / owner onboarded once / platform account) with live counts, which asset classes a self-custody wallet can reach without an identity check, the highest-yield wallet-only candidates, how to choose among them and when not to buy (howToDecide: checks naming the fields that answer them, not recommendations), the guardrails a wallet policy should enforce, and the guides that explain it (each with a JSON URL). Then call get_purchase_steps for one ticker.

get_agent_buying_guide input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "How many candidates (default 10)"
    },
    "min_yield_pct": {
      "type": "number",
      "description": "Only list candidates at or above this stated yield, in percent"
    }
  }
}
get_agent_buying_guide annotations
{
  "title": "How agents buy tokens",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
build_portfolio — Build a diversified portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this before buying more than one product: spreads an amount over several sources of yield instead of putting everything into the single highest yield. Returns the blocks (one product per category, never the same exposure twice, each checked at its own amount incl. gas, weight capped), a 10 % admixture above the risk budget for extra yield, the median yield and risk per category, the blended yield vs. the single best, the worst single failure as % of the amount, and a guide written for agents: why spreading is better (with failures on record), the steps (then get_purchase_steps per block) and when to rebalance. Checks, not advice.

build_portfolio input schema
{
  "type": "object",
  "properties": {
    "max_risk": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Highest risk level for the core blocks (default 3)"
    },
    "amount_usd": {
      "type": "number",
      "description": "Total to invest in USD (default 1000)"
    },
    "admixture_pct": {
      "type": "number",
      "description": "Share above the risk budget, 0–20 % (default 10)"
    },
    "max_block_pct": {
      "type": "number",
      "description": "Highest weight of one block, % (default 30)"
    },
    "price_exposure": {
      "type": "boolean",
      "description": "Allow blocks that move with a crypto price, e.g. staking or pools with ETH (default false)"
    }
  }
}
build_portfolio annotations
{
  "title": "Build a diversified portfolio",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_purchase_steps — How an agent buys it
Advertised by the server during the last successful anonymous check.
Advertised read-only

How an AI agent or bot buys one instrument on its own, step by step: the purchase path (wallet only / owner onboarded once / platform account), the three KYC gates, network and verified contract, the issuer route, the measured trading venues, the exit terms where researched (KYC to redeem, minimum, fee, settlement, from issuer documentation), the ordered steps (fund, verify contract, approve exact amount, simulate, deposit or swap, confirm, exit) and the guardrails a wallet policy should enforce. Read-only: it does not build, sign or send a transaction, and it does not say who may buy.

get_purchase_steps input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "e.g. sUSDS, USDY, USYC"
    },
    "amount_usd": {
      "type": "number",
      "description": "Optional amount, used only to word the approval step"
    }
  }
}
get_purchase_steps output schema
{
  "type": "object",
  "required": [
    "ticker",
    "path",
    "steps"
  ],
  "properties": {
    "path": {
      "enum": [
        "wallet-only",
        "onboarding",
        "platform",
        "unclear"
      ],
      "type": "string"
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "ticker": {
      "type": "string"
    },
    "guardrails": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
get_purchase_steps annotations
{
  "title": "How an agent buys it",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_with_savings_account — Compare with a savings account
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare low-risk, instant-access crypto savings instruments against a typical bank savings account rate. Returns the honest trade-offs, not just the bigger number.

compare_with_savings_account input schema
{
  "type": "object",
  "properties": {
    "bank_rate_pct": {
      "type": "number",
      "description": "Your bank's rate in percent (default 2.0)"
    }
  }
}
compare_with_savings_account output schema
{
  "type": "object",
  "required": [
    "bankRatePct",
    "instruments"
  ],
  "properties": {
    "bankRatePct": {
      "type": "number"
    },
    "instruments": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "honestTradeoffs": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
compare_with_savings_account annotations
{
  "title": "Compare with a savings account",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_permissionless_assets — Find permissionless assets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Instruments whose secondary market needs no KYC and which a self-custody wallet holds itself — a property of how the token works, read from hand-verified gates. For real-world assets the gate to MINT and the gate to trade on a secondary market routinely differ, so a fund can be permissioned at the issuer while its token trades freely. Strict by design — an instrument whose gate is merely unverified is excluded. This says nothing about who may buy it: the issuer's terms and local law decide that.

find_permissionless_assets input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 20)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many matches before returning. Use the nextOffset from the previous answer to walk the whole set; its absence means you reached the end."
    },
    "pillar": {
      "enum": [
        "Fixed Income",
        "Real Assets",
        "Market Tokens",
        "Staking"
      ],
      "type": "string",
      "description": "Limit to one category pillar"
    },
    "min_yield_pct": {
      "type": "number",
      "description": "Minimum comparable yield in percent"
    },
    "include_unverified": {
      "type": "boolean",
      "description": "Default false. When true, also returns instruments whose secondary-market gate is unknown — clearly flagged. Use only when the user asked what MIGHT be open, never to answer what IS open."
    }
  }
}
find_permissionless_assets output schema
{
  "type": "object",
  "required": [
    "count",
    "results"
  ],
  "properties": {
    "count": {
      "type": "integer"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "unverified": {
      "type": "integer",
      "description": "Possibly open, not confirmed — excluded from results"
    },
    "confirmedOpen": {
      "type": "integer",
      "description": "Secondary-market gate verified as no KYC"
    },
    "totalMatching": {
      "type": "integer"
    }
  }
}
find_permissionless_assets annotations
{
  "title": "Find permissionless assets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_assets — Compare instruments
Advertised by the server during the last successful anonymous check.
Advertised read-only

Put two or more instruments side by side on the fields that decide between them: yield, risk, minimum, custody, the three KYC gates, target/area, issuer and verification date. Use for "X vs Y" questions instead of calling get_product_details repeatedly.

compare_assets input schema
{
  "type": "object",
  "required": [
    "tickers"
  ],
  "properties": {
    "tickers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 6,
      "minItems": 2,
      "description": "e.g. [\"USDY\", \"OUSG\", \"BUIDL\"]"
    }
  }
}
compare_assets output schema
{
  "type": "object",
  "required": [
    "compared"
  ],
  "properties": {
    "compared": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "notFound": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "readThis": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
compare_assets annotations
{
  "title": "Compare instruments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_market_stats — Dataset statistics
Advertised by the server during the last successful anonymous check.
Advertised read-only

Shape of the dataset: how many instruments, split by pillar, category and risk, how many need no KYC on the secondary market, and how fresh the figures are. Use to ground a claim about coverage before making one.

get_market_stats input schema
{
  "type": "object",
  "properties": {}
}
get_market_stats output schema
{
  "type": "object",
  "required": [
    "total",
    "byTier"
  ],
  "properties": {
    "total": {
      "type": "integer",
      "description": "Every instrument, both tiers"
    },
    "byTier": {
      "type": "object",
      "properties": {
        "curated": {
          "type": "integer"
        },
        "imported": {
          "type": "integer"
        }
      }
    }
  }
}
get_market_stats annotations
{
  "title": "Dataset statistics",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_market_coverage — Market coverage by country
Advertised by the server during the last successful anonymous check.
Advertised read-only

Which countries this dataset can see into, which it cannot, and why — the question "what is tokenized in Japan / Korea / Brazil / India" answers from here rather than from a general search. This matters because the honest answer is uncomfortable: roughly $9bn of tokenized securities sits in markets NO Western aggregator indexes, this one included. Japan holds over ¥1tn on a permissioned consortium chain run by eighteen banks. Korea issued $2.2bn in 2026 under regulatory sandbox exemptions, with legal recognition phased in from 4 February 2027 and retail capped by amount PER VENUE. India, Vietnam, Indonesia and Thailand have no stablecoin in their own currency at all. Call this before stating what a market holds, or before quoting any total as if it were the world. Omit `country` for every market.

get_market_coverage input schema
{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Country slug or name, e.g. japan, korea, brazil, india, switzerland. Omit to list all."
    },
    "readable_only": {
      "type": "boolean",
      "description": "Only markets whose instruments we can actually read (default false — the closed ones are the point)"
    }
  }
}
get_market_coverage output schema
{
  "type": "object",
  "required": [
    "markets"
  ],
  "properties": {
    "markets": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "summary": {
      "type": "object"
    }
  }
}
get_market_coverage annotations
{
  "title": "Market coverage by country",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_country_registers — Official country registers
Advertised by the server during the last successful anonymous check.
Advertised read-only

Official registers of tokenized assets and digital-asset firms for any of 250 jurisdictions (ISO 3166 + EU): which authority supervises, which public registers exist, which we read, and the entries themselves. Use it for "what is registered in Lithuania", "is firm X licensed anywhere" (pass `query` without `country`), or "which countries publish a list of token issues" (kind=issuance). A register entry records a licence, registration or approval by an authority — it is NOT proof that a token was issued, and it says nothing about who may buy. Provider registers list companies, not instruments: never add their entries to a count of tokens.

get_country_registers input schema
{
  "type": "object",
  "properties": {
    "kind": {
      "enum": [
        "issuance",
        "issuer",
        "provider",
        "sandbox",
        "event",
        "candidate"
      ],
      "type": "string",
      "description": "issuance = individual issues; issuer = registered issuers; provider = licensed firms; sandbox = sandbox participants; event = decisions/letters; candidate = full-text search hits, unconfirmed"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max entries (default 25)"
    },
    "query": {
      "type": "string",
      "description": "Free-text match on entry name, issuer, ISIN or register number"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many entries (use nextOffset from the previous answer)"
    },
    "country": {
      "type": "string",
      "description": "ISO code (DE, HK), English name or slug (germany, hong-kong). Omit to search every register."
    }
  }
}
get_country_registers output schema
{
  "type": "object",
  "required": [
    "totalMatching",
    "entries"
  ],
  "properties": {
    "country": {
      "type": "object"
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "readThis": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "totalMatching": {
      "type": "integer"
    },
    "registersSearched": {
      "type": "integer"
    }
  }
}
get_country_registers annotations
{
  "title": "Official country registers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_realt_properties — Search RealT properties
Advertised by the server during the last successful anonymous check.
Advertised read-only

Drill into the RealT portfolio: the individual tokenized US rental properties behind the REALT entry, each with its own net rental yield (computed as annual net rent / tokenized property value), token price, monthly rent and occupancy. Use this when someone asks which specific tokenized property to buy, or for the yield/price spread within one issuer.

search_realt_properties input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name, e.g. Detroit, Cleveland, Chicago"
    },
    "sort": {
      "enum": [
        "yield",
        "price",
        "rent"
      ],
      "type": "string",
      "description": "Sort by net yield (default), token price (cheapest first) or monthly rent"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 20)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many matches before returning. Use the nextOffset from the previous answer to walk the whole set; its absence means you reached the end."
    },
    "rented_only": {
      "type": "boolean",
      "description": "Only properties with at least one rented unit (default true)"
    },
    "min_yield_pct": {
      "type": "number",
      "description": "Minimum net rental yield in percent"
    },
    "max_token_price_usd": {
      "type": "number",
      "description": "Maximum price per token in USD"
    }
  }
}
search_realt_properties output schema
{
  "type": "object",
  "required": [
    "issuer",
    "totalMatching"
  ],
  "properties": {
    "issuer": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "portfolioUrl": {
      "type": "string"
    },
    "snapshotDate": {
      "type": "string"
    },
    "totalMatching": {
      "type": "integer"
    },
    "portfolioTotal": {
      "type": "integer"
    },
    "medianNetYieldPct": {
      "type": [
        "number",
        "null"
      ]
    }
  }
}
search_realt_properties annotations
{
  "title": "Search RealT properties",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_tokenized_security — Find a tokenized security
Advertised by the server during the last successful anonymous check.
Advertised read-only

Does a tokenized version of a given company, ETF or bond exist, and from which issuer? Searches the whole imported tier by company name, ticker or ISIN: issuer catalogues from Backed / xStocks, Ondo Global Markets, Dinari, Robinhood, Coinbase, Backpack, Reality (Bitget), ST0x, Jarsy, Midas, Lofty, Swiss SME share registers from Aktionariat, Japanese security tokens, El Salvador's CNAD register (registered offerings — sale not confirmed, say so) and European and Asian digital bonds from official registers, plus an aggregated tier (CoinGecko) covering the rest. Use this BEFORE saying a stock is not available on-chain. THREE THINGS MATTER IN THE ANSWER: (1) many companies are issued SEVERAL times over — Apple exists as seven different tokens — and those are not duplicates. They differ in issuer, legal form, holder rights, chain and the market each issuer aims them at (targetArea). Report the issuer, not just that the token exists. (2) Sources differ in AUTHORITY. Issuer catalogues state what that issuer issued. The aggregated rows only observe that a token exists: they carry no KYC gate and no custody claim. targetArea is a description of the issuer's stated audience, never an eligibility check. (3) This is identity data: the source states no yield, no minimum and no risk grade, so those fields are absent rather than zero. For instruments that do carry a comparable rate, use search_yield_products instead.

find_tokenized_security input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "line": {
      "enum": [
        "xstocks",
        "btokens"
      ],
      "type": "string",
      "description": "Backed only. xstocks = the xStocks line; btokens = the older bToken DeFi line."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 20)"
    },
    "query": {
      "type": "string",
      "description": "Company name, ticker or ISIN — e.g. \"Apple\", \"AAPL\", \"US0378331005\", \"Silver Trust\""
    },
    "issuer": {
      "enum": [
        "backed",
        "ondo"
      ],
      "type": "string",
      "description": "Restrict to one issuer. Omit to search both, which is usually what you want — the comparison between them is the useful part."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many matches before returning. Use the nextOffset from the previous answer to walk the whole set; its absence means you reached the end."
    },
    "include_halted": {
      "type": "boolean",
      "description": "Include instruments Backed has flagged as trading-halted. Default false."
    }
  }
}
find_tokenized_security output schema
{
  "type": "object",
  "required": [
    "matched",
    "instruments"
  ],
  "properties": {
    "matched": {
      "type": "integer"
    },
    "readThis": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "catalogues": {
      "type": "object"
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "instruments": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "issuedByMoreThanOneIssuer": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
find_tokenized_security annotations
{
  "title": "Find a tokenized security",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_tokenized_access — Compare tokens on one security
Advertised by the server during the last successful anonymous check.
Advertised read-only

For a security tokenized by more than one issuer, compare every token on it side by side — issuer, structure, KYC gates, custody, chain, and the target/area each issuer states — plus every Hyperliquid perpetual on it (fees, funding, leverage; no ownership). The right tool for "which tokenized versions of Apple exist?" and "where can I get NVIDIA on-chain, and at what cost?": the tokens and perps share a price driver and differ in almost everything else. Securities that exist on-chain only as a perp are included too. Hundreds of securities here are tokenized more than once — Apple exists as seven separate tokens; the response carries the exact counts, do not quote a figure from this description. targetArea describes who each issuer aims the product at and where; it is not an eligibility check — who may buy is set by the issuer. Omit `query` to list every such security.

compare_tokenized_access input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 10)"
    },
    "query": {
      "type": "string",
      "description": "Company name, underlying ticker or ISIN — e.g. \"Apple\", \"AAPL\", \"US0378331005\". Omit to list all."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many matches before returning. Use the nextOffset from the previous answer to walk the whole set; its absence means you reached the end."
    },
    "sector": {
      "enum": [
        "technology",
        "communication",
        "consumer",
        "healthcare",
        "financials",
        "crypto",
        "industrials",
        "energy",
        "materials",
        "real-estate",
        "funds"
      ],
      "type": "string",
      "description": "Only securities in this sector, e.g. \"crypto\" or \"funds\"."
    },
    "industry": {
      "enum": [
        "semiconductors",
        "semiconductor-equipment",
        "memory-storage",
        "software",
        "cybersecurity",
        "ai-cloud",
        "ai-models",
        "hardware",
        "networking",
        "electronic-components",
        "quantum",
        "it-services",
        "internet-platforms",
        "media-entertainment",
        "telecom",
        "ecommerce",
        "autos-ev",
        "retail",
        "restaurants",
        "consumer-staples",
        "leisure-apparel",
        "pharma-biotech",
        "medtech",
        "health-services",
        "banks",
        "payments",
        "brokers-exchanges",
        "asset-managers",
        "insurance",
        "financial-data",
        "bdc-private-credit",
        "bitcoin-miners",
        "crypto-treasury",
        "crypto-platforms",
        "aerospace-defense",
        "space",
        "machinery-electrical",
        "transport-logistics",
        "construction-engineering",
        "business-services",
        "oil-gas",
        "utilities-power",
        "nuclear-uranium",
        "clean-energy",
        "metals-mining",
        "chemicals-materials",
        "reits",
        "real-estate-services",
        "index-etf",
        "country-etf",
        "thematic-etf",
        "leveraged-etf",
        "bond-etf",
        "commodity-etp",
        "crypto-etp"
      ],
      "type": "string",
      "description": "Only securities in this industry, e.g. \"bitcoin-miners\", \"semiconductors\", \"memory-storage\"."
    }
  }
}
compare_tokenized_access output schema
{
  "type": "object",
  "required": [
    "matched",
    "underlyings"
  ],
  "properties": {
    "matched": {
      "type": "integer"
    },
    "nextOffset": {
      "type": "integer",
      "description": "Pass as offset to fetch the next page; absent when there is no more"
    },
    "underlyings": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  }
}
compare_tokenized_access annotations
{
  "title": "Compare tokens on one security",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-09: 1 of 1 checks answered

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
2335 ms
95th percentile latency
2335 ms

Maintenance history

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

  • · probe · passed · 2335 ms · metadata changed · 16 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 tokenbank-mcp https://mcp.tokenbank.world

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 tokenbank-mcp --url https://mcp.tokenbank.world

Cursor

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

Cline

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

VS Code

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

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 tokenbank-mcp https://mcp.tokenbank.world

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.tokenbank.world

Windsurf

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

Let your agent find its tools

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

Do you run TokenBank MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing