Server definition
- Hash
- sha256:8c9b6ccf80ccd2353d653a6f054de2e443a54e45a0dda408b1aed06987150eb5
- What it is
- What a remote MCP server returned when asked what it offers: 10 tools
The blob, as servednamed by its sha256
{
"instructions": "TokenBank: curated, sourced data on earning yield with crypto and tokenized real-world assets. 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": [
{
"description": "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.",
"inputSchema": {
"properties": {
"tickers": {
"description": "e.g. [\"USDY\", \"OUSG\", \"BUIDL\"]",
"items": {
"type": "string"
},
"maxItems": 6,
"minItems": 2,
"type": "array"
}
},
"required": [
"tickers"
],
"type": "object"
},
"name": "compare_assets",
"outputSchema": {
"properties": {
"compared": {
"items": {
"type": "object"
},
"type": "array"
},
"notFound": {
"items": {
"type": "string"
},
"type": "array"
},
"readThis": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"compared"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max results (default 10)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"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.",
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Company name, underlying ticker or ISIN — e.g. \"Apple\", \"AAPL\", \"US0378331005\". Omit to list all.",
"type": "string"
}
},
"type": "object"
},
"name": "compare_tokenized_access",
"outputSchema": {
"properties": {
"matched": {
"type": "integer"
},
"nextOffset": {
"description": "Pass as offset to fetch the next page; absent when there is no more",
"type": "integer"
},
"underlyings": {
"items": {
"type": "object"
},
"type": "array"
}
},
"required": [
"matched",
"underlyings"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"bank_rate_pct": {
"description": "Your bank's rate in percent (default 2.0)",
"type": "number"
}
},
"type": "object"
},
"name": "compare_with_savings_account",
"outputSchema": {
"properties": {
"bankRatePct": {
"type": "number"
},
"honestTradeoffs": {
"items": {
"type": "string"
},
"type": "array"
},
"instruments": {
"items": {
"type": "object"
},
"type": "array"
}
},
"required": [
"bankRatePct",
"instruments"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"include_unverified": {
"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.",
"type": "boolean"
},
"limit": {
"description": "Max results (default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"min_yield_pct": {
"description": "Minimum comparable yield in percent",
"type": "number"
},
"offset": {
"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.",
"minimum": 0,
"type": "integer"
},
"pillar": {
"description": "Limit to one category pillar",
"enum": [
"Fixed Income",
"Real Assets",
"Market Tokens",
"Staking"
],
"type": "string"
}
},
"type": "object"
},
"name": "find_permissionless_assets",
"outputSchema": {
"properties": {
"confirmedOpen": {
"description": "Secondary-market gate verified as no KYC",
"type": "integer"
},
"count": {
"type": "integer"
},
"nextOffset": {
"description": "Pass as offset to fetch the next page; absent when there is no more",
"type": "integer"
},
"results": {
"items": {
"type": "object"
},
"type": "array"
},
"totalMatching": {
"type": "integer"
},
"unverified": {
"description": "Possibly open, not confirmed — excluded from results",
"type": "integer"
}
},
"required": [
"count",
"results"
],
"type": "object"
}
},
{
"description": "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: Backed / xStocks, Ondo Global Markets, Swiss SME share registers from Aktionariat, tokenized property from Binaryx, and an aggregated tier covering Dinari, Coinbase, Robinhood Chain, bStocks, Anchored Finance and others. 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.",
"inputSchema": {
"properties": {
"include_halted": {
"description": "Include instruments Backed has flagged as trading-halted. Default false.",
"type": "boolean"
},
"issuer": {
"description": "Restrict to one issuer. Omit to search both, which is usually what you want — the comparison between them is the useful part.",
"enum": [
"backed",
"ondo"
],
"type": "string"
},
"limit": {
"description": "Max results (default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"line": {
"description": "Backed only. xstocks = the xStocks line; btokens = the older bToken DeFi line.",
"enum": [
"xstocks",
"btokens"
],
"type": "string"
},
"offset": {
"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.",
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Company name, ticker or ISIN — e.g. \"Apple\", \"AAPL\", \"US0378331005\", \"Silver Trust\"",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "find_tokenized_security",
"outputSchema": {
"properties": {
"catalogues": {
"type": "object"
},
"instruments": {
"items": {
"type": "object"
},
"type": "array"
},
"issuedByMoreThanOneIssuer": {
"items": {
"type": "string"
},
"type": "array"
},
"matched": {
"type": "integer"
},
"nextOffset": {
"description": "Pass as offset to fetch the next page; absent when there is no more",
"type": "integer"
},
"readThis": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"matched",
"instruments"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"country": {
"description": "Country slug or name, e.g. japan, korea, brazil, india, switzerland. Omit to list all.",
"type": "string"
},
"readable_only": {
"description": "Only markets whose instruments we can actually read (default false — the closed ones are the point)",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_market_coverage",
"outputSchema": {
"properties": {
"markets": {
"items": {
"type": "object"
},
"type": "array"
},
"summary": {
"type": "object"
}
},
"required": [
"markets"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_market_stats",
"outputSchema": {
"properties": {
"byTier": {
"properties": {
"curated": {
"type": "integer"
},
"imported": {
"type": "integer"
}
},
"type": "object"
},
"total": {
"description": "Every instrument, both tiers",
"type": "integer"
}
},
"required": [
"total",
"byTier"
],
"type": "object"
}
},
{
"description": "Full record for one instrument by ticker (case-insensitive): yield, risk, custody, availability, how to buy, source link, verification date.",
"inputSchema": {
"properties": {
"ticker": {
"description": "e.g. USDY, stETH, PAXG",
"type": "string"
}
},
"required": [
"ticker"
],
"type": "object"
},
"name": "get_product_details",
"outputSchema": {
"properties": {
"name": {
"type": "string"
},
"ticker": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"ticker"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"city": {
"description": "City name, e.g. Detroit, Cleveland, Chicago",
"type": "string"
},
"limit": {
"description": "Max results (default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"max_token_price_usd": {
"description": "Maximum price per token in USD",
"type": "number"
},
"min_yield_pct": {
"description": "Minimum net rental yield in percent",
"type": "number"
},
"offset": {
"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.",
"minimum": 0,
"type": "integer"
},
"rented_only": {
"description": "Only properties with at least one rented unit (default true)",
"type": "boolean"
},
"sort": {
"description": "Sort by net yield (default), token price (cheapest first) or monthly rent",
"enum": [
"yield",
"price",
"rent"
],
"type": "string"
}
},
"type": "object"
},
"name": "search_realt_properties",
"outputSchema": {
"properties": {
"issuer": {
"type": "string"
},
"medianNetYieldPct": {
"type": [
"number",
"null"
]
},
"nextOffset": {
"description": "Pass as offset to fetch the next page; absent when there is no more",
"type": "integer"
},
"portfolioTotal": {
"type": "integer"
},
"portfolioUrl": {
"type": "string"
},
"results": {
"items": {
"type": "object"
},
"type": "array"
},
"snapshotDate": {
"type": "string"
},
"totalMatching": {
"type": "integer"
}
},
"required": [
"issuer",
"totalMatching"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max results (default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"max_risk": {
"description": "Maximum risk on a 1-5 scale (1=very low, 3=medium, 5=high)",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"min_yield_pct": {
"description": "Minimum headline yield in percent",
"type": "number"
},
"offset": {
"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.",
"minimum": 0,
"type": "integer"
},
"pillar": {
"description": "Limit to one category pillar",
"enum": [
"Fixed Income",
"Real Assets",
"Market Tokens",
"Staking"
],
"type": "string"
},
"query": {
"description": "Free-text match on name, ticker, issuer or type",
"type": "string"
},
"tier": {
"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.",
"enum": [
"curated",
"imported",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "search_yield_products",
"outputSchema": {
"properties": {
"count": {
"description": "Rows returned",
"type": "integer"
},
"nextOffset": {
"description": "Pass as offset to fetch the next page; absent when there is no more",
"type": "integer"
},
"results": {
"items": {
"type": "object"
},
"type": "array"
},
"tier": {
"type": "string"
},
"totalMatching": {
"description": "Rows that matched before the limit",
"type": "integer"
}
},
"required": [
"count",
"totalMatching",
"results"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:8c9b6ccf80ccd2353d653a6f054de2e443a54e45a0dda408b1aed06987150eb5 | sha256sum