{"serverId":"mcp-registry/io.github.agentsherpa/yieldsentinel","tools":[{"name":"check_position","fixed":{"name":"check_position","description":"Evaluate a described stablecoin yield position against a research policy (pull).\n\nAlways pass your policy rules (or a preset). Without a policy, no meaningful check is possible — the verdict will be review/unknown, never ok.\n\nPass poolId from yieldhunter list_yields opportunities[].id (also accepted as opportunityId or id). That id is one market. Required for a real check: policyPreset (treasury-conservative | balanced-research | rwa-selective) and/or minScore / maxRewardShare / excludeCategorie","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"id":{"description":"Same as yieldhunter list_yields opportunities[].id.","type":"string"},"asset":{"description":"Stablecoin symbol, e.g. \"USDC\".","type":"string"},"chain":{"enum":["ethereum","base","arbitrum"],"type":"string","description":"ethereum | base | arbitrum. Case-insensitive. Also accepts eth, mainnet, arb, arbitrum-one."},"poolId":{"description":"yieldhunter list_yields opportunities[].id (DefiLlama pool UUID). Example: \"43641cf5-a92e-416b-bce9-27113d3c0db6\"","type":"string"},"minScore":{"description":"Minimum compositeRiskAdjusted (0–100).","type":"string"},"minNetApy":{"description":"Minimum net APY estimate.","type":"string"},"minTvlUsd":{"description":"Minimum pool TVL in USD.","type":"string"},"horizonDays":{"description":"Holding horizon in days for net-yield context (default 30).","type":"string"},"maxExitRisk":{"enum":["low","medium","high"],"type":"string","description":"Cap on yieldhunter exitRisk heuristic: low | medium | high. Unknown or above the cap → review."},"notionalUsd":{"description":"Research notional in USD (size hint only). Example: 10000","type":"string"},"policyPreset":{"enum":["treasury-conservative","balanced-research","rwa-selective"],"type":"string","description":"Policy preset: \"treasury-conservative\" | \"balanced-research\" | \"rwa-selective\". treasury-conservative excludes RWA; rwa-selective allows RWA but is not a free pass (YS policy allowlist + higher bar)."},"protocolSlug":{"description":"Yieldhunter protocol slug. Prefer poolId from list_yields opportunities[].id when the protocol has more than one market.","type":"string"},"riskAppetite":{"enum":["conservative","balanced","aggressive"],"type":"string","description":"conservative | balanced | aggressive (research posture only)."},"opportunityId":{"description":"Alias for poolId / id.","type":"string"},"maxRewardShare":{"description":"Maximum incentive share of gross APY (0–1).","type":"string"},"requireCurated":{"description":"If true, the protocol/pool must be on the Yieldsentinel policy allowlist (curated.json), not yieldhunter scoring priors. Missing allowlist entry → review. Scoring ≠ policy approval.","type":"string"},"minProtocolScore":{"description":"Minimum yieldhunter protocol risk score (0–100, higher = safer).","type":"string"},"excludeCategories":{"description":"Exclude categories, e.g. [\"rwa\"].","type":"string"}},"additionalProperties":true},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"Check position (research policy)"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: id, asset, poolId, minScore, minNetApy, minTvlUsd, horizonDays, notionalUsd, protocolSlug, opportunityId, maxRewardShare, requireCurated, minProtocolScore, excludeCategories. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":785,"tokensAfter":847}],"toolsChanged":1,"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."}