Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "get_ungate_brands"; changed the definition of "start_a2a_finder_scan" and "start_reverse_source_scan" (69 tools before, 70 now)
⟨41 unchanged words⟩ FR"]); defaults to all. Uses theshareduser'sKeepasavedscanKeepa key if they've added one in settings; otherwise the shared scan key (which counts againstthe user'stheir daily scan credits). Returns a job_id —pollpoll get_a2a_finder_status(job_id) for results. Premium feature.
⟨25 unchanged words⟩ flip it. Up to 250 ASINs. Uses theshareduser's saved Keepa key if they've added one in settings; otherwise the shared scan key (which counts againstthetheiruser'sdailyscan credits). Returns a job_id — poll ⟨6 unchanged words⟩
The curated Sorsa ungate brand list (~1300 brands), each with a representative ASIN that can be run through request_ungate_check. Use this to look up the ASIN for a brand the user names (e.g. "can you ungate me for Adidas?" -> find Adidas here -> request_ungate_check([that asin])), or to enumerate/batch brands. Pass `search` to filter by brand substring. Returns {count, brands:[{brand, asin}]}. `count` is the full list size even when `search`/`limit` narrows the returned rows.
Added "confirm_ungate_supplier", "create_finder_monitor", "get_ungate_status" and 2 more (64 tools before, 69 now)
Record that a supplier's invoice got the user approved (ungated) for a brand. This increments that supplier's confirmation count for the brand so other users see which suppliers actually work.
Create a LIVE Keepa Product Finder monitor from the same filters as find_products. It runs on the user's OWN Keepa key and sends a Discord alert to `webhook_url` whenever a NEW product starts matching the filters — the saved/recurring version of find_products. REQUIRED: a `name` for the monitor and a Discord `webhook_url` (https://…) — ALWAYS ask the user for their webhook URL; never invent one. The user must also have their Keepa key connected (call get_keepa_key_status first). Provide at least one filter (same semantics/units as find_products). This creates…
Status + outcome of an ungate job. Status is queued | in_progress | completed | failed | expired; outcome (when set) is approved, already_approved, documents_required, not_accepting_applications, login_required or unknown. While status is 'queued' or 'in_progress', CALL THIS AGAIN after a short wait (e.g. 20-40s) — the job is processed by the user's extension serially. For 'documents_required' the response also includes Amazon's requirements text, a `suppliers` list for the brand/category, and `suggested_asins` (easier wins in the same brand). For 'login_requi…
Changed the definition of "find_products"
⟨230 unchanged words⟩ ":null,"title":"Min Reviews"},"min_sellers":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Min Sellers"},"page":{"default":0,"title":"Page ⟨6 unchanged words⟩
Added "add_purchase", "create_listing", "generate_sku" and 3 more (58 tools before, 64 now)
Add an item the user has BOUGHT to their Items Purchased list (the next step after sourcing). Returns the created item incl. its `id` — use that id with generate_sku and create_listing. cost is per unit; sourced_from is the retailer/site they bought from. projected_sale_price: default this to the product's 90-day average price (from analyse_product) and tell the user what you've set — don't guess a price. It's what create_listing will list at unless changed.
Create the Amazon listing for a purchased item — the final step. Requires the item to have an ASIN, a listing_sku (run generate_sku first) and a sale price. SALE PRICE RULE: set `sale_price` to the product's 90-day average price (from analyse_product) as a sensible default — but ALWAYS tell the user the price you're about to list at and get their OK first. Never invent a price. If sale_price is omitted, the item's existing projected_sale_price is used (and the call fails if it has none). fulfillment: AMAZON_EU (FBA) or DEFAULT (FBM). This creates a REAL live …
Generate a SKU for a purchased item (from its title/cost/qty using the user's SKU convention) and save it to the row. Pass the `id` returned by add_purchase or shown in get_items_purchased. Do this before create_listing. Returns the item with its new listing_sku.
Added "find_products" and "get_keepa_key_status" (56 tools before, 58 now)
Search Amazon via Keepa's Product Finder and return the matching ASINs (up to 100). Runs on the USER'S OWN Keepa key — call get_keepa_key_status first; if not connected, tell them to add their key in Sorsa Settings. Provide at least one filter. Prices are in the marketplace's currency (e.g. £ for UK). marketplace: UK, US, DE, FR, IT, ES. Drop filters find items whose price fell by a % over a period — set any of drop_1d/7d/30d/90d (e.g. drop_30d=20 = 'dropped 20%+ in 30 days'), applied to drop_type: BUY_BOX_SHIPPING, AMAZON, or PRIME_EXCL. category is a Keepa…
Whether the user has connected their own Keepa API key (needed for find_products). If not connected, tell them to add it in Sorsa Settings. Never returns the key itself.
Certificate recorded, valid to 2026-11-24
Authorization not required
First tool surface recorded: 56 tools (server version 1.28.1)
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Suppliers (manufacturers / authorised distributors / wholesalers that issue proper invoices) for a brand or category, with how many Sorsa users confirmed each one got them ungated for that brand. Provide a brand and/or a category.
Request an ungate check for one or more gated ASINs. For each ASIN this confirms it's gated (via the eligibility check) and, if so, QUEUES a job that the user's Sorsa browser extension works through — it opens the Seller Central approval request in their own logged-in session and reports the outcome. Returns per-ASIN results, each one of: 'not_gated', 'already_approved', 'checking' (eligibility still resolving — re-call shortly), 'recent_attempt', 'queue_full', or 'queued' with a `job_id` (and the brand's auto-approval rate when known). Jobs run STRICTLY ONE AT A …
Whether the user has connected their own Google Sheet (a deployed Apps Script web app) that run_sheet_action can trigger. If not connected, tell them to add their web-app URL in Sorsa Settings. Never returns the URL.
Trigger a function on the user's OWN connected Google Sheet by POSTing to their deployed Apps Script web app. Call get_sheet_status first; if not connected, tell them to connect their sheet in Sorsa Settings. `action` is the name their script's doPost dispatches on (e.g. 'send_invoice', 'add_row'). `params` is a dict of values that action needs. The user's email is always sent automatically, so the script can target the right row/recipient. Only do what the user asked — don't invent actions or params. If you're not sure which action name or params the user's scri…
Set the cost of goods (COG) for a SKU — the per-unit price the user paid. Feeds profit/ROI across the whole app and the repricer's floors. cost in the user's currency (e.g. £). Pass cost=0 or empty to clear it.