{"serverId":"mcp-registry/com.persimmonhq/persimmon","tools":[{"name":"get_brand_signals","fixed":{"name":"get_brand_signals","description":"Use this when an agent needs the recent harvested signals (each with text, tier, score, and source URL) backing a brand's score. Public-citable signals only — internal-only items are filtered before emit. Always carries a coverage_status describing why a list may be empty.","inputSchema":{"type":"object","required":["brand"],"properties":{"brand":{"type":"string","description":"Brand name."},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max signals to return. Defaults to 10."},"tier_floor":{"enum":["NOTABLE","STRONG"],"type":"string","description":"Minimum signal tier to include. Defaults to NOTABLE."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":196,"tokensAfter":196},{"name":"get_competitive_context","fixed":{"name":"get_competitive_context","description":"Use this when an agent needs a brand's competitor set, peer momentum snapshots, and a deterministic competitive-position one-liner. Excludes peers without real signal coverage (scaffold tier). Always carries a coverage_status describing the result.","inputSchema":{"type":"object","required":["brand"],"properties":{"brand":{"type":"string","description":"Brand name."},"limit":{"type":"integer","maximum":10,"minimum":1,"description":"Max number of peer snapshots to return. Defaults to 4."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"get_momentum_index","fixed":{"name":"get_momentum_index","description":"Use this when an agent needs Persimmon's deterministic momentum score for a specific brand or the top of the index. Returns composite score plus four dimensions (Draw, Surge, Wedge, Hold), tier band, signal count, and last-updated timestamp. Pure read; no LLM calls in scoring.","inputSchema":{"type":"object","required":[],"properties":{"brand":{"type":"string","description":"Brand name. Omit to receive the full index (capped to top-N by composite score)."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"When `brand` is omitted, cap the number of returned brand entries. Defaults to 50. Maximum 200."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195}],"toolsChanged":3,"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."}