MCP docs
Connect an AI assistant to Ext Watch and ask about the Chrome Web Store. This page lists every tool, what it accepts, the limits, and what to do when something goes wrong.
https://app.extwatch.com/api/mcpWhat it is
Ext Watch runs an MCP server: a standard way for AI assistants to use outside tools. Once connected, your assistant can look up our Chrome Web Store data while you chat, instead of guessing.
- Read-only. All 15 tools only read. Nothing can change your account or the store.
- Remote. One address, Streamable HTTP. Nothing to install.
- Dated. Every number comes with the day we read it. Missing values say why, never a made-up zero.
- Cards and charts in apps that support MCP Apps, such as Claude. Other apps get the same answer as text.
- Plans. Included with Silver and Gold. Compare plans.
Connect
You sign in to Ext Watch once per app. Pick yours:
Claude (web and desktop)
- In Claude, open Settings, then Connectors, and click Add custom connector.
- Name it Ext Watch and paste the server address: https://app.extwatch.com/api/mcp
- Click Connect, sign in to Ext Watch and press Allow.
- Start a chat and ask. Claude picks the tool it needs.
ChatGPT
- In ChatGPT, open Settings, then Apps & Connectors. Under Advanced, turn on Developer mode.
- Click Create, name it Ext Watch and paste the server address: https://app.extwatch.com/api/mcp
- Sign in to Ext Watch and press Allow.
- In a new chat, pick Ext Watch and ask.
Cursor
- In Cursor Settings, open MCP and click Add new MCP server.
- Paste the snippet below into the file that opens, then save.
- Click Connect next to Ext Watch, sign in and press Allow.
{
"mcpServers": {
"extwatch": { "url": "https://app.extwatch.com/api/mcp" }
}
}Claude Code
- Run the command below in your terminal.
- Type /mcp inside Claude Code, choose extwatch and sign in.
- Ask your question.
claude mcp add --transport http extwatch https://app.extwatch.com/api/mcpOther apps
- Any app that can add a remote MCP server by address works: paste https://app.extwatch.com/api/mcp and sign in when it asks.
- If the app cannot sign in, make an API key in Ext Watch (Settings, then AI assistant, then API keys) and send it as the header Authorization: Bearer ew_live_…
Example prompts
- “Which productivity extensions grew the most this month?”
- “Show daily users and rating for Loom over the last 6 months.”
- “What do users complain about in PDF editor extensions? Quote the reviews.”
- “Give me 3 extension ideas in note-taking with weak competition, with the evidence.”
- “What launched this week that already has users?”
- “How does Grammarly make money?”
Tools
Your assistant chooses the tool and its arguments from your question. You never need to type these. Each tool reads; none writes.
search_extensionsSearch extensions1 to 3 credits (1 per 10 rows shown)get_extensionExtension profile2 creditscompare_extensionsCompare extensions2 creditsget_historyHistory chart1 creditfind_risersTop risers2 creditscategory_statsMarket stats2 creditslaunches_by_monthLaunches per month2 creditsget_launchesNew launches1 to 3 credits (1 per 10 rows shown)list_reviewsReviews breakdown1 creditfind_competitorsCompetitors1 creditget_publisherPublisher portfolio1 to 3 credits (1 per 10 rows shown)get_opportunitiesBuild ideas2 creditsget_monetizationPayment signs1 creditget_collectionCollections1 to 3 credits (1 per 10 rows shown)get_changesChanges1 credit
search_extensionsSearch extensions
What the assistant reads
Find Chrome extensions in Ext Watch's crawl of the Chrome Web Store by words (query) and/or filters, ranked, with the EXACT number that match the filters. Use it for 'which extensions…', 'how many…' and for lists; pass ids to narrow a list you already have ('of those…'). count_only: true returns only the exact count; group_by (category | subcategory | publisher) splits the set. Filters: category, subcategory (slug or name), topic, niche, ai, users_min/users_max, rating_min/rating_max (rating_max is strict: 'under 4' = 4), rating_count_min, updated_within_days, not_updated_days_min (365 = no update in a year), published_within_days or published_from/published_to, paid, featured, maker (indie | company), risk, publisher_size (solo | 2_5 | 6_plus), publisher (a name), has_website, language ('en' = English listings), name_contains. Prefer the app's steps (users 1000/10000/100000/1000000; rating 3/4/4.5; days 30/90/180/365): then the link opens exactly the same set. sort: users | rating_count | updated | stale | rating | users_gained_30d | ratings_gained_30d | newest. limit 1-25 (default 10).
Arguments
query- text · up to 120 charactersWords to look for in names and descriptions.
ids- list of texts · 1 to 25; each: 32-letter store idListings by store id, for example from an earlier answer.
category- text · up to 60 charactersA category, by slug or name, such as productivity.
subcategory- text · up to 64 charactersA subcategory, by slug or name.
topic- text · up to 64 charactersA topic slug.
niche- text · up to 64 charactersA niche slug.
ai- true or falsetrue keeps AI-powered listings only.
users_min- whole numberAt least this many users.
users_max- whole numberAt most this many users.
rating_min- number · 0 to 5Rating at least this.
rating_max- number · 0 to 5Rating below this (strict: 4 means under 4).
rating_count_min- whole numberAt least this many ratings.
updated_within_days- whole number · 1 to 3,650Updated in the last N days.
not_updated_days_min- whole number · 1 to 5,000No update for at least N days.
published_within_days- whole number · 1 to 3,650First published in the last N days.
published_from- text · YYYY-MM-DDFirst published on or after this day.
published_to- text · YYYY-MM-DDFirst published on or before this day.
paid- true or falsetrue keeps listings with payment signs.
featured- true or falsetrue keeps listings the store marks as Featured.
maker- text · indie, companyIndie developer or company.
risk- text · low, medium, highPermissions risk level.
publisher_size- text · solo, 2_5, 6_plusHow many listings the publisher has: 1, 2 to 5, or 6 or more.
publisher- text · 2 to 120 charactersA publisher name.
has_website- true or falsetrue keeps listings that link a website.
language- text · enen keeps English listings.
name_contains- text · 2 to 60 charactersText the listing name must contain.
sort- text · users, rating_count, updated, stale, rating, users_gained_30d, ratings_gained_30d, newestOrder of the rows.
count_only- true or falsetrue returns only the exact count.
group_by- text · category, subcategory, publisherSplits the matching set into groups.
limit- whole number · 1 to 25How many rows to return.
Example
“PDF tools in English with at least 10,000 users.”
{
"name": "search_extensions",
"arguments": {
"query": "pdf",
"language": "en",
"users_min": 10000,
"limit": 25
}
}get_extensionExtension profile
What the assistant reads
One extension's profile: users, rating with its number of ratings, last update, users gained over 7/30/90 days, release cadence, permissions risk, payment signs and a users chart. Pass id (from refs) or name; a name that matches several listings returns the choices instead of a guess. For 2-5 extensions use compare_extensions.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
Example
“Tell me about Grammarly.”
{
"name": "get_extension",
"arguments": {
"name": "Grammarly"
}
}compare_extensionsCompare extensions
What the assistant reads
2 to 5 extensions side by side in ONE call (ids and/or names): users now, 30 and 90 days ago, users gained, rating and its 30-day change (store re-measures are flagged, they are not a change in sentiment), reviews held and the recent 1-2 star share, last update, releases in 90 days, Featured, maker, payment signs, plus a chart over days (7-365, default 90; chart users | rating | rating_count | none). Use this instead of several get_extension calls.
Arguments
ids- list of texts · up to 5; each: 32-letter store idListings by store id, for example from an earlier answer.
names- list of texts · up to 5; each: 2 to 80 charactersListings by name.
days- whole number · 7 to 365Days covered by the chart (default 90).
chart- text · users, rating, rating_count, noneWhat the chart shows.
Example
“Compare Grammarly, LanguageTool and QuillBot.”
{
"name": "compare_extensions",
"arguments": {
"names": ["Grammarly", "LanguageTool", "QuillBot"]
}
}get_historyHistory chart
What the assistant reads
Dated store history for 1 to 5 extensions (id/name, or ids/names in ONE call) over the last days (7-3650, default 90): users, rating and number of ratings. Returns, for the metric asked (default users), the start and end values with their days, the signed change, the low and the high with the first day each was held, and dated user steps. A rating move with no new ratings is a store re-measure (the store re-measured every rating in one day, 14 Oct 2026), not a change in sentiment. The chart can switch metric and window without another call.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
ids- list of texts · up to 5; each: 32-letter store idListings by store id, for example from an earlier answer.
names- list of texts · up to 5; each: 2 to 80 charactersListings by name.
metric- text · users, rating, rating_countWhich number to chart (default users).
days- whole number · 7 to 3,650Days of history (default 90).
Example
“How has Loom’s rating moved over 90 days?”
{
"name": "get_history",
"arguments": {
"name": "Loom",
"metric": "rating",
"days": 90
}
}find_risersTop risers
What the assistant reads
Extensions gaining the most users (basis: 'users', default) or ratings (basis: 'ratings') over 30 or 90 days (window d30 | d90), read from every listing in the crawl, inside a category, several categories, a subcategory or a topic, with users_min/users_max, min_gain, maker, ai, language, rating_min/rating_max, rating_count_min, publisher_size. Store user counts move in rounded steps, so small gains on large listings read as zero; each row has users then and now, the gain and the growth %. limit 1-15.
Arguments
category- text · up to 60 charactersA category, by slug or name, such as productivity.
categories- list of texts · 1 to 8; each: up to 60 charactersSeveral categories at once.
subcategory- text · up to 64 charactersA subcategory, by slug or name.
topic- text · up to 64 charactersA topic slug.
window- text · d30, d90Gains over 30 or 90 days.
basis- text · users, ratingsRank by users gained or by ratings gained.
users_min- whole numberAt least this many users.
users_max- whole numberAt most this many users.
min_gain- whole numberSmallest gain to include.
maker- text · indie, companyIndie developer or company.
ai- true or falsetrue keeps AI-powered listings only.
language- text · enen keeps English listings.
rating_min- number · 0 to 5Rating at least this.
rating_max- number · 0 to 5Rating below this (strict: 4 means under 4).
rating_count_min- whole numberAt least this many ratings.
publisher_size- text · solo, 2_5, 6_plusHow many listings the publisher has: 1, 2 to 5, or 6 or more.
limit- whole number · 1 to 15How many rows to return (at most 15).
Example
“Which productivity extensions gained the most users this month?”
{
"name": "find_risers",
"arguments": {
"category": "productivity",
"window": "d30"
}
}category_statsMarket stats
What the assistant reads
Market numbers for one category, subcategory or topic (slug; a name works too): listings, total users, top-10 share of users, size bands (1K / 10K / 100K / 1M+), how recently listings were updated, Featured and paid counts, medians, the 10 largest listings and the fastest risers. Or every group of a dimension (category | subcategory | topic, optionally inside parent) side by side. metric: 'growth' gives the NET user change over 30 and 90 days per category (gains minus losses) with the largest gain and loss. language 'en' counts English listings only. For a single count with other filters use search_extensions count_only.
Arguments
slug- text · up to 80 charactersOne category, subcategory or topic, by slug or name.
dimension- text · category, subcategory, topicLists every group of this kind side by side.
metric- text · listings, growthlistings for the market numbers, growth for the net user change per group.
parent- text · up to 64 charactersKeeps the groups inside this category.
benchmark- object · keys: users, ratingA users and rating pair: shows where a listing of that size would sit.
language- text · enen keeps English listings.
limit- whole number · 1 to 20How many groups to return.
Example
“How big is the developer tools market?”
{
"name": "category_stats",
"arguments": {
"slug": "developer-tools"
}
}launches_by_monthLaunches per month
What the assistant reads
How many extensions were first published in each month, for the last months (1-36, default 24), under the same filters as search_extensions (category, subcategory, topic, ai, language, users_min, rating_min, maker, publisher_size …). Returns the exact count per month (each with a link to that month's listings in Ext Watch), the total per calendar year, and the change against the same months a year before; the chart shows one line per year. Counts listings live in the store today (removed listings are not counted).
Arguments
months- whole number · 1 to 36Calendar months, ending with the current one (default 24).
to- textLast publish day to include.
category- text · up to 60 charactersA category, by slug or name, such as productivity.
subcategory- text · up to 64 charactersA subcategory, by slug or name.
topic- text · up to 64 charactersA topic slug.
niche- text · up to 64 charactersA niche slug.
ai- true or falsetrue keeps AI-powered listings only.
users_min- whole numberAt least this many users.
users_max- whole numberAt most this many users.
rating_min- number · 0 to 5Rating at least this.
rating_max- number · 0 to 5Rating below this (strict: 4 means under 4).
rating_count_min- whole numberAt least this many ratings.
updated_within_days- whole number · 1 to 3,650Updated in the last N days.
not_updated_days_min- whole number · 1 to 5,000No update for at least N days.
paid- true or falsetrue keeps listings with payment signs.
featured- true or falsetrue keeps listings the store marks as Featured.
maker- text · indie, companyIndie developer or company.
risk- text · low, medium, highPermissions risk level.
publisher_size- text · solo, 2_5, 6_plusHow many listings the publisher has: 1, 2 to 5, or 6 or more.
publisher- text · 2 to 120 charactersA publisher name.
has_website- true or falsetrue keeps listings that link a website.
language- text · enen keeps English listings.
name_contains- text · 2 to 60 charactersText the listing name must contain.
Example
“How many AI extensions launched each month this year?”
{
"name": "launches_by_month",
"arguments": {
"months": 12,
"ai": true
}
}get_launchesNew launches
What the assistant reads
The extensions first published in a window: window (today | yesterday | last_7_days | last_30_days | last_90_days | this_week | last_week | this_month | last_month), days (the last N days) or from and to (YYYY-MM-DD, UTC; one day = the same day in both). No window = the last 90 days held. Up to 92 days, or up to 366 days with users_min of 1000 or more. Launches are held up to the newest crawled day (usually yesterday in UTC); a window past it says so and shows the newest day held. Filters: category (a category, subcategory or store group such as productivity), subcategory, topic, ai, users_min, users_max, rating_min, language 'en', maker, paid, featured. Sorted by users | newest | users_per_day | ratings_gained_30d. Returns the exact total and a link to the same set (and the same days in the Launch calendar). For counts over time use launches_by_month.
Arguments
from- text · YYYY-MM-DDFirst publish day (default 90 days ago).
to- text · YYYY-MM-DDLast publish day (default today).
category- text · up to 60 charactersA category, by slug or name, such as productivity.
subcategory- text · up to 64 charactersA subcategory, by slug or name.
topic- text · up to 64 charactersA topic slug.
niche- text · up to 64 charactersA niche slug.
ai- true or falsetrue keeps AI-powered listings only.
users_min- whole numberAt least this many users.
users_max- whole numberAt most this many users.
rating_min- number · 0 to 5Rating at least this.
rating_max- number · 0 to 5Rating below this (strict: 4 means under 4).
rating_count_min- whole numberAt least this many ratings.
updated_within_days- whole number · 1 to 3,650Updated in the last N days.
not_updated_days_min- whole number · 1 to 5,000No update for at least N days.
paid- true or falsetrue keeps listings with payment signs.
featured- true or falsetrue keeps listings the store marks as Featured.
maker- text · indie, companyIndie developer or company.
risk- text · low, medium, highPermissions risk level.
publisher_size- text · solo, 2_5, 6_plusHow many listings the publisher has: 1, 2 to 5, or 6 or more.
publisher- text · 2 to 120 charactersA publisher name.
has_website- true or falsetrue keeps listings that link a website.
language- text · enen keeps English listings.
name_contains- text · 2 to 60 charactersText the listing name must contain.
sort- text · users, newest, users_per_day, ratings_gained_30dOrder of the rows.
limit- whole number · 1 to 25How many rows to return.
window- text · today, yesterday, last_7_days, last_30_days, last_90_days, this_week, last_week, this_month, last_monthGains over 30 or 90 days.
days- whole number · 1 to 366How many days back to look.
Example
“What launched lately that already has 1,000 users?”
{
"name": "get_launches",
"arguments": {
"users_min": 1000,
"sort": "users"
}
}list_reviewsReviews breakdown
What the assistant reads
What reviewers say about 1 to 5 extensions (id/name or ids/names): reviews held by star, the 1-2 star share with its two numbers, the last 90 days against the 90 days before, eight quarters, complaint and praise themes, and up to 8 short quotes. Filter quotes with rating (exact stars), stars_max, since_days (≤1095), keyword; sort newest | helpful. Ext Watch does not collect developer replies.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
ids- list of texts · up to 5; each: 32-letter store idListings by store id, for example from an earlier answer.
names- list of texts · up to 5; each: 2 to 80 charactersListings by name.
rating- whole number · 1 to 5Reviews with exactly these stars.
stars_max- whole number · 1 to 5Reviews with at most these stars.
since_days- whole number · 1 to 1,095Reviews from the last N days.
keyword- text · 2 to 40 charactersReviews that contain this word.
sort- text · newest, helpfulNewest or most helpful first.
limit- whole number · 1 to 8How many quotes to return.
Example
“What do unhappy Grammarly users say lately?”
{
"name": "list_reviews",
"arguments": {
"name": "Grammarly",
"stars_max": 2,
"sort": "newest"
}
}find_competitorsCompetitors
What the assistant reads
The closest rivals of one extension (id or name) by what they do, up to 10: users now and 30 days ago, rating, last update, ratings gained in 30 days, Featured, maker and payment signs. language: 'en' keeps English listings.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
language- text · enen keeps English listings.
limit- whole number · 1 to 10How many rows to return.
Example
“Who competes with Loom?”
{
"name": "find_competitors",
"arguments": {
"name": "Loom"
}
}get_publisherPublisher portfolio
What the assistant reads
One publisher (id or name; spellings such as 'Acme LLC' and 'ACME' are merged): its listings, total users and ratings, and its top extensions. Or rank publishers with rank_by (extensions | users) and extensions_min / extensions_max, users_min, maker. limit 1-25.
Arguments
id- text · up to 120 charactersOne listing, by its 32-letter store id.
name- text · up to 80 charactersOne listing by name. A name that fits several listings returns the choices.
rank_by- text · extensions, usersRanks publishers instead of reading one.
extensions_min- whole number · 1 or morePublishers with at least this many listings.
extensions_max- whole number · 1 or morePublishers with at most this many listings.
users_min- whole numberAt least this many users.
maker- text · indie, companyIndie developer or company.
limit- whole number · 1 to 25How many rows to return.
Example
“Which publishers have the most users?”
{
"name": "get_publisher",
"arguments": {
"rank_by": "users",
"limit": 15
}
}get_opportunitiesBuild ideas
What the assistant reads
Build ideas ranked by Ext Watch's Build score: tab worth (gaps worth building), weak (large incumbents with weak ratings), abandoned (popular listings with no update for a long time); filter by category, subcategory, users_min; sort score | users. Each row has the score, its parts, the reasons and payment signs. limit 1-10.
Arguments
tab- text · worth, weak, abandonedworth: gaps worth building. weak: large listings with weak ratings. abandoned: popular listings with no recent update.
category- text · up to 60 charactersA category, by slug or name, such as productivity.
subcategory- text · up to 64 charactersA subcategory, by slug or name.
users_min- whole numberAt least this many users.
sort- text · score, usersOrder of the rows.
limit- whole number · 1 to 10How many rows to return.
Example
“Show me gaps worth building.”
{
"name": "get_opportunities",
"arguments": {
"tab": "worth"
}
}get_monetizationPayment signs
What the assistant reads
Whether 1 to 10 extensions charge money (id, ids or names): sells paid plans (with the price range when found), payment signs on its site, payment signs in the listing only, free (site checked), or no payment evidence found (never proof that it is free). Ext Watch holds no revenue, sales or install figures: never estimate them.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
ids- list of texts · up to 10; each: 32-letter store idListings by store id, for example from an earlier answer.
names- list of texts · up to 10; each: 2 to 80 charactersListings by name.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
Example
“Do Grammarly, Loom and QuillBot charge money?”
{
"name": "get_monetization",
"arguments": {
"names": ["Grammarly", "Loom", "QuillBot"]
}
}get_collectionCollections
What the assistant reads
Ext Watch's curated collections. Without slug: the list of collections with how many extensions each holds. With slug: its extensions and why each one is in it. limit 1-25.
Arguments
slug- text · up to 80 charactersOne collection. Leave it out to list them all.
limit- whole number · 1 to 25How many rows to return.
Example
“Which collections does Ext Watch have?”
{
"name": "get_collection",
"arguments": {}
}get_changesChanges
What the assistant reads
What changed on 1 to 5 extensions (id, ids or names) over the last days (1-365, default 30): releases with permissions added or removed, rating and user moves, publisher, status, listing text, screenshot, icon and Featured changes, newest first. Filter with kinds. limit 1-30.
Arguments
id- text · 32-letter store idOne listing, by its 32-letter store id.
ids- list of texts · up to 5; each: 32-letter store idListings by store id, for example from an earlier answer.
names- list of texts · up to 5; each: 2 to 80 charactersListings by name.
kinds- list of texts · up to 10; each: version, permissions, ownership, rating, status, users, listing_text, screenshots, icon, featuredKinds of change to keep.
days- whole number · 1 to 365Days back (default 30).
limit- whole number · 1 to 30How many rows to return.
name- text · 2 to 80 charactersOne listing by name. A name that fits several listings returns the choices.
Example
“What changed on Grammarly in the last 60 days?”
{
"name": "get_changes",
"arguments": {
"names": ["Grammarly"],
"days": 60
}
}Limits
AI apps are part of Silver and Gold. These are the limits for each plan today.
| Limit | Silver | Gold |
|---|---|---|
| Credits a month | 3,000 | 15,000 |
| Credits a day, at most | 400 | 2,000 |
| Calls a day | 250 | 1,000 |
| Calls an hour | 120 | 400 |
| Calls a minute, whole account | 20 | 60 |
| Calls a minute, per connection or key | 15 | 40 |
| Rows in one answer, at most | 25 | 25 |
| Rows a day | 600 | 2,000 |
| Rows a month | 6,000 | 20,000 |
| API keys at once | 3 | 10 |
- Each tool’s cost is shown above. Most questions use 1 to 3 credits.
- A call that fails or is refused costs nothing.
- Credits refill each month. Daily limits reset at 00:00 UTC.
- Every answer says how many credits it used and how many are left.
- Free and Bronze don’t include AI apps.
Data freshness
- We read the public Chrome Web Store ourselves. Most listings are read again every day.
- Every number in an answer carries the day it was read, and each answer says how fresh its data is.
- History builds up from the day we started tracking a listing. A missing day shows as a gap, not a zero.
- The store rounds large user counts and sometimes re-measures every rating at once. Answers point these out.
- We hold no revenue, sales or install figures, and the tools never estimate them.
Sign-in and access
Sign-in (OAuth)
When you add the address, your app opens an Ext Watch sign-in page. You sign in and press Allow. The app gets read-only access to the tools and nothing else: not your password, not your settings. Sign-in tokens are short-lived and renew on their own.
API keys
For apps that can’t sign in. Make one in Ext Watch under Settings, then AI assistant, then API keys, and send it as the header Authorization: Bearer ew_live_…. Never put a key in the address. Keys count toward the same plan limits.
Disconnect or revoke
- In Ext Watch: Settings, then AI assistant. Under Connected AI apps, press Disconnect (or Disconnect all). Under API keys, press Revoke. The app loses access within a minute.
- In your assistant: remove the Ext Watch connector as well.
- If your plan changes to Free or Bronze, connections stay saved but lookups pause. Nothing is deleted.
For developers
- A request without a valid token gets HTTP 401 with a
WWW-Authenticateheader that points to the protected resource metadata. Apps use it to find the sign-in server. - OAuth 2.1 with PKCE (S256), dynamic client registration and rotating refresh tokens.
- Scope
mcp:read. Tokens can be revoked atPOST https://app.extwatch.com/api/oauth/revoke(RFC 7009).
What we keep
Your assistant sends only the tool name and its arguments. We never receive your chat, your files or anything else in the conversation.
- For each call: the tool, a fingerprint of its arguments (not the arguments), the result status, the rows and credits used, and the time. Kept 30 days.
- For failed requests: the error, the app’s name and browser type. Kept 30 days.
- Each connection: the app’s name, when it connected and when it was last used, until you disconnect it.
More in our privacy policy.
Errors
A limit or a problem comes back as a normal tool answer marked as an error, so your assistant can tell you what happened. The code is in the answer’s structured content.
plan_required- Ext Watch data in AI apps is part of Silver and Gold, with a link to the plans.Move to Silver or Gold, then ask again. Connecting and listing tools work on every plan.
no_credits- You are out of credits for this month, with the day they refill.Wait for the refill day, or move to Gold for more credits.
daily_credit_cap- You have used today’s credit ceiling.It resets at 00:00 UTC.
quota_exceeded- You have reached today’s call limit.It resets at 00:00 UTC.
daily_row_cap- You have reached today’s limit on results.It resets at 00:00 UTC.
monthly_row_cap- You have reached this month’s limit on results, with the reset day.Wait for the day it names.
rate_limited- Too many requests at once, with the seconds to wait.Wait that long. Assistants usually retry on their own.
blocked- Access is paused on this account because of unusual bulk use.Write to support@extwatch.com.
No listing with that name- Nothing in our crawl matches the name.Check the spelling, or use the store id from the listing’s address.
Too large / took too long- The answer would be too big, or the read took too long.Ask for fewer rows or a shorter window.
Arguments could not be read- A name, filter or value is not one the tool accepts.The assistant usually fixes this itself. The tables above list what each tool accepts.
Tool failed (ref …)- Something failed on our side.Try again in a minute. If it keeps failing, send the ref to support@extwatch.com.
HTTP 401- The sign-in has ended or was removed.Your assistant shows Connect again. Sign in once more.
HTTP 400 on a key in the address- Keys never go in the URL.Send the key as an Authorization: Bearer header.
Troubleshooting
It keeps showing Connect, or a tool is missing
Remove Ext Watch from your assistant and add it again. Assistants keep a copy of the tool list from when you connected, so a fresh connection picks up the current tools and sign-in.
Afterwards you can tidy up old entries in Ext Watch: Settings, then AI assistant, then Connected AI apps.
- Claude. Settings, then Connectors: remove Ext Watch. Add a custom connector again with the same address and sign in.
- ChatGPT. Settings, then Apps & Connectors: delete Ext Watch. Create it again with the same address and sign in.
- Cursor. Delete the extwatch entry from mcp.json and save. Paste it back, save, then click Connect.
- Claude Code. Run claude mcp remove extwatch, then claude mcp add --transport http extwatch https://app.extwatch.com/api/mcp, then /mcp to sign in.
The sign-in window doesn’t finish
Allow pop-ups for your assistant, sign in to app.extwatch.com in the same browser, then try Connect again.
If it still stops, remove and re-add the connector.
It worked before and now asks me to sign in
A connection you haven’t used for about a month, or one you disconnected in Settings, needs a fresh sign-in. Click Connect and sign in.
Copying one connection’s settings to a second device can also end it. Connect each device on its own.
It says Ext Watch data is part of Silver and Gold
The account you signed in with is on Free or Bronze. Move to Silver or Gold, or remove the connector and sign in with the paid account.
I see text but no cards or charts
Cards and charts show in apps that support MCP Apps, such as Claude. Other apps get the same answer as text.
If Claude showed cards before and stopped, start a new chat. If that doesn’t help, remove and re-add the connector.
A name returns a list of choices
Several listings share that name. Pick one in the chat, or ask with the store id from the listing’s address.
A number differs from the store page
Each number shows the day we read it. The store rounds large user counts and sometimes re-measures ratings, so a same-day look can differ a little.
My app can’t sign in at all
Make an API key in Settings, then AI assistant, then API keys. Send it as Authorization: Bearer ew_live_…, never in the address.
Changelog
- 15 tools, with cards and charts in apps that support MCP Apps, such as Claude.
- Store icons come with each answer, so cards show them everywhere.
- Sign-in from claude.ai and ChatGPT in the browser works.
- Sign-in connections list only the research tools.
- Cards get a new address when they change, so Claude loads the newest version.
Help
Questions or a problem not listed here: support or support@extwatch.com. To report a security issue, see Security.