{"serverId":"mcp-registry/io.github.parkyucheol-del/alphapipeline","tools":[{"name":"arb.spread_matrix","fixed":{"name":"arb_spread_matrix","description":"Use this tool before executing a cross-venue arbitrage trade to check whether a global reference price (Coinbase spot, CoinGecko fallback - not a specific exchange orderbook) and a DEX pool price diverge enough to be worth trading after an assumed flat gas cost. Returns gross/net spread percentages and an is_profitable boolean - note net_spread_pct does NOT subtract the DEX pool's own swap fee (see pool_fee_pct), CEX trading fees, or slippage, so a spread that clears the threshold before those c","inputSchema":{"type":"object","required":["symbol"],"properties":{"symbol":{"type":"string","description":"Ticker symbol, e.g. SUI, BTC, ETH."},"network":{"type":"string","description":"GeckoTerminal network id, e.g. base, eth. Defaults to base."},"pool_address":{"type":"string","description":"Specific DEX pool contract address (optional if token_address is given)."},"token_address":{"type":"string","description":"Token contract address - the most liquid pool is auto-selected (optional if pool_address is given)."},"trade_size_usd":{"type":"number","description":"Hypothetical trade size in USD. Defaults to 1000."},"min_spread_threshold_pct":{"type":"number","description":"Net spread threshold (%) above which is_profitable is true. Defaults to 0.8."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"arb.spread_matrix\" → \"arb_spread_matrix\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":364,"tokensAfter":364},{"name":"calendar.macro_dday","fixed":{"name":"calendar_macro_dday","description":"Use this tool when an agent plans trading schedules around major US macroeconomic volatility, specifically days remaining until FOMC rate decisions, CPI prints, or NFP jobs reports. Zero-dependency static 2026 macro calendar with 100% uptime and no upstream failure risk. Do not use for real-time market price data or economic forecast consensus figures. No input parameters. Paid in USDC on Base.","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"calendar.macro_dday\" → \"calendar_macro_dday\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"derivatives.funding_apr_matrix","fixed":{"name":"derivatives_funding_apr_matrix","description":"Use this tool to evaluate a spot+perpetual carry trade: annualizes the current perpetual funding rate into an APR, flags which side (SHORT or LONG perp) currently collects funding, and computes how many days of that funding income it takes to recoup an assumed round-trip trading cost. Pure calculation on top of funding_rate data - no extra upstream call. Do not use for the raw current funding rate alone (use derivatives.funding_rate) or for spot price data. Paid in USDC on Base.","inputSchema":{"type":"object","required":["symbol"],"properties":{"symbol":{"type":"string","description":"Ticker symbol, e.g. BTC, ETH, or BTCUSDT."},"assumed_round_trip_cost_pct":{"type":"number","description":"Combined entry+exit trading fee percentage across both the spot and perpetual legs. Defaults to 0.2."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"derivatives.funding_apr_matrix\" → \"derivatives_funding_apr_matrix\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":239,"tokensAfter":239},{"name":"derivatives.funding_rate","fixed":{"name":"derivatives_funding_rate","description":"Use this tool when analyzing perpetual futures funding rates, long/short market sentiment crowding, or timing hedging strategies before settlement periods. Aggregates Bybit (primary) and Binance (fallback) perpetual funding rates, plus mark_price/index_price (both paths) and open_interest_usd (Bybit path only - null on the Binance fallback). Do not use for spot market volume or token security checks. Paid in USDC on Base.","inputSchema":{"type":"object","required":["symbol"],"properties":{"symbol":{"type":"string","description":"Ticker symbol, e.g. BTC, ETH, or BTCUSDT."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"derivatives.funding_rate\" → \"derivatives_funding_rate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"derivatives.funding_rate_value","fixed":{"name":"derivatives_funding_rate_value","description":"Cheapest-tier thin wrapper around derivatives.funding_rate - use this when you only need the funding rate number itself (decimal and percentage), not mark_price/index_price/open_interest_usd. Same Bybit-primary/Binance-fallback data. Paid in USDC on Base.","inputSchema":{"type":"object","required":["symbol"],"properties":{"symbol":{"type":"string","description":"Ticker symbol, e.g. BTC, ETH, or BTCUSDT."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"derivatives.funding_rate_value\" → \"derivatives_funding_rate_value\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"derivatives.whale_position_audit","fixed":{"name":"derivatives_whale_position_audit","description":"Use this tool to audit a Hyperliquid wallet address you already know: every open perpetual position with side, size, leverage, max_leverage, unrealized PnL, return_on_equity_pct, liquidation price, and distance-to-liquidation percentage (max_leverage and return_on_equity_pct are Hyperliquid's own reported fields, not derived by this tool). This does not discover or rank 'smart money' wallets - Hyperliquid's public API has no leaderboard or large-trader disclosure endpoint, so it only audits an a","inputSchema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","description":"Hyperliquid/EVM wallet address to audit (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"derivatives.whale_position_audit\" → \"derivatives_whale_position_audit\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"dex.liquidity_slippage","fixed":{"name":"dex_liquidity_slippage","description":"Use this tool to calculate expected DEX price slippage, pool liquidity depth, and optimal routing before executing an on-chain token swap. GeckoTerminal-backed pool analytics with constant-product slippage estimation for the requested trade_size_usd, plus a slippage_tiers array with the same estimate at fixed $1,000/$5,000/$10,000 sizes so an agent can gauge depth at a glance without extra calls. When called with token_address, also returns direct_stablecoin_pool_exists and, when the selected po","inputSchema":{"type":"object","required":["trade_size_usd"],"properties":{"network":{"type":"string","description":"GeckoTerminal network id, e.g. base, eth. Defaults to base."},"pool_address":{"type":"string","description":"Specific DEX pool contract address (optional if token_address is given)."},"token_address":{"type":"string","description":"Token contract address - the most liquid pool is auto-selected (optional if pool_address is given)."},"trade_size_usd":{"type":"number","description":"Hypothetical trade size in USD to estimate slippage for."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"dex.liquidity_slippage\" → \"dex_liquidity_slippage\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":309,"tokensAfter":309},{"name":"market.cycle_compare","fixed":{"name":"market_cycle_compare","description":"Use this tool to see BTC/ETH's own price position vs the same day-offset in the 2016 and 2020 halving cycles, plus today's real BTC dominance. This is NOT a historical dominance comparison (no free data source exists for that - see the response's notice field). Derived from a cache refreshed once daily, so prices can be up to ~24h stale. No input params. Paid in USDC on Base.","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"market.cycle_compare\" → \"market_cycle_compare\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"market.kimchi_alert","fixed":{"name":"market_kimchi_alert","description":"Use this tool when evaluating Korean exchange price premiums, the 'kimchi premium', Upbit price gaps vs a global reference price, cross-border crypto arbitrage, or sudden Korea-specific price anomalies. Real-time Upbit vs Coinbase spot (CoinGecko fallback) - NOT a live Binance orderbook, despite the legacy binance_price_usdt field name kept for backward compatibility - with reverse-premium and surge alerts. Do not use for general USD spot prices or on-chain DEX swaps. Paid in USDC on Base (free ","inputSchema":{"type":"object","required":[],"properties":{"symbol":{"type":"string","description":"Crypto ticker symbol to check, e.g. BTC, ETH, SOL. Defaults to BTC."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"market.kimchi_alert\" → \"market_kimchi_alert\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"market.oracle_gap","fixed":{"name":"market_oracle_gap","description":"Use this tool to check whether a protocol pricing off Hyperliquid's raw mid (instead of mark/oracle) is currently exposed to a mid-price swing - the exact failure mode behind the 2026-10-10 Papertrade incident on HyperEVM. elevated is a fixed-threshold flag (abs(mid_oracle_gap_bp) >= alert_threshold_bp), not a manipulation determination. Single snapshot, no trade-flow/volume data (Hyperliquid doesn't expose it). Paid in USDC on Base.","inputSchema":{"type":"object","required":["coin"],"properties":{"coin":{"type":"string","description":"Hyperliquid perpetual ticker, e.g. ETH or BTC."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"market.oracle_gap\" → \"market_oracle_gap\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"market.oracle_gap_bp","fixed":{"name":"market_oracle_gap_bp","description":"Cheapest-tier thin wrapper around market.oracle_gap - use this when you only need mid_oracle_gap_bp/mark_oracle_gap_bp and the elevated flag, not the absolute mid/mark/oracle prices. Same Hyperliquid data. Paid in USDC on Base.","inputSchema":{"type":"object","required":["coin"],"properties":{"coin":{"type":"string","description":"Hyperliquid perpetual ticker, e.g. ETH or BTC."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"market.oracle_gap_bp\" → \"market_oracle_gap_bp\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"prediction.bid_ask_spread_pct","fixed":{"name":"prediction_bid_ask_spread_pct","description":"Cheap tier - a single Polymarket outcome's live top-of-book bid/ask spread as a percentage of mid_price. Not a liquidity or executability measure (use prediction.exit_capacity_audit/order_split_guide for that). Accepts either a raw token_id or a market_slug (+ outcome) to resolve it automatically - exact slug only, no fuzzy keyword search. Paid in USDC on Base.","inputSchema":{"type":"object","required":[],"properties":{"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.bid_ask_spread_pct\" → \"prediction_bid_ask_spread_pct\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"prediction.exit_capacity_audit","fixed":{"name":"prediction_exit_capacity_audit","description":"Walk a single Polymarket outcome's live order book to determine how much of a given position size can actually be filled right now, at what average price, and with how much price impact versus the best quote - a live snapshot, not historical liquidity. Also returns book_snapshot_time (the book's own reported timestamp) and Polymarket's own tick_size/min_order_size for this market (null if the book response didn't include them). Accepts either a raw token_id or a market_slug (+ outcome) to resolv","inputSchema":{"type":"object","required":["position_size_shares"],"properties":{"side":{"type":"string","description":"\"sell\" (default) or \"buy\"."},"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."},"position_size_shares":{"type":"number","description":"Number of outcome shares to sell (or buy). Must be positive."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.exit_capacity_audit\" → \"prediction_exit_capacity_audit\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":326,"tokensAfter":326},{"name":"prediction.hip4_mispricing","fixed":{"name":"prediction_hip4_mispricing","description":"Finds monotonicity violations among Hyperliquid HIP-4 'above $X' price-binary markets: within the same underlying/expiry/period, a higher strike's Yes price should never exceed a lower strike's - any reversal is a logical inconsistency, quantified as violation_bp and a textbook max_riskless_profit_per_usd (before fees/slippage/execution risk - not investment advice). Reuses prediction.hip4_price_ladder's cache - no new upstream call. Only rungs sharing the exact same (expiry, period) are ever co","inputSchema":{"type":"object","required":["underlying"],"properties":{"underlying":{"type":"string","description":"Asset symbol for crypto price-binary markets (e.g. 'BTC', 'ETH', 'SOL', 'HYPE')."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.hip4_mispricing\" → \"prediction_hip4_mispricing\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":210,"tokensAfter":210},{"name":"prediction.hip4_price","fixed":{"name":"prediction_hip4_price","description":"Cheapest-tier thin wrapper around prediction.hip4_price_ladder - use this when you only need one strike's Yes probability, not the full ladder. Returns the single rung closest to the requested strike - check matched_strike against your requested strike before relying on yes_price; a large gap means no rung exists near your target (use hip4_price_ladder to see what's actually available). Paid in USDC on Base.","inputSchema":{"type":"object","required":["underlying","strike"],"properties":{"strike":{"type":"number","description":"Target price to look up - the closest available rung is returned."},"underlying":{"type":"string","description":"Asset symbol for crypto price-binary markets (e.g. 'BTC', 'ETH', 'SOL', 'HYPE')."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.hip4_price\" → \"prediction_hip4_price\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"prediction.hip4_price_ladder","fixed":{"name":"prediction_hip4_price_ladder","description":"Use this tool to see one underlying's Hyperliquid HIP-4 'above $X' price-binary markets laid out as a strike-sorted ladder, each rung with its live Yes probability - e.g. to read the market's implied BTC price distribution at a glance. Reuses the same cached data as prediction.hip4_snapshot - no new upstream call. No volume field (Hyperliquid doesn't expose per-outcome volume for HIP-4). Do not use for mutually-exclusive multi-outcome groups (use prediction.hip4_snapshot's grouped_questions inst","inputSchema":{"type":"object","required":["underlying"],"properties":{"limit":{"type":"integer","description":"Max rungs returned. Defaults to 100, max 500."},"underlying":{"type":"string","description":"Asset symbol for crypto price-binary markets (e.g. 'BTC', 'ETH', 'SOL', 'HYPE')."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.hip4_price_ladder\" → \"prediction_hip4_price_ladder\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"prediction.hip4_snapshot","fixed":{"name":"prediction_hip4_snapshot","description":"Real-time probability snapshot of Hyperliquid's HIP-4 outcome (prediction) markets - crypto price binaries, sports game winners, tournament winners, Fed rate decisions, and any other market type Hyperliquid adds, all in one call. No curated market list - every field under 'fields' on each row is parsed verbatim from Hyperliquid's own description string, so new HIP-4 market types appear automatically. standalone_markets covers two-sided markets (most crypto/sports games); grouped_questions covers","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","description":"Max rows per list (standalone_markets / grouped_questions each). Defaults to 100, max 500."},"template":{"type":"string","description":"Optional substring filter on the market's template name (e.g. 'sportsContestWinner', 'priceBinary')."},"underlying":{"type":"string","description":"Optional asset symbol filter for crypto markets (e.g. 'BTC', 'ETH', 'SOL', 'HYPE')."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.hip4_snapshot\" → \"prediction_hip4_snapshot\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":285,"tokensAfter":285},{"name":"prediction.liquidity_depth_after_haircut","fixed":{"name":"prediction_liquidity_depth_after_haircut","description":"A single Polymarket outcome's executable depth within max_price_impact_pct (default 5.0%) of the best quote, both before and after discounting the top-of-book level's size by haircut_pct (default 10.0%) to model the risk that the very best resting order gets cancelled before you can trade against it. Does not detect or flag actual spoofing (out of scope). Accepts either a raw token_id or a market_slug (+ outcome) to resolve it automatically. Paid in USDC on Base.","inputSchema":{"type":"object","required":[],"properties":{"side":{"type":"string","description":"\"sell\" (default) or \"buy\"."},"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"haircut_pct":{"type":"number","description":"Percent to discount the top-of-book level's size by, modeling cancellation risk. Defaults to 10.0."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."},"max_price_impact_pct":{"type":"number","description":"Price-impact bound (percent of best quote) within which depth is summed. Defaults to 5.0."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.liquidity_depth_after_haircut\" → \"prediction_liquidity_depth_after_haircut\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":362,"tokensAfter":362},{"name":"prediction.neg_risk_arbitrage","fixed":{"name":"prediction_neg_risk_arbitrage","description":"Detect basket arbitrage in a Polymarket neg-risk (mutually-exclusive, multi-outcome) event - a full YES basket across all outcomes always settles to exactly $1, so a basket price away from $1 (after costs) is a near risk-free edge. Also returns buy/sell_basket_capacity_shares, the actual liquidity-bottleneck size executable right now, so this isn't just a top-of-book mirage - note *_capacity_notional_usd still prices that size at top-of-book (optimistic), so use *_capacity_vwap_notional_usd for ","inputSchema":{"type":"object","required":["event_slug"],"properties":{"event_slug":{"type":"string","description":"Polymarket event slug, from the event's URL on polymarket.com."},"max_slippage_pct":{"type":"number","description":"How far past each leg's best price to walk the book when sizing capacity. Defaults to 1.0."},"min_net_edge_pct":{"type":"number","description":"Minimum net edge (%) required to flag arbitrage_viable: true. Defaults to 1.0."},"assumed_round_trip_cost_pct":{"type":"number","description":"Gas + fees + slippage buffer, as a percentage of $1 basket notional. Defaults to 1.5."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.neg_risk_arbitrage\" → \"prediction_neg_risk_arbitrage\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":324,"tokensAfter":324},{"name":"prediction.order_split_guide","fixed":{"name":"prediction_order_split_guide","description":"Walks a Polymarket outcome's live order book to recommend how many clips to split a large position into, so each clip's own price impact stays at or under max_price_impact_pct_per_slice (default 1.0%). Also returns full_size_price_impact_pct - the baseline impact if filled in one shot right now, for comparison. Single-snapshot calculation - it has no idea whether the book refills between clips in real trading. Accepts either a raw token_id or a market_slug (+ outcome) to resolve it automatically","inputSchema":{"type":"object","required":["position_size_shares"],"properties":{"side":{"type":"string","description":"\"sell\" (default) or \"buy\"."},"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."},"position_size_shares":{"type":"number","description":"Total number of outcome shares to sell (or buy). Must be positive."},"max_price_impact_pct_per_slice":{"type":"number","description":"Target ceiling on each clip's own price impact, in percent. Defaults to 1.0."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.order_split_guide\" → \"prediction_order_split_guide\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":367,"tokensAfter":367},{"name":"prediction.orderbook_imbalance_ratio","fixed":{"name":"prediction_orderbook_imbalance_ratio","description":"A single Polymarket outcome's bid-side vs ask-side order-book depth ratio, summed within depth_band_pct (default 5.0%) of each side's own best quote. 0.5 = balanced, closer to 1.0 = bid-side depth dominant, closer to 0.0 = ask-side dominant. A descriptive statistic only - not a prediction of price direction. Accepts either a raw token_id or a market_slug (+ outcome) to resolve it automatically. Paid in USDC on Base.","inputSchema":{"type":"object","required":[],"properties":{"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."},"depth_band_pct":{"type":"number","description":"How far into the book, as a percent of each side's own best quote, to sum depth. Defaults to 5.0."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.orderbook_imbalance_ratio\" → \"prediction_orderbook_imbalance_ratio\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":288,"tokensAfter":288},{"name":"prediction.polymarket_fee_estimate","fixed":{"name":"prediction_polymarket_fee_estimate","description":"Polymarket's own taker fee (NOT gas, slippage, or AlphaPipeline's own charge) for a hypothetical fill of `shares` at `price`, using the official bell-curve formula shares * fee_rate * price * (1 - price). fee_rate is read live from Polymarket's own GET /fee-rate for the exact token_id - never hardcoded, since per-category rates have changed before. Makers pay 0 across every category - this is the taker fee only. Omit price to use the live best book quote for side. Accepts either a raw token_id o","inputSchema":{"type":"object","required":["shares"],"properties":{"side":{"type":"string","description":"\"sell\" (default) or \"buy\" - which side of the book to read price from when price is omitted."},"price":{"type":"number","description":"Hypothetical fill price (0-1 exclusive). Omit to use the live best book quote for side."},"shares":{"type":"number","description":"Hypothetical fill size, in shares. Must be > 0."},"outcome":{"type":"string","description":"\"yes\" (default) or \"no\" - which side to resolve when using market_slug."},"token_id":{"type":"string","description":"The outcome's CLOB token_id / asset_id, if already known."},"market_slug":{"type":"string","description":"Exact Polymarket market slug, used to resolve token_id automatically."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.polymarket_fee_estimate\" → \"prediction_polymarket_fee_estimate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":370,"tokensAfter":370},{"name":"prediction.polymarket_mispricing","fixed":{"name":"prediction_polymarket_mispricing","description":"Monotonicity check (higher strike must not be priced above a lower strike) across a set of Polymarket markets that YOU have already confirmed share the same underlying asset and expiry/resolution date. Does NOT verify or infer that settlement-condition equivalence itself - Polymarket's API has no reliable field for it; passing unrelated markets produces a meaningless or false arbitrage signal. Accepts token_ids or market_slugs (+ optional outcomes, default all 'yes'), same length/order as strike","inputSchema":{"type":"object","required":["strikes"],"properties":{"strikes":{"type":"array","items":{"type":"number"},"description":"Strike for each rung, same order as token_ids/market_slugs. At least 2 required."},"outcomes":{"type":"array","items":{"type":"string"},"description":"\"yes\"/\"no\" per rung when using market_slugs (default: all \"yes\")."},"token_ids":{"type":"array","items":{"type":"string"},"description":"CLOB token_id per rung, if already known. Mutually exclusive with market_slugs."},"market_slugs":{"type":"array","items":{"type":"string"},"description":"Polymarket market slug per rung, used to resolve token_ids automatically."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.polymarket_mispricing\" → \"prediction_polymarket_mispricing\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":340,"tokensAfter":340},{"name":"security.contract_health_audit","fixed":{"name":"security_contract_health_audit","description":"Use this tool to check whether a token's liquidity pool is locked, burned, or freely held by a single wallet before trusting its liquidity - a rug-pull signal that security.token_risk does not cover. Reuses the same GoPlus data as token_risk (no extra upstream call) and rolls it up into a liquidity_health category (LOCKED/PARTIALLY_LOCKED/UNLOCKED/NO_LP_DATA). Does not include any qualitative 'suspicious transaction' judgment - only GoPlus's own lock/burn numbers. Do not use for honeypot or tax ","inputSchema":{"type":"object","required":["chain_id","contract_address"],"properties":{"chain_id":{"type":"integer","description":"EVM chain id, e.g. 8453 for Base."},"contract_address":{"type":"string","description":"Token contract address (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"security.contract_health_audit\" → \"security_contract_health_audit\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":226,"tokensAfter":226},{"name":"security.token_authenticity","fixed":{"name":"security_token_authenticity","description":"Use this tool to check whether a contract impersonates a known mainstream asset (e.g. a fake 'USDC'), using GoPlus's fake_token/trust_list/honeypot_with_same_creator fields - same underlying token_security call as security.token_risk / contract_health_audit / token_prescreen, no extra upstream cost. flagged_as_counterfeit=false is NOT proof of authenticity - it only means GoPlus found no such flag at query time. true_token_address is only set when flagged_as_counterfeit is true. No honeypot/tax/","inputSchema":{"type":"object","required":["chain_id","contract_address"],"properties":{"chain_id":{"type":"integer","description":"EVM chain id, e.g. 8453 for Base."},"contract_address":{"type":"string","description":"Token contract address (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"security.token_authenticity\" → \"security_token_authenticity\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"security.token_diagnostic","fixed":{"name":"security_token_diagnostic","description":"Use this tool right before buying or swapping an unfamiliar token when you need a single-call combined security check: runs security.token_risk and security.contract_health_audit in parallel against the same GoPlus data and returns both, plus a deduped union of risk_flags and a plain risk_flags_count. Deliberately does not compute a composite score or letter grade - every field is copied unchanged from the two underlying tools. Cheaper than calling both separately. Do not use for token unlock/ve","inputSchema":{"type":"object","required":["chain_id","contract_address"],"properties":{"chain_id":{"type":"integer","description":"EVM chain id, e.g. 8453 for Base."},"contract_address":{"type":"string","description":"Token contract address (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"security.token_diagnostic\" → \"security_token_diagnostic\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"security.token_prescreen","fixed":{"name":"security_token_prescreen","description":"Use this tool to cheaply drop obviously-bad candidates out of a batch before spending the pricier security.token_risk / security.token_diagnostic calls on survivors - built for exactly the high-volume new-pool screening pattern where most candidates fail a basic liquidity/LP-lock check anyway. Combines GoPlus's LP lock/burn status (same underlying call as security.contract_health_audit, no extra upstream cost) with GeckoTerminal's top-pool USD liquidity (same source as dex.liquidity_slippage) in","inputSchema":{"type":"object","required":["chain_id","contract_address"],"properties":{"chain_id":{"type":"integer","description":"EVM chain id, e.g. 8453 for Base."},"contract_address":{"type":"string","description":"Token contract address (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"security.token_prescreen\" → \"security_token_prescreen\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"security.token_risk","fixed":{"name":"security_token_risk","description":"Use this tool before executing any on-chain swap to verify if an ERC-20 contract is a honeypot, rug-pull risk, or has malicious buy/sell taxes and mintability backdoors. GoPlus/Honeypot.is-backed security audit for a given contract address - beyond is_honeypot, also surfaces individual GoPlus risk signals (cannot_buy, cannot_sell_all, hidden_owner, transfer_pausable, selfdestruct, is_blacklisted, slippage_modifiable, owner_percent) into risk_flags, plus is_proxy/trading_cooldown as informational","inputSchema":{"type":"object","required":["chain_id","contract_address"],"properties":{"chain_id":{"type":"integer","description":"EVM chain id, e.g. 8453 for Base."},"contract_address":{"type":"string","description":"Token contract address (0x...)."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"security.token_risk\" → \"security_token_risk\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"tools.ai_markdown","fixed":{"name":"tools_ai_markdown","description":"Use this tool when an agent needs to parse clean webpage article content without wasting context tokens on ads, scripts, navigation, and HTML boilerplate, or when summarizing a specific URL. Converts any URL into clean Markdown optimized for LLM context windows. Do not use for raw API endpoints or binary files (PDF/images). Paid in USDC on Base.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Full http(s) URL of the webpage to convert to Markdown."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"tools.ai_markdown\" → \"tools_ai_markdown\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"unlocks.dump_risk","fixed":{"name":"unlocks_dump_risk","description":"Use this tool to evaluate token unlock/vesting supply overhang risk before taking mid-to-long term positions - returns tokens whose currently-locked or unlock-eligible supply exceeds a materiality threshold, each with a computed risk_level (LOW/MEDIUM/HIGH). Default data source (on-chain Sablier vesting, the current configuration - no DropsTab key set) does NOT classify VC/team vs. other holders (is_insider_vc_team is always null) and does NOT provide exact unlock timing (days_until_unlock is al","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"unlocks.dump_risk\" → \"unlocks_dump_risk\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":169,"tokensAfter":169}],"toolsChanged":30,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}