MetaVault MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MetaVault MCPCompare fixed-rate yields across Spectra and Pendle on Arbitrum"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MetaVault MCP
Multi-protocol yield intelligence for AI agents — covering Spectra Finance, Pendle, and Morpho via the Model Context Protocol.
55 tools · 3 protocols · 10+ chains · read-only · open emergence architecture · calibration intelligence · on-chain Curve quoting · Pendle logit AMM modeling · ERC-4626 health checks · yield curve term structure · historical eth_getLogs · full Pendle protocol parity (15 tools) · cross-protocol position map · cross-protocol Spectra↔Pendle comparison · veSPECTRA + vePENDLE governance · Pendle historical time-series · Morpho supply-side visibility with supplier cascade modeling · Morpho user positions & historical rates · Merkl campaign APR + expiry integration · entry path awareness · prescriptive observation boundaries · curator risk monitoring · withdrawal stress testing · rollover planning · multi-vault portfolio aggregation · pool expiry monitoring · zero web3 library dependencies
What This Does
Any AI agent (Claude, GPT, open-source) that supports MCP can query Spectra, Pendle, and Morpho in a unified interface to:
Discover the best fixed-rate yield opportunities across 10 chains simultaneously
Analyze specific PT/YT positions with full data (APY, TVL, liquidity, prices)
Calculate leveraged looping strategies (Spectra PT + Morpho collateral) with auto-detected borrow rates
Compare fixed vs. variable yields to make informed decisions
Track wallet portfolios across all Spectra positions (PT, YT, LP) with Merkl reward integration for complete PnL
Surface external Merkl campaign APR alongside pool and market data for both Spectra and Pendle
Monitor pool trading volume, individual transaction activity, and cross-pool address scanning
Quote PT trades with on-chain Curve
get_dy()for exact output, falling back to math estimatesSimulate portfolio state after a hypothetical trade (BEFORE / TRADE / AFTER with deltas)
Scan all chains for capital-aware opportunities with price impact, effective APY, and Morpho looping analysis
Detect YT arbitrage opportunities where IBT APR diverges from YT implied rate
Compute real veSPECTRA boost multipliers per-pool using live on-chain data from Base, and vePENDLE voting power from Ethereum mainnet (with sPENDLE transition awareness)
Map your full cross-protocol position in one call — Spectra + Pendle + Morpho + governance (veSPECTRA + vePENDLE), with contradiction detection (unused boost, lending vs fixed rate spreads, concentration, looper detection, expiring positions across protocols)
Assess entry path complexity — automatically flags exotic underlyings, sw-wrapper hops, and mainnet gas friction so agents know the real cost of reaching advertised yields
Discover live MetaVaults across all chains — curator info, TVL, APY, positions, epoch history
Model MetaVault "double loop" strategies for curators — vault compounding + Morpho leverage with curator economics, auto-populated from live API data or manual parameters
Monitor MetaVault operational health — curator dashboard with vault allocation per position, depositor flows, fee revenue, bridge activity, and actionable alerts
Query Morpho lending markets for PT collateral opportunities, identify who supplies the lending liquidity, and discover vault allocations across markets
Query protocol stats, tokenomics, and governance data
Compare Spectra vs Pendle yield opportunities side-by-side with maturity-aware matching on overlapping chains
Scan both Spectra and Pendle for the best curator opportunities with capital-aware sizing and cross-protocol match tagging
Browse Pendle markets across all Pendle-supported chains (including Pendle-only chains like Mantle, Berachain, HyperEVM, Corn)
Analyze Pendle markets in full depth — market details, portfolio tracking, trade quoting, trade simulation, looping strategies, YT arbitrage, expiry monitoring, yield curves, capacity analysis, and protocol-wide stats (full parity with Spectra tools)
Assess pool depth with multi-size capacity curves — quote PT trades at geometric capital tiers ($1K→$1M) to find the sweet spot and exhaustion point on both Spectra and Pendle
Verify IBT health before deploying — on-chain ERC-4626 conversion rate, APR sustainability (organic vs incentive), pool balance, protocol recognition, liquidity
Visualize yield curves (term structure) for any underlying across all chains — all maturities sorted chronologically with curve shape analysis
Recover historical on-chain pool activity via
eth_getLogswhen API data has aged out — with dynamic RPC URL support for any chainMonitor curator Morpho position health — liquidation distance, borrow rate drift, health factors across all chains
Stress-test MetaVault withdrawal scenarios — liquidity waterfall analysis (idle → maturing → LP removal → PT sale) with market stress simulation
Plan position rollovers for expiring MetaVault positions — cross-protocol candidate ranking with entry impact, yield gap, and overlap windows
Aggregate multi-vault curator portfolios — total AUM, blended APY, fee revenue projection, concentration analysis by underlying/chain
Monitor pool expiry across all chains with readiness assessment — successor pool detection, gauge status from governance API, and operator checklist (deploy pool / submit gauge / ready for migration)
Learn protocol mechanics on-demand via
mv_get_protocol_context(PT/YT identity, Router batching, deposit paths, glossary, fees & costs, workflow routing, externalPositions registry)Surface protocol YT fees (Spectra 3%, Pendle 5%) and Merkl campaign eligibility (POOL vs HOLD) directly in tool output so agents apply them without external lookups
The agent doesn't need to understand PT/YT mechanics -- it just calls spectra_scan_opportunities or pendle_scan_opportunities with its capital size and gets ranked, actionable data. For cross-protocol comparison, mv_scan_curator_opportunities ranks both protocols together. If it needs to understand why something works that way, it calls mv_get_protocol_context.
Related MCP server: DeFi Intelligence Engine
Open Emergence Architecture
The server is designed so that AI agents can discover novel strategies without being taught specific strategies. Instead of hard-coding strategy identification logic, the system teaches protocol mechanics at three layers — and lets the agent compose building blocks into its own analysis.
The Three Layers
Layer 1: Protocol Context (mv_get_protocol_context tool + resources)
→ Teaches the "physics" of the protocol: PT/YT identity, Router batching, minting
→ Available as a callable tool (on-demand) and as MCP resources
→ Static knowledge — what CAN happen, not what IS happening
Layer 2: Tool Descriptions (every tool's description string)
→ Teaches domain-specific mechanics relevant to that tool's data
→ Cross-reference nudges: "use spectra_get_portfolio to check actual holdings"
→ Uses "could be" language, not "is" — preserves ambiguity where it exists
→ Calls out hidden mechanics that could mislead (e.g., AMM_ADD_LIQUIDITY can mint YT)
Layer 3: Structured Output Hints (computed at runtime in tool output)
→ Position Shape analysis in portfolio: balance ratios (e.g., "YT/PT 4:1")
→ Portfolio Signals: concentration, maturity alerts, strategy shape across positions
→ Volume Signals: volume/liquidity ratio, buy/sell skew, trend detection
→ Morpho Market Hints: capacity warnings, utilization alerts, spread analysis, reward incentives
→ Morpho Supply-Side Analysis: supplier identification (vault/EOA/looper), concentration metrics,
supply gap warnings — surfaces where lending liquidity comes from and whether it's sufficient
→ Competing Interpretation Branches (A/B/C) in activity analysis per-address:
multiple explanations for the same observable pattern, presented with equal weight.
The agent must bring external evidence to collapse branches — the tension IS the info.
→ Statistical confidence boundaries: small-N cycle repetitions (≤5) flagged as
insufficient for extrapolation, preventing false pattern-matching
→ Flow Accounting with competing hypotheses: YT-only, PT-only, fully exited positions
each get multiple explanations that predict different future behavior
→ Address isolation mode: cycle detection, flow accounting, contract/EOA detection,
pool impact warnings, gas estimates, pool context
→ Capital-aware warnings: short maturity, low liquidity, negative effective APY
→ Yield Dimensions in scan output: fixed, variable, LP, looping side-by-side
→ Strategy Tension: competing PT looping vs YT accumulation on same pool
→ On-chain quote source indicators: "(on-chain Curve get_dy)" vs "(estimated)"
→ Yield composition: IBT APR breakdown (organic base vs external incentives) in scans and quotes
→ Incentive sustainability: flags when >50% of IBT APR or LP APY comes from incentives,
shows "organic only" APY so agents can assess yield durability without incentive assumptions
→ Pool reserves: IBT/PT amounts with ratio for AMM imbalance analysis
→ Merkl campaign APR: external incentive programs (e.g., KAT rewards) shown per-pool/market
with double-counting avoidance (skips campaigns whose reward tokens are already displayed)
→ Merkl campaign eligibility: action type (POOL/HOLD) always shown, with explicit
"[LP only — not for YT/PT holders]" flag on POOL campaigns to prevent misattribution
→ Protocol YT fees: Spectra 3% and Pendle 5% shown in every pool/market detail output
so agents apply them to yield calculations without needing external lookups
→ Points multipliers: external programs (Drops, InfiniFi, Firelight) with amounts
→ "Could be" / "at current rates" language: preserves ambiguity in ranked output
→ Makes key signals SALIENT without prescribing interpretation
Layer 4: Observation Coverage (quantifies blind spots in tool output)
→ Value coverage: what % of an address's position is explained by observable activity.
Low coverage means most behavior is invisible (direct mints, transfers, cross-chain).
→ Temporal coverage: active days vs dark periods with no observable events.
Longest gap duration surfaced so the agent can reason about invisible activity.
→ Data source coverage: which of 5 available sources were consulted vs not.
Explicitly lists what is invisible to the current analysis.
→ Activity diversity: single-type activity flagged as highest-ambiguity pattern.
→ Boundary marker: "Position sizing should assume this analysis is incomplete,
not comprehensive." — a structural admission of domain-of-validity limits.
→ Coverage metrics bound ALL interpretations above them. High-confidence strategy
assessment + low observation coverage = false confidence. The coverage section
forces the agent to size its conviction to what it actually observed.Design Principles
Teach mechanics, not conclusions. The server explains that AMM_ADD_LIQUIDITY could be a mint+LP batch operation — it doesn't conclude "this user is accumulating YT."
Present competing interpretations, not single narratives. Activity analysis outputs multiple interpretation branches (A/B/C) that predict different future behavior. The agent must bring external evidence to collapse them. This friction surface prevents premature pattern-matching — the most common failure mode in wallet strategy analysis.
Flag statistical insufficiency. Small repetition counts (≤5 cycle detections) are explicitly flagged as insufficient for extrapolation. The agent cannot treat N=3 as a confirmed pattern.
Every tool cross-references at least one other tool. This creates analytical workflows without dictating them. The agent learns to check
spectra_get_portfolioafter seeing activity patterns, not because it was told to.Hidden mechanics are called out where they can mislead. The Spectra Router batches multiple operations atomically. A
SELL_PTevent might actually be YT acquisition via flash-mint. Tool descriptions teach this so agents don't draw wrong conclusions from pool data alone.Full addresses in output, never truncated. When addresses appear in activity data, they're shown in full so the agent can pass them directly to
spectra_get_portfoliowithout needing a block explorer.Discovery tools warn about capital-awareness gaps.
spectra_get_best_fixed_yieldsexplicitly says "this ranks by raw APY — usespectra_scan_opportunitiesfor capital-aware sizing."Quantify blind spots, not just interpretations. Tools now output observation coverage metrics: what percentage of behavior is visible, what data sources were consulted vs available, and how long dark periods lasted. These are not interpretations — they're structural measurements of the analysis's own incompleteness. An agent that sees 35% value coverage should size its confidence accordingly, regardless of how coherent the best-fitting interpretation looks.
Why This Matters
A cold-start agent with zero prior knowledge of the protocols can:
Call
mv_scan_curator_opportunities— see cross-protocol (Spectra + Pendle) yield rankings with capital-aware metricsCall
spectra_get_pool_activity— see trading patterns with ⚠ hints about ambiguous eventsCall
spectra_get_portfolioandpendle_get_portfolioon flagged addresses — see Position Shape across both protocolsRead the cross-reference nudges — compose its own analytical workflow spanning all three protocols
Identify novel strategies the server was never explicitly programmed to detect
This was validated: a subagent spawned with zero priming correctly identified a mint-and-sell-PT loop strategy (YT accumulation via PT discount) in 3 tool calls, using only the mechanics taught in descriptions and the structured hints in output.
The competing-branch design was motivated by a real failure: an agent analyzing a multi-chain wallet collapsed all activity into "YT accumulator" despite different pools showing different patterns (spread capture, market making, LP cycling). The single-narrative failure mode — where the agent picks one interpretation and defends it — is the most dangerous because it looks like good analysis from inside.
The observation coverage layer addresses a deeper problem: even perfect interpretation of observed data is misleading when the data covers a minority of behavior. Competing branches solve the narrative problem (which story fits?). Coverage metrics solve the exposure problem (how much of the picture am I seeing?). An agent that picks the best interpretation branch but ignores 65% invisible activity is sizing conviction to coherence, not evidence.
Tools
Tool | Description |
| Scan ALL chains for top fixed-rate opportunities. The main discovery tool. Supports |
| List all active pools on a specific chain, sorted by APY/TVL/maturity. Surfaces pool reserves, IBT APR composition, maturityValue, multipliers, and tags. Supports |
| Deep dive on a specific Principal Token -- full data including maturityValue, multipliers (points programs), tags, pool reserves, IBT APR composition, and baseIbt for wrapper tokens. |
| Fixed (PT) vs. variable (IBT) yield comparison with spread mechanics and entry cost analysis. |
| Calculate leveraged yield via PT + Morpho looping with effective liquidation margins, borrow rate sensitivity (+1/2/3%), break-even period, and failure scenario modeling. Auto-fetches live Morpho rates when a matching market exists. |
| Find Morpho lending markets that accept Spectra PTs as collateral. Filter by chain or symbol. Shows reward incentives, vault supplier count per market. Cross-references Spectra PT addresses. |
| Get live borrow rate, state, and supply-side context for a specific Morpho market. Includes PT spread analysis, top supplier identification, and vault allocation details (% of AUM, cap utilization). |
| Supply-side analysis for a Morpho market: top suppliers ranked by size, vault vs EOA/looper identification, concentration analysis, supply gap warnings. Reveals where lending liquidity comes from. |
| List Morpho vaults on a chain with enriched allocations: Spectra PT tagging, live borrow rates and utilization per allocation, cap utilization percentages. Parallel-fetches market rates and PT addresses for zero-latency enrichment. |
| Query a user's Morpho positions across markets and vaults on a chain (or all Morpho chains). Shows collateral, borrows, supply with USD values, vault deposits, health factors, looper detection, and position signals. |
| Historical rates and growth for a specific Morpho market. Shows borrow/supply APY, utilization, and TVL trends with min/avg/max/current stats. Includes rate stability signals, spike detection, and supply/demand squeeze alerts. |
| SPECTRA tokenomics, emissions schedule, fee distribution, governance info. |
| List available networks (10 chains). |
| Wallet positions across PT, YT, and LP with USD values, claimable yield, and Merkl rewards (SPECTRA gauge emissions + incentive programs). Rewards matched to specific pools via reason key parsing. |
| Historical buy/sell trading volume for a specific pool. Accepts PT address or pool address. |
| Recent individual transactions (buys, sells, liquidity events) with filtering. Address isolation mode presents competing interpretation branches (A/B/C), statistical confidence boundaries on cycles, flow accounting with competing hypotheses, contract/EOA detection, gas estimates. Accepts PT or pool address. |
| Cross-pool address scanner — finds all pools an address has interacted with on a chain (or all chains) in one call. Includes expired/matured pools via portfolio lookup. Per-pool breakdown + cross-pool aggregates. |
| PT trade quoting with on-chain Curve |
| Preview portfolio BEFORE/AFTER a hypothetical PT trade with deltas, warnings, and on-chain quoting. |
| Capital-aware opportunity scanner: price impact at your size, effective APY, Morpho looping, pool capacity, IBT APR composition, and points multipliers. Supports |
| YT rate vs IBT rate arbitrage scanner -- finds pools where YT is mispriced relative to underlying yield. Includes IBT APR composition for spread sustainability analysis. Supports |
| Live veSPECTRA data from Base chain (total supply via on-chain read) + boost calculator with per-pool multipliers. |
| List live MetaVaults across all chains (or a specific chain). Returns curator info, TVL, live APY, share price, active positions, and epoch history. |
| MetaVault "double loop" strategy modeler for curators. Live mode (chain + metavault_address) auto-fetches APY from API; manual mode accepts base_apy directly. Models curator economics (fee revenue, TVL creation, effective ROI). |
| Operational dashboard for MetaVault curators. Vault health, position status with vault allocation (when available) vs pool TVL, depositor flows, fee revenue estimates, bridge activity, and actionable alerts. Explicitly disambiguates vault allocation from pool-level TVL to prevent misinterpretation. |
| List active Pendle markets on a given chain or all Pendle chains. Supports Pendle-only chains (Mantle, Berachain, HyperEVM, Corn). Supports |
| Deep dive on a single Pendle market — implied APY, LP APY breakdown (swap fees + PENDLE incentives + boost), underlying variable APY, pool reserves, fee rate, Merkl campaigns. |
| Scan all Pendle chains for top fixed-rate opportunities. Ranked by implied APY with TVL/liquidity filters. The Pendle equivalent of |
| Wallet positions across all Pendle chains — PT, YT, LP balances with USD values and implied APY per position. |
| Capital-aware Pendle opportunity scanner — price impact at your size using logit AMM model, effective APY, Morpho looping for Pendle PTs, Merkl campaigns. Supports |
| Multi-size capacity curve for a Pendle market — quotes at geometric capital tiers using logit AMM model to find sweet spot and exhaustion point. |
| Term structure for a given underlying across Pendle chains. All maturities sorted chronologically with curve shape analysis (normal/inverted/flat), steepest segment, cross-chain pairs. |
| Scan Pendle chains for markets approaching maturity. Groups by urgency (CRITICAL ≤7d, WARNING ≤14d, ALERT ≤threshold). |
| YT mispricing scanner — compares underlying variable APY vs implied rate. Pendle YT trades directly on AMM (simpler execution than Spectra's Router flash-mint/redeem). |
| Protocol-wide aggregate stats — total TVL, market count, volume, avg APY across all Pendle chains with per-chain breakdown and Spectra overlap indicator. |
| Leveraged PT + Morpho looping calculator for Pendle PTs — borrow rate sensitivity, break-even analysis, 30-day historical risk assessment with P(underwater) probability. Auto-detects Morpho markets. |
| PT trade quote using Pendle logit AMM model — expected output, price impact, effective APY after entry cost, min output with slippage tolerance. |
| Portfolio impact simulation for Pendle PT trades — before/after position values, blended APY change, concentration analysis. |
| Side-by-side Pendle vs Spectra yield comparison on overlapping chains (mainnet, base, arbitrum, optimism, sonic, bsc). Maturity-aware matching with configurable tolerance (exact ≤7d, close ≤30d, loose ≤90d). |
| Cross-protocol (Spectra + Pendle) capital-aware scanner for MetaVault curators. Price impact at your size, effective APY, Morpho looping (Spectra + Pendle), cross-protocol match tagging. Supports |
| Historical on-chain activity via |
| Multi-size capacity curve — quotes PT trades at geometric capital tiers to show price impact and effective APY degradation. Identifies sweet spot and exhaustion point. On-chain Curve quotes. |
| Multi-signal IBT health assessment — on-chain ERC-4626 conversion rate, APR composition (organic vs incentive), pool balance ratio, protocol recognition, liquidity level. Returns HEALTHY/CAUTION/WARNING verdict. |
| Term structure for a given underlying across all chains. All maturities sorted chronologically with implied APY, TVL, liquidity. Curve shape analysis (normal/inverted/flat), steepest segment, cross-chain pairs. |
| Liquidation risk monitor for curator Morpho positions — health factor, liquidation price, distance-to-liquidation, borrow rate drift, alert levels (ok/watch/warning/critical). |
| Withdrawal stress test for MetaVaults — liquidity waterfall (idle → maturing → LP removal → PT sale), cost to remaining depositors, maximum safe redemption size. Market stress mode (2x impact). |
| Position rollover planner for expiring MetaVault positions — scans Spectra + Pendle for replacement candidates, computes entry impact, yield gap, overlap windows, and net effective APY. |
| Multi-vault portfolio aggregation — total AUM, blended APY, fee revenue projection, concentration by underlying/chain, cross-vault action items. Discovery mode (by curator address) or explicit mode. |
| Calibration oracle — what does "normal" look like? Computes statistical baselines (percentiles, anomaly thresholds) from historical data for any Morpho market, Pendle market, or Spectra pool. Includes peer comparison and assertion-ready threshold language. The bridge between perception (monitoring) and specification (security assertions). |
| Cross-protocol position map — sees the WHOLE wallet across Spectra + Pendle + Morpho + governance (veSPECTRA + vePENDLE) in one parallel call. Contradiction detection: unused governance boost, lending when fixed rates are higher, concentration risk, looper detection, expiring positions across protocols. Honest failure reporting (INCOMPLETE shown before numbers, not after). The first tool that sees the user, not just the protocol. |
| Full veSPECTRA governance dashboard — gauge vote distribution, voting APRs, bribe incentives, SPECTRA emissions per pool. Shows where veSPECTRA holders direct votes, what rewards they earn, emission concentration, and bribe efficiency ($ per vote). |
| Historical time-series for any Pendle market — implied APY, TVL, volume, PT/YT prices over 7d/30d/90d/1y periods. First tool that answers "what happened over time?" for trend analysis, yield stability assessment, and anomaly detection. |
| Scan all chains for pools approaching maturity (default 21-day threshold). Groups by urgency (CRITICAL ≤7d, WARNING ≤14d, ALERT ≤21d). Cross-references each expiring pool's IBT against all active pools for successor detection. Fetches gauge status from governance API. Per-pool readiness assessment (OK/CAUTION/WARNING). Operator checklist: deploy successor pool, submit gauge proposal, ready for migration. |
| Returns protocol mechanics reference across 12 topics: |
Supported Chains
Spectra: Ethereum (mainnet), Base, Arbitrum, Optimism, Avalanche, Katana, Sonic, Flare, BSC, Monad, Hemi, HyperEVM, SEI
Pendle: Ethereum, Optimism, BSC, Sonic, Base, Arbitrum, Mantle, Berachain, HyperEVM, Corn
Morpho PT markets: Ethereum, Base, Arbitrum, Katana
Chain list maintenance (manual)
All three lists are hardcoded in src/config.ts and must be updated by hand when a protocol deploys on a new chain:
Spectra — edit
SUPPORTED_CHAINS_INTERNAL(+CHAIN_RPC_URLS,CHAIN_RPC_FALLBACKS,CHAIN_BLOCK_TIMES,CHAIN_GAS_ESTIMATESper-chain tables). Every Spectra-native tool (metavault list, pool list, expiring pools, protocol pulse, curator dashboard, etc.) reads from this list — so one edit propagates everywhere.Pendle — edit
PENDLE_CHAIN_IDS+PENDLE_CHAIN_NAMES. Source of truth:GET https://api-v2.pendle.finance/core/v1/chains.Morpho — edit
MORPHO_CHAIN_IDS. Source of truth: Morpho GraphQLmorphoBluequeries per chain.
There is no automated canary. The CONFIG_VERIFIED_DATES map in config.ts emits a stderr warning at startup when a list is >120 days old, but that's a calendar alarm, not a "new chain appeared" alarm. Practical cadence: check monthly, or when a protocol team announces a new deployment.
Known drift to eventually reconcile: the comment in MORPHO_CHAIN_IDS mentions Morpho markets on hyperliquid(999) — which is the same chain as our newly-added hyperevm. If Morpho ships PT markets on HyperEVM and we want them scanned, add hyperevm: 999 to the Morpho map.
veSPECTRA Boost
The server reads live veSPECTRA total supply directly from the Base chain via raw eth_call (no ethers/viem dependency) and computes per-pool boost multipliers using the real Spectra formula:
B = min(2.5, 1.5 * (v/V) * (D/d) + 1)
v = your veSPECTRA balance
V = total veSPECTRA supply (read live from Base)
D = pool TVL
d = your deposit sizeFull 2.5x boost when your share of total veSPECTRA >= your share of pool TVL.
Tools that accept ve_spectra_balance (spectra_scan_opportunities, spectra_scan_yt_arbitrage, spectra_compare_yield, spectra_get_ve_info) compute per-pool boost automatically. The veSPECTRA contract is an NFT-based voting escrow (veNFT) at 0x6a89228055c7c28430692e342f149f37462b478b on Base, sourced from spectra-core.
MetaVault Discovery & Strategy Modeling
MetaVaults are ERC-7540 curated vaults that automate LP rollover and compound YT yield back into LP positions. Two tools work together:
spectra_list_metavaults — Discovery tool. Fetches live MetaVault data from the API (/v1/{network}/metavaults), scanning a single chain or all chains in parallel. Returns curator info, TVL, live APY, share price, active positions with PT/pool details, and epoch rate history.
spectra_model_metavault — Strategy modeler with two modes:
Live mode: Provide
chain+metavault_addressto auto-fetch the vault's live APY asbase_apy. All other parameters (borrow rate, LTV, curator fee) can still be overridden.Manual mode: Provide
base_apydirectly for hypothetical or pre-launch modeling.
The "double loop" economics:
Layer 1 (inside vault): Deposit → PT/LP allocation → YT yield → more LP (compounding)
Layer 2 (on top): MV shares → Morpho collateral → borrow → deposit back (leverage)The key insight: YT compounding raises the vault's base APY, and leverage multiplies that higher base. This creates a "double-loop premium" over raw PT looping that scales with leverage.
Curator economics are built in — the tool models fee revenue on external deposits, additional TVL created by looping, and effective ROI on the curator's own capital.
Setup
Install from npm (recommended)
npm install -g metavault-mcpOr run directly without installing:
npx metavault-mcpInstall from source
git clone https://github.com/Finanzgoblin/metavault-mcp.git
cd metavault-mcp
npm install
npm run buildConnect to Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"metavault-mcp": {
"command": "npx",
"args": ["metavault-mcp"]
}
}
}Restart Claude Desktop. You'll see all 55 tools (Spectra, Pendle, Morpho, cross-protocol) available.
Connect to Claude Code
claude mcp add metavault-mcp -- npx metavault-mcpDeep Analysis Prompts
The more context you give upfront, the deeper the agent can go. Each input unlocks a different tool chain:
Input | What it unlocks |
Capital size ( | Price impact at your size, pool capacity limits, effective APY |
Wallet address ( | Portfolio simulation, existing position context, Merkl rewards |
veSPECTRA balance | Real per-pool boost (not min/max range) |
Asset preference | Filtered yield curve, targeted scans |
Strategy type | LP vs PT vs looping vs MetaVault — determines which tools get chained |
Maturity window | Term structure analysis, rollover timing |
The ideal prompt combines all of these. Here are examples that trigger 8-10 tool chains:
Yield hunter: "I have $50K USDC and 10,000 veSPECTRA. Find me the best risk-adjusted fixed yield for 60-180 days. Check IBT health, quote my exact entry, and show who else is in the pool."
Curator: "I'm building a USDC MetaVault on Base with $500K own capital, expecting $2M external. Model the double-loop economics and compare Spectra vs Pendle LP allocation."
Investigator: "Wallet 0xABC... is active on Spectra mainnet. Show me everything — portfolio, activity across all pools, sequence analysis, and what strategy they're running."
Term structure: "Show me the ETH yield curve across all chains. Where are the term premium anomalies? Quote pool capacity at $200K for the top 3 mispricings."
The cross-referencing between tools is where the real depth happens — no single tool tells the full story. The agent calls mv_get_protocol_context(topic="workflow_routing") to learn these compositions at runtime.
Example Queries
Once connected, you can ask Claude things like:
"What's the best fixed yield on USDC right now?"
"Show me all Spectra pools on Base with >$50k TVL"
"Calculate a 3x looping strategy for PT-USDC on Base using Morpho"
"Is the fixed rate on stETH better than the variable rate?"
"What Morpho markets accept Spectra PTs as collateral?"
"What's the borrow rate on that Morpho PT-USDC market?"
"What are the current SPECTRA emissions and lock rate?"
"Show me the portfolio for 0xABC...DEF across all chains — include any unclaimed Merkl rewards"
"What's the recent trading activity on this pool?"
"Scan all pools on mainnet for activity from address 0xABC...DEF"
"Check if address 0xABC...DEF is a contract or EOA and show their trading patterns"
"Quote buying 10,000 USDC worth of PT on this pool"
"What would my portfolio look like if I bought 50k of this PT?"
"I have $100K to deploy -- scan all chains for the best risk-adjusted yield"
"Scan for USDC opportunities sized for $500K with max 2% entry impact"
"Find YT arbitrage opportunities where the market is mispricing yield"
"I have 100K veSPECTRA -- what boost do I get on this pool with a $10K deposit?"
"Show veSPECTRA total supply and how much I need for max boost"
"What MetaVaults are live right now? Show me all of them across all chains"
"Show me the MetaVaults on Base -- what are the APYs and who are the curators?"
"Model a strategy for this MetaVault on Base" (auto-fetches live APY)
"Model a MetaVault with 12% base APY and 3% YT compounding, 10% curator fee -- what does looping look like?"
"Compare MetaVault looping vs raw PT looping at 12% base APY"
"I'm curating a vault with $100K own capital and $1M external deposits -- what's my effective ROI?"
"Compare Spectra vs Pendle yields on Base -- which protocol offers better rates for USDC?"
"I'm curating a MetaVault with $500K -- scan both Spectra and Pendle for the best opportunities"
"Show me all active Pendle markets on Arbitrum sorted by TVL"
"How much capital can I put into this pool before the price impact kills my yield?"
"Is the IBT behind this PT healthy? Check the conversion rate and APR composition"
"Show me the USDC yield curve -- what rates are available at each maturity?"
"Compare the 30-day vs 90-day vs 180-day rates for ETH across all chains"
"This address traded on Katana weeks ago but spectra_get_pool_activity shows nothing -- pull on-chain logs for the last 7 days"
"Fetch historical activity for this pool using my RPC URL: https://rpc.katana.network"
"Monitor my Morpho positions for liquidation risk -- show me the distance to liquidation for each"
"Stress test my MetaVault on Base -- what happens if 30% of depositors redeem in one epoch?"
"I have a position expiring in 14 days on my MetaVault -- plan the rollover and show me the best candidates"
"Aggregate my curator portfolio across all chains -- show me total AUM, blended APY, and concentration"
Architecture
Agent (Claude/GPT/etc)
| MCP Protocol (stdio)
MetaVault MCP (this)
| HTTP (15s timeout, 1 retry on 5xx/network errors)
|
+-- api.spectra.finance/v1/{chain}/pools
+-- api.spectra.finance/v1/{chain}/pt/{address}
+-- api.spectra.finance/v1/{chain}/portfolio/{wallet}
+-- api.spectra.finance/v1/{chain}/pools/{pool}/volume
+-- api.spectra.finance/v1/{chain}/pools/{pool}/activity
+-- api.spectra.finance/v1/{chain}/metavaults
+-- app.spectra.finance/api/v1/spectra/*
+-- api.merkl.xyz/v3/userRewards (unclaimed Merkl rewards per wallet)
+-- api.merkl.xyz/v4/opportunities (Merkl campaign APR per chain)
+-- api.morpho.org/graphql (PT collateral markets, borrow rates)
+-- api-v2.pendle.finance/core/* (Pendle market data for cross-protocol comparison)
+-- mainnet.base.org (veSPECTRA on-chain reads via raw eth_call)
+-- Chain RPCs: eth_call for Curve get_dy() quotes, eth_getCode for contract detection
| (mainnet, base, arbitrum, optimism, avalanche, sonic, bsc, flare)
+-- Chain RPCs: eth_getLogs for historical pool activity (any chain via dynamic rpc_url)Modular TypeScript server. Read-only — queries Spectra's existing API, Morpho's GraphQL API, chain RPCs for on-chain Curve get_dy() quotes and contract detection, and Base RPC for veSPECTRA data. No wallet, no transactions, no keys, no web3 libraries needed.
src/
index.ts Entry point, tool registration, Layer 1 resources (spectra-overview,
curator-strategy-guide), main(), graceful shutdown
config.ts Constants, chain config, Zod schemas, protocol parameters, veSPECTRA constants,
block time constants per chain, RPC URL resolution (hardcoded + dynamic override)
types.ts TypeScript interfaces (SpectraPt, MorphoMarket, ScanOpportunity, MerklTokenReward, MerklChainRewards, MerklCampaign, etc.)
api.ts Fetch helpers with retry, GraphQL sanitization, Morpho batch lookup,
veSPECTRA RPC with Promise-based dedup cache, 30s TTL pool data cache,
Curve get_dy() on-chain quoting, ERC-4626 convertToAssets() health check,
eth_getCode contract detection,
MetaVault multi-chain scanning, API response validation at system boundary,
chunked eth_getLogs with retry for historical event log fetching,
Merkl reward fetching and parsing (pool address extraction from reason keys,
BigInt wei→human conversion, matched/unmatched reward categorization),
Merkl v4 campaign APR fetching (60s TTL cache, inflight dedup, address-based lookup)
primitives.ts Format primitives (formatUsd, formatPct, formatDate, daysToMaturity,
estimatePriceImpact, chainIdToName) — HOME. Re-exported from formatters.ts
for backward compat with 42 consumer files.
protocols/ externalPositions registry (plugin-style extension for Spectra's whitelisted
ERC-4626 modules). types.ts (SourcedValue/InterpretedValue/ProtocolMeta + zod),
metadata.ts (avant + pendle + _unknown), cost-models.ts (zero, lp_exit_samechain,
lp_exit_crosschain_cctp, liquidation), engine.ts (renderExternalPosition,
classifyForStress, generateActionItems, DriftCollector), registry.ts (getMeta +
freshness warnings), index.ts (barrel). Spec: docs/protocols-metadata-spec.md.
formatters.ts Formatting, BigInt LLTV parsing, closed-form leverage math,
price impact, fractional-day maturity, boost computation,
slim envelope helpers, token amount formatting (BigInt → human-readable),
cross-protocol maturity matching (normalizeUnderlyingSymbol, matchByAssetAndMaturity),
Layer 3 output hints (Position Shape, LP APY breakdown,
volume signals, Morpho market hints, portfolio signals,
competing interpretation branches, statistical confidence boundaries,
flow accounting with competing hypotheses),
Layer 4 observation coverage (value coverage, temporal gaps,
data source coverage, activity diversity, boundary markers),
Merkl reward display (per-position matched rewards, unmatched/exited rewards),
Merkl campaign APR display (formatMerklCampaignLines with double-counting avoidance)
tools/ Layer 2: each tool description teaches domain-specific mechanics
context.ts mv_get_protocol_context (Layer 1 protocol mechanics, deposit paths, glossary, callable on-demand)
pt.ts spectra_get_pt_details, spectra_list_pools, spectra_get_best_fixed_yields, spectra_compare_yield
looping.ts spectra_get_looping_strategy
portfolio.ts spectra_get_portfolio (balance ratio strategy signals, portfolio-level hints, cross-ref nudges,
Merkl rewards integration — parallel fetch, per-position matching, unmatched rewards)
pool.ts spectra_get_pool_volume (with volume/liquidity hints), spectra_get_pool_activity (PT address resolution, Router batching,
address isolation w/ cycle detection, flow accounting, contract detection,
gas estimates, pool impact warnings, observation coverage metrics),
spectra_get_address_activity (cross-pool scanner with coverage boundary markers)
morpho.ts morpho_list_markets (with capacity/utilization hints), morpho_get_rate (with PT spread analysis)
protocol.ts spectra_get_protocol_stats, spectra_list_chains
quote.ts spectra_quote_trade (on-chain Curve get_dy() with math fallback)
simulate.ts spectra_simulate_trade (also uses on-chain quoting)
strategy.ts spectra_scan_opportunities (capital-aware, batch Morpho, negative-APY filtering, strategy tension)
yt_arb.ts spectra_scan_yt_arbitrage (YT execution mechanics, flash-mint/flash-redeem)
ve.ts spectra_get_ve_info
metavault.ts spectra_list_metavaults, spectra_model_metavault (live API + computational modeling),
spectra_get_curator_dashboard (vault allocation disambiguation, cross-chain position awareness)
pendle.ts pendle_list_markets, mv_compare_yield (maturity-aware cross-protocol yield comparison)
curator_scan.ts mv_scan_curator_opportunities (cross-protocol capital-aware scanner for MetaVault curators)
onchain.ts spectra_get_onchain_activity (historical eth_getLogs, Curve pool + PT vault event decoding, dynamic RPC)
capacity.ts spectra_get_pool_capacity (multi-size quote ladder, sweet spot / exhaustion detection)
ibt_health.ts mv_check_ibt_health (ERC-4626 conversion rate, APR composition, pool balance, verdict)
yield_curve.ts spectra_get_yield_curve (term structure for a given underlying across all chains)
risk_monitor.ts morpho_monitor_risk (liquidation distance, health factor, borrow rate drift, alert levels)
stress_test.ts spectra_stress_test_vault (withdrawal liquidity waterfall, market stress simulation)
rollover.ts mv_plan_rollover (expiring position rollover planner with cross-protocol candidates)
curator_portfolio.ts mv_get_curator_portfolio (multi-vault aggregation, AUM, blended APY, concentration)
expiry_monitor.ts spectra_list_expiring_pools (pool maturity monitoring, urgency grouping, successor cross-reference, gauge status, readiness assessment)
gauge_votes.ts spectra_get_gauge_votes (veSPECTRA governance: vote distribution, voting APRs, bribes, emissions)
pendle_history.ts pendle_get_market_history (historical APY, TVL, volume, PT/YT prices time-series)
position_map.ts mv_get_position_map (cross-protocol wallet view: Spectra + Pendle + Morpho + governance, contradiction detection)
test.cjs Integration test suite (405 tests, McpTestClient over stdio)
test-agent.cjs Agent reasoning test suite (82 assertions, McpTestClient over stdio)
AGENT-TESTS.md 38-question subjective test suite with grading rubrics (incl. open emergence, coverage, newcomer comprehension tiers)
EMERGENCE-AUDIT.md Open Emergence audit — competing branches, observation coverage, anomaly detection gaps
CODE-REVIEW.md Full codebase review (bugs, security, code quality, test coverage)
SECURITY-REVIEW.md Security-focused review (SSRF, GraphQL injection, dependency vulnerabilities)
docs/
recursive-meta-process.md Open Emergence metaframework specification
dissolution-conditions.md Dissolution conditions for every structural decision
architecture-review-agentic-accessibility.md Agentic accessibility review with feature proposalsEach tool file exports a register(server) function. To add a new tool: create src/tools/newtool.ts, export register(), import and call it in index.ts.
All address parameters are validated (0x + 40 hex chars). All API calls have a 15-second timeout with automatic retry on transient failures (5xx, ETIMEDOUT, ENETUNREACH, ENOTFOUND). Cross-chain scans use Promise.allSettled so one chain failing doesn't block results from others. GraphQL inputs are sanitized to prevent injection. All error returns use MCP's isError: true flag for proper error signaling to agents.
Type Safety
API return types:
fetchSpectra()andfetchMorpho()returnPromise<unknown>(notPromise<any>), forcing explicit type assertions at every call siteNullish coalescing: All decimal/balance fallbacks use
??(not||) to correctly handle 0-decimal tokensMorpho state fields: Typed as
number | nullto match actual API behavior — prevents silentNaNpropagationJSON parsing: Body read as text first, then
JSON.parse()— avoids stream double-consumption that masked error diagnosticsBigInt precision: veSPECTRA total supply parsed with
10n ** BigInt(18)to avoid float intermediate overflow. Trade quoting usesamountToBigInt()(string arithmetic) to avoid precision loss whenamount * 10^decimalsexceedsMAX_SAFE_INTEGERInput validation: Zod schemas enforce
.min()/.max()bounds on all numeric inputs to prevent invalid GraphQL queries
Technical Details
Precision & Correctness
Morpho LLTV: Parsed with
BigIntarithmetic to avoid floating-point precision loss on 18-decimal raw values (e.g.,860000000000000000→0.86exactly)Leverage math: Closed-form geometric series
(1 - ltv^(n+1)) / (1 - ltv)replaces iterative loop accumulation — numerically exact and O(1)YT arbitrage: Uses fractional days-to-maturity for implied rate calculation, avoiding off-by-one annualization errors near expiry
Price impact: Zero-liquidity pools return 100% impact (not 0%), preventing false positives in opportunity scanners. Impact clamped to 99% max to prevent negative output in trade quotes
Negative-APY filtering: Opportunities where entry cost exceeds yield are filtered out before ranking, not sorted to the bottom
Resilience
Retry logic: Covers
ECONNRESET,ETIMEDOUT,ENETUNREACH,ENOTFOUND,EPIPE,EHOSTUNREACH,EAI_AGAIN, andUND_ERR_SOCKETerrorsPool data cache: 30-second TTL per-chain with inflight request deduplication — repeated scans within 30s serve cached data
API validation:
validatePtEntries()filters malformed API responses at system boundary (validates address, maturity, name fields)veSPECTRA cache: Promise-based deduplication prevents duplicate RPC calls when multiple tools run concurrently (5-minute TTL)
Morpho batch limit:
firstparameter capped atmin(addresses * 3, 500)to avoid GraphQL response limitsOn-chain quoting: Curve
get_dy()via raweth_callon 8 chains with automatic fallback to math estimate on RPC failureIBT health checks: ERC-4626
convertToAssets()via raweth_call— graceful degradation when RPC unavailable (other health checks still run)Historical event logs: Chunked
eth_getLogs(2000 blocks/chunk) with per-chunk retry — failed chunks are skipped so partial results are still returned. Dynamicrpc_urlparameter enables any chain without hardcoded RPCsContract detection cache: Permanent
Mapcache foreth_getCoderesults (contract code doesn't change)Merkl rewards: Best-effort parallel fetch from Merkl API — failure does not block portfolio display. Pool address matching via regex extraction from reason keys. BigInt
parseWei()conversion for safe 18-decimal arithmeticMerkl campaigns: Best-effort v4 campaign APR fetch per chain (60s TTL cache with inflight dedup). Failure returns empty map — tool output is unchanged. Double-counting avoidance skips campaigns whose reward tokens are already displayed via native API data
MCP error signaling: All error catch blocks return
isError: trueso agents can distinguish errors from empty resultsPT address resolution: Pool tools (
spectra_get_pool_volume,spectra_get_pool_activity) accept either pool address or PT address and resolve automaticallyError logging: Catch blocks in Morpho lookups log to stderr instead of silently swallowing failures
Graceful shutdown:
server.close()called beforeprocess.exit()on SIGTERM/SIGINT
Testing
From a source checkout:
# Full integration suite (405 tests, requires network)
npm test
# Schema/registration only (98 tests, no network)
npm run test:offline
# Unit tests (242 tests, no network)
npm run test:unit
# Agent reasoning tests (82 assertions, requires network)
npm run test:agentUnit Tests (api.test.ts, formatters.test.ts, config.test.ts)
242 tests covering pure-function logic: GraphQL sanitization, Morpho field constants, Merkl reward parsing (pool address extraction from reason keys, wei-to-human conversion, matched/unmatched categorization), Merkl reward formatting, balance formatting, cross-protocol maturity matching (normalizeUnderlyingSymbol, matchByAssetAndMaturity), Pendle logit AMM price impact model (estimatePendlePriceImpact), Pendle date/maturity helpers (pendleDaysToMaturity), Pendle market formatters (compact + summary), and configuration validation. No network required.
Integration Tests (test.cjs)
405 tests covering tool registration, schema validation, API responses, on-chain Curve get_dy() quoting, cross-pool address scanning, address isolation mode, cross-protocol curator scanning, and malformed-address negative tests. Dynamically discovers pool and PT addresses from the live API, so tests won't go stale when pools mature.
Agent Reasoning Tests (test-agent.cjs)
82 assertions across multi-tool workflow tests that verify the "reasoning surface" — can an agent using these tools detect anomalies, cross-reference data, and avoid protocol-mechanic traps? Tests include:
Protocol context completeness — all topics present, Router batching ambiguities explained, cross-reference guidance included
Anomaly detection — raw APY vs capital-aware rankings produce different results (intentional divergence)
Cross-tool data consistency — APYs match between
spectra_list_pools→spectra_get_pt_details→spectra_compare_yieldRouter mechanics — mint-and-sell loop detection via pool activity → portfolio cross-reference
Router limitation — API resolves Router txns that
eth_getLogsaddress filtering missesMetaVault data integrity — curator info, TVL, APY, vault flows, expired position flagging
Expired pool discovery —
spectra_list_poolsreturns only active pools; MetaVaults surface expired positionsveSPECTRA boost math — max boost (1M veSPECTRA + $1K) vs min boost (100 veSPECTRA + $1M)
Morpho looping fallback — graceful handling when no Morpho market exists for a PT
Morpho market classification — Spectra vs Pendle/Other labels, unsupported chain handling
MetaVault scan inclusion —
include_metavaultsflag correctly shows/hides MetaVault sectionPendle comparison — head-to-head matched pairs with delta, Pendle-only markets, aggregates
Surfaced API fields — maturityValue, multipliers (points programs), tags, pool reserves with ratio, IBT APR composition, baseIbt for wrapper tokens
Merkl rewards in portfolio — SPECTRA gauge emissions appear in portfolio output, graceful handling for empty wallets
Subjective Test Suite (AGENT-TESTS.md)
38 copy-pasteable questions across 11 tiers (basic tool usage → open emergence → newcomer comprehension) with grading rubrics for evaluating LLM agent quality when using the MCP tools. Tier 8 tests "open emergence" — the ability to hold competing interpretations without collapsing to a single narrative. Tier 11 tests newcomer comprehension — can the agent explain deposit paths, recognize conservative impact estimates, and route to the right scanner? These are designed to be run by spawning subagents and scoring responses manually or with LLM-as-judge.
API Reference
This server wraps these endpoints:
Endpoint | Used By |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note: {chain} uses the slug mainnet for Ethereum (the alias ethereum is accepted by the server and mapped automatically).
Pendle Protocol Integration
13 Pendle tools provide full feature parity with the Spectra toolset, plus 2 cross-protocol tools for unified analysis:
Pendle-Native Tools (13)
Category | Pendle Tool | Spectra Equivalent |
Discovery |
|
|
Discovery |
|
|
Analysis |
|
|
Analysis |
|
|
Analysis |
|
|
Portfolio |
|
|
Strategy |
|
|
Strategy |
|
|
Strategy |
|
|
Trading |
|
|
Trading |
|
|
Monitoring |
|
|
Protocol |
|
|
Cross-Protocol Tools (2)
mv_compare_yield — Side-by-side comparison on overlapping chains with maturity-aware matching. Normalizes underlying symbols (wstETH↔stETH, USDC.e↔USDC) and matches by nearest maturity within configurable tolerance (exact ≤7d, close ≤30d, loose ≤90d). Shows match quality and maturity gap per pair.
mv_scan_curator_opportunities — Cross-protocol capital-aware scanner for MetaVault curators. Scans both Spectra and Pendle in parallel, computes price impact at your capital size, effective APY after entry cost, Morpho looping availability (both Spectra and Pendle PTs), and tags cross-protocol matches.
Pendle-Supported Chains
Overlapping with Spectra: Ethereum, Base, Arbitrum, Optimism, Sonic, BSC Pendle-only: Mantle, Berachain, HyperEVM, Corn
Key Differences from Spectra
AMM model: Pendle uses a time-decay logit AMM (not Curve StableSwap). The capacity and quote tools use a conservative
scalarRoot=50estimate.YT trading: Pendle YT trades directly on the AMM (
SY↔YT). Spectra YT trades indirectly via Router flash-mint/redeem.Incentives: Pendle uses PENDLE token emissions + vePENDLE boosting (separate from Spectra's SPECTRA/veSPECTRA system).
Token wrapping: Pendle uses SY (Standardized Yield) tokens as the pool asset, not IBT (Interest-Bearing Token) like Spectra.
On-Chain Historical Activity
The Spectra REST API (/v1/{network}/pools/{pool}/activity) only retains a limited time window of recent transactions. When investigating addresses or pools with older activity, spectra_get_onchain_activity reads historical event logs directly from the blockchain via eth_getLogs.
Supports two contract types:
Curve pool (
pool_address): TokenExchange, AddLiquidity, RemoveLiquidity, RemoveLiquidityOneSpectra PT vault (
pt_address): Mint (deposit IBT → PT+YT), Redeem (burn PT → IBT), YieldClaimed
Both can be provided simultaneously — events are fetched in parallel, merged, and sorted by block number.
Key features:
Dynamic RPC URL: Agent can pass any
rpc_urlparameter — works for chains without hardcoded RPCs (Katana, Monad)Chunked fetching: 2000 blocks per chunk with per-chunk retry, best-effort (partial results on RPC issues)
Dual-contract decoding: Curve StableSwap-NG pool events AND Spectra PrincipalToken vault events
Block range control: Explicit
from_block/to_blockorlookback_hours(default 24h, max 720h/30 days)Address filtering: Filter events by a specific address
No USD values: On-chain logs don't carry prices — token amounts are shown in human-readable form. Cross-reference with
spectra_get_pt_detailsfor price context
Composability with existing tools:
Agent flow: spectra_get_pool_activity → empty? → spectra_get_onchain_activity(pool_address=...) → pool events
Agent flow: portfolio shows PT but no pool trades → spectra_get_onchain_activity(pt_address=...) → vault events (mint/redeem)Extending
Following the Open Emergence Pattern
When adding new tools, follow the three-layer architecture:
Description (Layer 2): Teach any protocol mechanics that affect interpretation of the tool's data. Use "could be" language for ambiguous signals. Add cross-reference nudges to at least one related tool.
Output (Layer 3): If the data contains signals that require domain knowledge to notice (e.g., a ratio that implies a strategy, an event that could mean different things), compute a structured hint and include it in the output. Make it salient but not prescriptive. When an observable pattern has multiple valid interpretations, present them as competing branches with equal weight — do not pick one. Flag small sample sizes as statistically insufficient.
Coverage (Layer 4): If the tool's output covers only a subset of the address's or pool's full behavior, quantify the blind spots. Report value coverage (observable activity vs position size), temporal gaps, and which data sources were used vs available. End with a boundary marker: "Position sizing should assume this analysis is incomplete, not comprehensive." Coverage metrics bound ALL interpretation branches — high-confidence assessment + low coverage = false confidence.
Resource (Layer 1): If the new tool introduces fundamental protocol concepts not covered by existing resources, update
spectra-overviewinindex.ts.Dissolution condition: Document when the new structure would no longer serve, in
docs/dissolution-conditions.md. Every Layer 3 hint, architectural pattern, and generative friction point carries a dissolution condition — a prompt for re-evaluation when circumstances change.
The goal: a cold-start agent reading only the tool descriptions and output hints should be able to use the tool correctly and compose it with other tools into novel analytical workflows.
Adding write capabilities (future)
To enable agents to actually execute strategies, you'd add tools that construct unsigned transactions via Spectra's Router contract. The agent would return the transaction calldata for the user to sign -- never holding keys.
Adding gauge/bribe data
Query the spectra-governance subgraph for current epoch votes, bribe amounts, and voter rewards. This is valuable for agents optimizing veSPECTRA voting strategies.
Not yet wired (API endpoints available)
These Spectra API endpoints are ready to be integrated. Create a new file in src/tools/, export register(), and import it in src/index.ts:
GET /v1/vision/{network}?tokens=...-- APR data for specific tokensGET /v1/watch-tower/{network}/transactions-- Conditional order dataGET /v1/{network}/metavaults/bridge/transactions-- MetaVault cross-chain bridge transaction data (bridged volume, in-flight amounts)
License
MIT
Available Tools
56 toolsmerkl_list_campaignsA
Discover live Merkl incentive campaigns on a given chain.
Returns all active Merkl campaigns with APR, reward tokens, daily rewards, TVL, and campaign type. Essential for understanding subsidized rates:
Morpho borrow campaigns: Merkl can PAY borrowers, making net borrow cost negative
LP campaigns: additional yield on top of base pool APR
HOLD campaigns: rewards for simply holding a token
Use this to verify whether a borrow rate is subsidized, find new incentive opportunities, or understand the full yield stack of any position.
Campaign types: CLAMM (concentrated LP), ERC20LOGPROCESSOR (Morpho/lending), MORPHOVAULT, etc. Action types: POOL (LP only), HOLD (token holders), BORROW, LEND.
Data completeness: the underlying Merkl API is fully paginated (all campaigns fetched, not truncated) and cached 15min in-memory + 30min on disk. Chains like Ethereum mainnet have 1,800+ campaigns — all are indexed. When asset_filter is provided, it also applies server-side filtering for targeted lookups.
When an agent says "no subsidy exists" — check here first. The subsidy layer is invisible to protocol-native tools unless explicitly integrated.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain to search for Merkl campaigns | |
| asset_filter | No | Filter campaigns by asset symbol or name (case-insensitive substring match). E.g., 'ynRWAx', 'USDC', 'Morpho'. | |
| min_apr | No | Minimum campaign APR to include (default 0) | |
| top_n | No | Number of campaigns to return (default 20, max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It thoroughly discloses data completeness (fully paginated, cached 15min memory + 30min disk), campaign types, and server-side filtering. This exceeds minimal expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with sections, but somewhat lengthy (multiple paragraphs). It could be more concise, but every sentence adds value. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters all described, the description is very complete: covers return data, caching, pagination, filtering, and campaign types. It fully equips the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds value by explaining expected outputs and interpretation but does not add significant parameter details beyond the schema. It reiterates asset_filter behavior already in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool discovers live Merkl incentive campaigns, lists returned data (APR, reward tokens, daily rewards, TVL, campaign type), and provides examples. It distinguishes from sibling tools by focusing on Merkl-specific incentives, while siblings target other protocols like Morpho, Pendle, and Spectra.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit use cases: verifying subsidized rates, finding opportunities, understanding yield stack. It suggests checking this tool when no subsidy is reported. However, it lacks explicit when-not-to-use guidance or alternative tools, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_get_historyA
Historical rates and growth for a specific Morpho market. Shows borrow APY, supply APY, utilization, and TVL trends over time with min/avg/max/current stats and directional signals.
Useful for assessing rate stability before entering a looping position. A market with stable, predictable borrow rates is safer for leveraged strategies than one with frequent spikes.
Output includes signals: rate spikes, stability assessments, utilization warnings, TVL decline alerts, and supply/demand squeeze detection.
Parameters:
period: 7d (hourly), 30d (daily), 90d (daily), 1y (weekly)
interval: auto-selected based on period, or override manually
Use morpho_get_rate for current live rates. Use morpho_list_markets to discover market keys. Use spectra_get_looping_strategy to model leveraged yield after confirming rate stability.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_key | Yes | The Morpho market unique key (0x + 64 hex chars). Use morpho_list_markets to find it. | |
| period | No | Time period: 7d (hourly data), 30d (daily), 90d (daily), 1y (weekly). Default 30d. | 30d |
| interval | No | Override auto-selected interval. Auto: 7d→HOUR, 30d→DAY, 90d→DAY, 1y→WEEK. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes output including signals (rate spikes, stability assessments), implying read-only behavior. Does not explicitly state side effects or permissions, but context suggests no destructive actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose, usage context, output signals, parameter details, sibling references. Slightly verbose but each sentence adds value. Could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains output includes signals and trends. Provides sufficient information for an agent to understand what the tool returns, though not exhaustive details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. Description adds extra context: period options with data frequency, interval override explanation, and default values. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it provides historical rates and growth for a specific Morpho market, listing specific metrics (borrow APY, supply APY, utilization, TVL trends). Distinguished from siblings like morpho_get_rate and morpho_list_markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('assessing rate stability before entering a looping position') and when not ('use morpho_get_rate for current live rates'). Provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_get_market_suppliersA
Show who supplies lending liquidity to a specific Morpho market. Returns top suppliers ranked by supply size, identifies Morpho vaults vs EOAs vs loopers, and provides concentration analysis.
A market's supply side determines looping viability. A high-APY market with $10K supply from a single vault has different risk/capacity than $10M from diverse sources.
Protocol context:
Suppliers are identified via Morpho's marketPositions query, then cross-referenced against the vault registry. Addresses that aren't vaults could be EOAs or contracts.
A supplier with both collateral and borrows is likely a looper, not a lender. The tool tags these as [Looper] — but this is inference from position shape, not confirmed. The address could be a contract doing something more complex.
Supply concentration affects rate stability: one vault withdrawing could spike borrow rates. High concentration is a signal, not necessarily a problem.
Reward incentives (supply APR) can make supply competitive — or mask thin organic yield.
Use morpho_list_markets to find market keys first. Use morpho_list_vaults to discover all vaults on a chain and their allocations. Use morpho_get_rate for borrow-side rate and PT spread analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_key | Yes | The Morpho market unique key (0x + 64 hex chars). Use morpho_list_markets to find it. | |
| top_n | No | Number of top suppliers to return (default 10, max 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations (none provided). It explains the underlying query (marketPositions), cross-referencing with vault registry, and the inference logic for loopers with appropriate caveats ('inference from position shape, not confirmed'). It also discusses supply concentration implications and the effect of reward incentives, providing full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded purpose, followed by protocol context sections. It is informative without being overly verbose, though it could be slightly shortened. Each sentence adds value, making it efficient for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the Morpho protocol and lack of output schema, the description is complete. It covers the return content, operational details, limitations, and contextual signals (concentration, loopers, incentives). An agent can fully understand what the tool does and how to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds some context (e.g., market_key pattern explanation, top_n default and max) and reinforces the chain enum, but does not significantly extend beyond the schema. The mention of 'Use morpho_list_markets to find it' adds value but not enough to raise the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Show who supplies lending liquidity to a specific Morpho market.' It specifies the output (top suppliers ranked by supply size, identification of vaults vs EOAs vs loopers, concentration analysis) and distinguishes from sibling tools by mentioning related tools for other aspects (e.g., morpho_list_markets for finding markets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use morpho_list_markets to find market keys first.' It also notes alternatives for borrow-side analysis ('Use morpho_get_rate for borrow-side rate') and vault discovery ('Use morpho_list_vaults to discover all vaults'). This gives clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_get_positionsA
Query a user's Morpho positions across all markets and vaults on a chain. Returns collateral, borrows, supply (with USD values), vault deposits, health factors, and position signals (looper detection, low health warnings).
Useful for understanding what a wallet holds on Morpho: is it a looper? A supplier? A vault depositor? The position shape reveals the strategy.
Protocol context:
Market positions show collateral, borrows, and supply separately. A position with both collateral and borrows is likely a looper (leveraged strategy).
Health factor = (collateralUsd * LLTV) / borrowUsd — approximation using USD values. Health < 1.0 means liquidatable. Health < 1.3 means dangerously close.
Vault positions show shares deposited in curated vaults (passive lending).
Net value = supply + collateral + vaults - borrows.
Scans all Morpho chains by default (mainnet, base, arbitrum). Specify chain to narrow.
Use morpho_list_markets to find available PT markets. Use morpho_get_rate for live borrow rate on a specific market. Use spectra_get_portfolio for Spectra protocol positions (PT, YT, LP).
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address (0x...) | |
| chain | No | Specific chain to query. Omit to scan all Morpho chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: returns specific position fields, explains health factor calculation, net value formula, and default multi-chain scan. Provides protocol context (looper detection, health warnings) that goes beyond a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose and clear sections. Some redundancy (e.g., 'Useful for understanding' and later 'The position shape reveals the strategy'). Could be slightly more concise, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description sufficiently explains return structure (collateral, borrows, supply, vaults, health factors). Covers protocol context and cross-chain behavior. References sibling tools for deeper insights. Complete for a data query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; both parameters have descriptions. The description adds context: chain enum values are listed, default behavior (scan all chains) is clarified, and the address regex is implied. Adds value beyond schema by explaining the purpose of each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it queries a user's Morpho positions across markets and vaults, listing returned data (collateral, borrows, supply, vault deposits, health factors, signals). Distinguishes from siblings like morpho_list_markets, morpho_get_rate, and spectra_get_portfolio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool (understanding wallet holdings) and cross-references siblings. Provides protocol context including health factor formula and chain scanning behavior. Tells agent to specify chain to narrow scope, and points to morpho_list_markets for PT markets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_get_rateA
Get the current borrow rate and market state for a specific Morpho market. Provide the market's unique key (hex ID) and chain. Returns live borrow APY, supply APY, utilization, and liquidity — the data needed to calculate looping profitability. Use morpho_list_markets to discover market keys first.
Important: Rates are live as-of-query and change continuously based on utilization. When planning a looping strategy, verify rates are still favorable before executing. A profitable spread (fixed yield > borrow rate) can turn negative if borrow rates spike.
Use spectra_get_looping_strategy with these rates to calculate leveraged yield projections.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the Morpho market lives | |
| market_key | Yes | The Morpho market unique key (0x + 64 hex chars). Use morpho_list_markets to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description effectively discloses that rates are live, dynamic, and can change unpredictably. It explains the return values (borrow APY, supply APY, utilization, liquidity) and implies a read-only operation. However, it does not cover error handling or requirements like authentication, slightly reducing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into three concise paragraphs, each serving a purpose: main action, behavior note, and integration advice. It is front-loaded with the core functionality, and no superfluous sentences are present. Slightly longer than minimal but justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains the return data (borrow APY, supply APY, utilization, liquidity) and its purpose in looping strategies. It also provides pre-requisites (morpho_list_markets) and post-steps (spectra_get_looping_strategy), making it self-contained for the intended use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the market_key is a hex ID to be obtained from morpho_list_markets and by describing the output fields, which are not in the schema. This goes beyond simple repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets the borrow rate and market state for a specific Morpho market, distinguishing it from sibling tools like morpho_list_markets and morpho_get_positions. It also explicitly guides users on prerequisites and related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: for retrieving rates for looping profitability. It instructs users to first use morpho_list_markets to discover market keys, warns about rate volatility, and directs to spectra_get_looping_strategy for projections, offering clear alternatives and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_list_marketsA
Find Morpho Blue lending markets by collateral type.
Two search modes:
PT collateral (default): Finds markets that accept Spectra/Pendle PT tokens as collateral. Use pt_symbol_filter to narrow (e.g., "USDC", "sUSDe"). Essential for looping strategies.
Any collateral: Use collateral_filter to search ANY Morpho market by collateral symbol (e.g., "ynRWAx", "wstETH", "WETH"). Finds IBT, LST, and other collateral markets that pt_symbol_filter would miss. IMPORTANT: Many yield-bearing tokens (IBTs) have Morpho markets using the raw token as collateral, NOT the PT wrapper.
When both filters are provided, collateral_filter takes precedence (broader search).
Enriched with Merkl campaign data: shows subsidized borrow/supply rates when Merkl campaigns are active on the market's collateral or loan assets. Subsidized borrow rates can be NEGATIVE (Merkl pays borrowers), dramatically improving looping economics.
Protocol context:
LLTV = Liquidation Loan-to-Value. Threshold where liquidation CAN occur, NOT the safe operating level. Loop safely at ~90-95% of LLTV.
High utilization (>90%) means limited borrowing capacity.
Borrow rates are variable and can spike. Monitor when leveraged.
Morpho chains: mainnet, base, arbitrum, katana.
Use spectra_get_looping_strategy for leveraged yield calculation. Use morpho_get_rate for live borrow APY on a specific market key. Use spectra_scan_opportunities for automated cross-chain looping discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Filter by chain. Omit to search all Morpho-capable chains. | |
| pt_symbol_filter | No | Filter by PT symbol (e.g., 'USDC', 'reUSD'). Prepends 'PT-' to search. For non-PT collateral, use collateral_filter instead. | |
| collateral_filter | No | Search ANY Morpho market by collateral symbol (e.g., 'ynRWAx', 'wstETH', 'WETH'). Does NOT prepend 'PT-'. Use this for IBT, LST, or any non-PT collateral markets. | |
| min_supply_usd | No | Minimum total supply in USD (default 0) | |
| sort_by | No | Sort results (descending): supply, borrow_apy, or utilization | supply |
| top_n | No | Number of results to return (default 10, max 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and excels: it explains search modes, precedence, enriched Merkl data, subsidized rates (potentially negative), and protocol context like LLTV and utilization. It fully discloses behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections (intro, search modes, enrichment, protocol context, alternatives). It is front-loaded with purpose and every sentence adds value. It is appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, no output schema, many siblings), the description is complete: it explains search modes, enrichment, protocol context, and references related tools. It adequately covers what the tool returns and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds significant meaning beyond schema: it explains the two search modes in detail, the difference between pt_symbol_filter and collateral_filter, and precedence rule. It provides high-level guidance not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find Morpho Blue lending markets by collateral type.' It specifies the verb, resource, and scope, and distinguishes it from siblings like spectra_get_looping_strategy and morpho_get_rate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs alternatives, e.g., 'Use spectra_get_looping_strategy for leveraged yield calculation. Use morpho_get_rate for live borrow APY.' It also explains the two search modes and when to use each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_list_vaultsA
List Morpho vaults on a chain — discover where supply-side liquidity lives. Returns vault details including AUM, APY, fees, curator info, and market allocations.
Morpho vaults are curated lending strategies managed by curators who allocate deposits across lending markets. They are often (but not always) the primary source of supply-side liquidity for PT looping markets. EOA suppliers also exist.
Protocol context:
Vault APY comes from lending yield on allocated markets, minus the curator's fee. High APY could indicate high borrow demand or could reflect temporary incentives.
A vault's allocation breakdown shows which markets it supplies and how much capital is deployed to each. A vault allocating to a PT market directly funds the looping pool.
Supply cap (when present) limits how much a vault will deploy to a given market. Uncapped allocations track demand; capped allocations create a ceiling.
Not all vaults on a chain allocate to PT markets — many serve non-PT markets. Use morpho_get_market_suppliers with a specific market key to find who actually supplies it.
Use morpho_get_market_suppliers to see who supplies a specific market. Use morpho_list_markets to find available PT lending markets. Use spectra_get_looping_strategy to model leveraged yield after identifying supply liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network to query | |
| asset_filter | No | Filter by asset symbol (e.g., 'USDT', 'USDC'). Matches vault names/assets. | |
| min_tvl_usd | No | Minimum vault AUM in USD (default 0) | |
| top_n | No | Number of vaults to return (default 20, max 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses return fields (AUM, APY, fees, curator info, market allocations) and explains vault allocation dynamics (supply caps, uncapped allocations). Slightly lacks explicit statement that operation is read-only, but implied by context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear purpose statement first, followed by protocol context and usage notes. Slightly lengthy but all sentences add value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completeness is high given no output schema: describes return fields, explains APY derivation, supply caps, and how vaults relate to PT markets. Also situates tool within broader protocol ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add semantic detail beyond schema; it provides protocol context but not parameter-specific meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List Morpho vaults on a chain' with verb and resource, and explicitly distinguishes from sibling tools like morpho_get_market_suppliers and morpho_list_markets by referencing them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('discover where supply-side liquidity lives') and when-not-to ('Not all vaults... allocate to PT markets'). Lists three specific alternatives: morpho_get_market_suppliers, morpho_list_markets, spectra_get_looping_strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morpho_monitor_riskA
Monitor liquidation risk across a curator's Morpho positions.
Computes health factor, liquidation price, distance-to-liquidation, and borrow rate for every borrowing position. Flags positions approaching danger zones.
Morpho has NO close factor — when health factor reaches 1.0, the ENTIRE position can be liquidated in one transaction. This makes distance-to-liquidation critical: a 14% distance means a 14% collateral price drop wipes the position completely.
Alert levels scaffold attention, not action — multiple signals may disagree:
ok: position healthy, no immediate concern
watch: distance below threshold or rate elevated — worth monitoring
warning: health factor < 1.3 or distance dangerously low
critical: health factor < 1.1 or distance < 5% — immediate attention needed
Use morpho_get_positions for raw position data without risk analysis. Use morpho_get_history to assess borrow rate stability over time. Use spectra_get_looping_strategy to model deleverage scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Curator wallet address to monitor (0x...) | |
| chain | No | Restrict to a single chain. Omit to scan all Morpho-capable chains. | |
| alert_threshold_pct | No | Warn when distance-to-liquidation drops below this % (default 15) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It explains the no-close-factor quirk, defines alert levels with thresholds, and notes that multiple signals may disagree. This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the core purpose, then key metrics, alert levels, and sibling tool usage. Every sentence adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of risk monitoring and no output schema, the description thoroughly covers inputs, output interpretation (alert levels), behavioral quirks, and alternatives. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context by explaining the significance of distance-to-liquidation and the default threshold behavior, going slightly beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool monitors liquidation risk across a curator's Morpho positions, computing health factor, liquidation price, distance-to-liquidation, and borrow rate. It distinguishes from siblings like morpho_get_positions and morpho_get_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on when to use this tool vs alternatives: use morpho_get_positions for raw data, morpho_get_history for rate stability, and spectra_get_looping_strategy for deleverage scenarios. This helps the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_check_ibt_healthA
Perform a multi-signal health assessment of the IBT underlying a PT pool.
Checks conversion rate (on-chain ERC-4626), APR composition (organic vs incentive), pool balance ratio, APR magnitude, protocol recognition, and liquidity level.
Returns HEALTHY / CAUTION / WARNING verdict with per-check details.
A CAUTION flag means "proceed with awareness." A WARNING flag means "investigate before deploying." Output includes observation boundaries declaring what the snapshot cannot detect (rate trajectory, underlying governance, whether imbalance is transient). Pool imbalance checks surface competing explanations (demand vs withdrawal vs maturity).
Two modes:
Spectra mode (pt_address): Full analysis using Spectra API + on-chain checks.
Direct mode (ibt_address): Protocol-agnostic on-chain checks. Tries ERC-4626 convertToAssets(), falls back to Pendle SY exchangeRate(). Use for Pendle SY tokens, or any ERC-4626 vault not listed on Spectra. Runs: conversion rate + rate direction. Skips: APR, pool balance, liquidity.
If both are provided, pt_address takes priority (richer data from Spectra API).
Use spectra_get_pool_capacity to assess how much capital the pool can absorb. Use spectra_compare_yield for fixed-vs-variable rate analysis on the same PT.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | No | The PT contract address (resolves to underlying IBT). Provide this OR ibt_address. | |
| ibt_address | No | Direct IBT/ERC-4626 address for protocol-agnostic health check. Use for Pendle SY tokens or any ERC-4626 vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: what checks are performed, verdict types (HEALTHY/CAUTION/WARNING), limitations (rate trajectory, governance, transient imbalance), and mode-specific behaviors. It surfaces competing explanations for pool imbalances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, checks, verdict, limitations, modes). It is concise for the amount of information provided, though slightly lengthy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes return value (verdict + per-check details) and limitations. It covers modes, alternatives, and edge cases (e.g., which address takes priority). Could mention error handling but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining the two modes, fallback behavior, and that pt_address provides richer data. It clarifies the relationship between parameters and their usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a multi-signal health assessment of the IBT underlying a PT pool, with specific checks and verdicts. It distinguishes from sibling tools by mentioning alternative tools (spectra_get_pool_capacity, spectra_compare_yield).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains two modes (Spectra vs Direct), when to use each, and priority rules. It also references alternatives for related tasks, providing clear guidance on when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_compare_yieldA
Compare Pendle and Spectra yield opportunities side-by-side on the same chain. Auto-matches markets by underlying asset AND maturity proximity for head-to-head comparison.
Essential for MetaVault curators who can allocate to either protocol. Shows:
Implied APY (fixed rate) comparison
LP APY comparison (relevant for MetaVault allocation)
Pool liquidity and TVL comparison
Variable rate comparison
Per-market winner analysis
Maturity match quality (exact ≤7d, close ≤30d, loose ≤90d gap)
Only works on chains where both Spectra and Pendle are deployed: Ethereum, Optimism, BSC, Sonic, Base, Arbitrum, HyperEVM
Includes external Merkl campaign APR for both protocols when available.
Use pendle_list_markets for Pendle-only chain data. Use mv_scan_curator_opportunities for unified cross-protocol ranking with capital-aware sizing. Use spectra_scan_opportunities for Spectra-native capital-aware ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain where both Spectra and Pendle are deployed | |
| asset_filter | No | Filter by underlying asset (e.g., 'USDC', 'ETH', 'stETH'). Matches against pool/market names. | |
| min_tvl_usd | No | Minimum TVL in USD | |
| min_liquidity_usd | No | Minimum pool liquidity in USD | |
| maturity_tolerance_days | No | Maximum maturity gap (days) to consider a match. Matches within 7d are 'exact', within 30d are 'close', within this tolerance are 'loose'. Default 90. | |
| compact | No | Compact output mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavior. It details what comparisons are shown (implied APY, LP APY, liquidity, TVL, variable rate, winner analysis, maturity match quality) and explains maturity categories and Merkl campaign inclusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and front-loaded main purpose. Some redundancy (chain list repeated in description and schema) but overall efficient. Could be slightly tighter but still good.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and complexity as a comparison tool, description is thorough. Covers when to use, outputs, matching logic, chains, and alternative tools. Complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining maturity tolerance categories (exact ≤7d, close ≤30d, loose ≤90d) and providing examples for asset_filter. This goes beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compares Pendle and Spectra yield opportunities side-by-side. It uses a specific verb ('compare') and resource ('yield opportunities'), and distinguishes from siblings by mentioning alternative tools like pendle_list_markets and mv_scan_curator_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('Essential for MetaVault curators') and lists three alternative tools with specific use cases. Also specifies chain requirements clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_get_calibrationA
Calibration oracle: what does "normal" look like for a market, pool, or IBT?
Produces statistical baselines from historical data — percentiles, anomaly thresholds, peer comparison, and assertion-ready language.
This is the bridge between perception (monitoring tools) and specification (security assertions like Phylax Credible Layer). The tool answers "what should the threshold be?" from observation, not theory.
For each metric (borrow APY, utilization, TVL, implied APY, etc.), returns:
Normal range (5th-95th percentile from historical data)
Current status (normal / elevated / anomalous)
Anomaly threshold (conservative: min of 3-sigma and 2x historical max)
Peer comparison (where this market sits among similar markets)
Assertion hints (natural language threshold suggestions)
Supports Morpho markets (by market key), Pendle markets (by market address), and Spectra pools (by pool/PT address). Auto-detects target type from address format (64-char hex = Morpho, 40-char hex = Pendle/Spectra).
Use morpho_get_history or pendle_get_market_history for raw time-series. Use mv_check_ibt_health for single-point health snapshots. Use this tool when you need to CALIBRATE — set thresholds, compare to peers, or export knowledge about what normal looks like.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| target_address | Yes | Market key (Morpho 0x+64 hex), market address (Pendle 0x+40 hex), or pool/PT address (Spectra 0x+40 hex) | |
| target_type | No | Target type. Auto-detected from address format if omitted. | |
| period | No | Historical period for calibration (default 30d) | 30d |
| include_peers | No | Compare to similar markets on the same chain (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return structure (normal range, current status, anomaly threshold, peer comparison, assertion hints) and the auto-detection logic for target_type. However, it does not explicitly state whether the tool is read-only or describe potential side effects, though read-only is implied. This is a minor gap, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with a clear purpose, then explaining return values, supported protocols, and usage guidance. Every sentence is informative, and it avoids redundancy. The length is appropriate for the tool's complexity, and it front-loads the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description comprehensively explains the return structure. It covers all five parameters, includes auto-detection logic, lists supported protocols, and distinguishes from sibling tools. For a tool with this complexity, the description is complete and anticipates user needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the auto-detection of target_type from address format and describing the return structure, which helps in understanding how parameters map to results. This goes beyond the schema's enum descriptions and justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a 'calibration oracle' that produces statistical baselines from historical data. It specifies what it does (returns percentiles, anomaly thresholds, peer comparison, assertion hints) and distinguishes it from siblings like morpho_get_history and mv_check_ibt_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool ('when you need to CALIBRATE — set thresholds, compare to peers, or export knowledge') and when not to use it (for raw time-series use morpho_get_history/pendle_get_market_history, for single-point health snapshots use mv_check_ibt_health). This provides clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_get_curator_portfolioA
Aggregate multiple MetaVaults managed by a single curator into one portfolio view.
Three input modes (priority: explicit > label > address):
Explicit mode: metavault_addresses as a JSON array of {chain, address} pairs to aggregate specific vaults (machine-friendly).
Label mode: curator_label="Gami Labs" — resolves to the union of curator EOAs whose curator.name matches case-insensitively across chains. Solves the named-curator-multiple-EOAs case (e.g. Gami Labs has different EOAs on base vs flare).
Address mode: curator_address=0x... — scans all chains for MetaVaults where the curator's address matches the vault's curator.addresses array (machine-friendly when the EOA is known).
Returns:
Total AUM across all vaults
Blended APY (TVL-weighted)
Projected annual fee revenue at the configured curator fee
Concentration by underlying asset and by chain (suppressed for single-vault curators)
Per-underlying rollup with expiry calendar (suppressed for single-underlying curators)
Per-vault summary with position count and per-vault action items
Cross-Vault Items: GENUINE cross-vault signals computed by aggregation (suppressed when no genuine signal fires — silent on clean is first-class)
Use spectra_get_curator_dashboard for deep-dive into a specific vault. Use morpho_monitor_risk for Morpho position health across the curator's address. Use spectra_stress_test_vault for withdrawal simulation on a specific vault.
| Name | Required | Description | Default |
|---|---|---|---|
| curator_address | No | Curator wallet address. Scans all chains for MetaVaults managed by this address. Machine-friendly when the EOA is known. | |
| curator_label | No | Curator display name (e.g. 'Gami Labs'). Resolves case-insensitively to the union of curator EOAs across chains. Use when a curator brand spans multiple EOAs (Gami Labs has different EOAs on base vs flare). | |
| metavault_addresses | No | Explicit list of MetaVault {chain, address} pairs to aggregate. Takes priority over label/address. | |
| curator_fee_pct | No | Curator performance fee as % of vault yield (default 10%). Used for fee revenue projection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully discloses behavior: input modes, case-insensitive label resolution, cross-chain scanning, suppression rules for single-vault/single-underlying curators, and silent handling of no genuine signals. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with numbered modes and bullet-point return fields. Every sentence provides essential information. Front-loaded with purpose. Efficient use of ~200 words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description thoroughly lists all return fields (AUM, APY, fee revenue, concentration, per-vault summary, cross-vault items) with conditions. Covers input modes, edge cases, and suppression rules. Complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds significant context: explains three input modes and their priority, clarifies curator_label resolves case-insensitively across chains, and details curator_fee_pct default and purpose. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates multiple MetaVaults into a portfolio view, with specific verb 'Aggregate' and resource 'MetaVaults'. It distinguishes from siblings like spectra_get_curator_dashboard and morpho_monitor_risk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes three input modes with priority order (explicit > label > address). Provides use cases for each mode and references sibling tools for alternative actions (deep-dive, risk monitoring, stress test).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_get_position_mapA
Cross-protocol position map — see the whole wallet across Spectra, Pendle, Morpho, and governance.
Each protocol tool sees its own silo. This tool sees the contradictions BETWEEN silos. Calls all portfolio sources in parallel and composes a unified view with:
Per-protocol position summaries with USD values
Governance tokens (veSPECTRA on Base, vePENDLE if detectable)
Cross-protocol totals with honest failure reporting
Contradiction detection: lending vs fixed rate spreads, concentration risks, expiring positions across protocols, governance boost mismatches
Entry path awareness for rebalancing opportunities
Does NOT replace per-protocol tools — use spectra_get_portfolio, pendle_get_portfolio, morpho_get_positions for deeper per-protocol analysis.
Use this as the FIRST call when analyzing a wallet. It answers "where am I?" before "what should I do?"
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address (0x...) | |
| chain | No | Restrict to a single chain. Omit to scan all chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses parallel calls, honest failure reporting, and specific detection features. No side effects or destructive actions are needed, but lacks details on data freshness or rate limits. Without annotations, the description is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose, a bulleted feature list, and usage guidance. Each sentence adds value, though slightly lengthy for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complex tool without output schema. Description outlines output contents (summaries, totals, contradictions) but lacks specifics on format or structure. Adequate but could be more precise for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add meaning beyond the schema. The description mentions omitting chain scans all, but the schema already states that. No additional parameter insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Cross-protocol position map' and lists specific capabilities (per-protocol summaries, governance tokens, contradiction detection). It distinguishes from siblings by explicitly naming per-protocol tools it does not replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using as 'the FIRST call when analyzing a wallet' and clarifies it does not replace per-protocol tools, suggesting when to use alternatives like spectra_get_portfolio.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_get_protocol_contextA
Get essential protocol mechanics for Spectra, Pendle, and Morpho — needed for correct reasoning. This server covers 3 protocols with 55 tools. This context tool teaches how they all work.
Use topic "pendle_morpho" first if you're unfamiliar with the multi-protocol scope — it explains all three protocols, their tools (spectra_*, pendle_*, morpho_*, mv_*), and when to use cross-protocol tools vs protocol-specific ones. IMPORTANT: MetaVaults (spectra_list_metavaults, spectra_model_metavault, spectra_get_curator_dashboard, spectra_stress_test_vault) are Spectra-specific curated vaults — don't miss them.
Use topic "workflow_routing" to learn which tools to call for a given goal (yield optimization, wallet analysis, YT arbitrage, curator strategies, etc.) and how they feed into each other. Recommended starting point for agents new to the tool set.
Use topic "pt_yt_mechanics" for how PT/YT splitting works on Spectra. Use topic "router_batching" for how Spectra Router affects pool activity interpretation. Use topic "deposit_path" for step-by-step entry mechanics (how to buy PT, mint YT, LP, loop). Use topic "glossary" for key term definitions (IBT, sw-prefix, LLTV, gauge, maturity value, APR vs APY, underlying, LP, ERC-4626, Curve StableSwap-NG, boost formula). Use topic "fees_and_costs" for protocol YT fees (Spectra 3%, Pendle 5%), reward basis (held vs notional), Merkl campaign types, and external points programs. Use topic "external_protocols" for the registry of non-Spectra protocols a MetaVault can hold via externalPositions[] (e.g. Avant one-week cooldown, Pendle instant LP exit): settlement windows, observation boundaries, mitigations. Call this before reasoning about withdraw speed or exit cost on positions that aren't in Spectra LP. Use topic "protocol_pulse" for LIVE cross-protocol vital signs (TVL, emissions, pool counts, expiring pools). Fetches real-time data — takes 5-15 seconds.
Available topics: pt_yt_mechanics, router_batching, position_analysis, looping, networks, deposit_path, glossary, fees_and_costs, pendle_morpho, workflow_routing, external_protocols, protocol_pulse Omit the topic parameter to get all topics at once.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Specific topic to retrieve. Options: pt_yt_mechanics, router_batching, position_analysis, looping, networks, deposit_path, glossary, fees_and_costs, pendle_morpho, workflow_routing, external_protocols, protocol_pulse. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions that 'protocol_pulse' fetches real-time data (5-15 seconds), but does not explicitly state that the tool is read-only or has no side effects. While the description implies a safe operation, it could be more explicit about behavioral traits like idempotency or potential rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with paragraphs and bullet points, front-loading the core purpose and then listing topics with usage advice. However, it is somewhat verbose and includes some redundancy (e.g., topics listed twice), which could be trimmed slightly without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description does not explain the return format or data structure. However, it covers all necessary usage context and topic descriptions, making it adequate for an agent to use the tool correctly. A minor gap is the absence of output details, but the tool's nature (teaching mechanics) makes this less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single optional parameter 'topic' and an enum of 12 values. The description adds significant meaning by explaining each topic's purpose and context, far beyond the schema's enum list, making it easy for the agent to select the correct topic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get essential protocol mechanics for Spectra, Pendle, and Morpho — needed for correct reasoning.' It distinguishes itself from sibling tools by being a meta-context tool that explains how all protocols and their tools work, rather than performing protocol-specific actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use specific topics, such as recommending 'pendle_morpho' first for understanding multi-protocol scope, and 'workflow_routing' for learning which tools to call. It also explains when to omit the topic parameter to get all topics at once, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_load_scarsA
Load the system's accumulated scars (corrective lessons), weighted by recency × reinforcement.
Use this in audit lenses to ground reasoning in what the system has been re-taught. Most useful for the Diverger lens: "what would consensus kill?" sharpens significantly when read against the system's own history of contradictions.
Weighting formula: weight = exp(-ageDays/30) × (1 + log2(1 + reinforceCount))
30-day recency halflife.
Logarithmic dampening on reinforcement (1 = ×2, 3 = ×3, 7 = ×4).
A scar reinforced 3+ times from 30+ days ago beats a one-time recent correction.
Scar source: feedback_*.md files in the memory directory. Each file's frontmatter:
name: description: type: feedback reinforces: # optional; absent = independent date: # optional; absent = falls back to file mtime
Default directory: ${HOME}/.claude/projects/${encoded-cwd}/memory Override via SCAR_DIR env var or scar_dir param.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Limit to top N scars by weight. Omit for all. | |
| include_body | No | Include full prose body of each scar. Default false (header + description only). | |
| filter_type | No | Filter by frontmatter `type:` field. Default "feedback". Use "all" to disable. | |
| scar_dir | No | Override the scar directory. Falls back to SCAR_DIR env var, then computed default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description bears full burden. Details weighting formula, file format, default directory, and env var override. Does not mention auth or side effects, but tool appears read-only and safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then usage, formula, file format, and defaults. A bit lengthy but each section earns its place. Could be slightly more terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers usage, weighting, file format, and parameters thoroughly. However, lacks description of the output format (what the loaded scars look like). Tool is complex; output structure is important for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, adding baseline of 3. Description adds significant value: explains top_n limiting, include_body default, filter_type options, and scar_dir override chain. Also describes weighting formula and file frontmatter beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Load the system's accumulated scars' with specific verb and resource. It explains the weighting by recency × reinforcement, and the tool is distinct from all DeFi siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies use in audit lenses, especially the Diverger lens. Provides concrete usage context but does not explicitly exclude alternative tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_plan_rolloverA
Plan position rollovers for expiring MetaVault positions.
When a MetaVault position approaches maturity, the curator must: (1) identify the next pool, (2) estimate transition costs, (3) time the entry, (4) execute the rollover.
This tool automates steps 1-3 by scanning Spectra and Pendle for rollover candidates matching the expiring position's underlying asset, computing entry impact at the position's capital size, and ranking by effective APY.
Returns per expiring position: ranked list of rollover candidates with entry impact, yield gap (days of zero yield during transition), overlap window (if entering before old matures), and net effective APY after transition costs.
Use spectra_get_curator_dashboard to see which positions are approaching maturity. Use mv_scan_curator_opportunities for broader cross-protocol opportunity discovery. Use spectra_get_pool_capacity to assess depth at your capital size for specific candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the MetaVault lives. | |
| metavault_address | Yes | The MetaVault contract address. Use spectra_list_metavaults to discover addresses. | |
| pt_address | No | Specific position PT address to plan rollover for. If omitted, plans for all positions expiring within 30 days. | |
| max_maturity_days | No | Plan rollovers for positions expiring within this many days (default 30). Ignored when pt_address is specified. | |
| capital_usd | No | Override position size for impact calculation. If omitted, uses the position's current allocation. | |
| top_n | No | Number of top rollover candidates per position (default 5). | |
| include_looping | No | Whether to check Morpho looping availability for candidates (default true). | |
| verify_onchain | No | Pre-flight halt-check on the SOURCE MetaVault before showing rollover candidates. Off by default — the candidate ranking does NOT depend on chain-truth (it ranks on candidate pool liquidity + lpApy, not source TVL). When true, reads the source vault's Safe + infraVault + secondaryVault via the same engine that powers spectra_get_curator_dashboard (5-min cache shared with the dashboard, so a curator who just rendered the dashboard hits cache for free). A halt-check line at the top of the output flags catastrophic / topology-shifted conditions (paused, role-inversion, missing bytecode, broken accounting, wrapper-signature-broken) that should make the curator pause before executing any rollover. Failures degrade to [✗] — the candidate listing still renders. Dissolution: if telemetry shows zero verify_onchain=true invocations within 60 days of ship, the flag is fossil. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains automation of steps 1-3, scanning sources, ranking by effective APY, and details the behavior of the verify_onchain parameter. Lacks disclosure of potential failure modes or data freshness, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded main purpose, well-structured with bullet points for steps, clear return description, and usage guidance. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return values (ranked list with entry impact, yield gap, etc.). Addresses 8 parameters adequately. Slight gap on error handling or edge cases, but sufficient for task understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions. Description adds meaning beyond schema: explains pt_address omission defaults, max_maturity_days behavior, and provides extensive detail for verify_onchain. Additional context for parameter interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it plans rollovers for expiring MetaVault positions, using a specific verb 'plan' and resource 'rollover'. It distinguishes from siblings like spectra_get_curator_dashboard and mv_scan_curator_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use and when-not-to-use guidance, listing three sibling tools with specific use cases: spectra_get_curator_dashboard for seeing approaching maturity, mv_scan_curator_opportunities for broader discovery, and spectra_get_pool_capacity for depth assessment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mv_scan_curator_opportunitiesA
Scan all Spectra AND Pendle chains for the best yield opportunities, sized to your capital. Cross-protocol scanner designed for MetaVault curators who can allocate to either protocol.
Unlike spectra_scan_opportunities (Spectra-only), this tool includes Pendle markets with:
Capital-aware price impact for BOTH protocols
Maturity-aware cross-protocol matching (same underlying + similar expiry)
Morpho looping analysis for Spectra PTs (Pendle looping in future phase)
Unified ranking by effective APY across both protocols
External Merkl campaign APR for both protocols (incentive programs beyond native yield)
Protocol tags ([Spectra] vs [Pendle]) and cross-protocol match indicators
Unlike spectra_get_best_fixed_yields or pendle_list_markets, this tool computes effective APY at YOUR capital size — a high-APY pool with thin liquidity may be useless at your scale.
The ranking can disagree with spectra_scan_opportunities because it includes a different opportunity set (Pendle markets). This disagreement is intentional — both tools measure different things.
Use mv_compare_yield for detailed head-to-head on a specific chain. Use spectra_model_metavault to model blended Spectra+Pendle MetaVault allocation. Use spectra_get_curator_dashboard for operational monitoring of an existing MetaVault.
| Name | Required | Description | Default |
|---|---|---|---|
| capital_usd | Yes | How much capital (in USD) to deploy | |
| asset_filter | No | Optional: filter by underlying asset symbol (e.g., 'USDC', 'ETH') | |
| min_tvl_usd | No | Minimum pool TVL in USD (default $10,000) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default $5,000) | |
| max_price_impact_pct | No | Filter out pools where entry impact exceeds this % (default 5) | |
| top_n | No | Number of top results to return (default 15, max 50) | |
| include_looping | No | Whether to check Morpho looping for Spectra PTs (default true) | |
| compact | No | If true, return one-line-per-opportunity output (much shorter). | |
| ve_spectra_balance | No | Your veSPECTRA token balance. Computes Spectra boost for LP APY. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool's cross-protocol nature, capital-aware computation, inclusion of price impact, maturity matching, Morpho looping, Merkl campaigns, and protocol tags. It also notes potential ranking disagreements. Could be more explicit about being read-only, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and clear comparisons. Front-loaded with purpose. Slightly long due to future-phase notes, but overall efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensively covers the tool's role, differentiation, and usage context. Despite no output schema, it describes the output nature (ranked list, one-line compact option). All relevant aspects are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description adds context about capital-aware behavior and compact output but does not add new parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans both Spectra and Pendle chains for best yield opportunities sized to capital. It explicitly contrasts with Spectra-only and Pendle-only siblings, and highlights cross-protocol matching, capital-aware impact, and unified ranking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: contrasts with spectra_scan_opportunities, spectra_get_best_fixed_yields, and pendle_list_markets. Also lists alternative tools for specific use cases (mv_compare_yield, spectra_model_metavault, spectra_get_curator_dashboard).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_best_fixed_yieldsA
Find the best fixed-rate (implied APY) opportunities across all Pendle chains.
Scans all Pendle-supported chains and ranks markets by their implied APY — the fixed rate you lock in when buying PT at a discount. This is the Pendle equivalent of spectra_get_best_fixed_yields.
Unlike pendle_list_markets (which shows a single chain), this scans all chains at once and focuses on the PT buyer's perspective: which markets offer the highest fixed rate?
Unlike pendle_scan_opportunities (capital-aware), this is a quick raw-APY ranking without price impact analysis. Use it for initial screening, then drill into specific markets with pendle_get_market_details or size with pendle_scan_opportunities.
Pendle chains: Ethereum, Optimism, BSC, Sonic, Base, Arbitrum, Mantle, Berachain, HyperEVM, Corn
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Limit to a specific chain. Omit to scan all Pendle chains. | |
| asset_filter | No | Filter by underlying asset (e.g., 'USDC', 'ETH', 'stETH'). Matches market name. | |
| min_tvl_usd | No | Minimum TVL in USD | |
| min_liquidity_usd | No | Minimum pool liquidity in USD | |
| min_days_to_maturity | No | Minimum days to maturity (default 7 — skip very short pools) | |
| top_n | No | Number of results (default 15) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses key behaviors: scans all chains, ranks by implied APY, focuses on PT buyer perspective, and notes it's a quick raw-APY ranking without price impact analysis. This is complete and transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear purpose statement, comparisons to siblings, and a list of chains. Every sentence adds value without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description explains the tool's purpose and usage, it does not describe the output format or fields returned. Given no output schema, this is a gap that could be filled to improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for each parameter. The description adds no additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds the best fixed-rate opportunities across all Pendle chains, using specific verbs and resources. It distinguishes itself from sibling tools like pendle_list_markets (single chain) and pendle_scan_opportunities (capital-aware).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions when to use this tool (initial screening) and when not to (for capital-aware analysis, use pendle_scan_opportunities). Provides alternative tools for deeper analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_looping_strategyA
Calculate a leveraged fixed-yield strategy using Pendle PT + Morpho looping.
Strategy: Buy Pendle PT → use as Morpho collateral → borrow underlying → buy more PT → repeat. Each loop multiplies yield exposure.
Returns projected yields at different leverage levels (1x to max safe leverage), effective APY, risk parameters, borrow rate sensitivity, and break-even analysis.
Automatically fetches the live Morpho borrow rate and LLTV when a matching market exists.
NOTE: Looping requires a Morpho market that accepts the specific Pendle PT as collateral. Morpho markets for Pendle PTs exist primarily on Ethereum mainnet and some on Arbitrum.
The Pendle equivalent of spectra_get_looping_strategy.
Use pendle_get_market_details for full market info. Use pendle_scan_opportunities(include_looping=true) for cross-market looping rankings. Use morpho_list_markets to find available Morpho markets.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_address | Yes | The Pendle market address | |
| morpho_ltv | No | Override Morpho LTV ratio (e.g. 0.86). Auto-detected if omitted. | |
| borrow_rate | No | Override Morpho borrow rate in % APY. Fetched live if omitted. | |
| max_loops | No | Maximum loop iterations (default 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: auto-fetches live Morpho borrow rate and LLTV, calculates projected yields at different leverage levels, and explains the looping strategy. It does not explicitly state read-only nature or rate limits, but no annotations are provided so the description carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear summary, strategy explanation, outputs, note, and alternative tool references. It is slightly verbose but every sentence contributes value, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explicitly lists return values (projected yields, effective APY, risk parameters, etc.). It covers prerequisites, auto-fetching, and alternative tools, making it complete for a tool with 5 parameters and 2 required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds meaning beyond schema by explaining that morpho_ltv and borrow_rate are overrides with auto-detection, and max_loops defaults to 5. This adds useful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates a leveraged fixed-yield strategy using Pendle PT + Morpho looping, explains the strategy, and explicitly distinguishes from sibling tools like pendle_get_market_details and pendle_scan_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance, including alternative tools (pendle_get_market_details, pendle_scan_opportunities, morpho_list_markets) and prerequisites (requires Morpho market accepting PT).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_market_capacityA
Analyze a Pendle market's capacity by computing price impact at increasing capital sizes.
Shows how price impact and effective APY degrade as capital grows, helping curators find the sweet spot (max capital with acceptable impact) and the exhaustion point (where APY collapses).
Uses Pendle's logit AMM model (conservative scalarRoot=50) which accounts for time-decay pricing. Near maturity, the AMM becomes more capital-efficient, so impact is lower than constant-product estimates.
This is the Pendle equivalent of spectra_get_pool_capacity.
Use pendle_get_market_details for full market information. Use pendle_scan_opportunities for capital-aware ranking across all markets.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_address | Yes | The Pendle market/pool contract address | |
| steps | No | Number of capital tiers in the ladder (default 8, max 12) | |
| max_capital_usd | No | Upper bound of the capital ladder in USD (default $1,000,000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description explains the underlying logit AMM model and time-decay pricing behavior, though it does not mention read-only nature or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with key information front-loaded, but could be slightly more structured; no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides sufficient context for understanding purpose and use, but lacks description of the output format or return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; description does not add meaningful context beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes price impact and effective APY degradation as capital grows, and distinguishes it from siblings like pendle_get_market_details and pendle_scan_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (finding sweet spot and exhaustion point) and explicitly mentions alternatives and equivalent tools (spectra_get_pool_capacity).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_market_detailsA
Get detailed information about a specific Pendle market by address.
Returns: market name, PT/YT/SY/underlying addresses, implied APY (fixed rate), LP APY breakdown (swap fees + PENDLE incentives + boost), underlying variable APY, TVL, pool liquidity, 24h volume, pool reserves, maturity, and external Merkl campaigns.
This is the Pendle equivalent of spectra_get_pt_details. Use it to drill into a specific Pendle market after finding it via pendle_list_markets, mv_compare_yield, or mv_scan_curator_opportunities.
Use mv_check_ibt_health(ibt_address=SY_ADDRESS) to assess the underlying vault's health. Use mv_compare_yield to compare this market with Spectra equivalents.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the Pendle market is deployed. | |
| market_address | Yes | The Pendle market/pool contract address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not explicitly state that the tool is read-only or has no side effects. However, the 'get' verb implies a safe operation, but transparency is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: purpose first, then return fields, then usage guidance. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description lists all major return fields (market name, addresses, APY, TVL, etc.), making it comprehensive for typical use. Also provides contextual sibling and follow-up tool suggestions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters fully described in schema). The description adds no additional semantic detail beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed information about a specific Pendle market by address, distinguishing it from listing tools like pendle_list_markets and the Spectra equivalent spectra_get_pt_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (after finding via pendle_list_markets, mv_compare_yield, etc.), mentions equivalence to spectra_get_pt_details, and suggests follow-up tools like mv_check_ibt_health and mv_compare_yield.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_market_historyA
Historical time-series data for a Pendle market.
Shows how implied APY, TVL, volume, PT/YT prices, and other metrics have moved over time. The first tool that answers "what happened?" not just "what is it now?"
Enables: trend analysis, yield stability assessment, anomaly detection, conviction building before entry. A flat APY with low stddev means predictable yield. A volatile APY with high stddev means the rate you see today may not persist.
Available fields: impliedApy, tvl, tradingVolume, ptPrice, ytPrice, baseApy, lpPrice, lpRewardApy, maxApy, pendleApy, swapFeeApy, syPrice, totalPt, totalSupply, totalSy, totalTvl, underlyingApy, underlyingInterestApy, underlyingRewardApy, voterApr, ytFloatingApy, lastEpochVotes
Use pendle_get_market_details for current market snapshot. Use pendle_list_markets to find market addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the Pendle market lives. | |
| market_address | Yes | The Pendle market/pool contract address. | |
| period | No | Time period: 7d (hourly), 30d (daily), 90d (daily), 1y (weekly). Default 30d. | 30d |
| fields | No | Comma-separated fields to include. Default: impliedApy,tvl,tradingVolume,ptPrice,ytPrice. Use 'all' for everything. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It explains the tool is for historical data, lists available fields, and provides interpretation guidance. It does not explicitly state it is a read-only operation, but the context implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but not overly verbose. It uses bullet-like listing for fields and provides context on interpretation. Could be slightly more structured with separate sections, but it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return data (time-series of metrics), provides interpretation guidance, and mentions the default period. It is complete enough for an agent to understand what the tool does and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by listing all available fields in text, explaining the default period, and clarifying that 'all' can be used for the fields parameter. This goes beyond just repeating schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'historical time-series data for a Pendle market' with specific metrics. It distinguishes itself from sibling tools like pendle_get_market_details (current snapshot) and pendle_list_markets (find addresses).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('trend analysis, yield stability assessment') and provides alternatives ('Use pendle_get_market_details for current market snapshot. Use pendle_list_markets to find market addresses.').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_portfolioA
View a wallet's Pendle positions across all chains (or a specific chain).
Shows PT, YT, and LP token balances with USD valuations for each Pendle market the wallet has positions in. Includes maturity dates, implied APY, LP APY, strategy inference, and expiry warnings.
This is the Pendle equivalent of spectra_get_portfolio.
Use pendle_get_market_details to drill into a specific market. Use mv_plan_rollover to plan rollovers for expiring positions. Use spectra_get_portfolio for Spectra positions.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address to look up. | |
| chain | No | Limit to a specific chain. Omit to scan all Pendle chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the output: PT, YT, LP balances, USD valuations, maturity dates, APY, strategy inference, expiry warnings. However, it does not explicitly state that it is read-only, though 'View' implies no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two main sentences, a bullet-like list of output fields, and three usage guidelines. It is front-loaded and every sentence provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description adequately explains the output details and usage context. It covers balance types, valuations, dates, APY, and provides references to related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds minimal parameter meaning beyond schema, only repeating 'all chains or specific chain' which is already in the chain parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'View a wallet's Pendle positions' and specifies it can be across all chains or a specific chain. It distinguishes from siblings like spectra_get_portfolio and other Pendle tools, providing a specific verb-resource pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides alternatives: 'Use pendle_get_market_details to drill into a specific market. Use mv_plan_rollover to plan rollovers. Use spectra_get_portfolio for Spectra positions.' It also states it is the Pendle equivalent of spectra_get_portfolio, guiding selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_protocol_statsA
Get Pendle protocol-wide statistics: total TVL, market count, liquidity, and volume across all Pendle-supported chains.
Shows per-chain breakdown and aggregate metrics. Includes:
Active market count and TVL per chain
Total pool liquidity and 24h volume
Average implied APY and LP APY
Chain overlap with Spectra (expansion opportunities)
The Pendle equivalent of spectra_get_protocol_stats.
Use pendle_list_markets for detailed market-level data. Use mv_scan_curator_opportunities for cross-protocol ranking.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but the description is transparent about the output: it includes per-chain breakdown, aggregate metrics, and mentions chain overlap with Spectra. It doesn't explicitly state read-only behavior but implies a query operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, clear sections, and no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains the return values (per-chain breakdown, aggregate metrics, etc.). It is complete for a tool with zero parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is trivially 100%. With 0 parameters, baseline is 4. The description adds value by explaining the output contents beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets Pendle protocol-wide statistics, listing specific metrics like total TVL, market count, liquidity, and volume. It differentiates from siblings by mentioning the equivalent tool in Spectra and directing users to pendle_list_markets for detailed market-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (for protocol overview) and what to use instead for detailed market-level data (pendle_list_markets) and cross-protocol ranking (mv_scan_curator_opportunities). This provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_get_yield_curveA
Show the yield curve (term structure) for a given underlying asset across Pendle chains.
Fetches all active Pendle markets matching the underlying (e.g., "USDC", "ETH", "stETH"), sorts by maturity, and displays implied APY at each point on the curve.
This is the fixed-income view: "What rate can I lock for 30 days vs 90 days vs 180 days?" Helps curators spot term premium anomalies, compare cross-chain rates, and choose maturities.
The Pendle equivalent of spectra_get_yield_curve.
Use pendle_get_market_details to drill into a specific maturity. Use pendle_get_market_capacity to check depth at your capital size. Use mv_compare_yield for Spectra vs Pendle comparison on the same underlying.
| Name | Required | Description | Default |
|---|---|---|---|
| underlying | Yes | Underlying asset symbol (e.g., 'USDC', 'ETH', 'stETH', 'weETH') | |
| chain | No | Restrict to a single chain. Omit to scan all Pendle chains. | |
| min_tvl_usd | No | Minimum TVL in USD (default 0) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default 0) | |
| compact | No | One-line-per-maturity output |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the tool fetches and aggregates data across chains, filters by TVL/liquidity, and has a compact mode. However, it does not explicitly state that it is a read-only operation, though 'Show' implies no mutation. Missing explicit safety disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first line summarizes, then details, use cases, and sibling differentiation. It is front-loaded and every sentence adds value without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the output (implied APY at each maturity) but does not specify the exact format (e.g., list of objects). It covers parameter semantics and usage well. A bit more detail on return structure would increase completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 5 parameters. The description adds context beyond schema: explains underlying with examples, chain behavior when omitted, and compact mode output. It also mentions sorting by maturity and displaying implied APY, which is not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows the yield curve for a given underlying asset across Pendle chains, specifying it fetches active markets, sorts by maturity, and displays implied APY. It distinguishes from siblings like pendle_get_market_details and pendle_get_market_capacity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use the tool (fixed-income view, spot anomalies) and when to use alternatives (drill into maturity, check capacity, compare to Spectra). It also mentions the Pendle equivalent of spectra_get_yield_curve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_list_expiring_marketsA
Scan Pendle chains for markets approaching maturity.
Groups results by urgency:
CRITICAL (≤7d): Immediate action required — redeem or rollover
WARNING (≤14d): Plan rollover within days
ALERT (≤threshold): Monitor and prepare
This is the Pendle equivalent of spectra_list_expiring_pools. Useful for:
Portfolio managers who need to plan rollovers
Curators monitoring MetaVault positions that include Pendle PTs
Traders looking for near-maturity convergence plays
Use pendle_get_market_details for full market info on an expiring market. Use mv_plan_rollover to plan rollovers for MetaVault positions. Use pendle_get_yield_curve to find replacement maturities.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold_days | No | Show markets expiring within this many days (default 21) | |
| chain | No | Limit to a specific chain. Omit to scan all Pendle chains. | |
| min_tvl_usd | No | Minimum TVL to include (default 0 — show all) | |
| compact | No | One-line-per-market output |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes output grouping by urgency with clear thresholds (≤7d, ≤14d, ≤threshold). Does not explicitly state read-only behavior but implies it as a scanning tool. Lacks details on output structure (e.g., market addresses, maturity dates), but provides sufficient context for an agent to understand what this tool does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with main purpose and then provides urgency details, use cases, and alternatives. Well-structured but slightly verbose with the bullet-style urgency descriptions. Could be more concise, but each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completeness is high given the tool's complexity and no output schema. Description covers purpose, urgency grouping, use cases, and alternatives. However, it does not explain the exact output fields or how the grouping is presented (e.g., categories as separate arrays), leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 100%, so baseline is 3. Description does not add any additional meaning to the parameters; it focuses on output grouping and use cases. The schema descriptions are already adequate for understanding each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Scan Pendle chains for markets approaching maturity' and explicitly differentiates from sibling tool spectra_list_expiring_pools. The verb 'scan' and resource 'markets approaching maturity' are specific and distinct from other Pendle tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases for portfolio managers, curators, and traders. Lists three alternative tools with specific scenarios: pendle_get_market_details for full info, mv_plan_rollover for rollovers, and pendle_get_yield_curve for replacements. This gives clear guidance on when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_list_marketsA
List active Pendle markets on a given chain, or scan all Pendle-supported chains. Returns: market name, implied APY (fixed rate), LP APY, TVL (underlying deposited), liquidity (AMM depth), maturity, and token addresses.
Pendle is a competing/complementary yield tokenization protocol. Like Spectra, it splits yield-bearing tokens into PT (principal) and YT (yield). Key differences:
Pendle uses its own AMM (not Curve) with time-decay pricing
Pendle has PENDLE token incentives on LP positions
Pendle markets exist on chains where Spectra may not be deployed yet
This data is essential for curators building cross-protocol MetaVaults. A MetaVault can integrate Pendle PTs alongside Spectra PTs, allocating to whichever protocol offers better rates for a given underlying + maturity.
Pendle-supported chains: Ethereum (mainnet), Optimism (optimism), BSC (bsc), Sonic (sonic), Base (base), Arbitrum (arbitrum), Mantle (mantle), Berachain (berachain), HyperEVM (hyperevm), Corn (corn) Chains with Spectra overlap: mainnet, optimism, bsc, sonic, base, arbitrum, hyperevm Pendle-only chains (Spectra not deployed): mantle, berachain, corn
Includes external Merkl campaign APR when available (LP, YT, and SY incentive programs). Merkl campaigns are fetched best-effort per chain and shown alongside native PENDLE incentives.
Use mv_compare_yield to do a head-to-head comparison on a specific underlying. Use mv_scan_curator_opportunities for unified cross-protocol ranking with capital-aware sizing. Use spectra_scan_opportunities for Spectra-native opportunity ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Pendle chain to query. Omit to scan all Pendle chains. | |
| sort_by | No | Sort results by this metric (descending) | implied_apy |
| min_tvl_usd | No | Minimum TVL in USD to include | |
| min_liquidity_usd | No | Minimum pool liquidity in USD | |
| asset_filter | No | Filter by asset name/symbol (e.g., 'USDC', 'ETH', 'stETH'). Matches against market name. | |
| top_n | No | Number of results to return | |
| compact | No | One-line-per-market output for quick scanning |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully shoulders behavioral disclosure. It explains the tool is a read-only listing (no mutations), notes that Merkl campaigns are 'fetched best-effort per chain', and describes the nature of Pendle markets (AMM with time-decay pricing, incentive tokens). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is lengthy but well-structured: starts with core purpose, then adds context (Pendle vs Spectra), return fields, chain lists, Merkl info, and sibling tool references. It is front-loaded with essential information. Some redundancy could be trimmed, but overall efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema, the description is comprehensive: explains return fields, chain lists, Merkl APR, and cross-protocol use cases. It does not detail output format (e.g., JSON structure), but parameter descriptions and return list are sufficient for an agent to understand the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds meaningful context beyond schema, such as the full list of supported chains (including which overlap with Spectra) and the meaning of 'asset_filter' (matches against market name). While baseline is 3, the extra contextualization merits a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List active Pendle markets on a given chain, or scan all Pendle-supported chains.' and lists specific return fields (market name, implied APY, etc.). It distinguishes from sibling tools by explaining Pendle's role relative to Spectra and directing to other tools for specific use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use this tool vs alternatives: 'Use mv_compare_yield to do a head-to-head comparison...', 'Use mv_scan_curator_opportunities for unified cross-protocol ranking...', and 'Use spectra_scan_opportunities for Spectra-native opportunity ranking.' Also explains the tool's role in building MetaVaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_quote_tradeA
Estimate expected output, price impact, and effective APY for a Pendle PT trade.
Uses the Pendle logit AMM model to estimate trade outcomes. Shows:
Expected output amount and effective rate
Price impact at your trade size
Effective APY after accounting for entry cost
Minimum output with slippage tolerance
Side:
"buy": Spend underlying/SY to get PT (lock in fixed rate)
"sell": Sell PT for underlying/SY (exit fixed position)
The Pendle equivalent of spectra_quote_trade.
Use pendle_get_market_capacity for a multi-size impact curve. Use pendle_get_market_details for full market information.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_address | Yes | The Pendle market address | |
| amount | Yes | Amount of input token (underlying/SY for buy, PT for sell) | |
| side | Yes | "buy" = spend underlying to get PT; "sell" = sell PT for underlying | |
| slippage_pct | No | Slippage tolerance in % (default 0.5%) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description fully bears the burden. It discloses the tool uses the Pendle logit AMM model and estimates outputs including slippage. It implies no side effects or destructive actions, which is appropriate for a quote tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-organized with bullet points for outputs, a clear side explanation, and sibling tool references. Every sentence adds value; no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (trade estimation with slippage, APY), the description covers key outputs and parameter semantics. It references sibling tools for deeper analysis. No output schema exists, but the description lists expected outputs sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so baseline is 3. The description adds context for the side parameter (buy vs sell token types) and mentions default slippage, but this information is already in the schema. The description adds minimal extra meaning beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool estimates expected output, price impact, and effective APY for a Pendle PT trade. It differentiates from siblings like pendle_get_market_capacity and pendle_get_market_details, and is explicitly linked as the Pendle equivalent of spectra_quote_trade.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is for trade estimation and provides side semantics. It directs users to pendle_get_market_capacity for multi-size impact curves and pendle_get_market_details for full market info, offering clear alternatives. No explicit 'when not to use' but strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_scan_opportunitiesA
Scan all Pendle chains for the best yield opportunities, sized to your capital.
This is the Pendle equivalent of spectra_scan_opportunities. Unlike pendle_get_best_fixed_yields (raw APY ranking), this tool computes:
Entry price impact at YOUR capital size using Pendle's logit AMM model
Effective APY after amortizing entry cost over days to maturity
Pool capacity (max capital before impact exceeds threshold)
Morpho looping availability for Pendle PTs on Morpho-capable chains
External Merkl campaign incentives
The ranking reflects what you can actually EARN, not just what the protocol advertises.
For cross-protocol scanning (Spectra + Pendle together), use mv_scan_curator_opportunities. For Spectra-only scanning, use spectra_scan_opportunities.
| Name | Required | Description | Default |
|---|---|---|---|
| capital_usd | Yes | How much capital (in USD) to deploy | |
| chain | No | Limit to a specific chain. Omit to scan all Pendle chains. | |
| asset_filter | No | Filter by underlying asset (e.g., 'USDC', 'ETH', 'stETH') | |
| min_tvl_usd | No | Minimum TVL in USD (default $10,000) | |
| min_liquidity_usd | No | Minimum pool liquidity (default $5,000) | |
| max_price_impact_pct | No | Filter out markets where entry impact exceeds this % (default 5) | |
| top_n | No | Number of results (default 15) | |
| include_looping | No | Check Morpho looping for Pendle PTs on Morpho-capable chains (default true) | |
| compact | No | One-line-per-opportunity output |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully discloses behavioral traits: it computes entry price impact using Pendle's logit AMM model, effective APY, pool capacity, Morpho looping availability, and Merkl incentives. It clearly states what the tool does and how it differs from a simple APY ranking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a brief introductory sentence, a bullet list of computed metrics, and two sentences for alternative tools. No fluff, front-loaded, and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema is provided, the description lists the key computed values (entry price impact, effective APY, pool capacity, etc.) giving a good sense of the output. It provides sufficient context for an agent to understand what the tool returns, though not fully detailed. Slight deduction for missing explicit output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with individual parameter descriptions. The tool description only implicitly references capital_usd ('sized to your capital') and provides context for why parameters matter (e.g., price impact), but does not explain each parameter in detail. Baseline 3 is appropriate as schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans all Pendle chains for yield opportunities sized to capital, distinguishes it from raw APY ranking (pendle_get_best_fixed_yields) by listing specific computed metrics, and positions it as the Pendle equivalent of spectra_scan_opportunities. It effectively differentiates from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use this tool versus alternatives: mentions spectra_scan_opportunities for Spectra-only, mv_scan_curator_opportunities for cross-protocol, and contrasts with pendle_get_best_fixed_yields. This makes selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_scan_yt_arbitrageA
Scan Pendle markets for YT (Yield Token) mispricing opportunities.
Compares the underlying's variable APY against the implied rate from the PT/YT market price. When these diverge, a spread exists:
Positive spread (Underlying APY > Implied): YT is underpriced — buy YT
Negative spread (Underlying APY < Implied): YT is overpriced — sell YT
Unlike Spectra (where YT trades indirectly via Router flash-mint/redeem), Pendle YT trades directly on the Pendle AMM, making execution simpler:
Buy YT: swap SY → YT on Pendle AMM
Sell YT: swap YT → SY on Pendle AMM
This is the Pendle equivalent of spectra_scan_yt_arbitrage.
Use pendle_get_market_details for detailed info on a specific opportunity. Use mv_compare_yield for cross-protocol comparison on the same underlying.
| Name | Required | Description | Default |
|---|---|---|---|
| capital_usd | Yes | Capital to deploy (USD) | |
| min_spread_pct | No | Minimum absolute spread (%) to surface (default 1.0) | |
| chain | No | Limit to a specific chain. Omit to scan all. | |
| asset_filter | No | Filter by underlying (e.g., 'USDC', 'ETH') | |
| min_tvl_usd | No | Minimum TVL (default $10K) | |
| min_liquidity_usd | No | Minimum liquidity (default $5K) | |
| max_price_impact_pct | No | Max entry impact (default 5%) | |
| top_n | No | Number of results (default 10) | |
| compact | No | One-line output |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It explains the comparison logic between underlying APY and implied rate, and contrasts execution with Spectra. It implies a read-only scan operation, which is consistent. Could be more explicit about no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and comparisons, earning its length. It is slightly verbose but each part adds value. Could be trimmed slightly but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the concept and related tools but lacks details about the output format. Without an output schema, describing typical return fields (e.g., opportunity list with spreads, APYs) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds minimal extra semantics beyond the schema, mainly reinforcing the spread concept. It does not introduce new parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans Pendle markets for YT mispricing, explaining the concept of positive/negative spreads. It distinguishes from sibling tools like pendle_scan_opportunities and spectra_scan_yt_arbitrage by explicitly mentioning execution differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (scan for YT arbitrage) and provides cross-references to pendle_get_market_details for deep dives and mv_compare_yield for cross-protocol comparison. It does not explicitly state when not to use it, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pendle_simulate_tradeA
Simulate how a Pendle PT trade would change a wallet's portfolio.
Shows before/after comparison:
Existing Pendle positions on the target chain
New position from the simulated trade
Blended APY across all positions
Concentration analysis
Does NOT execute any transaction — purely informational.
The Pendle equivalent of spectra_simulate_trade.
Use pendle_quote_trade for a detailed trade quote first. Use pendle_get_portfolio to see full current portfolio.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| market_address | Yes | The Pendle market address to trade | |
| address | Yes | Wallet address to simulate for | |
| amount | Yes | Amount of input token (underlying/SY for buy, PT for sell) | |
| side | Yes | "buy" = acquire PT; "sell" = sell PT for underlying |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states the tool is 'purely informational' and does not execute any transaction, which is the key behavioral trait. However, it does not mention any potential side effects, authorization requirements, or error conditions. Given no annotations, it carries the full burden but covers the essential non-execution nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured: a main sentence, bullet points of outputs, a clear negative statement, a sibling equivalence, and usage pointers. No redundant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 required parameters, no output schema, and the domain complexity, the description provides a good overview of the tool's functionality and outputs. It explains what the simulation returns but could benefit from more detail on the return format. Still, it is largely complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enhances semantic understanding for the 'amount' parameter (context-dependent: underlying/SY for buy, PT for sell) and the 'side' parameter (buys vs sells PT). This adds value beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the tool simulates a Pendle PT trade and its effect on a wallet's portfolio. It lists specific outputs (before/after comparison, positions, APY, concentration) and distinguishes from the sibling pendle_quote_trade and pendle_get_portfolio. The mention of being the Pendle equivalent of spectra_simulate_trade further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use (simulate trade impact) and what not to do (does not execute any transaction). It provides clear alternatives: use pendle_quote_trade for a detailed quote and pendle_get_portfolio for the full portfolio. This gives unambiguous guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_compare_yieldA
Compare Spectra's fixed yield (via PT) against the variable yield of the underlying interest-bearing token. Helps users decide if locking in a fixed rate is worthwhile versus staying in the variable-rate position.
Protocol context:
Fixed rate is labeled "implied APY" (annualized, compounded). Variable rate is labeled "IBT APR" (not compounded). LP yield is labeled "LP APY". Each is labeled at point of use.
Entry cost (price impact) is amortized over days to maturity.
LP alternative: providing liquidity earns trading fees + SPECTRA gauge emissions.
Output surfaces competing interpretations when the data is ambiguous — e.g., positive raw spread but negative effective spread after entry cost, or incentive-dominated variable rate.
Use spectra_get_looping_strategy to lever up the fixed yield via Morpho. Use spectra_get_portfolio to check your current positions. Use spectra_scan_opportunities for multi-chain comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address to compare | |
| ve_spectra_balance | No | Your veSPECTRA token balance. Computes real boost using B = min(2.5, 1.5*(v/V)*(D/d)+1). | |
| capital_usd | No | Your deposit size in USD (default $10,000). Used with ve_spectra_balance to compute per-pool boost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful behavioral context: the output surfaces competing interpretations when data is ambiguous (e.g., positive raw spread but negative effective spread), and explains protocol context for rates (implied APY, IBT APR, LP APY) and entry cost amortization. It does not explicitly state read-only but implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured in three paragraphs (purpose, protocol context, alternative tools). While it is slightly long, every sentence adds value and avoids redundancy. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, protocol-specific) the description covers key aspects: rates, entry costs, LP alternative, ambiguous outputs. It does not explain return format, which is acceptable without output schema. Overall, it provides sufficient context for an agent to use the tool appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds value beyond schema: it explains the formula for real boost using ve_spectra_balance (B = min(2.5, 1.5*(v/V)*(D/d)+1)), and the default for capital_usd and its interaction with ve_spectra_balance. This provides deeper context for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compares fixed yield vs variable yield, helping users decide if locking in a fixed rate is worthwhile. It distinguishes from sibling tools by explicitly naming alternative tools like spectra_get_looping_strategy, spectra_get_portfolio, and spectra_scan_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool (deciding fixed vs variable) and when to use alternatives (e.g., spectra_get_looping_strategy for leveraging, spectra_get_portfolio for current positions, spectra_scan_opportunities for multi-chain comparison). It also notes that the output may be ambiguous in certain scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_address_activityA
Scan all pools on a chain (or all chains) for a given address's activity. Returns per-pool breakdown and cross-pool aggregates. Useful for discovering multi-pool strategies without making N manual spectra_get_pool_activity calls.
When investigating a wallet that operates across multiple pools (e.g., a curator or yield farmer diversifying across maturities), this tool reveals the full scope of their on-chain activity in one call.
Each pool's activity is summarized with type breakdown and total volume. Cross-pool totals show the address's aggregate engagement with Spectra.
For deep per-pool analysis (cycle detection, flow accounting, contract detection), use spectra_get_pool_activity with the address parameter on the specific pool of interest. Use spectra_get_portfolio to see current holdings across all pools.
Includes an Observation Coverage section that quantifies blind spots: which pools were scanned, what event types are visible vs invisible (standalone mints, yield claims, and non-Spectra operations are never visible here), and whether activity is concentrated on one chain. Position sizing should assume this scan is incomplete, not comprehensive.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address to scan (0x...) | |
| chain | No | Specific chain to scan. Omit to scan all chains (slower). | |
| min_volume_usd | No | Minimum activity volume (USD) per pool to include in results (default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description compensates fully by detailing coverage blind spots, invisible event types, and warning that results are incomplete for position sizing. Thoroughly discloses limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded: core function, use cases, comparisons, limitations. Concise but not overly terse; each sentence earns its place. Slight room for tightening.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return structure (per-pool breakdown, cross-pool totals, observation coverage). Addresses completeness concerns bluntly. Sufficient for an aggregation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so parameters already have descriptions. Description adds minimal extra detail beyond schema (e.g., no elaboration on min_volume_usd beyond default). Meets baseline but no significant added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool scans all pools on a chain for an address's activity, returning per-pool breakdown and cross-pool aggregates. Distinguishes from siblings like spectra_get_pool_activity and spectra_get_portfolio by specifying use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends use for multi-pool strategy discovery and warns against using for deep per-pool analysis or current holdings, providing alternative tool names. Offers clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_best_fixed_yieldsA
Find the best fixed-rate yield opportunities across all Spectra chains. Scans all supported networks and returns the top opportunities ranked by implied APY. Filters by asset type if specified.
Important: This ranks by raw implied APY without considering your capital size or pool liquidity. These rankings will often disagree with spectra_scan_opportunities (which ranks by effective APY after entry cost). That disagreement is intentional -- raw APY reflects the pool's headline rate while effective APY reflects what you actually capture at your capital size. Neither ranking is "correct" -- they measure different things. Use both to develop conviction about which pools genuinely serve your strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_filter | No | Optional: filter by underlying asset symbol (e.g., 'USDC', 'ETH', 'GHO') | |
| min_tvl_usd | No | Minimum pool TVL in USD (default $10,000) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default $5,000) | |
| top_n | No | Number of top results to return (default 10, max 50) | |
| compact | No | If true, return one-line-per-opportunity output (much shorter). Use for quick scanning; omit for full details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that rankings are by raw APY without considering capital size or liquidity, and explains the different focus from the sibling tool. No annotations provided, so description carries full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three paragraphs, front-loaded with main purpose. Additional explanation of ranking trade-offs is useful but could be slightly trimmed. No redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and differentiation from sibling. No output schema, but description implies return of top opportunities ranked by APY. Missing details on actual response format, but sufficient for a read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3. Description adds context for compact parameter ('use for quick scanning') and states asset filter, but does not substantially enhance understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Find the best fixed-rate yield opportunities across all Spectra chains' and distinguishes from sibling spectra_scan_opportunities by explaining difference in ranking methodology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (to find best fixed yields), and provides guidance on when to use this vs. spectra_scan_opportunities, with clear explanation of the intentional disagreement in rankings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_curator_dashboardA
Operational dashboard for MetaVault curators.
Aggregates vault health, position status, depositor flows, fee revenue estimates, and actionable alerts into a single view. Designed for curators managing live MetaVaults who need a quick operational overview.
Returns:
Vault health: TVL with unallocated ratio (undeployed capital AFTER subtracting external positions — shown when >5%), Status label for non-VISIBLE vaults, live APY with optional 30d avg suffix and APY composition (base vs incentives), share price
APY 4-number breakdown when live-vs-30d delta ≥ 0.5pp: shows base+incentive decomposition for both snapshots WITHOUT asserting causality (agents draw their own conclusions from the numbers)
Position status: each active PT position with maturity countdown, APY, and size. Positions approaching maturity are flagged (!!!=14d, !!=30d)
External Positions: value held OUTSIDE Spectra LP structure (avant avUSDx-burn redemption-in-flight, pendle LP on other protocols). Rendered per-protocol with graceful fallback for unknown protocols
Capital State decomposition line: when ≥1 of {expired-stuck, external} buckets populated, emits a single line showing deployed/expired-stuck/ external/unallocated as % of TVL
Depositor flows: epoch-by-epoch net inflows/outflows with trend analysis
Fee revenue: estimated annual curator fee revenue (snapshot projection)
Action items: auto-generated alerts including [UNALLOC] (softened when external capital coexists), [STATUS] (HIDDEN vaults), [PENDLE-EXT URGENT/UPCOMING/EXPIRED] (external Pendle maturity), [EXPIRED] / [URGENT] / [SOON] / [UPCOMING] (Spectra LP maturity), [OUTFLOWS], [BRIDGE], [INCENTIVE], [PENDLE ROLLOVER]
Pool allocations show each position as a % of total vault TVL (e.g., "37.1% | $236K"), sorted by size, with protocol tags ([Spectra]/[Pendle]/[Unknown]) on each position. Unallocated liquidity is shown separately (and excludes capital deployed in external positions — labeled as "unallocated" to distinguish from "idle"). When the API doesn't provide LP balance data for a position, it shows "?%".
Cross-chain positions: MetaVault positions may live on a different chain than the MetaVault itself (e.g., Base MetaVault → Avalanche pools via CCTP bridge). Pool addresses in positions are on the position's chain, not the MetaVault's home chain.
Epoch flows: Derived from asset snapshots and rate changes. Yield accrual is estimated from share rate deltas — actual yield may differ. Use share price trend to corroborate.
Requires chain + metavault_address. Use spectra_list_metavaults to discover addresses. Use spectra_model_metavault for leverage modeling after reviewing the dashboard. Use spectra_get_pool_activity on specific pool addresses for trading pattern analysis. Use spectra_get_address_activity on the curator's EOA for cross-pool curator activity.
When verify_externals=true (off by default), each avant external position is probed on Avalanche's RequestsManager — confirms state (CREATED/COMPLETED/CANCELLED), provider attribution, on-chain amount (with PPM tolerance for API rounding), global counter, and pause flag. A [chain-truth ✓/⚠/✗] line is appended under each avant position. Per-order failures degrade gracefully and never poison sibling positions or block the dashboard. Pendle externals are NOT yet probed in this slice.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the MetaVault lives. | |
| metavault_address | Yes | The MetaVault contract address. Use spectra_list_metavaults to discover addresses. | |
| curator_fee_pct | No | Curator performance fee as % of vault yield (default 10%). Used for fee revenue estimation. | |
| verify_externals | No | Verify each externalPosition on its target chain (Theme E). Today probes Avant burn orders against Avalanche RequestsManager — confirms state (CREATED/COMPLETED/CANCELLED), provider attribution, on-chain amount, queue counter, and pause flag. Off by default — adds RPC latency and pressure on each external. Use when an avant external is load-bearing for a curator decision (large redemption-in-flight, stuck claim, suspected stale API). Per-position failures degrade to a [chain-truth ✗] line but never poison sibling positions. Pendle external verification is a separate next-session slice. Dissolution: if telemetry shows zero verify_externals=true invocations within 60 days of ship, the flag is fossil — fold the verifier into list-mode default or remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the burden. It exhaustively discloses behaviors: estimated yield, cross-chain handling, default values, and the verify_externals parameter's performance cost and degradation behavior. Caveats like 'actual yield may differ' ensure realistic expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear sections (Returns: with sub-bullets, important notes on cross-chain positions and epoch flows). Every sentence provides value, and key information is front-loaded (purpose, target user, required params). No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description covers all aspects: return fields (vault health, position status, external positions, capital decomposition, depositor flows, fee revenue, action items), edge cases (flagging maturities, unknown protocols, missing LP balance, cross-chain positions), and limitations (estimated yield, verify_externals performance impact).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so baseline is 3. The description adds meaning beyond schema by explaining the purpose of curator_fee_pct (for fee estimation) and verify_externals (verification details and when to use). It also clarifies chain and metavault_address usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as an operational dashboard for MetaVault curators, listing aggregated data like vault health, position status, depositor flows, etc. It distinguishes itself from sibling tools like spectra_list_metavaults and spectra_model_metavault by targeting a quick operational overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the target user (curators managing live MetaVaults) and provides explicit pointers to alternative tools for related tasks (e.g., spectra_list_metavaults for addresses, spectra_model_metavault for leverage modeling, spectra_get_pool_activity for trading patterns). It lacks explicit 'when not to use' but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_gauge_votesA
Full veSPECTRA governance dashboard: gauge vote distribution, voting APRs, bribe incentives, SPECTRA emissions per pool, and Merkl campaign health.
Shows where veSPECTRA holders direct their votes, what rewards they earn for voting, and how SPECTRA emissions are distributed across pools. Essential for:
Deciding where to direct veSPECTRA votes for maximum return
Finding pools with active bribe markets (voting incentives)
Understanding emission concentration and governance dynamics
Evaluating bribe efficiency ($ per vote)
Detecting broken emission pipelines (votes directing SPECTRA to pools where no Merkl campaign exists to distribute them)
Each gauge is cross-referenced against live Merkl campaigns: ✅ = Merkl campaign active at the gauge's pool address (emissions flowing) ⚠ = Merkl campaign exists but targets a different pool address (likely stale — gauge rolled to a successor pool but the campaign wasn't updated) ❌ = No campaign found (emissions allocated by governance but not distributed)
The ⚠ stale detection uses fuzzy symbol matching: if the gauge symbol (e.g., "yvvbUSDC") appears in a Merkl campaign name containing "Spectra" but the campaign targets a different address, the campaign likely belongs to a matured predecessor pool. This catches the common failure mode where pools roll to new maturities but Merkl campaigns lag behind.
The voting APR is what veSPECTRA holders earn by directing votes to a gauge: voting APR = (voting rewards + swap fees) / vote value
Bribe efficiency = total voting rewards / total votes (in $). Higher efficiency = more reward per unit of voting power directed.
Use spectra_get_ve_info for your personal boost calculation. Use spectra_list_pools to see the pools behind these gauges. Use spectra_list_expiring_pools to check gauge status for expiring pools.
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | Sort gauges by: votes (total voting power), voting_apr (voter return), emissions (SPECTRA directed), bribes (voting rewards value). Default: votes. | votes |
| top_n | No | Number of gauges to show (default 20, max 100). | |
| chain_filter | No | Filter to a specific chain ID (e.g., 1 for Ethereum, 8453 for Base). Omit for all chains. | |
| min_votes | No | Minimum votes (in SPECTRA, not wei) to include. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description explains return data concepts (voting APR formula, bribe efficiency, Merkl campaign statuses with emojis), stale detection logic, and what the tool does not do (e.g., personal boost). It lacks explicit mention of read-only nature, but overall behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and emojis. Front-loaded with main purpose. Every sentence adds value, though slightly verbose; could be trimmed slightly without loss of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity and no output schema, the description is very complete: explains metrics, formulas, indicators, edge cases (stale detection), and interpretations. Covers all major aspects expected from a governance dashboard tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage. The description adds value by explaining the meaning of sort options (votes, voting_apr, emissions, bribes) and clarifying that min_votes is in SPECTRA, not wei, which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a 'Full veSPECTRA governance dashboard' covering gauge vote distribution, voting APRs, bribes, emissions, and Merkl campaign health. It distinguishes from siblings by listing related tools like spectra_get_ve_info, spectra_list_pools, and spectra_list_expiring_pools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use: deciding where to direct votes, finding pools with bribe markets, understanding emission concentration, evaluating bribe efficiency, and detecting broken emission pipelines. Sibling tools are recommended for related tasks, providing clear decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_looping_strategyA
Calculate a leveraged fixed-yield strategy using Spectra PT + Morpho looping.
Strategy: Deposit asset -> mint PT on Spectra -> use PT as collateral on Morpho -> borrow underlying -> deposit again -> repeat. Each loop multiplies yield exposure.
Returns projected yields at different leverage levels (1x to max safe leverage), effective APY, and risk parameters.
Automatically fetches the live Morpho borrow rate and LLTV when a matching market exists. You can still override morpho_ltv and borrow_rate manually if needed.
NOTE: Looping requires a Morpho market that accepts the specific PT as collateral.
Risk context:
Borrow rates are variable. A 5% spread (7% yield - 2% borrow) can turn negative if borrow rates spike above your fixed yield. Monitor rates in Morpho.
Higher leverage amplifies both returns and liquidation risk. Consider keeping 1-2 loops below maximum for safety buffer.
Entry cost (price impact) compounds across loops — each iteration faces degraded effective pool liquidity.
Use morpho_list_markets to find available Morpho markets. Use spectra_scan_opportunities to discover the best looping opportunities across all chains with capital-aware sizing.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address to loop | |
| morpho_ltv | No | Override Morpho LTV ratio (e.g. 0.86 = 86%). If omitted, auto-detected from Morpho. | |
| borrow_rate | No | Override Morpho borrow rate in % APY. If omitted, fetched live from Morpho. | |
| max_loops | No | Maximum number of loop iterations to calculate (default 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains the looping mechanism step-by-step, that it fetches live data but allows overrides, and provides detailed risk context about variable borrow rates, liquidation risk, and entry cost. Discloses key behavioral traits such as auto-detection of LTV and borrow rate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a summary sentence upfront, then bullet-rich paragraphs. Slightly lengthy but each sentence adds essential context (e.g., risk notes, prerequisites). Could be trimmed slightly without losing value, but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (5 params, no output schema), description covers prerequisites, risks, return values (projected yields, effective APY, risk parameters), and links to related tools. All necessary context for an agent to understand and correctly invoke the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value beyond schema: clarifies that morpho_ltv and borrow_rate can be auto-detected or manually overridden, and that max_loops defaults to 5. This reduces ambiguity and aids correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it calculates a leveraged fixed-yield strategy using Spectra PT and Morpho looping. It uses specific verbs ('calculate', 'returns projected yields') and distinguishes from sibling tools like pendle_get_looping_strategy (different protocol) and morpho_list_markets (different purpose).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions when to use: 'Automatically fetches the live Morpho borrow rate' and constraints: 'requires a Morpho market that accepts the specific PT as collateral'. Provides alternatives: 'Use morpho_list_markets to find available Morpho markets. Use spectra_scan_opportunities to discover the best looping opportunities...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_onchain_activityA
Fetch historical on-chain activity directly from event logs via eth_getLogs. Use this when the API-based spectra_get_pool_activity returns empty or incomplete data (the API only stores a limited time window of recent transactions).
Supports TWO contract types:
Curve StableSwap-NG pool (pool_address): TokenExchange, AddLiquidity, RemoveLiquidity
Spectra PrincipalToken vault (pt_address): Mint (deposit→PT+YT), Redeem (burn PT→IBT), YieldClaimed
Provide pool_address, pt_address, or both. When both are provided, events from both contracts are fetched in parallel, merged, and sorted by block number.
Returns raw token amounts (not USD values — USD conversion is not available from on-chain data alone).
The rpc_url parameter lets you supply an RPC endpoint for any chain, including chains without hardcoded RPCs (e.g., Katana, Monad). If omitted, falls back to the server's default public RPC for the chain (if available).
Block range strategy:
Specify from_block/to_block for exact ranges
Or specify lookback_hours to scan the last N hours (converted to blocks using estimated block times — approximate, not exact)
Default: last ~24 hours if no range is specified
Limitations:
No USD values (only raw token amounts in native decimals)
Block timestamps are fetched for first/last block only (time range display)
Public RPCs may rate-limit large scans; use a premium RPC for deep history
Maximum 500,000 blocks per request (to prevent timeout)
Use spectra_get_pool_activity for recent data with USD values and rich analysis. Use this tool for historical data beyond the API's retention window.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pool_address | No | The Curve pool contract address (0x...). Fetches swap and liquidity events. At least one of pool_address or pt_address is required. | |
| pt_address | No | The Spectra PrincipalToken contract address (0x...). Fetches Mint, Redeem, and YieldClaimed vault events. At least one of pool_address or pt_address is required. | |
| rpc_url | No | RPC endpoint URL. Overrides the default public RPC for this chain. Required for chains without default RPCs (katana, monad). Use a premium RPC (Alchemy, Infura) for better reliability on large scans. | |
| from_block | No | Start block number. If omitted, calculated from lookback_hours. | |
| to_block | No | End block number. If omitted, uses the latest block. | |
| lookback_hours | No | Hours to look back from current block (default 24, max 720 = 30 days). Ignored if from_block is provided. Converted to blocks using estimated block times. | |
| address | No | Filter events to a specific address (matches buyer/provider in events). | |
| type_filter | No | Filter by activity type. Default: all. | all |
| limit | No | Maximum number of events to return (default 50, max 200). | |
| token_decimals | No | Token decimals for formatting amounts (default 18). Use spectra_get_pt_details to find actual decimals — USDC=6, WBTC=8, most IBTs/PTs=18. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Comprehensively discloses behavioral traits: returns raw token amounts (no USD), block range strategies, parallel fetching, contract types, limitations (max 500k blocks, public RPC rate limits), and RPC override behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and sections; each sentence adds value. Slightly lengthy but appropriate given the complexity; could be trimmed slightly without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects including contract types, events, parallel fetching, block ranges, limitations, and alternative tool reference. No output schema, but return values (raw token amounts) are clearly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds significant context beyond schema: explains event types for each contract, behavior when both addresses provided, block range logic, RPC fallback, and hints for token_decimals.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches historical on-chain activity via eth_getLogs and distinguishes itself from the sibling tool spectra_get_pool_activity by focusing on historical data beyond the API's retention window.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (when spectra_get_pool_activity returns empty/incomplete data) and when to use the alternative, providing clear comparison and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_pool_activityA
Get recent trade and liquidity activity for a specific Spectra pool. Returns individual transactions: buys, sells, and liquidity adds/removes with USD values, timestamps, and tx hashes.
Pool activity shows only the Curve pool's perspective (IBT ↔ PT swaps and LP events). The Spectra Router batches operations atomically, so any single pool event may be one step of a multi-step strategy. There is no BUY_YT or SELL_YT event type — the pool never touches YT directly. Use mv_get_protocol_context for the full mechanics of how Router batching maps to pool activity types.
Protocol mechanics that affect how activity appears:
BUY_PT and SELL_PT are Curve pool swaps between IBT and PT.
There is NO "BUY_YT" or "SELL_YT" type. The pool never touches YT directly.
YT selling via the Router's flash-redeem internally buys PT from the pool to pair with YT for redemption — so YT sells show up as BUY_PT in the activity log.
A standalone mint (deposit IBT → PT+YT) does NOT appear in pool activity. However, the Router can batch a mint + LP add in one atomic execute() call. The minted PT + remaining IBT enter the pool as AMM_ADD_LIQUIDITY while the minted YT goes directly to the user's wallet. So AMM_ADD_LIQUIDITY events may ALSO represent YT acquisition — the YT minting is invisible in pool data.
The Router can also flash-mint atomically: flash-borrow IBT → mint PT+YT → sell PT on the pool → user tops up the shortfall → user receives YT. This shows up as SELL_PT but the user's net action is acquiring YT, not selling PT.
AMM_REMOVE_LIQUIDITY returns IBT + PT from the pool. Users often follow up by selling the PT (SELL_PT) to recover capital, completing a mint→LP→remove→sell loop that nets them YT at the cost of the PT discount (~1 - ptPrice).
Key principle: any pool event type can be one step of a multi-step Router operation. Do not assume SELL_PT means "user is bearish on PT" or AMM_ADD_LIQUIDITY means "user is providing liquidity for yield." Always cross-reference with spectra_get_portfolio to see what the address actually holds (PT, YT, LP balances) — the holdings reveal the true strategy better than the activity log alone.
Analysis tips — IMPORTANT: each observation below has multiple valid interpretations. The tool output now presents these as competing branches. Do not collapse to one interpretation without cross-referencing spectra_get_portfolio and other data sources.
High SELL_PT count: could be flash-mint YT accumulation (check YT balance >> PT) OR simple PT liquidation OR one leg of cross-protocol arb. Portfolio resolves this.
BUY_PT events: could be fixed-rate accumulation OR flash-redeem YT selling (check if YT balance dropped). These predict opposite future behavior.
Paired ADD/REMOVE liquidity: could be LP cycling in a mint loop OR fee harvesting OR rebalancing. The intent is not observable from pool activity alone.
Large volume vs small holdings: could be capital recycling (looping) OR completed round-trip (entered and exited) OR funds moved to another venue.
Output includes an Address Concentration section with full addresses and per-address type breakdowns. Use spectra_get_portfolio on those addresses to see their PT, YT, and LP balances. Most analysis can be done without a block explorer — use spectra_get_portfolio on addresses from Address Concentration, and spectra_compare_yield or spectra_get_pt_details for rate context.
Address isolation mode: When you provide an 'address' parameter, the tool filters to that address only, sorts chronologically (oldest first), and adds:
Sequence Analysis: detects repeating action cycles (e.g., ADD→REMOVE→SELL repeated 8×). Presents COMPETING INTERPRETATION BRANCHES (A/B/C) that predict different future behavior. Small repetition counts (≤5) are flagged as statistically insufficient for extrapolation. CRITICAL: do NOT collapse these branches into a single narrative without external evidence from spectra_get_portfolio or other tools. The branches exist as friction against premature pattern-matching — the tension between them IS the information.
Flow Accounting: cross-references portfolio data to show PT/YT flow reconciliation. When position shape is observable (e.g., YT-only, PT-only, fully exited), presents competing hypotheses for WHY the position looks that way. Each hypothesis predicts different future behavior. Do not select one without additional evidence.
Capital Efficiency: compares total activity volume against the address's throughput, flagging high ratios that indicate capital recycling (looping) vs accumulation.
If the address shows high-frequency activity (>10 txns), consider checking whether it is a contract (programmatic execution via Router execute()) vs an EOA (manual/scripted). Contracts execute atomically; EOAs submit separate transactions. This distinction affects whether apparent "sequences" are truly sequential or batched.
Contract Detection: checks whether the address is a contract or EOA via on-chain eth_getCode. Contracts execute atomically; EOAs submit sequential transactions.
Pool Impact: flags when SELL_PT or BUY_PT volume is significant relative to pool liquidity, indicating potential market impact on implied APY.
Gas Estimates: estimates total gas cost from transaction count using chain-specific gas heuristics. Shows gas as percentage of activity volume and position value.
Pool Context: fetches pool liquidity and implied APY for baseline context.
Observation Coverage: quantifies the blind spots of this analysis. Shows: (1) Value coverage — what % of the position is explained by observable activity. (2) Temporal coverage — active days vs dark periods with no observable events. (3) Data source coverage — which of the available data sources were consulted. CRITICAL: coverage metrics bound the domain of validity for ALL interpretations above. If value coverage is low (<50%), the competing interpretation branches are based on a minority of the address's actual behavior. Position sizing should reflect the coverage level, not the confidence of the best-fitting interpretation.
For multi-pool activity scanning, use spectra_get_address_activity to find all pools an address has interacted with in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pool_address | Yes | The Curve pool address (0x...) OR a PT address. If a PT address is given, it will be resolved to the corresponding pool automatically. | |
| type_filter | No | Filter by activity type. Default: all. | all |
| limit | No | Number of most recent activities to return (default 20, max 100) | |
| address | No | Filter to a specific wallet address. Enables chronological sort, sequence analysis, and capital efficiency hints. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral transparency. It thoroughly explains the tool's behavior, including that it returns only the Curve pool's perspective (IBT ↔ PT swaps and LP events), details about event types (no BUY_YT/SELL_YT), and complex protocol mechanics like flash-minting and flash-redeeming. It also describes output features like Address Concentration, Sequence Analysis, Flow Accounting, and coverage metrics, giving a complete picture of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long (multiple paragraphs) and includes extensive detail and examples. While well-structured with headings, it is not concise. For a complex tool, the length is justified, but conciseness is sacrificed. A 3 indicates it is adequate but could be trimmed without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema), the description is extremely complete. It covers edge cases (e.g., PT address resolution, high SELL_PT count interpretations), interacts with other tools (spectra_get_portfolio, spectra_compare_yield), and provides analysis tips. All necessary context for an AI agent to use the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds significant meaning beyond the schema, especially for the 'address' parameter (explaining it enables chronological sort, sequence analysis, capital efficiency hints, and contract detection). It also clarifies the 'type_filter' parameter by listing event types and explaining that some events like AMM_ADD_LIQUIDITY may represent YT acquisition. While it adds a lot, the schema already describes the parameters adequately, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get recent trade and liquidity activity for a specific Spectra pool' with specific verb and resource. It distinguishes from siblings like spectra_get_address_activity and spectra_get_portfolio by explaining what it returns (individual transactions) and what it does not (full mechanics of Router batching, which is covered by mv_get_protocol_context).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool, including analysis tips that emphasize cross-referencing with spectra_get_portfolio for holdings. It also highlights when not to rely solely on this tool (e.g., 'Do not assume SELL_PT means...') and suggests alternative tools like mv_get_protocol_context for Router mechanics and spectra_get_address_activity for multi-pool scanning. This is comprehensive and helps an agent select the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_pool_capacityA
Analyze a pool's capacity by quoting PT trades at increasing capital sizes.
Shows how price impact and effective APY degrade as capital grows, helping curators and large deployers find the sweet spot (max capital with acceptable impact) and the exhaustion point (where APY collapses).
Two modes: "pt_buy" (default): Measures PT swap impact via Curve get_dy(). Shows how much capital can be deployed as a directional PT buyer before slippage degrades APY. "lp_add": Measures LP deposit impact. LP deposits add liquidity to BOTH sides of the pool, deepening it rather than consuming it. Impact is near-zero for balanced deposits. Shows pool share concentration and post-deposit pool depth. USE THIS MODE for MetaVault curator capacity analysis — curators deploy as LP.
Each tier is quoted independently (not cumulative). Real execution across multiple txns would face additional impact from pool state changes.
Output surfaces a capacity framing note: pt_buy mode measures directional swap impact, but MetaVault curators deploy as LP where entry impact is near-zero and the constraint is pool share concentration. Use lp_add mode for curator capacity analysis.
On-chain quotes use the actual Curve StableSwap-NG amplification parameter. Set use_on_chain=false for math-only estimates (faster, more conservative).
Use spectra_quote_trade for a single exact quote at a specific amount. Use spectra_scan_opportunities for capital-aware ranking across all pools. Use mv_check_ibt_health to verify the underlying IBT before deploying.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address (0x...) | |
| steps | No | Number of capital tiers in the ladder (default 8, max 12) | |
| max_capital_usd | No | Upper bound of the capital ladder in USD (default $1,000,000) | |
| use_on_chain | No | Try on-chain Curve get_dy() quotes (default true). Set false for math-only estimates. | |
| mode | No | Analysis mode: 'pt_buy' for PT swap impact (default), 'lp_add' for LP deposit impact (MetaVault curators). | pt_buy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: independent tier quoting (non-cumulative), on-chain vs. math-only estimation, and the different impact profiles of pt_buy and lp_add modes. It also notes real execution would face additional pool state changes, setting accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but verbose (multiple paragraphs). It uses lists and clear sections, but contains some redundancy (e.g., the note about MetaVault curators appears twice). Could be trimmed for brevity without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, two modes, no output schema), the description covers all essential aspects: mode differences, tier quoting mechanics, on-chain vs. off-chain options, and links to related tools. It provides sufficient information for an agent to decide when and how to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the purpose of steps and max_capital, clarifying the use_on_chain trade-off, and providing context-specific guidance for the mode parameter (e.g., 'Use this mode for MetaVault curator capacity analysis').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes pool capacity by quoting PT trades at increasing capital sizes, detailing two distinct modes (pt_buy and lp_add). It explicitly distinguishes the purpose for directional traders vs. LP deployers (MetaVault curators), making it easy to understand what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance for each mode and recommends lp_add for MetaVault curator capacity analysis. It also lists three alternative tools (spectra_quote_trade, spectra_scan_opportunities, mv_check_ibt_health) with specific contexts, enabling correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_pool_volumeA
Get historical trading volume for a specific Spectra pool. Returns timestamped buy/sell volume in USD. Use spectra_list_pools first to find pool addresses. Useful for assessing pool activity and liquidity depth before entering a position.
Context: Volume alone doesn't indicate capital efficiency — $1M volume in a $5M liquidity pool is very different from $1M in a $500K pool. Combine volume data with pool liquidity (from spectra_list_pools or spectra_get_pt_details) to assess real trading conditions.
Output includes volume/liquidity ratio analysis when pool data is available. For individual transaction details and whale activity, use spectra_get_pool_activity instead. Use spectra_quote_trade to estimate price impact for a specific trade size.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pool_address | Yes | The Curve pool address (0x...) OR a PT address. If a PT address is given, it will be resolved to the corresponding pool automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that output includes timestamped buy/sell volume in USD and optionally a volume/liquidity ratio when pool data is available. Lacks details on data range, pagination, or caching, but for a read tool it is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at about 130 words, well-structured with the purpose first, then output, usage tips, context note, and alternatives. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description effectively covers the tool's purpose, usage, and integration with other tools. It explains the return value and provides important context about using volume with liquidity. Minor gaps like missing time range or pagination, but overall very complete for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% with clear descriptions for both parameters. The description does not add significant meaning beyond what the schema provides, such as the chain enum or pool address pattern, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves historical trading volume for a specific Spectra pool, returning timestamped buy/sell volume in USD. It differentiates from siblings by explicitly mentioning volume and directing users to other tools for transaction details or price impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on using spectra_list_pools first to find pool addresses, suggests combining with liquidity data from other tools, and directs users to spectra_get_pool_activity for transaction details and spectra_quote_trade for price impact, covering when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_portfolioA
Get wallet positions on Spectra for a specific address. Returns PT, YT, and LP balances with USD values, claimable yield, and current rates. Queries a single chain or all chains. Use this to understand what a wallet currently holds on Spectra.
Also fetches unclaimed Merkl rewards (SPECTRA gauge emissions and other incentive programs) per position. Merkl rewards are best-effort — if the Merkl API is unavailable, the portfolio still displays without reward data.
Protocol context:
Depositing IBT always mints BOTH PT and YT in equal amounts. If a wallet holds YT but no PT, it sold or LPed its PT. If it holds PT but no YT, it sold its YT.
PT + YT = 1 underlying at maturity. This identity is fundamental to all strategies.
Balance ratios are the key signal. Output shows Position Shape (e.g., "YT/PT 4:1") so you can reason about what the holder's position implies given the mechanics above.
When investigating a strategy, ALWAYS cross-reference portfolio with spectra_get_pool_activity. Activity shows the HOW (transaction patterns), portfolio shows the WHAT (resulting position). Neither alone tells the full story.
Strategies often span multiple wallets. If spectra_get_pool_activity shows concentrated activity from several addresses, check each one to build the full picture.
For activity analysis, use spectra_get_pool_activity with the address parameter — it will automatically cross-reference portfolio data and provide flow accounting, contract detection, gas estimates, and pool impact analysis.
Use spectra_get_address_activity to scan all pools for an address's activity in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address (0x...) | |
| chain | No | Specific chain to query. Omit to scan all chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral traits. It discloses that Merkl rewards are best-effort and may fail, and explains fundamental protocol mechanics (PT+YT=1, IB depositing mints both). However, it does not mention potential rate limits, performance considerations, or data freshness, which would elevate it to a 5. Nonetheless, the transparency about data sources and limitations is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than ideal but well-structured: core purpose first, then Merkl rewards caveat, then protocol context and cross-referencing. It is front-loaded with the most important information. Could be slightly more concise (e.g., condensing protocol context), but it is clear and organized, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description comprehensively explains return fields (PT, YT, LP, USD, yield, rates, Merkl rewards). It also provides protocol context to interpret balances (e.g., position shape). With many sibling tools, it offers cross-referencing guidance. This fully equips an agent to use the tool correctly and interpret results, achieving maximum completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining that omitting the 'chain' parameter scans all chains, which is a critical usage hint beyond the schema's enum list. This incrementally improves clarity, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves wallet positions on Spectra, including PT, YT, LP balances, USD values, claimable yield, current rates, and Merkl rewards. It explicitly distinguishes from sibling tools like spectra_get_pool_activity, stating that this tool shows 'what' the holder's position is, while the other shows 'how' (transaction patterns). This level of specificity and differentiation earns a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance, including cross-referencing with spectra_get_pool_activity and spectra_get_address_activity. It also advises checking multiple wallets if activity is concentrated. This directly helps an agent select the appropriate tool and avoid misuse, meeting the highest standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_protocol_statsA
Get Spectra protocol-wide statistics: SPECTRA token supply, circulating supply, current weekly emissions, rebase formula, and general protocol info. Use this for questions about SPECTRA tokenomics or protocol health.
Protocol context:
Rebase distributes additional SPECTRA to veSPECTRA holders. The formula is highly non-linear: (veSPECTRA/totalSPECTRA)^3. At 10% lock rate, rebase captures ~0.1% of emissions. At 50% lock rate, rebase captures ~12.5%. This incentivizes high ve participation.
Weekly emissions decay exponentially and eventually stabilize.
Gauge emissions boost LP APY across all pools (see LP APY breakdown in pool tools).
Use spectra_get_ve_info for live veSPECTRA data and boost calculations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the tool as getting stats (read-only) and includes extensive protocol context (rebase formula, emissions decay). It does not mention any side effects or restrictions, but the read-only nature is clearly implied. Could be slightly improved by explicitly stating no side effects, but overall transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by useful protocol context and a pointer to an alternative. It is not overly long, though the protocol context adds some verbosity. Every sentence serves a purpose; no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description provides comprehensive context: detailed rebase formula explanation, emissions decay behavior, gauge emissions boost reference, and a link to a related tool. It fully covers what the agent needs to know to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters, and schema coverage is 100% (vacuously). The rule sets baseline 4 for zero-parameter tools. The description adds value by explaining the output content beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets Spectra protocol-wide statistics, listing specific data points (SPECTRA token supply, circulating supply, current weekly emissions, rebase formula). It also distinguishes from sibling tools like spectra_get_ve_info by recommending that for live veSPECTRA data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for questions about SPECTRA tokenomics or protocol health' and provides an alternative: 'Use spectra_get_ve_info for live veSPECTRA data and boost calculations.' This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_pt_detailsA
Get detailed information about a specific Spectra Principal Token (PT). Returns: maturity date, TVL, implied APY, PT/YT prices, pool liquidity, LP APY breakdown, underlying asset info, IBT protocol, yield leverage, pool reserves (IBT/PT amounts), maturity redemption value, points program multipliers, asset tags, and base IBT info.
Protocol context:
PT trades at a discount to its underlying (the discount IS the fixed yield). At maturity, PT redeems for the maturityValue shown (may differ from 1:1).
PT + YT = 1 underlying at maturity. YT price = 1 - PT price (in underlying terms).
YT leverage shows how much yield exposure 1 unit of YT provides relative to holding the underlying directly. Higher leverage = more amplified yield exposure.
IBT APR breakdown shows organic yield vs external incentive programs. High APR from incentives alone may not be sustainable.
Includes external Merkl campaign APR when available.
Output surfaces conditional competing interpretations when data is ambiguous — e.g., PT above par, skewed reserves, high APY with thin liquidity, or incentive-dominated APR. These appear only when triggered by the specific data returned.
Use spectra_compare_yield to compare fixed vs. variable rates. Use spectra_get_looping_strategy to calculate leveraged fixed yield via Morpho. Use spectra_get_portfolio to check wallet holdings. Use spectra_get_pool_activity to see trading patterns on this pool.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address (0x...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details that the output surfaces conditional warnings (e.g., PT above par, skewed reserves, incentive-dominated APR) and explains protocol mechanics (PT discount, PT+YT=1, YT leverage). This goes beyond a simple listing of fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear overview, bullet-point fields, protocol context, and usage guidelines. It is slightly long but every sentence provides value; could be tighter but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (many return fields, no output schema, conditional behavior), the description is remarkably complete. It explains the protocol, return values, edge-case warnings, and sibling alternatives. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters (chain enum and pt_address pattern). The description does not add new semantic details about the parameters beyond what the schema provides, but it does contextualize the parameters within the broader protocol explanation. Baseline 3 is appropriate as schema already does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get detailed information about a specific Spectra Principal Token (PT).' It lists specific return fields, and distinguishes from sibling tools by naming alternatives for different use cases, such as compare fixed vs variable rates or check wallet holdings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use guidance: it directs to spectra_compare_yield, spectra_get_looping_strategy, spectra_get_portfolio, and spectra_get_pool_activity for related but different tasks. This fully helps the agent choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_ve_infoA
Get live veSPECTRA governance token information and compute boost scenarios.
Reads the current veSPECTRA total supply from Base chain on-chain, and given your balance + a specific pool, computes your exact boost multiplier.
The Spectra boost formula: B = min(2.5, 1.5 * (v/V) * (D/d) + 1) v = your veSPECTRA balance V = total veSPECTRA supply (read live from Base) D = pool TVL d = your deposit size Full 2.5x boost when: v/V >= d/D (your share of votes >= your share of pool)
Useful for understanding how much veSPECTRA you need for max boost in a given pool at a given deposit size.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_address | No | Wallet address to check veSPECTRA balance for. Reads on-chain from Base. If provided, auto-populates ve_spectra_balance. | |
| ve_spectra_balance | No | Your veSPECTRA token balance. If provided with capital_usd, computes your boost. Auto-populated when wallet_address is provided. | |
| capital_usd | No | Your planned deposit size in USD. Required with ve_spectra_balance to compute boost. | |
| chain | No | Chain of the pool to check boost for (optional, used with pt_address). | |
| pt_address | No | PT address of the pool to check boost for (optional, used with chain). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses on-chain reading from Base chain, auto-population logic, and the boost formula. Lacks explicit mention of read-only nature and absence of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: one-line summary, explanation of data source, formula, and usage note. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, description compensates by stating output is an exact boost multiplier. Could elaborate on other return fields (e.g., total supply) but sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters have schema descriptions, but the description adds significant value by explaining the formula, auto-population when wallet_address is given, and the requirement of capital_usd with ve_spectra_balance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it gets live veSPECTRA info and computes boost scenarios using a specific formula. It distinguishes itself from sibling tools by focusing on governance token boost calculation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states usefulness for understanding veSPECTRA needed for max boost. Does not explicitly state when not to use, but context is clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_get_yield_curveA
Show the yield curve (term structure) for a given underlying asset across all chains.
Fetches all active Spectra PTs matching the underlying (e.g., "USDC", "ETH"), sorts by maturity, and displays implied APY at each point on the curve.
This is the fixed-income view: "What rate can I lock for 30 days vs 90 days vs 180 days?" Helps curators spot term premium anomalies, compare cross-chain rates at similar maturities, and choose optimal maturity targets.
Handles symbol variants automatically (USDC.e, WETH, wstETH → normalized).
Use spectra_get_pt_details or mv_check_ibt_health to drill into a specific maturity. Use spectra_get_pool_capacity to check depth at your capital size. Use spectra_compare_yield for fixed-vs-variable analysis on a specific PT.
| Name | Required | Description | Default |
|---|---|---|---|
| underlying | Yes | Underlying asset symbol (e.g., 'USDC', 'ETH', 'stETH', 'GHO') | |
| chain | No | Restrict to a single chain. Omit to scan all chains. | |
| min_tvl_usd | No | Minimum TVL in USD to include (default 0) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default 0) | |
| compact | No | One-line-per-maturity output for quick scanning |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses automatic symbol normalization (USDC.e, WETH, wstETH → normalized), sorting by maturity, and implied APY calculation. However, it does not mention read-only behavior, auth requirements, or rate limits. Still, the behavioral traits are well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a brief headline, explanatory paragraph, and bullet-like usage guidance. Each sentence adds value. Front-loaded with main purpose. Could be slightly more concise by removing redundant phrasing, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (cross-chain yield curve with normalization) and lack of output schema, the description sufficiently explains what the tool does and how it processes data. It omits output format details but provides enough context for an agent to understand the result type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add much beyond schema for parameters; it provides context for 'underlying' and 'chain' in the usage paragraph. The schema descriptions are already clear. No additional semantic enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it shows the yield curve (term structure) for a given underlying asset across all chains. Specifies it fetches PTs, sorts by maturity, and displays implied APY. Distinguishes from siblings like spectra_get_pt_details and spectra_compare_yield.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (fixed-income view, term premium analysis, maturity selection) and when not to (defers to spectra_get_pt_details, mv_check_ibt_health, spectra_get_pool_capacity, spectra_compare_yield for specific purposes). Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_list_chainsB
List all blockchain networks supported by Spectra Finance. Use this as a starting point to discover what's available.
Not all chains have identical feature coverage. Morpho looping markets currently exist on mainnet, base, arbitrum, and katana. veSPECTRA governance lives on Base.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses non-uniform coverage but omits behavioral details like output format, authentication needs, or rate limits, providing only minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences efficiently convey purpose and key usage notes. Front-loaded with main action, it is concise but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool without output schema, the description covers the essential purpose and provides context about varying coverage, making it sufficiently complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params), so baseline is 4 per rules. The description adds value by explaining the tool's purpose and coverage nuances, which complements the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all blockchain networks supported by Spectra Finance, with a specific verb and resource. It distinguishes from siblings by being a starting point, though not explicitly differentiating from other list tools like spectra_list_pools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises using this as a starting point to discover available networks and notes that coverage varies, providing examples. However, it lacks explicit guidance on when not to use it or alternatives, leaving usage context implied but not fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_list_expiring_poolsA
Scan all Spectra chains for pools approaching maturity.
Returns pools expiring within the specified threshold (default 21 days / 3 weeks), grouped by urgency level. Designed for operators who need lead time to:
Create follow-up pools with new maturities
Submit gauge proposals for successor pools
Plan LP migration and rollover strategies
Coordinate with IBT protocol teams
Each result includes the PT address, IBT address, chain ID, underlying asset, TVL, and current implied APY — everything needed to plan the successor pool.
Automatically cross-references each expiring pool's IBT against all active pools to flag whether a successor pool (same IBT, later maturity) already exists or needs to be created.
Gauge status is fetched from the governance voting-incentives API. A pool address present in that endpoint has a gauge (even if it currently has 0 votes / 0 emissions). Gauge API failure is best-effort — gauge status shows as unknown, does not block results.
Per-pool readiness assessment combines successor status, gauge status, and timing: OK: Successor deployed with gauge and seeded CAUTION: Successor exists but missing gauge or low TVL; or no successor but >7d runway WARNING: No successor and ≤7d; or successor without gauge and ≤14d
Urgency (time-based) and readiness (action-based) are independent dimensions. A pool can be ALERT urgency (21d runway) but WARNING readiness (no successor at all). The Operator Checklist section groups required actions by type:
Deploy successor pool: IBTs with no active successor
Submit gauge proposal: successors that exist but lack a gauge
Ready for migration: successors with gauge and adequate TVL
Urgency levels: CRITICAL (≤7 days): Immediate action required WARNING (≤14 days): Start preparations now ALERT (≤21+ days): Plan ahead
Set include_expired=true to also show recently matured pools (if the API returns them). By default only active (non-expired) pools are shown.
Use mv_plan_rollover on a specific MetaVault for automated rollover candidate discovery. Use spectra_get_yield_curve to see what maturities already exist for the same underlying. Use spectra_list_pools to check if a successor pool has already been created.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold_days | No | Warning threshold in days before maturity (default 21 = 3 weeks). Pools expiring within this window are returned. | |
| chain | No | Restrict to a single chain. Omit to scan all chains. | |
| min_tvl_usd | No | Minimum TVL in USD to include (default 0 = show all) | |
| compact | No | One-line-per-pool output for quick scanning. Omit for full details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It discloses behavioral traits: gauge status is fetched 'best-effort' and 'does not block results'; urgency and readiness are independent dimensions; default shows active pools only; output includes operator checklist. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured with clear sections (urgency levels, readiness assessment, operator checklist). Every sentence adds value, though it could be slightly more concise. Structure is front-loaded with purpose and use cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool scanning multiple chains with cross-referencing and multiple output dimensions, the description is complete. It covers parameters, edge cases (best-effort gauge), output format, and relationships between urgency and readiness. No output schema, but description explains results adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds meaning beyond parameter descriptions by explaining the output fields, urgency levels, readiness assessment, and the implication of thresholds. It does not repeat schema but enriches context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Scan all Spectra chains for pools approaching maturity.' It specifies the resource (pools) and action (scan for expiring). It distinguishes itself from siblings by listing alternative tools like mv_plan_rollover, spectra_get_yield_curve, and spectra_list_pools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool versus alternatives: 'Use mv_plan_rollover on a specific MetaVault for automated rollover candidate discovery. Use spectra_get_yield_curve to see what maturities already exist for the same underlying. Use spectra_list_pools to check if a successor pool has already been created.' It also provides context for operators and specifies default parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_list_metavaultsA
List live MetaVaults from the Spectra API.
MetaVaults are ERC-7540 curated vaults that automate LP rollover and compound YT yield back into LP positions. They are managed by curators who earn performance fees on depositor yield.
Returns all MetaVaults with:
Curator info, TVL (with unallocated ratio when >5% undeployed, computed AFTER subtracting external positions so avant/pendle externals aren't mislabeled as idle)
Live APY breakdown + 30d avg (when available)
Active Spectra LP positions (PT markets the vault is deployed in)
External Positions: value held OUTSIDE Spectra LP (avant avUSDx-burn redemption-in-flight, pendle LP on other protocols). Surfaced per-protocol with graceful fallback for unknown protocols. This field is UNDOCUMENTED by Spectra — shape is inferred from observed data and may change.
Cross-chain module whitelist (remote.{chainId}.modules) showing enabled protocols per foreign chain (e.g., avant/parallel on Avalanche)
Status flag (VISIBLE / HIDDEN) — HIDDEN vaults are surfaced here but filtered out in the Spectra UI; the compact listing does not prefix the name with a status label (detail view only)
Underlying asset details
Vault flows: epoch-by-epoch deposit/withdrawal analysis
Bridge transactions: cross-chain CCTP transfers
Epoch history (rate snapshots)
Use this tool to discover which MetaVaults are live, then pass the address to spectra_model_metavault for detailed strategy modeling or spectra_get_curator_dashboard for the full operational view with action items.
To investigate curator activity (LP adds/removes, rebalancing), use spectra_get_address_activity on the curator's EOA address — MetaVault operations go through the Spectra Router, so the vault contract address won't appear in pool activity data.
When verify_onchain=true (off by default), each MetaVault gets a compact chain-truth summary line probed via the same engine that powers spectra_get_curator_dashboard. Useful for cross-chain triage when the dashboard isn't pre-rendered. Chain-read failures degrade to a [chain-truth ✗] line per MV — they NEVER abort the rest of the list. Concurrency is capped at 6 simultaneous reads to avoid RPC rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Chain to query. Omit to scan all chains. | |
| verify_onchain | No | Verify each MetaVault on-chain (Safe + infraVault + secondaryVault) and append a compact chain-truth line per MV. Off by default — chain reads add latency and RPC pressure. Use when you need cross-chain triage without pre-rendering the curator dashboard for each MV. When [chain-truth ✗] fires, promote to spectra_get_curator_dashboard for the failed chain to see the full footer with next-probe guidance. Dissolution: if telemetry shows zero verify_onchain=true invocations within 60 days of ship, the flag is fossil — remove and consolidate into the curator_portfolio path (audit-noted by Diverger Round-4). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It thoroughly details the tool's behavior: what data is returned (curator info, TVL, APY, LP positions, external positions with caveats, cross-chain modules, status flags, vault flows, bridge transactions, epoch history), how the verify_onchain flag works (adds chain-truth line, never aborts on failure, concurrency capped at 6), and the handling of HIDDEN vaults. It even notes that the external positions field is undocumented and may change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, bullet points of returned data, and usage guidance. It is somewhat verbose but each sentence adds value. The dissolution note on verify_onchain is a nice touch but slightly wordy. Overall, it earns a 4 for being clear and organized despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (many sibling tools, chain reads, cross-chain features) and the lack of an output schema, the description is remarkably complete. It covers all relevant aspects: what the tool returns, how to use it with other tools, edge cases (HIDDEN vaults, fallback for unknown protocols), and behavioral details like concurrency limits and failure handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds significant value beyond the schema: for 'chain', it clarifies that omitting the parameter scans all chains. For 'verify_onchain', it provides extensive context on behavior, use cases, and even a potential future deprecation path, giving the agent deep understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool's purpose: listing live MetaVaults from the Spectra API. It provides a solid definition of MetaVaults and explicitly distinguishes the tool from siblings like spectra_model_metavault and spectra_get_curator_dashboard, giving the agent a precise understanding of when to use this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers explicit usage guidance: use this tool to discover live MetaVaults, then pass the address to spectra_model_metavault for detailed modeling or spectra_get_curator_dashboard for operational views. It also provides clear alternatives for investigating curator activity (spectra_get_address_activity) and explains when to use the verify_onchain flag, including its trade-offs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_list_poolsA
List all active Spectra pools on a given chain. Returns a summary of each pool including: asset name, maturity, TVL, implied APY, LP APY, pool liquidity, pool reserves (IBT/PT amounts with ratio), IBT APR breakdown (organic vs incentive yield), maturity redemption value, points multipliers, and asset tags.
Metric definitions used across all Spectra tools:
PT TVL = value of underlying deposited to mint PTs (pt.tvl in API)
Liquidity = AMM pool depth (IBT + PT both sides of the Curve pool, pool.liquidity in API)
Implied APY = annualized fixed rate from buying PT at discount
IBT APR = variable rate on the underlying vault (labeled APR, not compounded)
Each pool is a Curve StableSwap-NG AMM pair of IBT and PT. LP APY is the yield from providing liquidity to the pool (fees + gauge emissions).
Set include_expired=true to also show recently matured pools (if the API returns them). By default only active (non-expired) pools are shown.
Includes external Merkl campaign APR when available. Output surfaces conditional competing interpretations when data is ambiguous (e.g., high APY with thin liquidity).
For multi-chain discovery, use spectra_get_best_fixed_yields (raw APY ranking) or spectra_scan_opportunities (capital-aware with price impact and looping analysis). Use spectra_get_pool_activity on a specific pool to see recent trading patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network to query | |
| sort_by | No | Sort results by this metric (descending) | implied_apy |
| min_tvl_usd | No | Minimum TVL in USD to include in results | |
| compact | No | If true, return one-line-per-pool output (much shorter). Use for quick scanning; omit for full details. | |
| include_expired | No | If true, include recently matured/expired pools in results. Default false (active only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. It details returned metrics, definitions, conditional output, and configuration effects. However, it does not explicitly state read-only nature or rate limits, which would push to 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then details, then alternative tools. Slightly verbose but efficient for the level of detail needed. Front-loads key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description thoroughly explains return values (metrics, definitions, conditional interpretations). Also provides context with sibling tools. Complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with parameter descriptions. The description adds metric definitions but does not significantly enhance per-parameter meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List all active Spectra pools on a given chain' with specific verb and resource, and distinguishes from sibling tools like spectra_get_best_fixed_yields and spectra_scan_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool vs alternatives, e.g., 'For multi-chain discovery, use spectra_get_best_fixed_yields...' and 'Use spectra_get_pool_activity on a specific pool...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_model_metavaultA
Model a MetaVault "double loop" strategy for curators.
MetaVaults are ERC-7540 curated vaults that automate LP rollover and compound YT yield back into LP positions. This tool models the economics of leveraging MetaVault shares as collateral on Morpho (or similar lending markets).
Two modes:
Live mode: Provide chain + metavault_address to auto-populate base_apy from the live MetaVault API. All other params can be overridden.
Manual mode: Provide base_apy directly for hypothetical modeling.
The "double loop": Layer 1 (inside vault): YT yield → LP tokens (compounding loop, managed by curator) Layer 2 (on top): MV shares → Morpho collateral → borrow → deposit back (leverage loop)
Because YT compounding raises the base yield, leverage multiplies a higher base — creating a "double loop premium" over raw PT looping.
Dual Morpho Market Strategy: Curators should create TWO Morpho markets for maximum flywheel effect: Market A (PT / underlying): For external users to loop PT. Drives pool volume & LP fees. Market B (MV shares / underlying): For the curator to loop vault shares. Amplifies own capital. These markets reinforce each other — PT demand deepens the pool, deeper pool attracts more loopers, and the curator earns fees on all external deposits flowing through the vault.
Curator economics: The curator EARNS the performance fee on external deposits — this is revenue for managing the vault (rolling positions, compounding YT, maintaining allocations).
Blended allocation: Supports modeling MetaVaults that allocate across both Spectra and Pendle LP positions via pendle_allocation_pct and pendle_lp_apy parameters. Computes blended base APY and warns about manual Pendle rollover requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Chain where the MetaVault lives. Required with metavault_address for live data. | |
| metavault_address | No | MetaVault contract address. When provided with chain, auto-fetches live APY and TVL as base_apy. Use spectra_list_metavaults to discover addresses. | |
| base_apy | No | Base LP APY the MetaVault targets (%), e.g. 12 for 12%. Auto-populated from live data when metavault_address is provided, or required in manual mode. | |
| yt_compounding_apy | No | Additional yield from YT→LP compounding (%), e.g. 3 for 3%. Default 0. | |
| curator_fee_pct | No | Performance fee the curator EARNS as % of vault yield (default 10%). E.g. 10 means curator collects 10% of gross yield as revenue, depositors receive the remaining 90%. | |
| morpho_ltv | No | Morpho LTV for MetaVault share collateral (0-1, default 0.86 = 86%) | |
| borrow_rate | No | Morpho borrow rate in % APY (default 5%) | |
| max_loops | No | Maximum leverage loops to model (default 5) | |
| capital_usd | No | Curator's own capital in USD. Enables curator economics section. | |
| external_deposits_usd | No | External deposits the curator attracts (USD). The curator earns performance fees on these deposits. Default 0. | |
| days_to_maturity | No | Average pool cycle length in days (default 90). Used for rollover advantage. | |
| compare_pt_apy | No | If provided, show side-by-side comparison with raw PT looping at this APY (%) | |
| pendle_allocation_pct | No | Percentage of vault capital allocated to Pendle LP positions (0-100, default 0). When >0, computes blended APY across Spectra and Pendle. Requires pendle_lp_apy. | |
| pendle_lp_apy | No | Pendle LP APY (%) for the Pendle allocation. Required when pendle_allocation_pct > 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It details the double-loop mechanism, dual Morpho market strategy, curator economics, and blended allocation, providing full behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long and detailed, covering conceptual explanations (double loop, dual market) that, while valuable, could be truncated or moved to external documentation. Every sentence earns its place, but overall verbosity reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters and no output schema, the description adequately explains inputs and modeling purpose. However, it lacks explicit mention of output format or example results, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds substantial meaning beyond schema: explains live vs manual mode for chain/metavault_address, curator fee semantics (earned vs cost), and dependencies like pendle_allocation_pct requiring pendle_lp_apy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it models a MetaVault 'double loop' strategy, specifying verb (model), resource (MetaVault strategy), and scope (economics, leverage loops). It distinguishes from sibling tools by focusing on the unique double-loop concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes two explicit usage modes (live and manual) and provides context for when to use each. However, it lacks explicit exclusions or comparisons to sibling tools like mv_compare_yield or spectra_compare_yield.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_quote_tradeA
Estimate expected output, price impact, and minimum output for a PT trade. Automatically uses on-chain Curve get_dy() for exact quotes when a public RPC is available for the chain. Falls back to a conservative constant-product math estimate if on-chain quoting fails.
Side: "buy" = spend underlying/IBT to buy PT (e.g. spend USDC-worth to get PT) "sell" = sell PT to receive underlying/IBT
This tool only quotes PT trades on the Curve AMM pool. YT does not trade on the pool directly — YT is acquired by minting (deposit IBT to get PT+YT) or sold via flash-redeem. To estimate YT value: YT price = 1 - PT price in underlying terms.
Returns: expected output amount, spot & effective rates, price impact, and minOut at the specified slippage tolerance. Also includes pool context: IBT/PT reserves with ratio, and IBT APR composition (organic vs incentive yield). The output indicates whether the quote came from on-chain (exact) or math estimate.
On-chain quotes reflect the actual Curve StableSwap-NG amplification parameter and current pool state — significantly more accurate than the math estimate, especially for large trades.
Use spectra_simulate_trade to preview your full portfolio state after this trade (BEFORE / TRADE / AFTER with deltas). Use spectra_compare_yield to evaluate whether the trade makes sense relative to variable rates.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address (0x...) | |
| amount | Yes | Amount of input token (in human-readable units, not raw decimals) | |
| side | Yes | Trade direction: 'buy' = acquire PT, 'sell' = dispose PT | |
| slippage_tolerance | No | Slippage tolerance in % (default 0.5%). minOut = expectedOut * (1 - tolerance/100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the quote method (on-chain get_dy() or math estimate), accuracy differences, and return contents including pool context and source indication. No annotations exist, so description fully covers behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with front-loaded purpose, but slightly lengthy. However, every section adds value, so it's still highly effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains return values (expected output, rates, pool context, etc.) and covers all necessary context for a quoting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters have schema descriptions. The tool description adds extra meaning, such as defining side meanings ('buy' vs 'sell'), explaining slippage formula, and clarifying amount units.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool estimates expected output, price impact, and minimum output for a PT trade. It distinguishes from YT and mentions specific sibling tools for alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use on-chain vs fallback, and suggests alternatives like spectra_simulate_trade and spectra_compare_yield for additional context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_scan_opportunitiesA
Scan all Spectra chains for the best risk-adjusted yield opportunities, sized to your capital.
Unlike spectra_get_best_fixed_yields (which ranks by raw APY), this tool computes:
Entry price impact at YOUR capital size (a 50% APY pool with $10K liquidity is useless at $500K)
Effective APY after amortizing entry cost over days to maturity
Morpho looping availability and optimal leveraged net APY
Pool capacity (max capital before price impact exceeds your threshold)
IBT APR composition (organic base yield vs external incentive programs)
Points program multipliers and asset tags per opportunity
External Merkl campaign APR (incentive programs beyond native yield)
Risk warnings (low liquidity, short maturity, high impact)
MetaVault alternatives (curated auto-rolling LP vaults with YT compounding)
Returns opportunities ranked by effective APY (or looping net APY where available). Ranking logic: when a profitable Morpho looping market exists, ranks by looping net APY with cumulative entry cost amortized; otherwise ranks by effective APY (base APY minus annualized entry cost).
MetaVaults are shown in a separate section (not interleaved with PT rankings) because they have different risk profiles: variable APY, curator-managed, auto-rolling positions. Set include_metavaults=false to skip MetaVault scanning.
NOTE: This scans Spectra pools only. For broader coverage including Pendle markets, use mv_scan_curator_opportunities — it includes both protocols and may surface significantly more opportunities, especially at smaller capital sizes.
Effective APY is a conservative lower bound (constant-product impact model). Real Curve StableSwap-NG pools are more capital-efficient. Verify top picks with spectra_quote_trade().
Output includes conditional competing interpretations when rankings are ambiguous — e.g., thin-liquidity pools dominating the ranking, or MetaVaults with high idle ratios.
Use spectra_get_looping_strategy to drill into a specific opportunity's leverage details. Use spectra_get_pool_activity and spectra_get_portfolio to investigate trading patterns and positions. Use spectra_model_metavault to model MetaVault looping economics.
| Name | Required | Description | Default |
|---|---|---|---|
| capital_usd | Yes | How much capital (in USD) to deploy | |
| asset_filter | No | Optional: filter by underlying asset symbol (e.g., 'USDC', 'ETH') | |
| min_tvl_usd | No | Minimum pool TVL in USD (default $10,000) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default $5,000) | |
| include_looping | No | Whether to check Morpho looping availability (default true) | |
| max_price_impact_pct | No | Filter out pools where entry impact exceeds this % (default 5) | |
| top_n | No | Number of top results to return (default 10, max 50) | |
| include_metavaults | No | Whether to include MetaVault alternatives in results (default true). MetaVaults are curated auto-rolling LP vaults shown in a separate section. | |
| compact | No | If true, return one-line-per-opportunity output (much shorter). Omit for full details. | |
| envelope | No | If true, return structured two-block response: JSON data + narrative layer. Enables programmatic extraction while preserving interpretive content. Overridden by compact mode. | |
| ve_spectra_balance | No | Your veSPECTRA token balance. Computes the real per-pool boost using B = min(2.5, 1.5*(v/V)*(D/d)+1). Fetches live totalSupply from Base chain. If omitted, shows min/max APY ranges. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden, detailing entry price impact, effective APY, Morpho looping, pool capacity, risk warnings, ranking logic, and caveats about conservative modeling and ambiguous rankings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, starting with a summary and using bullet points and notes. While every part adds value, it is lengthy and could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description explains that results are ranked by effective APY and MetaVaults are in a separate section. It mentions conditional interpretations but could be more explicit about the output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial context beyond the schema, such as how capital_usd affects sizing, the formula for ve_spectra_balance, and how max_price_impact interacts with pool capacity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it scans Spectra chains for best risk-adjusted yield opportunities sized to capital, and distinguishes itself from spectra_get_best_fixed_yields which ranks by raw APY.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use (capital-sized scanning) and when not (raw APY ranking), and provides alternative tools like mv_scan_curator_opportunities and spectra_get_looping_strategy for deeper analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_scan_yt_arbitrageA
Scan all Spectra chains for YT (Yield Token) arbitrage opportunities.
Compares the IBT's actual current variable APR against the rate implied by the YT's market price. When these diverge significantly, an arbitrage opportunity may exist:
Positive spread (IBT APR > YT implied rate): IBT earns more than the YT price implies
Negative spread (IBT APR < YT implied rate): IBT earns less than the YT price implies
Returns opportunities sorted by absolute spread, with capital-aware entry sizing, break-even analysis, IBT APR composition (organic base yield vs external incentive programs — critical for assessing whether the spread is driven by sustainable yield), and external Merkl campaign APR when available.
Execution mechanics:
Buying YT: The Spectra Router can flash-mint (flash-borrow IBT → mint PT+YT → sell PT on pool → user covers shortfall → user receives YT). This appears as SELL_PT in pool activity. Alternatively, minting IBT → PT+YT and selling PT separately.
Selling YT: The Router flash-redeems (borrow IBT → buy PT from pool → burn PT+YT → repay → profit). This appears as BUY_PT in pool activity. The Curve pool does NOT trade YT directly.
Break-even assumes the spread persists. Real variable rates fluctuate — spreads can close quickly. The break-even period is the minimum time needed, not a guarantee.
Use spectra_compare_yield for a detailed fixed-vs-variable breakdown on a specific pool. Use spectra_get_pool_activity to monitor recent trading patterns in the target pool.
| Name | Required | Description | Default |
|---|---|---|---|
| capital_usd | Yes | How much capital (in USD) to deploy | |
| min_spread_pct | No | Minimum absolute spread (%) to surface (default 1.0) | |
| asset_filter | No | Optional: filter by underlying asset symbol (e.g., 'USDC', 'ETH') | |
| min_tvl_usd | No | Minimum pool TVL in USD (default $10,000) | |
| min_liquidity_usd | No | Minimum pool liquidity in USD (default $5,000) | |
| max_price_impact_pct | No | Filter out pools where entry impact exceeds this % (default 5) | |
| top_n | No | Number of top results to return (default 10, max 50) | |
| compact | No | If true, return one-line-per-opportunity output (much shorter). Omit for full details. | |
| ve_spectra_balance | No | Your veSPECTRA token balance. Computes the real per-pool boost using B = min(2.5, 1.5*(v/V)*(D/d)+1). Fetches live totalSupply from Base chain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the spread calculation, break-even assumptions, rate fluctuation risks, and execution mechanics. However, it does not explicitly state if the tool is read-only or requires authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections but is somewhat lengthy. Every sentence adds value, though the execution mechanics section could be slightly trimmed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains return values: opportunities sorted by spread with capital-aware sizing, break-even analysis, IBT APR composition, and Merkl campaign APR. It also provides execution context and risk notes, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description provides high-level context for parameters but does not add detailed meaning beyond what the input schema already provides. It explains concepts like spread and capital-aware entry sizing, which indirectly inform parameter use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it scans all Spectra chains for YT arbitrage opportunities by comparing IBT APR vs YT implied rate. It distinguishes itself from siblings like spectra_compare_yield and spectra_get_pool_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions when to use this tool and provides alternatives: 'Use spectra_compare_yield for a detailed fixed-vs-variable breakdown on a specific pool. Use spectra_get_pool_activity to monitor recent trading patterns.' It also covers execution mechanics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_simulate_tradeA
Preview what a wallet's Spectra portfolio would look like after a PT trade.
Fetches the wallet's current position (if any) and the PT pool data, computes a trade quote, then shows BEFORE / TRADE / AFTER with deltas.
Works even if the wallet has no existing position (simulates a new entry). Side: "buy" = acquire PT, "sell" = dispose PT.
Note: This simulates PT trades only, not YT. YT is acquired by minting (deposit IBT to get PT+YT) and sold via the Router's flash-redeem mechanism, not through the Curve pool directly. The wallet's YT balance is shown but not modified by this simulation.
Use spectra_get_portfolio to see current full positions. Use spectra_quote_trade for a standalone price quote without portfolio context.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network | |
| pt_address | Yes | The PT contract address (0x...) | |
| address | Yes | The wallet address to simulate for (0x...) | |
| amount | Yes | Amount of input token (in human-readable units, not raw decimals) | |
| side | Yes | Trade direction: 'buy' = acquire PT (input underlying), 'sell' = dispose PT (input PT) | |
| slippage_tolerance | No | Slippage tolerance in % (default 0.5%). minOut = expectedOut * (1 - tolerance/100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the process (fetches position and pool data, computes quote, shows before/trade/after with deltas) and edge case (works even without existing position). Clearly explains side semantics and limitations (YT not supported).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the main purpose, followed by stepwise explanation, edge case, side semantics, YT clarification, and sibling references. Slightly verbose but all sentences add value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers inputs, process, edge cases, and output format (BEFORE / TRADE / AFTER with deltas). No output schema, but description suffices. References sibling tools for further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with well-described parameters. The description adds context about the overall flow but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Preview'), resource ('Spectra portfolio'), and scope ('after a PT trade'). It distinguishes from sibling tools like spectra_quote_trade and spectra_get_portfolio by explaining their different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (PT trades only, not YT) and when not to (YT acquisition via minting, YT sale via Router). Also references alternative tools: spectra_get_portfolio for current positions, spectra_quote_trade for standalone quote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spectra_stress_test_vaultA
Simulate a large redemption on a MetaVault to assess withdrawal liquidity.
Builds a liquidity waterfall — sources of cash ordered by cost: Tier 1: Unallocated Cash (undeployed, no external — instant, no cost) Tier 1b: Avant Redemption Queue (avUSDx → avUSD burn, ~1 week cooldown per Avant docs, no price impact — emitted only when avant external positions exist; EXCLUDED from within-epoch max-safe calculation due to the delay, INCLUDED in the separate within-1-week metric) Tier 2: Naturally maturing Spectra LP positions (no cost, time-dependent) Tier 3: LP removal from Curve/Pendle pools (low-medium impact) Tier 4: PT sale on Curve pool (higher impact)
Note: "Unallocated" replaces the old "Idle" label. External positions (avant burn, pendle LP) are NOT counted in Tier 1 — they surface as Tier 1b (avant) or are excluded from all tiers (pendle external, conservative error mode).
Computes total coverage, cost to remaining depositors, and maximum safe redemption size (< 1% loss to remaining holders).
ERC-7540 constraint: once redemption is requested, the vault MUST fulfill it. There is no cancelRequest. This makes withdrawal liquidity critical.
Use spectra_get_curator_dashboard for operational overview before stress testing. Use spectra_get_pool_capacity to assess individual pool depth. Use morpho_monitor_risk for Morpho position risk.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | The blockchain network where the MetaVault lives. | |
| metavault_address | Yes | The MetaVault contract address. Use spectra_list_metavaults to discover addresses. | |
| redemption_pct | No | % of TVL redeemed in one epoch (default 30) | |
| market_stress | No | If true, assume 2x normal price impact on LP exits (correlated sell pressure) | |
| verify_onchain | No | Replace the API-derived `idleCapitalUsd` (Tier 1 unallocated cash) with a chain-truth equivalent computed from the Safe + infraVault state. Off by default — chain reads add latency and RPC pressure. When true, reads via the same engine that powers spectra_get_curator_dashboard (5-min cache shared with the dashboard, so a curator who just rendered the dashboard hits cache for free). The chain-truth formula is `safe.assetBalance + max(0, infraVault.totalAssets - sum(positions) - sum(external))`. The API derivation MISSES `safe.assetBalance` (curator-transit cash held DIRECTLY at the Safe, NOT counted in infraVault.totalAssets), which can be material when the curator is staging cross-chain inflows. Failures (RPC, timeout, missing bytecode) degrade to the API path. When `mv.underlying.price.usd === 0` the USD chain-truth is unverified; the output surfaces underlying-denominated chain-truth and falls back to API USD math for the waterfall. Dissolution: if telemetry shows zero verify_onchain=true invocations within 60 days of ship, the flag is fossil — consolidate by making chain-truth always-on for the cash derivation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It exhaustively explains the liquidity waterfall tiers, what is included/excluded (e.g., Tier 1b nuances), the ERC-7540 constraint (no cancelRequest), and the detailed behavior of the verify_onchain parameter, including failure modes and caching. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with bullet points and clear sections. It front-loads the purpose and uses concise language. Every sentence adds value, though some redundancy (e.g., repeating the tier descriptions) could be trimmed. Overall, it is appropriately detailed without being rambling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simulation with multiple parameters, no output schema), the description is remarkably complete. It explains what the tool computes (total coverage, cost, max safe redemption), describes the liquidity waterfall in detail, and provides usage guidance. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The tool description adds significant context beyond the schema for the verify_onchain parameter, explaining its effect, caching, and behavior on failure. For other parameters, the schema descriptions are sufficient, but the overall description provides a richer understanding of how parameters interact in the simulation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Simulate a large redemption on a MetaVault to assess withdrawal liquidity.' It uses a specific verb ('simulate') and resource ('large redemption on MetaVault'), and differentiates from sibling tools by mentioning related tools like spectra_get_curator_dashboard and spectra_get_pool_capacity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'Use spectra_get_curator_dashboard for operational overview before stress testing.' It also lists alternatives for other tasks, such as spectra_get_pool_capacity and morpho_monitor_risk. Additionally, it highlights the ERC-7540 constraint, making the importance of pre-stress liquidity checks clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are clearly organized by protocol (spectra_, pendle_, morpho_, mv_) with distinct purposes. Even similar-sounding tools like spectra_scan_opportunities and pendle_scan_opportunities are well-differentiated by the protocol they target and their descriptions.
All tools follow a consistent verb_noun pattern with protocol prefixes (e.g., spectra_list_pools, pendle_get_market_details). Naming is uniform and predictable, making it easy for agents to understand tool purpose from name alone.
With 56 tools, the server is significantly over the typical 3-15 range for a well-scoped server. While the domain is complex, this many tools risks overwhelming agents and suggests the tool surface could be consolidated.
The tool set covers all major operations across Spectra, Pendle, Morpho, and MetaVaults: listing, details, quotes, portfolio, activity, history, strategies, risk, governance, and cross-protocol analysis. No obvious gaps for the intended yield optimization and risk management use case.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Crypto yield data for AI agents: lending, savings, staking, borrowing & stablecoin rates. 18 tools.
Claude-ready DeFi MCP — risk-scored yields, profit sims & whale tracking across 86 blockchains
USDC treasury vaults, streaming payments, and DeFi yield for AI agents
Evidence-based market data for AI agents deploying capital in DeFi. Empirical, not advertised.
Related MCP Servers
- AlicenseAqualityDmaintenanceFinancial intelligence for AI agents. 31 tools across 8 data sources — regime, derivatives, stablecoin flows, momentum, volatility, macro, DeFi, weather patterns, political cycles, seasonality. The context layer between your agent and a bad trade.31199MIT
- FlicenseAqualityDmaintenanceComplete DeFi intelligence — Yield, Staking, Restaking, RWA, Perps, Gas Optimization & Contract Security. One answer, not raw data.17
- AlicenseNot gradedqualityDmaintenanceExposes Solana DeFi infrastructure — Percolator perpetuals, Sigma derivatives, Exodus yield vaults, Veil privacy swaps, Stratum orderbooks, and Sovereign identity — to AI agents via the Model Context Protocol.220,898MIT
- FlicenseAqualityCmaintenanceEnables AI agents to discover verifiable DeFi yield opportunities, generate algorithmic portfolio plans, and track cryptographic proof receipts, bridging LLMs with blockchain yield protocols.9
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Finanzgoblin/spectra-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server