Skip to content

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.

Server addresshttps://app.extwatch.com/api/mcp

What 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)

  1. In Claude, open Settings, then Connectors, and click Add custom connector.
  2. Name it Ext Watch and paste the server address: https://app.extwatch.com/api/mcp
  3. Click Connect, sign in to Ext Watch and press Allow.
  4. Start a chat and ask. Claude picks the tool it needs.

ChatGPT

  1. In ChatGPT, open Settings, then Apps & Connectors. Under Advanced, turn on Developer mode.
  2. Click Create, name it Ext Watch and paste the server address: https://app.extwatch.com/api/mcp
  3. Sign in to Ext Watch and press Allow.
  4. In a new chat, pick Ext Watch and ask.

Cursor

  1. In Cursor Settings, open MCP and click Add new MCP server.
  2. Paste the snippet below into the file that opens, then save.
  3. Click Connect next to Ext Watch, sign in and press Allow.
mcp.json
{
  "mcpServers": {
    "extwatch": { "url": "https://app.extwatch.com/api/mcp" }
  }
}

Claude Code

  1. Run the command below in your terminal.
  2. Type /mcp inside Claude Code, choose extwatch and sign in.
  3. Ask your question.
Terminal
claude mcp add --transport http extwatch https://app.extwatch.com/api/mcp

Other apps

  1. 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.
  2. 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 extensions

1 to 3 credits (1 per 10 rows shown)Up to 25 rowsRead-only

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

2 creditsUp to 1 rowsRead-only

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

2 creditsUp to 5 rowsRead-only

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

1 creditUp to 5 rowsRead-only

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

2 creditsUp to 15 rowsRead-only

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

2 creditsUp to 25 rowsRead-only

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

2 creditsUp to 36 rowsRead-only

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

1 to 3 credits (1 per 10 rows shown)Up to 25 rowsRead-only

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

1 creditUp to 5 rowsRead-only

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

1 creditUp to 10 rowsRead-only

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

1 to 3 credits (1 per 10 rows shown)Up to 25 rowsRead-only

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

2 creditsUp to 10 rowsRead-only

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

1 creditUp to 10 rowsRead-only

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

1 to 3 credits (1 per 10 rows shown)Up to 25 rowsRead-only

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

1 creditUp to 30 rowsRead-only

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.

LimitSilverGold
Credits a month3,00015,000
Credits a day, at most4002,000
Calls a day2501,000
Calls an hour120400
Calls a minute, whole account2060
Calls a minute, per connection or key1540
Rows in one answer, at most2525
Rows a day6002,000
Rows a month6,00020,000
API keys at once310
  • 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-Authenticate header 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 at POST 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.