DeFi vault judgment for agents: 16-factor Atlas Score, route survival, blowup alerts. Read-only.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Can a deposit into this vault be exited at size, measured today? Returns the daily round-trip route screen (USDC -> position -> USDC): verdict, USD in/out, fraction retained, the path probed, and when. blocking:true means refuse the deposit (NO_ROUTE, DANGEROUS, UNPRICEABLE). reasonClass says why: protocol_refused (the protocol's own router refuses, the vault is dead) vs no_aggregator_quote (no same-chain swap into the underlying, common for LP vaults; redeeming by hand may still work). The probe is SAME-CHAIN only: USDC on the vault's own chain. It says nothing about bridging in from elsewhere. Route tracking covers EVM chains only: a Solana vault returns tracked:false (not tracked, neither a pass nor a failure). A vault that was never screened returns screened:false with no verdict — never a fabricated one. Call this BEFORE moving money. Read-only.
Vault contract address (0x…)
EVM chain id of the vault
Can a deposit into this vault be exited at size, measured today? Returns the daily round-trip route screen (USDC -> position -> USDC): verdict, USD in/out, fraction retained, the path probed, and when. blocking:true means refuse the deposit (NO_ROUTE, DANGEROUS, UNPRICEABLE). reasonClass says why: protocol_refused (the protocol's own router refuses, the vault is dead) vs no_aggregator_quote (no same-chain swap into the underlying, common for LP vaults; redeeming by hand may still work). The probe is SAME-CHAIN only: USDC on the vault's own chain. It says nothing about bridging in from elsewhere. Route tracking covers EVM chains only: a Solana vault returns tracked:false (not tracked, neither a pass nor a failure). A vault that was never screened returns screened:false with no verdict — never a fabricated one. Call this BEFORE moving money. Read-only.
| Argument | Type | Description |
|---|---|---|
| address* | string | Vault contract address (0x…) |
| chainId* | integer | EVM chain id of the vault |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 3,
"description": "Vault contract address (0x…)"
},
"chainId": {
"type": "integer",
"description": "EVM chain id of the vault",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Side-by-side Atlas Scores for 2-8 vaults: composite, label, four pillars, live APY/TVL, data quality, yieldQuality and exitSafety, with a ranking by composite. Unscored vaults come back found:false rather than silently dropped. Read-only.
| Argument | Type | Description |
|---|---|---|
| vaults* | array | 2-8 vaults to compare, any mix of chains |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vaults"
],
"properties": {
"vaults": {
"type": "array",
"items": {
"type": "object",
"required": [
"chainId",
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 3,
"description": "Vault contract address (0x…); case-insensitive"
},
"chainId": {
"type": "integer",
"description": "EVM chain id",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 8,
"minItems": 2,
"description": "2-8 vaults to compare, any mix of chains"
}
},
"additionalProperties": false
}Why a vault has its Atlas Score: all 16 factors (15 additive across four pillars + the multiplicative exploit-history modifier), each with sub-score (0-100), weight, raw input and a plain-English label, grouped by pillar, plus the three weakest factors. Exactly what the engine computed at scoredAt, not a recomputation. Returns found:false when unscored. Read-only.
| Argument | Type | Description |
|---|---|---|
| address* | string | Vault contract address (0x…); case-insensitive |
| chainId* | integer | EVM chain id, e.g. 1 (Ethereum), 8453 (Base), 42161 (Arbitrum) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 3,
"description": "Vault contract address (0x…); case-insensitive"
},
"chainId": {
"type": "integer",
"description": "EVM chain id, e.g. 1 (Ethereum), 8453 (Base), 42161 (Arbitrum)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Start here when you do not already have a vault address. Answers "which vaults for this asset on this chain?": returns a short ranked list (default 5, max 10) of scored vaults with composite, label, live APY/TVL, risk flags (thin_tvl, apy_outlier, ...), whether a deposit can reach it (routable), and a citable page URL. It also returns what the filters REMOVED: counts per filter, the best-ranked dropped vaults with reasons, near-miss asset symbols, and whether more matched than were returned. Vaults with no deposit route and rows scored on fallback data are excluded. Ranked by the chosen metric, a ranking and not a recommendation. A flag is a caution, not a verdict, and no flag does not mean safe. Take a chosen vaultId/address to check_route_survival before any deposit. Read-only.
| Argument | Type | Description |
|---|---|---|
| asset | any | Underlying asset symbol, or a list of up to 10, e.g. USDC or ["USDC","USDT0"]. Exact match: USDC does not include syrupUSDC (similarAssets lists near misses) |
| chain | any | Chain name (base, ethereum, arbitrum, optimism, bnb, solana) or EVM chain id |
| limit | integer | Rows to return, default 5, max 10 |
| minApy | number | Minimum live APY in percentage points, e.g. 10 for 10% |
| sortBy | string | Rank by this, descending. Default composite |
| minScore | number | Minimum Atlas composite (0-100) |
What the Atlas Score Index covers right now: number of scored vaults, total TVL, composite score spread, and counts by protocol and chain. Use it before asking about a vault to learn whether a protocol or chain is in the scored universe at all. Read-only.
| Argument | Type | Description |
|---|---|---|
| chainId | integer | Restrict to one chain id |
| protocolId | string | Restrict to one protocol id, e.g. morpho, aave-v3, pendle, beefy, yearn-v3, euler |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chainId": {
"type": "integer",
"description": "Restrict to one chain id",
"exclusiveMinimum": 0
},
"protocolId": {
"type": "string",
"description": "Restrict to one protocol id, e.g. morpho, aave-v3, pendle, beefy, yearn-v3, euler"
}
},
"additionalProperties": false
}Latest Atlas Score for one vault: composite (0-100), label, the four pillar scores (yield, safety, liquidity, sustainability), live APY/TVL, data quality and the scoring timestamp. Returns found:false when the vault is not in the scored universe. Read-only.
| Argument | Type | Description |
|---|---|---|
| address* | string | Vault contract address (0x…); case-insensitive |
| chainId* | integer | EVM chain id, e.g. 1 (Ethereum), 8453 (Base), 42161 (Arbitrum) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 3,
"description": "Vault contract address (0x…); case-insensitive"
},
"chainId": {
"type": "integer",
"description": "EVM chain id, e.g. 1 (Ethereum), 8453 (Base), 42161 (Arbitrum)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Open blowup-monitor alerts from the published daily snapshot: score-band exits, fast composite breaks, yield collapse, TVL flight, exploit flags, delistings. Each event carries score before/after and pillar deltas. Published once a day; the date field says when. Read-only.
| Argument | Type | Description |
|---|---|---|
| chainId | integer | Restrict to one chain id |
| minSeverity | integer | Only alerts at or above this severity (1 = lowest) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chainId": {
"type": "integer",
"description": "Restrict to one chain id",
"exclusiveMinimum": 0
},
"minSeverity": {
"type": "integer",
"minimum": 1,
"description": "Only alerts at or above this severity (1 = lowest)"
}
},
"additionalProperties": false
}| minTvlUsd | number | Minimum live TVL in USD |
| protocolId | string | Protocol slug, e.g. morpho, aave-v3, pendle |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"asset": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 10,
"minItems": 1
}
],
"description": "Underlying asset symbol, or a list of up to 10, e.g. USDC or [\"USDC\",\"USDT0\"]. Exact match: USDC does not include syrupUSDC (similarAssets lists near misses)"
},
"chain": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"exclusiveMinimum": 0
}
],
"description": "Chain name (base, ethereum, arbitrum, optimism, bnb, solana) or EVM chain id"
},
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Rows to return, default 5, max 10"
},
"minApy": {
"type": "number",
"minimum": 0,
"description": "Minimum live APY in percentage points, e.g. 10 for 10%"
},
"sortBy": {
"enum": [
"composite",
"apy",
"tvl"
],
"type": "string",
"description": "Rank by this, descending. Default composite"
},
"minScore": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Minimum Atlas composite (0-100)"
},
"minTvlUsd": {
"type": "number",
"minimum": 0,
"description": "Minimum live TVL in USD"
},
"protocolId": {
"type": "string",
"minLength": 1,
"description": "Protocol slug, e.g. morpho, aave-v3, pendle"
}
},
"additionalProperties": false
}