io.github.tonic20/extensions-dashboard

ExtensionDash

Research extension listings and search results; track installs, keyword rankings, and competitors.

Endpointhttps://extensiondash.com/mcp (streamable-http)
Registry version1.0.0
Now14 tools · grade F (43) · pin ts_04b808cbca1fb99bec97b7d7b73ce57c · protocol 2025-06-18
First / last listed2026-10-30 01:01 UTC / 2026-10-30 01:01 UTC
Grade over time2026-10-30: F (43), 14 tools

Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.

Timeline

First listing · 2026-10-30 01:01 UTC
14 tools, grade F (43)

Tools: list_extensions get_extension get_metrics_history list_keywords get_keyword_ranks add_keyword remove_keyword add_competitor remove_competitor list_competitors get_keyword_serp list_scrape_runs search_catalog get_listing

Current tools (14)

list_extensionsEvery extension this token's owner tracks, with each store listing's latest numbers: user count (and whether the store rounded it), the 7-day change, rating, ratings count and category rank. Start here when this connection has an account: every tracking tool takes an extension_id from this list. Needs an ExtensionDash account: sign in from your app, e.g. `claude mcp login extensions-dashboard` o
params: none
get_extensionOne extension in full: every store listing's latest numbers plus its tracked keywords and their current positions. Each listing's rank is its position by users within its store, computed from the current user count; ties share a rank (rank_tied = others at the same count); rank_change is the move since last week's recorded rank. locales lists every store language this extension tracks, with a ke
params: extension_id*
get_metrics_historyDaily-or-sparser history of an extension's numbers: user count, rating and ratings count, each as a map of ISO date to value. "listings" is this extension's own store listings; "competitors" is its roster from list_competitors. store and days filter both. A map holds only dates actually observed; an empty map means no measurement in range, never zero. If users_rounded_in_range is true the store p
params: extension_id*, store, days, include_competitors, competitors
list_keywordsEvery search term tracked for one extension, one row per term per store. status is "pending" until a fetch has landed since the term was tracked, and "scanned" once one has. A "scanned" row with a null position means we searched depth_scanned results and this extension was not among them — that is a real observation, not missing data. A "pending" row can still carry a position. Removing a keywor
params: extension_id*, locale
get_keyword_ranksDaily search position history for an extension's tracked keywords, one series per term per store. Every point carries the depth it was scanned to, because a position only means something against the size of the pool it came from: #1 of 9 and #1 of 50 are different results. A null position means we searched that deep and this extension was not in the results. A term tracked in more than one store
params: extension_id*, term, store, locale, source, days
add_keywordStart tracking a search term for an extension. The term is added once per store the extension is listed in, and a rank fetch is enqueued for each store that was not already tracking it. The position is not available when this returns. Call list_keywords with the same extension_id until this term's status turns from "pending" to "scanned", or list_scrape_runs to watch the fetch itself — a fetch th
params: extension_id*, term*, locale
remove_keywordStop tracking a search term for an extension, across every store it was tracked in. Positions already recorded are kept; only the tracking stops. Other extensions tracking the same term are unaffected, including ones that track the same store listing: every extension's keywords are its own. A term is tracked per store language. Tracking "ad blocker" in en and again in de gives two independent ke
params: extension_id*, term*, locale
add_competitorStart tracking a competitor for an extension. Takes the store and id of a search_catalog row (as external_id), so a listing you just found can be promoted without looking anything up in between. Promoting a listing is what earns it a store fetch: its description, install count, rating and languages start being recorded, and its position is kept even on days it falls out of the results entirely.
params: extension_id*, store*, external_id*
remove_competitorStop tracking a competitor for an extension. Stops the store fetches. The recorded history is kept, so adding the same competitor again later restores its charts rather than starting from zero — and its positions carry on being observed either way, because they come from searches this account already runs. Needs an ExtensionDash account: sign in from your app, e.g. `claude mcp login extensions-d
params: extension_id*, store*, external_id*
list_competitorsWho this extension competes with, measured across every keyword it tracks. Two sets. "competitors" is the roster you promoted with add_competitor: their descriptions, install counts and ratings are recorded, and their positions are kept even on days they fall out of the results. "candidates" — returned only with include_observed — is everyone else who has appeared in those searches, ranked by how
params: extension_id*, include_observed
get_keyword_serpThe search page for one of an extension's tracked keywords, as this account last recorded it — who was on it, in what order, and which way each of them moved over the past week. Read from recorded history, not from the store: no fetch, no waiting, no egress spent. Use this when you want movement, or the same page the dashboard is showing. Every row carries mine and competitor flags, so "who is a
params: extension_id*, store*, term*, locale, window
list_scrape_runsRecent scrape attempts against your own extensions, newest first, with their outcome and any error. Covers both the listing fetches and the rank fetches for the search terms they track. Use this after add_keyword to watch the rank fetch: the run is targeted at the search term, and a failed fetch appears here as a failure rather than as a position that never arrives. Needs an ExtensionDash accoun
params: status, extension_id, limit
search_catalogSearch one store's catalog of extensions fetched so far, for market and niche research: store "chrome" (default) or "firefox", one per call -- Chrome users are a rounded weekly count, Firefox's an exact daily average, so the two are never mixed. listed and known in each answer show how much of that store the catalog covers. rank is the position by users within the store; ties share a rank (rank_ti
params: store, category, query, match, sort, dir, limit, page, users_min, users_max, rating_min, rating_max, reviews_min, reviews_max, description_length_min, description_length_max, langs_min, langs_max, screenshots_min, screenshots_max
get_listingOne extension's full listing from the catalog -- any extension, tracked by this account or not: description, users, rating, reviews, version, languages, categories, permissions and publisher. Pass the store and id of a search_catalog row as store and external_id. rank is the position by users within the store; ties share a rank (rank_tied = others at the same count); recomputed weekly on rank_on;
params: store*, external_id*

Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.