{"name":"io.github.agentsherpa/yieldhunter","slug":"agentsherpa-yieldhunter","title":"yieldhunter","description":"Risk-adjusted stablecoin yield ranks for other agents. Research only. Never holds keys or executes.","url":"https://mcp.market/server/agentsherpa-yieldhunter","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-14T19:53:37.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:35:42.645Z","last_ok_at":"2026-11-04T05:35:42.645Z","latency_ms":89},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/agentsherpa/yieldhunter-connect","website":"https://yieldhunter-agent-production.up.railway.app/","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://yieldhunter-agent-production.up.railway.app/mcp"}],"packages":[],"tools":[{"name":"compare_opportunities","description":"Side-by-side comparison of 2–5 opportunities by risk-adjusted score.\n\nPass list_yields opportunities[].id values as poolIds or opportunityIds.\n\nReturns ranked list, compact comparison table fields (including protocolSlug for get_protocol_risk), winnerId, and rationale bullets (including when raw APY leader differs from risk-adjusted winner). sourceChainKey is ethereum|base|arbitrum only (unknown → VALIDATION_ERROR; no invented bridge fee).\n\nResearch only — non-custodial.\n\nExample:\n{\n  \"poolIds\": [\"pool-id-a\", \"pool-id-b\", \"pool-id-c\"],\n  \"horizonDays\": 30\n}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"poolIds":{"type":"array","items":{"type":"string","minLength":1},"minItems":2,"maxItems":5,"description":"2–5 list_yields opportunities[].id values. Example: [\"id-a\",\"id-b\"]. Alias: opportunityIds."},"opportunityIds":{"type":"array","items":{"type":"string","minLength":1},"minItems":2,"maxItems":5,"description":"Alias for poolIds — same list_yields opportunities[].id values."},"horizonDays":{"type":"number","exclusiveMinimum":0,"maximum":365,"description":"Holding horizon in days for gas/bridge amortization (default 30). Example: 30"},"notionalUsd":{"type":"number","exclusiveMinimum":0,"description":"Notional USD size for net-yield cost amortization and exitRisk TVL multiples (default 10000). Example: 10000"},"sourceChainKey":{"type":"string","description":"Agent's current chain for bridge cost estimate: ethereum | base | arbitrum (aliases: eth, ETH, Ethereum, arb, ARB, BASE). Blank/whitespace is VALIDATION_ERROR (omit the field to default). Unknown keys (solana, foo) return VALIDATION_ERROR — no invented bridge fee."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"required":["poolIds"]},{"required":["opportunityIds"]}]}},{"name":"explain_score","description":"Agent-readable explanation of why an opportunity received its risk-adjusted score.\n\nChain: pass list_yields opportunities[].id as poolId, opportunityId, or id (aliases for the same key).\n\nReturns a summary paragraph, factor bullets with weighted contributions, net-yield notes, an exitRisk heuristic line (liquidity-only — not on-chain withdraw or transfer/eligibility; medium often confidence-driven, not pool size; extra bullet when knownIssues note transfer restrictions), plus id and protocolSlug (same as list_yields; pass protocolSlug to get_protocol_risk). sourceChainKey is ethereum|base|arbitrum only (unknown → VALIDATION_ERROR; no invented bridge fee). Prefer this when you need to justify a ranking to a human or another agent.\n\nResearch only — non-custodial.\n\nExample:\n{ \"opportunityId\": \"43641cf5-a92e-416b-bce9-27113d3c0db6\", \"horizonDays\": 30 }\nAlso accepts poolId or id with the same value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"poolId":{"type":"string","minLength":1,"description":"Alias for list_yields opportunities[].id (historical tool field). Same DefiLlama pool UUID. Example: \"43641cf5-a92e-416b-bce9-27113d3c0db6\""},"opportunityId":{"type":"string","minLength":1,"description":"Alias for list_yields opportunities[].id (same pool key as poolId / id)."},"id":{"type":"string","minLength":1,"description":"Same as list_yields opportunities[].id (canonical response field name)."},"horizonDays":{"type":"number","exclusiveMinimum":0,"maximum":365,"description":"Holding horizon in days for gas/bridge amortization (default 30). Example: 30"},"notionalUsd":{"type":"number","exclusiveMinimum":0,"description":"Notional USD size for net-yield cost amortization and exitRisk TVL multiples (default 10000). Example: 10000"},"sourceChainKey":{"type":"string","description":"Agent's current chain for bridge cost estimate: ethereum | base | arbitrum (aliases: eth, ETH, Ethereum, arb, ARB, BASE). Blank/whitespace is VALIDATION_ERROR (omit the field to default). Unknown keys (solana, foo) return VALIDATION_ERROR — no invented bridge fee."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"required":["id"]},{"required":["opportunityId"]},{"required":["poolId"]}]}},{"name":"get_protocol_risk","description":"Protocol-level risk card (age, audit signals, curated known issues, category, score 0–100).\n\nChain: pass list_yields opportunities[].protocolSlug as protocol or protocolSlug. Display names also resolve case- and space-insensitively via DefiLlama protocol metadata (e.g. \"Compound V3\" → compound-v3, \"Curve\" → curve-dex, \"Euler V2\" → euler-v2).\n\nUnknown names return NOT_FOUND naming the field, with example {\"protocolSlug\":\"aave-v3\"} and up to 3 closest slugs.\n\nHigher score = lower protocol risk. Uses curated priors plus DefiLlama metadata when available.\n\nResearch only — non-custodial.\n\nExample:\n{\n  \"protocol\": \"aave-v3\"\n}\nAlso accepts protocolSlug or a display name such as \"Compound V3\".","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"protocol":{"type":"string","minLength":1,"description":"Protocol slug (DefiLlama project id) or display name, e.g. \"aave-v3\" or \"Compound V3\". Prefer list_yields opportunities[].protocolSlug."},"protocolSlug":{"type":"string","minLength":1,"description":"Alias for protocol — list_yields opportunities[].protocolSlug (display names also resolve)."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"required":["protocol"]},{"required":["protocolSlug"]}]}},{"name":"health","description":"Liveness and capability check for yieldhunter (yieldhunter.eth).\n\nReturns service status, schemaVersion, scoringVersion, feature flags, and the list of available tools.\n\nUse this first to verify connectivity. If yields+pegs vintage is missing or at/over YH_STALE_DEGRADE_SECONDS (default 2h), health may refresh DefiLlama market caches once (same adapters as list_yields; not a list_yields tool call). Kill switch on: health still answers, refresh skipped. Research estimates only — non-custodial; never holds keys or executes transactions.\n\nCopy-paste path starts here, then list_yields.\nExample input: {}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_yields","description":"Rank stablecoin yield opportunities on Ethereum, Base, and Arbitrum using multi-factor **risk-adjusted** scoring (not raw APY). chains/chainIds: those three only (aliases eth/ETH/Ethereum, arb/ARB, BASE) — any unsupported or blank value (solana, optimism, \"\") is VALIDATION_ERROR, not a silent default-universe fallback. sourceChainKey: same keys/aliases; blank or unknown keys are VALIDATION_ERROR (bridge cost is not estimated).\n\nDefault ranking is risk-adjusted score, not highest APY. For headline yield order, use sortBy=net_apy.\n\nDefault is risk-adjusted ranking with balanced weights. Optional params are policy controls for visiting agents.\n\nDefault when omitted: sortBy=risk_adjusted, sortOrder=desc, riskAppetite=balanced (v1.1 weights), no minScore, no category filter, diversity=soft (max 2 markets per protocol in presented top-k). Primary composite key: compositeRiskAdjusted (protocol risk, depeg/counterparty, liquidity, yield quality base vs incentive, net yield after gas/bridge). Opportunities may include stability signals: apyChange24h is pool-level DefiLlama apyPct1D when present as a number (including 0 = observed flat change); null/missing means unknown/not provided for that pool (e.g. some Pendle markets) — not the same as 0, never invent 0; tvlChange24hPct is protocol-level DefiLlama change_1d (shared across markets of the same protocol — not this pool's TVL flow; missing stays null); large APY jumps warn only. Also exitRisk/exitRiskReason (size-vs-pool liquidity heuristic only: pool TVL vs notionalUsd + liquidity confidence — not on-chain withdraw, not queue/cap/pause/lockup, not transfer whitelist/eligibility/redemption, not an execution gate; unknown ≠ safe; medium often means liquidity confidence medium, not “small pool”; low is strict; when knownIssues mention transfer/eligibility do not treat low as free exit; soft warnings on high/unknown, plus low/medium if those issues are present; does not change default risk-adjusted ranking).\n\nOptional policy knobs: sortBy (risk_adjusted|net_apy|gross_apy|tvl), sortOrder, riskAppetite (conservative|balanced|aggressive), minScore (0–100 after appetite; practical bands ~≥85 treasury default, ≥80 selective; 90 is rare/very strict — a few top L2 blue-chips may clear it), categories / excludeCategories (lending|rwa|other), diversity (soft|off — default top prefers protocol diversity; set off for every market from one protocol), includeFactors (boolean, default false — when true each opportunity has scores.factors compact map without a second tool call), maxRewardShare (0–1 optional incentive-share gate only — max reward/total; e.g. 0.3 treasury, 0.25 stricter; unknown share excluded when set; does not remove high base-only APY farms — pair with minScore/riskAppetite/excludeCategories for capital preservation).\n\nPrefer this when capital preservation and sustainable yield matter more than headline APY.\n\nResearch only — never executes transactions or holds keys.\n\nCopy-paste path (after health {}): { \"assets\": [\"USDC\"], \"sortBy\": \"risk_adjusted\" }\nThen contrast #1 vs #2 (risk-adjusted winner vs next row — often higher rate / thinner liquidity / other chain). Do not contrast against the max-APY row in the ten.\n\nExamples:\n(a) Treasury/conservative: { \"riskAppetite\": \"conservative\", \"minScore\": 85, \"excludeCategories\": [\"rwa\"], \"maxRewardShare\": 0.3, \"minTvlUsd\": 10000000, \"limit\": 10 }\n(b) Default research (v1.1): { \"assets\": [\"USDC\"], \"sortBy\": \"risk_adjusted\" }\n(c) Yield-seeking: { \"sortBy\": \"net_apy\", \"riskAppetite\": \"aggressive\", \"chains\": [\"base\"], \"assets\": [\"USDC\"], \"limit\": 15 }\n(d) With factor breakdown: { \"assets\": [\"USDC\"], \"limit\": 5, \"includeFactors\": true }","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"chains":{"type":"array","items":{"type":"string"},"description":"Filter chains: ethereum | base | arbitrum (aliases eth/ETH/Ethereum, arb/ARB, BASE; or Llama names). Default when field omitted: all three. Blank, whitespace, or unsupported values (solana, optimism, \"\") are VALIDATION_ERROR — not a silent fallback. Example: [\"base\",\"ethereum\"]"},"chainIds":{"type":"array","items":{"type":"integer"},"description":"Optional numeric chain ids: 1, 8453, 42161 only. Any other id is VALIDATION_ERROR (not a silent default-universe fallback)."},"assets":{"type":"array","items":{"type":"string"},"description":"Stablecoin symbols to match in pool symbol, e.g. [\"USDC\",\"USDT\"]"},"minTvlUsd":{"type":"number","minimum":0,"description":"Minimum TVL in USD (default 1000000). Example: 5000000"},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":25,"description":"Max results to return (default 10, max 25). Example: 10"},"protocols":{"type":"array","items":{"type":"string"},"description":"Optional protocol slugs, e.g. [\"aave-v3\",\"morpho-blue\"]. Blank entries are VALIDATION_ERROR (not treated as all protocols)."},"sortBy":{"type":"string","enum":["risk_adjusted","net_apy","gross_apy","tvl"],"description":"Sort key: \"risk_adjusted\" (default) | \"net_apy\" | \"gross_apy\" | \"tvl\""},"sortOrder":{"type":"string","enum":["asc","desc"],"description":"Sort direction: \"desc\" (default) | \"asc\""},"riskAppetite":{"type":"string","enum":["conservative","balanced","aggressive"],"description":"Scoring weight profile: \"balanced\" (default/v1.1) | \"conservative\" | \"aggressive\""},"minScore":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Minimum compositeRiskAdjusted after appetite weights (0–100). Omitted = no filter"},"categories":{"type":"array","items":{"type":"string","enum":["lending","rwa","other"]},"description":"Include only these categories: \"lending\" | \"rwa\" | \"other\""},"excludeCategories":{"type":"array","items":{"$ref":"#/properties/categories/items"},"description":"Exclude these categories, e.g. [\"rwa\"]"},"diversity":{"type":"string","enum":["soft","off"],"description":"Presented top-k protocol diversity: \"soft\" (default, max 2 per protocol) | \"off\" (plain score order, every market)"},"includeFactors":{"type":"boolean","description":"If true, each opportunity includes scores.factors compact map (protocolRisk, depegCounterparty, liquidity, yieldQuality, costAdjusted). Default false — omits heavy factors[] rationales."},"maxRewardShare":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}],"description":"Incentive-share gate only: max reward/total of gross APY, 0–1 (e.g. 0.3 treasury, 0.25 stricter). Does not remove high base-only APY farms. Capital preservation still needs minScore/riskAppetite/excludeCategories. Omitted = no filter. Unknown share excluded when set."},"horizonDays":{"type":"number","exclusiveMinimum":0,"maximum":365,"description":"Holding horizon in days for gas/bridge amortization (default 30). Example: 30"},"notionalUsd":{"type":"number","exclusiveMinimum":0,"description":"Notional USD size for net-yield cost amortization and exitRisk TVL multiples (default 10000). Example: 10000"},"sourceChainKey":{"type":"string","description":"Agent's current chain for bridge cost estimate: ethereum | base | arbitrum (aliases: eth, ETH, Ethereum, arb, ARB, BASE). Blank/whitespace is VALIDATION_ERROR (omit the field to default). Unknown keys (solana, foo) return VALIDATION_ERROR — no invented bridge fee."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"score_opportunity","description":"Compute the full multi-factor risk-adjusted score for a single opportunity from list_yields.\n\nChain: pass list_yields opportunities[].id as poolId, opportunityId, or id (same DefiLlama pool UUID; id is the canonical list field).\n\nReturns APY breakdown (base/reward/total), factor scores with rationales, net yield after gas/bridge, exitRisk heuristic (TVL vs notional + liq conf only; medium ≠ small pool; not queues/caps/transfer whitelist/eligibility/on-chain withdraw; do not treat low as free exit when knownIssues mention transfer/eligibility), warnings, and sources. sourceChainKey is ethereum|base|arbitrum only — unknown keys (foo, solana) are VALIDATION_ERROR; no invented bridge fee.\n\nResearch estimates only — non-custodial.\n\nExample (any one id field):\n{ \"id\": \"43641cf5-a92e-416b-bce9-27113d3c0db6\", \"horizonDays\": 30, \"notionalUsd\": 10000 }\nAlso accepts poolId or opportunityId with the same value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"poolId":{"type":"string","minLength":1,"description":"Alias for list_yields opportunities[].id (historical tool field). Same DefiLlama pool UUID. Example: \"43641cf5-a92e-416b-bce9-27113d3c0db6\""},"opportunityId":{"type":"string","minLength":1,"description":"Alias for list_yields opportunities[].id (same pool key as poolId / id)."},"id":{"type":"string","minLength":1,"description":"Same as list_yields opportunities[].id (canonical response field name)."},"horizonDays":{"type":"number","exclusiveMinimum":0,"maximum":365,"description":"Holding horizon in days for gas/bridge amortization (default 30). Example: 30"},"notionalUsd":{"type":"number","exclusiveMinimum":0,"description":"Notional USD size for net-yield cost amortization and exitRisk TVL multiples (default 10000). Example: 10000"},"sourceChainKey":{"type":"string","description":"Agent's current chain for bridge cost estimate: ethereum | base | arbitrum (aliases: eth, ETH, Ethereum, arb, ARB, BASE). Blank/whitespace is VALIDATION_ERROR (omit the field to default). Unknown keys (solana, foo) return VALIDATION_ERROR — no invented bridge fee."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"required":["id"]},{"required":["opportunityId"]},{"required":["poolId"]}]}}],"scan":{"score":85,"grade":"A","scanned_at":"2026-11-01T13:28:52.289Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T13:28:52.256Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1063ms"]},"poisoning":{"score":13,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 18 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool list_yields: …Rank stablecoin yield opportunities on Ethereum, Base, and Arbitrum using multi-factor **risk-adjusted** scoring (not raw APY). chains/chainIds: those three only (aliases eth/ETH/Ethereum, arb/ARB, BASE) — any unsupported or blank value (solana, optimism, \"\") is VALIDATION_ERROR, not a silent default-universe fallback. sourceChainKey: same keys/aliases; blank or unknown keys are VALIDATION_ERROR (bridge cost is not estimated). Default ranking is risk-adjusted score, not highest APY. For headline yield order, use sortBy=net_apy. Default is risk-adjusted ranking with balanced weights. Optional params are policy controls for visiting agents. Default when omitted: sortBy=risk_adjusted, sortOrder=desc, riskAppetite=balanced (v1.1 weights), no minScore, no category filter, diversity=soft (max 2 markets per protocol in presented top-k). Primary composite key: compositeRiskAdjusted (protocol risk, depeg/counterparty, liquidity, yield quality base vs incentive, net yield after gas/bridge). Opportunities may include stability signals: apyChange24h is pool-level DefiLlama apyPct1D when present as a number (including 0 = observed flat change); null/missing means unknown/not provided for that pool (e.g. some Pendle markets) — not the same as 0, never invent 0; tvlChange24hPct is protocol-level DefiLlama change_1d (shared across markets of the same protocol — not this pool's TVL flow; missing stays null); large APY jumps warn only. Also exitRisk/exitRiskReason (size-vs-pool liquidity heuristic only: pool TVL vs notionalUsd + liquidity confidence — not on-chain withdraw, not queue/cap/pause/lockup, not transfer whitelist/eligibility/redemption, not an execution gate; unknown ≠ safe; medium often means liquidity confidence medium, not “small pool”; low is strict; when knownIssues mention transfer/eligibility do not treat low as free exit; soft warnings on high/unknown, plus low/medium if those issues are present; does not change default risk-adjusted ranking). Optional policy knobs: sortBy (risk_adjusted|net_apy|gross_apy|tvl), sortOrder, riskAppetite (conservative|balanced|aggressive), minScore (0–100 after appetite; practical bands ~≥85 treasury default, ≥80 selective; 90 is rare/very strict — a few top L2 blue-chips may clear it), categories / excludeCategories (lending|rwa|other), diversity (soft|off — default top prefers protocol diversity; set off for every market from one protocol), includeFactors (boolean, default false — when true each opportunity has scores.factors compact map without a second tool call), maxRewardShare (0–1 optional incentive-share gate only — max reward/total; e.g. 0.3 treasury, 0.25 stricter; unknown share excluded when set; does not remove high base-only APY farms — pair with minScore/riskAppetite/excludeCategories for capital preservation). Prefer this when capital preservation and sustainable yield matter more than headline APY. Research only — never executes transactions or holds keys. Copy-paste path (after health {}): { \"assets\": [\"USDC\"], \"sortBy\": \"risk_adjusted\" } Then contrast #1 vs #2 (risk-adjusted winner vs next row — often higher rate / thinner liquidity / other chain). Do not contrast against the max-APY row in the ten. Examples: (a) Treasury/conservative: { \"riskAppetite\": \"conservative\", \"minScore\": 85, \"excludeCategories\": [\"rwa\"], \"maxRewardShare\": 0.3, \"minTvlUsd\": 10000000, \"limit\": 10 } (b) Default research (v1.1): { \"assets\": [\"USDC\"], \"sortBy\": \"risk_adjusted\" } (c) Yield-seeking: { \"sortBy\": \"net_apy\", \"riskAppetite\": \"aggressive\", \"chains\": [\"base\"], \"assets\": [\"USDC\"], \"limit\": 15 } (d) With factor breakdown: { \"assets\": [\"USDC\"], \"limit\": 5, \"includeFactors\": true }…"}],"inputs":{"probes":[{"url":"https://yieldhunter-agent-production.up.railway.app/mcp","reachable":true,"authRequired":false,"latencyMs":1063,"serverInfo":{"name":"yieldhunter","version":"1.0.5"}}],"packages":[],"repo":{"found":true,"owner":"agentsherpa","repo":"yieldhunter-connect","archived":false,"pushedAt":"2026-10-14T19:53:37Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/314672598?v=4","ownerCreatedAt":"2026-08-08T14:32:37Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-14T19:53:37.000Z","score":23}}}},"grade_history":[],"reviews":[]}