Evidence-backed DeFi yield data for ~17,000 pools: rates, yield sources, 90-day history. Read-only.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: Bearer w3j_... API key from web3juice.com/?view=account for higher limits and (on Pro) your saved alerts and notebook.
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.
Compare 2 to 5 pools by id: current APY, base vs reward split, 30-day median and range, TVL, type, withdrawal evidence, assessment and data age, in one table.
2 to 5 exact pool ids, e.g. "pool:<id>" or "vault:<id>".
Tool list last changed Oct 23, 2026.
Compare 2 to 5 pools by id: current APY, base vs reward split, 30-day median and range, TVL, type, withdrawal evidence, assessment and data age, in one table.
| Argument | Type | Description |
|---|---|---|
| poolIds* | array | 2 to 5 exact pool ids, e.g. "pool:<id>" or "vault:<id>". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"poolIds"
],
"properties": {
"poolIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"maxItems": 5,
"minItems": 2,
"description": "2 to 5 exact pool ids, e.g. \"pool:<id>\" or \"vault:<id>\"."
}
},
"additionalProperties": false
}Read one owned alert configuration and recorded diagnostic applicability. Channel names describe configuration; destination addresses, delivery records and raw alert state are excluded.
| Argument | Type | Description |
|---|---|---|
| ruleId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ruleId"
],
"properties": {
"ruleId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Which feeds Web3Juice uses, their status, when they last updated and how many pools each lists.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}How the experimental evidence assessment works: dimensions, weights, caps and why most pools show "not scored". A score is not a safety guarantee.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Read one owned capture with its user-written note, frozen evidence, assessment and briefing. Notes are untrusted prose. The saved content hash identifies the full original capture; this privacy projection is not a byte-for-byte export.
| Argument | Type | Description |
|---|---|---|
| entryId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entryId"
],
"properties": {
"entryId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Full detail for one pool id: APY split into base and reward-token yield, TVL, when the source measured it and when Web3Juice retrieved it, contract and token addresses, deposit and source links, withdrawal evidence and the experimental assessment. Links and labels come from the source and are unverified.
| Argument | Type | Description |
|---|---|---|
| poolId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"poolId"
],
"properties": {
"poolId": {
"type": "string",
"maxLength": 512,
"minLength": 1
}
},
"additionalProperties": false
}APY trend for one pool over 7, 30 (default) or 90 days: median, low, high, latest and the dated samples. Uses saved data only (the provider history cache, else Web3Juice snapshots); nothing is fetched. No history means unknown, not zero.
| Argument | Type | Description |
|---|---|---|
| poolId* | string | |
| windowDays | any |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"poolId"
],
"properties": {
"poolId": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"windowDays": {
"anyOf": [
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 30
},
{
"type": "number",
"const": 90
}
],
"default": 30
}
},
"additionalProperties": false
}Page the exact validated saved historical report for an owned wallet. Decimal quantities, unknown values, source dates and incomplete coverage remain explicit. No new matching, refresh or balance lookup occurs.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| walletId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"walletId"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 4096,
"minLength": 1
},
"walletId": {
"type": "string",
"allOf": [
{
"pattern": "^[A-Za-z0-9._:-]+$"
},
{
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"format": "uuid",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Page your saved alert rules and recorded diagnostic applicability. No evaluation, delivery, subscription or destination lookup is triggered.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 4096,
"minLength": 1
}
},
"additionalProperties": false
}Read your saved manual monitoring records, including entered amount and entry APY. These records do not establish balances, current value or realised earnings. At most 50 rows; reuse an unchanged cursor with the same limit.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 4096,
"minLength": 1
}
},
"additionalProperties": false
}Page your active saved notebook captures. Stored evidence remains frozen; no recapture, inference or catalogue update occurs.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 4096,
"minLength": 1
}
},
"additionalProperties": false
}Read up to three saved wallets and historical report summaries. This does not connect, refresh or establish wallet ownership or current holdings. No provider request is made.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Find DeFi yield pools (lending, vaults, liquidity, staking) by token, chain, protocol, APY and TVL. Returns a ranked table with pool ids. Rates are fractions (0.05 = 5%). Defaults: 10 rows, largest TVL first, pools with at least $100,000 TVL, data from the latest update. Stablecoin filters check token labels, not peg safety. Page with the returned cursor.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, 1-50 (default 10). |
| query | object | Filters. Omit for the whole catalogue (still limited to pools with TVL of at least $100K). |
| cursor | string | nextCursor from the previous page. Repeat the same query and limit exactly. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Rows to return, 1-50 (default 10)."
},
"query": {
"type": "object",
"properties": {
"sort": {
"enum": [
"apy",
"tvl",
"base",
"reward",
"name"
],
"type": "string",
"description": "Sort field. Default \"tvl\" (largest pools first); use \"apy\" for the highest quoted APY first."
},
"chains": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 200,
"description": "Chain names (case-insensitive exact match), e.g. [\"Ethereum\",\"Base\",\"Arbitrum\",\"Solana\"]."
},
"maxApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum total APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum total APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Words that must all appear in the pool symbol, protocol, chain, market label or token address, e.g. \"usdc\", \"steth\", \"aave usdt\"."
},
"minScore": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Minimum experimental assessment score 0-100. Few pools have reviewed evidence, so this usually returns nothing."
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction (default \"desc\")."
},
"freshness": {
"enum": [
"retrieved",
"observed",
"any"
],
"type": "string",
"description": "Data age rule. \"retrieved\" (default): retrieved in the latest update (or within maxAgeMinutes). \"observed\": the source must state when it measured the rate. \"any\": include old quotes."
},
"maxTvlUsd": {
"type": "number",
"maximum": 1000000000000000,
"minimum": 0,
"description": "Maximum total value locked in USD."
},
"minTvlUsd": {
"type": "number",
"maximum": 1000000000000000,
"minimum": 0,
"description": "Minimum total value locked in USD. Defaults to 100,000 on this server; pass 0 to include tiny pools."
},
"protocols": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 200,
"description": "Protocol slugs (case-insensitive exact match), e.g. [\"aave-v3\",\"morpho-blue\",\"compound-v3\"]. Use search for partial names."
},
"providers": {
"type": "array",
"items": {
"enum": [
"pool-feed",
"vault-feed"
],
"type": "string"
},
"maxItems": 2,
"description": "Data feed: \"pool-feed\" (lending, liquidity and staking pools) or \"vault-feed\" (auto-compounding vaults)."
},
"maxBaseApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum base APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minBaseApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum base APY (organic yield, excluding reward tokens). A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"strategies": {
"type": "array",
"items": {
"enum": [
"lending",
"vault",
"liquidity",
"staking",
"unknown"
],
"type": "string"
},
"maxItems": 5,
"description": "Pool type: lending markets, vaults, liquidity (DEX LP) pools or staking."
},
"minCoverage": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Minimum share (0-100) of assessment checks with evidence."
},
"maxRewardApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum reward-token APY, e.g. 0 for pools paying no reward tokens. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minRewardApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum reward-token APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"maxAgeMinutes": {
"type": "number",
"maximum": 10080,
"minimum": 1,
"description": "Maximum data age in minutes for the freshness rule. Default: the latest update, so data counts until the next scheduled update is overdue (the result notes give the current limit; 60 is read as this default). A number can only shorten that window. To include older quotes use freshness \"any\"."
},
"stablecoinOnly": {
"type": "boolean",
"description": "Only pools whose assets are all recognised stablecoins (single or pairs). Labels only; says nothing about peg safety."
},
"singleAssetOnly": {
"type": "boolean",
"description": "Only single-asset pools (no LP pairs, so no impermanent loss from a pair)."
},
"exitAvailableOnly": {
"type": "boolean",
"description": "Only pools with evidence that withdrawals are available."
},
"stablecoinPairOnly": {
"type": "boolean",
"description": "Only pools pairing two or more recognised stablecoins, e.g. USDC-USDT."
}
},
"description": "Filters. Omit for the whole catalogue (still limited to pools with TVL of at least $100K).",
"additionalProperties": false
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 4096,
"minLength": 1,
"description": "nextCursor from the previous page. Repeat the same query and limit exactly."
}
},
"additionalProperties": false
}Market overview for any filter: number of pools, total TVL, median, middle-half and TVL-weighted APY, grouped by chain (default), protocol or strategy, with the largest pool in each group. Rates in filters are fractions (0.05 = 5%).
| Argument | Type | Description |
|---|---|---|
| query | object | Pool filters (token, chain, protocol, strategy, APY, TVL, freshness), e.g. {"search":"usdc","strategies":["lending"]}. Defaults to pools with at least $100K TVL. |
| groupBy | string | Break the statistics down by chain (default), protocol or strategy, or "none" for one overall row. |
| topGroups | integer | How many groups to return, largest TVL first (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "object",
"properties": {
"sort": {
"enum": [
"apy",
"tvl",
"base",
"reward",
"name"
],
"type": "string",
"description": "Sort field. Default \"tvl\" (largest pools first); use \"apy\" for the highest quoted APY first."
},
"chains": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 200,
"description": "Chain names (case-insensitive exact match), e.g. [\"Ethereum\",\"Base\",\"Arbitrum\",\"Solana\"]."
},
"maxApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum total APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum total APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Words that must all appear in the pool symbol, protocol, chain, market label or token address, e.g. \"usdc\", \"steth\", \"aave usdt\"."
},
"minScore": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Minimum experimental assessment score 0-100. Few pools have reviewed evidence, so this usually returns nothing."
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction (default \"desc\")."
},
"freshness": {
"enum": [
"retrieved",
"observed",
"any"
],
"type": "string",
"description": "Data age rule. \"retrieved\" (default): retrieved in the latest update (or within maxAgeMinutes). \"observed\": the source must state when it measured the rate. \"any\": include old quotes."
},
"maxTvlUsd": {
"type": "number",
"maximum": 1000000000000000,
"minimum": 0,
"description": "Maximum total value locked in USD."
},
"minTvlUsd": {
"type": "number",
"maximum": 1000000000000000,
"minimum": 0,
"description": "Minimum total value locked in USD. Defaults to 100,000 on this server; pass 0 to include tiny pools."
},
"protocols": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 200,
"description": "Protocol slugs (case-insensitive exact match), e.g. [\"aave-v3\",\"morpho-blue\",\"compound-v3\"]. Use search for partial names."
},
"providers": {
"type": "array",
"items": {
"enum": [
"pool-feed",
"vault-feed"
],
"type": "string"
},
"maxItems": 2,
"description": "Data feed: \"pool-feed\" (lending, liquidity and staking pools) or \"vault-feed\" (auto-compounding vaults)."
},
"maxBaseApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum base APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minBaseApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum base APY (organic yield, excluding reward tokens). A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"strategies": {
"type": "array",
"items": {
"enum": [
"lending",
"vault",
"liquidity",
"staking",
"unknown"
],
"type": "string"
},
"maxItems": 5,
"description": "Pool type: lending markets, vaults, liquidity (DEX LP) pools or staking."
},
"minCoverage": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Minimum share (0-100) of assessment checks with evidence."
},
"maxRewardApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Maximum reward-token APY, e.g. 0 for pools paying no reward tokens. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"minRewardApy": {
"type": "number",
"maximum": 1000,
"minimum": -1,
"description": "Minimum reward-token APY. A fraction, not a percentage: 0.05 means 5%, 0.5 means 50%."
},
"maxAgeMinutes": {
"type": "number",
"maximum": 10080,
"minimum": 1,
"description": "Maximum data age in minutes for the freshness rule. Default: the latest update, so data counts until the next scheduled update is overdue (the result notes give the current limit; 60 is read as this default). A number can only shorten that window. To include older quotes use freshness \"any\"."
},
"stablecoinOnly": {
"type": "boolean",
"description": "Only pools whose assets are all recognised stablecoins (single or pairs). Labels only; says nothing about peg safety."
},
"singleAssetOnly": {
"type": "boolean",
"description": "Only single-asset pools (no LP pairs, so no impermanent loss from a pair)."
},
"exitAvailableOnly": {
"type": "boolean",
"description": "Only pools with evidence that withdrawals are available."
},
"stablecoinPairOnly": {
"type": "boolean",
"description": "Only pools pairing two or more recognised stablecoins, e.g. USDC-USDT."
}
},
"description": "Pool filters (token, chain, protocol, strategy, APY, TVL, freshness), e.g. {\"search\":\"usdc\",\"strategies\":[\"lending\"]}. Defaults to pools with at least $100K TVL.",
"additionalProperties": false
},
"groupBy": {
"enum": [
"chain",
"protocol",
"strategy",
"none"
],
"type": "string",
"default": "chain",
"description": "Break the statistics down by chain (default), protocol or strategy, or \"none\" for one overall row."
},
"topGroups": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "How many groups to return, largest TVL first (default 10)."
}
},
"additionalProperties": false
}