Skip to the content
Agent Tools

Catalog QA Desk in Cursor

Check product CSVs and feeds. The MCP server is https://catalogqa.openkrill.app/mcp. No key. The steps below are only for Cursor. A call to csv_import_preflight was checked against that server on 2026-10-17.

Connection
Streamable HTTP
API key
None needed
Rate limit
60 calls a minute
Protocol
MCP 2024-11-05

Questions it answers

Check an online store's product catalog before you import it or send it to a shopping feed.

Ask "will this Shopify product CSV import cleanly?", "what would Google Merchant Center reject in my catalog?", "which products have no image alt text or a copied description?" or "write me a sheet that fixes the empty alt text".

Catalog QA Desk checks a Shopify product CSV against the import rules (required columns, handles, options, duplicate variants, prices, statuses, image URLs, barcodes mangled by a spreadsheet) and returns the rows that block the import and the ones that import wrongly, each with the fix.

It checks products for Google Merchant Center feed rules: missing or invalid barcodes (GTIN length and check digit), titles that are too long, promotional or in capitals, missing descriptions, links in descriptions and missing images.

It audits listing text: images without alt text, descriptions copied between products, thin descriptions and title problems; and it builds an advisory CSV of corrected titles and alt text for you to review and import yourself.

You can pass the CSV text (up to 2 MB), or a store address: the store's public product feed (/products.json, at most 5 pages of 250 products) is read once, after its robots.txt, only when you ask. Large stores often block that feed, and then a CSV is needed.

It drafts a listing from a product photo: the product type, the brand and model only when printed on the item, a likely brand marked as a guess, colour, visible wear, a title and bullet points, and what to ask the seller. The photo is read once by Google Gemini on its unpaid plan and is not kept.

It does not use the Shopify admin API, does not log in to any store, changes nothing in a store and does not submit anything to Google. Nothing you send or read is stored, no catalog is kept or indexed, and there is no account; only a daily count of calls per tool is recorded.

What it can do

  • Checks a Shopify product CSV before import and lists blocking rows and warnings, each with the fix
  • Finds products Merchant Center would reject: bad or missing GTINs, long or promotional titles, empty descriptions
  • Finds images without alt text, copied or thin descriptions and title problems
  • Builds a CSV of corrected titles and alt text to review and import; changes nothing in the store
  • Reads a store's public product feed once on request, after robots.txt, instead of a CSV
  • Drafts a listing from a product photo, with the brand and model only when printed on the item

Tools

  • csv_import_preflight, Check a product CSV before import. Best for: "will this Shopify CSV import?" or "what is wrong with my product file?". Checks the Shopify import rules: columns, handles, options, duplicate variants, statuses, value types (price, weight, quantity, true/false), image URLs, GTIN check digits and barcodes a spreadsheet mangled. Returns: blocking findings (Shopify rejects them or imports them wrong) and warnings, up to 200 each, each with row, handle, rule, fix and doc (the rule's source page), plus totals. Input tips: send csv, the full file text from Shopify admin (Products > Export), header row first, up to 2 MB; a larger file is refused with csv_too_large, split it by rows. Not for: Merchant Center title and description rules or a store address (use merchant_feed_check), or listing text (use listing_text_audit).
  • merchant_feed_check, Check products for Merchant Center rules. Best for: "what would Google Merchant Center reject?" or "are my barcodes valid?". Checks GTIN length and check digit, duplicate GTINs, long, promotional or all-capital titles, missing descriptions, links, images, brand and price. Returns: a summary (products, no_gtin, bad_gtin, long_title, no_description), up to 200 issues (one per product and rule, with detail) and notes on checks that could not run. Input tips: send exactly one of csv (a Shopify product CSV or a Google Merchant feed file) or domain (a store address such as example.com). Domain mode reads the public product feed once, after robots.txt. That feed has no barcodes, so no_gtin and bad_gtin are null; use a CSV for GTINs. Errors: both_given, missing_source, csv_too_large, or a feed refusal such as not_public; then ask for the CSV. Not for: Shopify import errors (use csv_import_preflight) or alt text (use listing_text_audit). It submits nothing to Google.
  • listing_text_audit, Audit product listing text. Best for: "which products have no alt text?", "are any descriptions copied?" or "which descriptions are too thin?". Returns: four lists, up to 100 entries each: no_alt (images without alt text), duplicate_descriptions, thin_descriptions and title_issues, with totals before the cut. Input tips: send exactly one of csv (a Shopify product CSV) or domain (a store address such as example.com); optional min_words, the word count below which a description is thin (default 20). Domain mode reads the public product feed once, after robots.txt. Errors: both_given, missing_source, csv_too_large, or a feed refusal; then ask for the CSV. Not for: writing the fixes (use listing_fix_sheet), GTINs or Merchant Center rules (use merchant_feed_check).
  • listing_fix_sheet, Build a CSV of listing text fixes. Best for: "write the alt text for my images" or "fix the shouting titles". Builds a CSV of corrected titles and image alt text to review and import. Returns: csv with only the rows that change (URL handle, Title, Product image URL, Image position, Image alt text), 200 rows in one call (pass next_offset for more), with counts per fix and a notice. It changes nothing in any store. Input tips: send exactly one of csv or domain. Optional fixes, any of alt_text, title_whitespace, title_caps (default all three), and alt_text_template with {title}, {vendor}, {type}, {position} (default "{title}"). Errors: both_given, missing_source, csv_too_large, or a feed refusal; then ask for the CSV. Not for: rewriting descriptions or changing a live store. Run listing_text_audit first to see what is wrong.
  • describe_product_photo, Draft a listing from a product photo. Use this when the user has a photo of an item they want to sell or list (eBay, Shopify, Etsy, a marketplace post) and wants a listing draft from it. Pass the photo as file, image_url (a public https link) or image_base64. Returns the product type, the brand and model only when printed on the item (a brand guessed from the design comes apart as likely_brand, marked as a guess), colour, material, visible wear, items shown with it, a title under 80 characters, bullet points, and what to ask the seller. One JPEG, PNG, WebP or HEIC image up to 8 MB. It never invents a model number, a size or a condition grade. The photo goes once to a free Google Gemini model and nothing is kept. Not for photos of people, or for checking whether an item is genuine.

Add Catalog QA Desk in Cursor

Cursor reads MCP servers from mcp.json. A project file at .cursor/mcp.json applies to that project. A user file at ~/.cursor/mcp.json applies everywhere. These steps were checked against the Cursor MCP docs on 2026-10-01. Streamable HTTP is the transport: a url, not a shell command.

Create or edit the file so it contains this server. Merge it with servers you already have. Do not replace the whole file if other servers are listed.

{
  "mcpServers": {
    "catalog-qa": {
      "url": "https://catalogqa.openkrill.app/mcp"
    }
  }
}

No headers and no auth block. Those are for servers that require a token or a pre-registered OAuth client. Catalog QA Desk answers without either. Saving the file is the install. Open Cursor Settings, then MCP, and confirm Catalog QA Desk is enabled. If it stays disconnected, reload the window. You should see csv_import_preflight, merchant_feed_check, listing_text_audit, listing_fix_sheet, describe_product_photo.

In Agent chat, ask: Will this Shopify product CSV import cleanly? Cursor calls the tool over streamable HTTP and shows the arguments before it runs them, depending on your run mode. Approve the call the first time and read the result. The server is public and read-only. It does not see your repository unless the model puts repository text into the arguments, so do not paste secrets into the question.

A one-click Marketplace install does not exist for this server. The JSON above is the whole setup. Team admins can distribute the same url through a team marketplace, but that is an admin step, not something this page can do for you. OAuth redirect URLs in the Cursor docs matter only for servers that require sign-in. Skip them here.

If it does not work

The tool does not show up

Open Cursor Settings, then MCP, and check the server is enabled. If it stays disconnected, reload the window. Check that the entry sits under mcpServers and has a url, not a command.

429 or rate_limited

Each server takes 60 calls a minute from one network, and some tools take fewer. Past that the call comes back as a tool error that starts with rate_limited: wait a minute and ask again. daily_limit means the server reached its shared daily cap, which resets at 00:00 UTC. A limit is not an answer, so do not read it as no results. For higher limits, ask support@openkrill.app for a key.

A call checked on 2026-10-17

A two-column Shopify product CSV is enough for the import preflight to return row findings. The request below was posted to https://catalogqa.openkrill.app/mcp as tools/call. HTTP 200. Source: the Catalog QA Desk server, read 2026-10-17.

{
  "method": "tools/call",
  "params": {
    "name": "csv_import_preflight",
    "arguments": {
      "csv": "Handle,Title,Variant Price\nmug,Blue mug,12\n"
    }
  }
}
  • warnings. 1 returned

Repeat the call yourself if you need a newer reading. Cached answers expire. A rate limit is not a result: wait and try again. Nothing in the call is a ranking, a filing, or advice.

Using it in production

Nothing to install and nothing to run: no package, no Python or Node.js version and no environment variable. Catalog QA Desk runs on our servers, and your client only needs the URL https://catalogqa.openkrill.app/mcp.

Rate limit60 tool calls a minute from one network. initialize and tools/list do not count.
Daily cap25000 tool calls a day per server, shared by every caller. It resets at 00:00 UTC.
At a limitThe call comes back as a tool error that starts with rate_limited (wait a minute) or daily_limit (try after 00:00 UTC), never as a partial answer.
KeyNone. Do not add an Authorization header or a key field.
Higher limitsEmail support@openkrill.app with the server name, the calls a day you expect and what they are for. We answer within 1 business day.
FreshnessSome answers come from a short cache. Each guide shows the date of its checked call; repeat a call when you need a newer reading.
UptimeScheduled test calls check the servers through the same endpoint. There is no SLA yet.
DataWhat each server receives and keeps is on the privacy page.

Use it in other apps

Roles that use Catalog QA Desk

Frequently asked questions

How do I install the Catalog QA Desk MCP server in Cursor?

Add catalog-qa with the url https://catalogqa.openkrill.app/mcp under mcpServers in .cursor/mcp.json or ~/.cursor/mcp.json and save the file. Then confirm it is enabled in Cursor Settings, then MCP.

Do I need an API key to run Catalog QA Desk in Cursor?

No. This server takes no API key. For higher limits, email support@openkrill.app with the server name (Catalog QA Desk), the calls a day you expect and what they are for. We answer within 1 business day.

What should I do if Catalog QA Desk does not connect in Cursor?

Check that the entry has a url and no command, headers or auth block, then reload the Cursor window and look in Cursor Settings, then MCP.

Words on this page

Source: plugin listing for catalog-qa in this repository, and a live tools/call on 2026-10-17. As of 2026-10-17.