{"serverId":"mcp-registry/com.toolsthatrank/serp-metrics","tools":[{"name":"share_of_voice","fixed":{"name":"share_of_voice","description":"Compute share of voice across competing entities over a keyword set. Reports impression share always, and, if you supply a CTR curve, a weighted visibility share that accounts for the fact that an impression at position 1 is not worth an impression at position 9. Impression share is share of the supplied set only and says nothing about keywords you did not supply.","inputSchema":{"type":"object","required":["entities"],"properties":{"entities":{"type":"array","items":{"type":"object","required":["impressions"],"properties":{"entity":{"type":"string","description":"Competitor name or domain."},"position":{"type":"number","description":"Average position, required only when a ctr_curve is supplied."},"impressions":{"type":"number"}}},"description":"One entry per competitor per keyword, or pre-aggregated per competitor."},"ctr_curve":{"type":"object","description":"Optional caller-supplied position-to-CTR map, for weighted visibility.","additionalProperties":{"type":"number"}}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Share of voice across a keyword set"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":295,"tokensAfter":295}],"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."}