Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,533Letters: 13Defects: 1,322counted just now
teppi

Server definition

Hash
sha256:63d08aad23ed98837b936bb62ce99cdeff4d0bce86969647938b54d174a1d92b
What it is
What a remote MCP server returned when asked what it offers: 11 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "Analyze a 2-asset Balancer weighted-pool LP position's PnL. Decomposes impermanent loss using the weighted-pool formula where the base token's weight affects IL magnitude. Values are denominated in opp-token units per BalancerImpLoss's convention; fee income is not attributed in v1 because Balancer pools only expose vault-level fees with no per-LP attribution.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "entry_base_amt": { "description": "Amount of base (first) token originally deposited.", "type": "number" }, "entry_opp_amt": { "description": "Amount of opp (second) token originally deposited.", "type": "number" }, "holding_period_days": { "description": "Optional holding period in days. If supplied, real_apr is annualized from net_pnl.", "type": [ "number", "null" ] }, "lp_init_amt": { "description": "Pool shares held by this position, in human units.", "type": "number" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts only balancer (2-asset weighted pool).", "enum": [ "balancer" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "lp_init_amt", "entry_base_amt", "entry_opp_amt", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "AnalyzeBalancerLP", "outputSchema": null }, { "description": "Analyze why a Uniswap V2 or V3 LP position is gaining or losing money. Decomposes PnL into impermanent loss, accumulated fees, and net result, with optional real APR if a holding period is supplied. Returns current value, hold value, IL percentage, fee income, net PnL, real APR, and a diagnosis label.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "entry_x_amt": { "description": "Amount of token0 originally deposited at position entry.", "type": "number" }, "entry_y_amt": { "description": "Amount of token1 originally deposited at position entry.", "type": "number" }, "holding_period_days": { "description": "Optional holding period in days. If supplied, real_apr is annualized from net_pnl.", "type": [ "number", "null" ] }, "lp_init_amt": { "description": "LP token amount held by the position (position size in human units).", "type": "number" }, "lwr_tick": { "description": "Lower tick of the position (V3 positions only; null for V2).", "type": [ "integer", "null" ] }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts uniswap_v2 | uniswap_v3.", "enum": [ "uniswap_v2", "uniswap_v3" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" }, "upr_tick": { "description": "Upper tick of the position (V3 positions only; null for V2).", "type": [ "integer", "null" ] } }, "required": [ "lp_init_amt", "entry_x_amt", "entry_y_amt", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "AnalyzePosition", "outputSchema": null }, { "description": "Analyze a 2-asset Curve-style Stableswap LP position's PnL using the amplified-invariant IL formula where small depegs can produce surprisingly large IL at high A. Values are in peg-numeraire (tokens valued 1:1); fee income is not attributed in v1 (pool-global only); positions whose implied alpha is in the unreachable regime return None on il_percentage, net_pnl, and real_apr.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "entry_amounts": { "description": "Per-token entry amounts in pool insertion order. Exactly 2 entries (2-asset pools only in v1).", "items": { "type": "number" }, "maxItems": 2, "minItems": 2, "type": "array" }, "holding_period_days": { "description": "Optional holding period in days. If supplied, real_apr is annualized from net_pnl.", "type": [ "number", "null" ] }, "lp_init_amt": { "description": "LP tokens held by this position, in human units.", "type": "number" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts only stableswap (2-asset plain Curve pool).", "enum": [ "stableswap" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "lp_init_amt", "entry_amounts", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "AnalyzeStableswapLP", "outputSchema": null }, { "description": "Quantify a 2-asset Curve-style Stableswap LP position's exposure to a stablecoin depeg. Computes IL at multiple depeg levels (default 2%, 5%, 10%, 20%, 50%) via the closed-form stableswap-invariant expansion, with an optional V2 constant-product benchmark at each level. Some depeg levels are physically unreachable at high A — unreachable scenarios return null on il_pct, lp_value_at_depeg, and hold_value_at_depeg; the V2 benchmark stays populated.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "compare_v2": { "description": "If true (default), each scenario reports the equivalent V2 constant-product IL at the same price deviation.", "type": [ "boolean", "null" ] }, "depeg_levels": { "description": "Depeg magnitudes as fractions in (0, 1). Default [0.02, 0.05, 0.10, 0.20, 0.50].", "items": { "type": "number" }, "type": [ "array", "null" ] }, "depeg_token_name": { "description": "Optional. Symbol of the asset assumed to depeg (e.g. 'USDC', 'DAI'). Must be one of the two tokens in the pool. If omitted, the pool's first token is used.", "type": "string" }, "lp_init_amt": { "description": "LP tokens held, in human units. Must be > 0.", "type": "number" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts only stableswap (2-asset plain Curve pool).", "enum": [ "stableswap" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "lp_init_amt", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "AssessDepegRisk", "outputSchema": null }, { "description": "Read a pool's on-chain state once and return it as a serialized State Twin (JSON): the protocol-specific snapshot plus a content_hash, in the wire form a client rehydrates locally. Use this to pull a single managed-RPC twin, then run any number of counterfactuals (price moves, IL, slippage) client-side, off this server. Covers Uniswap V2/V3, Balancer 2-asset weighted, and Curve 2-asset plain stableswap pools. The endpoint stores and logs nothing — your rpc_url is never persisted.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Omit to skip the check.", "type": "integer" }, "lwr_tick": { "description": "uniswap_v3 only — lower tick of the position range to snapshot. Omit for the pool's full active-liquidity range. Ignored for other pool types.", "type": "integer" }, "pool_address": { "description": "On-chain address of the pool/pair to snapshot. Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to: 'uniswap_v2' | 'uniswap_v3' | 'balancer' (2-asset weighted) | 'stableswap' (2-asset plain Curve). All four are supported — this tool spans every snapshot type.", "enum": [ "uniswap_v2", "uniswap_v3", "balancer", "stableswap" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" }, "upr_tick": { "description": "uniswap_v3 only — upper tick of the position range to snapshot. Omit for the pool's full active-liquidity range. Ignored for other pool types.", "type": "integer" } }, "required": [ "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "BuildStateTwin", "outputSchema": null }, { "description": "Calculate slippage and price-impact decomposition for a proposed swap on a Uniswap V2 or V3 pool. Returns spot vs execution price, slippage percentage, slippage cost in output-token units, and price impact. Also returns the maximum trade size that stays within 1% slippage for V2 pools; V3 returns null for that field because tick-crossing math has not yet been inverted.", "inputSchema": { "properties": { "amount_in": { "description": "Amount of token_in to trade, in human units. Must be > 0.", "type": "number" }, "amounts_in": { "description": "Optional batch form of 'amount_in': an array of values to evaluate in a single call. The pool is read once and the result is an array with one entry per element, in input order. Supply EITHER 'amount_in' (single) OR 'amounts_in' (batch), not both. Max 256 entries.", "items": { "type": "number" }, "maxItems": 256, "type": "array" }, "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "lwr_tick": { "description": "Lower tick of the position (V3 only; null for V2).", "type": [ "integer", "null" ] }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts uniswap_v2 | uniswap_v3.", "enum": [ "uniswap_v2", "uniswap_v3" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" }, "token_in_name": { "description": "Symbol of the input token for the trade (e.g. 'USDC', 'WETH'). Must be one of the two tokens in the pool.", "type": "string" }, "upr_tick": { "description": "Upper tick of the position (V3 only; null for V2).", "type": [ "integer", "null" ] } }, "required": [ "pool_address", "rpc_url", "pool_type", "token_in_name" ], "type": "object" }, "name": "CalculateSlippage", "outputSchema": null }, { "description": "Snapshot pool-level health metrics for a Uniswap V2 or V3 pool: TVL in token0 numeraire, reserves, accumulated fees, LP concentration, and swap activity. Answers 'is this a pool I would deposit into?' at the pool level (not position level). num_swaps and fee_accrual_rate_recent are V2-only; V3 returns null for these because V3 has no per-swap history array. A single-block live snapshot also returns null for the LP-concentration and swap metrics (unrecoverable from state alone).", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts uniswap_v2 | uniswap_v3.", "enum": [ "uniswap_v2", "uniswap_v3" ], "type": "string" }, "recent_window": { "description": "Rolling window size for fee_accrual_rate_recent, in swap counts. Default 20. V2-only; ignored for V3.", "type": [ "integer", "null" ] }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "CheckPoolHealth", "outputSchema": null }, { "description": "Detect rug-pull signals on a Uniswap V2 or V3 pool via three threshold checks: suspiciously low TVL, top-LP concentration above a limit, and inactive-pool-with-liquidity. Composes over CheckPoolHealth and returns per-signal booleans plus a count-based risk level (low/medium/high/critical). The inactive-with-liquidity signal is V2-only; V3 pools report False for it with a note in details.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "lp_concentration_threshold": { "description": "Top-LP share (strict-greater-than) that triggers the concentration signal. In (0, 1]; default 0.90; pass 1.0 to disable.", "type": [ "number", "null" ] }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts uniswap_v2 | uniswap_v3.", "enum": [ "uniswap_v2", "uniswap_v3" ], "type": "string" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" }, "tvl_floor": { "description": "Minimum acceptable TVL in token0 numeraire. Values at or below fire the tvl_suspiciously_low signal. Default 10.0 is nominal; override for your pair.", "type": [ "number", "null" ] } }, "required": [ "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "DetectRugSignals", "outputSchema": null }, { "description": "Project a 2-asset Balancer weighted-pool LP position's value at a hypothetical price change from the CURRENT pool state. The shock is applied to the base-token price in opp units; IL depends on both the shock magnitude and the pool's weights. Returns new value in opp-numeraire, IL at the simulated price, and percentage change.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "lp_init_amt": { "description": "Pool shares held by this position, in human units. Must be > 0.", "type": "number" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts only balancer (2-asset weighted pool).", "enum": [ "balancer" ], "type": "string" }, "price_change_pct": { "description": "Fractional price change from current spot. Must be > -1.0. Example: -0.30 models a 30% drop in base-in-opp terms.", "type": "number" }, "price_change_pcts": { "description": "Optional batch form of 'price_change_pct': an array of values to evaluate in a single call. The pool is read once and the result is an array with one entry per element, in input order. Supply EITHER 'price_change_pct' (single) OR 'price_change_pcts' (batch), not both. Max 256 entries.", "items": { "type": "number" }, "maxItems": 256, "type": "array" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "lp_init_amt", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "SimulateBalancerMove", "outputSchema": null }, { "description": "Project a Uniswap V2 or V3 LP position's value at a hypothetical price change from the CURRENT pool state (not from entry). A price_change_pct of -0.30 asks 'what if price drops 30% from here'. Returns new value, IL at the simulated price, and percentage change in position value. Fee projection is not modeled (always null).", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "lwr_tick": { "description": "Lower tick of the position (V3 only; null for V2).", "type": [ "integer", "null" ] }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts uniswap_v2 | uniswap_v3.", "enum": [ "uniswap_v2", "uniswap_v3" ], "type": "string" }, "position_size_lp": { "description": "LP tokens held by the position, in human units. Must be > 0.", "type": "number" }, "price_change_pct": { "description": "Fractional price change from current price. Must be > -1.0. Example: -0.30 models a 30% drop.", "type": "number" }, "price_change_pcts": { "description": "Optional batch form of 'price_change_pct': an array of values to evaluate in a single call. The pool is read once and the result is an array with one entry per element, in input order. Supply EITHER 'price_change_pct' (single) OR 'price_change_pcts' (batch), not both. Max 256 entries.", "items": { "type": "number" }, "maxItems": 256, "type": "array" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" }, "upr_tick": { "description": "Upper tick of the position (V3 only; null for V2).", "type": [ "integer", "null" ] } }, "required": [ "position_size_lp", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "SimulatePriceMove", "outputSchema": null }, { "description": "Project a 2-asset Curve-style Stableswap LP position's value at a hypothetical depeg from the CURRENT pool state. The shock multiplies the pool's current alpha by (1 + price_change_pct); at high A, large shocks may be physically unreachable and in that case new_value, il_at_new_price, and value_change_pct are returned as null. Values are in peg-numeraire.", "inputSchema": { "properties": { "block_number": { "description": "Optional block number to pin the read to a historical block. Omit to read the latest block.", "type": "integer" }, "chain_id": { "description": "Optional guard. If supplied and the RPC reports a different chain id, the call is rejected. Defaults to 1 (Ethereum mainnet) conceptually; omit to skip the check.", "type": "integer" }, "lp_init_amt": { "description": "LP tokens held by this position, in human units. Must be > 0.", "type": "number" }, "pool_address": { "description": "On-chain address of the pool/pair to analyze (Uniswap V2/V3 pair, Balancer weighted pool, or Curve stableswap pool). Required. Lowercase, uppercase, or checksum casing all work.", "type": "string" }, "pool_type": { "description": "Which protocol the pool at pool_address belongs to. This tool accepts only stableswap (2-asset plain Curve pool).", "enum": [ "stableswap" ], "type": "string" }, "price_change_pct": { "description": "Fractional shock applied to current alpha. Must be > -1.0. Simulated alpha = current_alpha * (1 + price_change_pct).", "type": "number" }, "price_change_pcts": { "description": "Optional batch form of 'price_change_pct': an array of values to evaluate in a single call. The pool is read once and the result is an array with one entry per element, in input order. Supply EITHER 'price_change_pct' (single) OR 'price_change_pcts' (batch), not both. Max 256 entries.", "items": { "type": "number" }, "maxItems": 256, "type": "array" }, "rpc_url": { "description": "An Ethereum (or L2) JSON-RPC URL used to read live pool state. Required; supplied by you per call (BYO-RPC) and may carry your provider key. The endpoint stores and logs nothing — the URL is never persisted or written to logs.", "type": "string" } }, "required": [ "lp_init_amt", "pool_address", "rpc_url", "pool_type" ], "type": "object" }, "name": "SimulateStableswapMove", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:63d08aad23ed98837b936bb62ce99cdeff4d0bce86969647938b54d174a1d92b | sha256sum