{"name":"com.toolsthatrank/serp-metrics","slug":"toolsthatrank-serp-metrics","title":null,"description":"Impression-weighted SERP position, click projection on your own CTR curve, share of voice","url":"https://mcp.market/server/toolsthatrank-serp-metrics","rating":null,"grade":"C","score":69,"certified":false,"status":"active","category":"seo","tags":["seo"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-05T16:10:55.048Z","last_ok_at":"2026-11-05T16:10:55.048Z","latency_ms":136},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://toolsthatrank.com/","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://toolsthatrank-mcp.lipmichal.workers.dev"}],"packages":[],"tools":[{"name":"impression_weighted_position","description":"Compute the impression-weighted average SERP position for a set of query rows, alongside the plain arithmetic mean and the gap between them. The arithmetic mean lets a 3-impression query count as much as a 30,000-impression one; the weighted figure describes where a typical impression actually happened. A positive weighting_shift means your high-volume queries rank worse than the unweighted average suggests.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string","description":"Optional label for the row."},"position":{"type":"number","description":"Average SERP position for the row, 1-based."},"impressions":{"type":"number","description":"Impressions the row received."},"clicks":{"type":"number","description":"Optional observed clicks, used to calibrate the curve."},"target_position":{"type":"number","description":"Optional per-row target position, overriding the global target."}},"required":["position","impressions"]},"description":"Query rows."}},"required":["rows"],"additionalProperties":false}},{"name":"project_clicks_from_ctr_curve","description":"Project how many clicks a set of query rows would earn at a target position instead of their current position, using a CTR curve THAT YOU SUPPLY. This server deliberately ships no built-in CTR table: every published average-CTR-by-position table is a third-party estimate over someone else's traffic, so applying one silently would disguise a guess as a measurement. Pass your own measured curve (Search Console clicks/impressions by position is the honest source). Positions between curve points are linearly interpolated; positions beyond the curve clamp to the last point rather than extrapolate, and are counted in clamped_row_count. If any row carries observed clicks, the output also reports how far the supplied curve is from your reality.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string","description":"Optional label for the row."},"position":{"type":"number","description":"Average SERP position for the row, 1-based."},"impressions":{"type":"number","description":"Impressions the row received."},"clicks":{"type":"number","description":"Optional observed clicks, used to calibrate the curve."},"target_position":{"type":"number","description":"Optional per-row target position, overriding the global target."}},"required":["position","impressions"]},"description":"Query rows."},"ctr_curve":{"type":"object","description":"Required. Map of position to click-through rate as a 0-1 fraction, e.g. {\"1\":0.28,\"2\":0.15,\"3\":0.10,\"10\":0.02}. Supply your own measured values.","additionalProperties":{"type":"number"}},"target_position":{"type":"number","description":"Target position applied to every row that does not carry its own."}},"required":["rows","ctr_curve"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"entities":{"type":"array","description":"One entry per competitor per keyword, or pre-aggregated per competitor.","items":{"type":"object","properties":{"entity":{"type":"string","description":"Competitor name or domain."},"impressions":{"type":"number"},"position":{"type":"number","description":"Average position, required only when a ctr_curve is supplied."}},"required":["impressions"]}},"ctr_curve":{"type":"object","description":"Optional caller-supplied position-to-CTR map, for weighted visibility.","additionalProperties":{"type":"number"}}},"required":["entities"],"additionalProperties":false}}],"scan":{"score":69,"grade":"C","scanned_at":"2026-11-04T14:41:07.001Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-04T14:41:06.960Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 749ms"]},"poisoning":{"score":15,"max":15,"notes":["3 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://toolsthatrank-mcp.lipmichal.workers.dev","reachable":true,"authRequired":false,"latencyMs":749,"serverInfo":{"name":"com.toolsthatrank/serp-metrics","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27%3E%3Ctext y=%27.9em%27 font-size=%2786%27 fill=%27%231D6B4F%27%3E%E2%97%88%3C/text%3E%3C/svg%3E","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}