DataDoe + CursorAdd DataDoe to Cursor’s mcp.json and the agent can read Seller Central, Vendor Central and Amazon Ads in one schema while it writes your scripts, dashboards and repricers. When the code needs to change something on Amazon, Cursor asks first, and you can preview the change as a dry run.
import os, requestsfrom lib.datadoe import load_export, start_actionMIN_MARGIN = 0.18API = "https://api.datadoe.com/api/v1"KEY = {"datadoe-api-key": os.environ["DATADOE_API_KEY"]}accounts = requests.get(f"{API}/util/sellers-and-vendors", headers=KEY).json()rows = load_export("listings_with_fees_and_cogs")for r in rows: floor = (r["cogs"] + r["fees"]) / (1 - MIN_MARGIN) if r["price"] < floor: start_action("AMAZON_LISTINGS_PRICING_UPDATE", sku=r["sku"], price=round(floor, 2), dry_run=True)
Run actions_start live for these 6 SKUs?
One server entry gives Cursor’s agent your Amazon accounts in every chat, in the CLI and, if your team wants it, in Cloud Agents.
Authorize Seller Central, Vendor Central and Amazon Ads on Amazon’s own consent pages. No SP-API developer registration of your own.
Use .cursor/mcp.json for one repository or ~/.cursor/mcp.json for every project. Keep any servers already in the file.
Pick the DataDoe organization that holds your Amazon accounts. The server speaks Streamable HTTP, so there is no SSE address to add.
DataDoe should show as enabled in Cursor’s MCP settings. If it doesn’t, open the Output panel and choose MCP Logs.
.cursor/mcp.json{
"mcpServers": {
"datadoe": {
"url": "https://mcp.datadoe.com/mcp/v1"
}
}
}Recommended. Cursor finds that DataDoe needs a sign-in and opens your browser. Nothing secret sits in the file, so it is safe to commit for the whole team.
~/.cursor/mcp.json{
"mcpServers": {
"datadoe": {
"url": "https://mcp.datadoe.com/mcp/v1",
"headers": {
"datadoe-mcp-key": "${env:DATADOE_MCP_KEY}"
}
}
}
}For machines with no browser. Create the key in DataDoe under Integrations → MCP, export it as DATADOE_MCP_KEY, and Cursor fills it in when the app reads the environment variable. Keep keys out of shared repos.
terminalagent mcp login datadoe
agent mcp list-tools datadoe
agent "Use DataDoe to list my connected Amazon accounts"The CLI reads the same mcp.json as the editor. Sign in once, list the tools to confirm the connection, then ask.
Cloud Agents: add a custom HTTP server named DataDoe with https://mcp.datadoe.com/mcp/v1. An admin can share it from Dashboard → Plugins & MCPs; each person still signs in.
No mystery wrapper. These are tools from the DataDoe MCP server that the agent picks on its own while it works. You see each call in the chat, and Cursor asks before it runs one unless you’ve allowlisted it.
| Tool | What it does | When the agent reaches for it |
|---|---|---|
| Find and read data | ||
exports_sources_get | Searches the data sources by Amazon or business keywords and says why each one matched. | First, whenever a request names a metric it hasn’t seen yet. |
exports_source_get | Loads a source’s columns, up to 40 per call, and flags when there are more pages. | Before it writes a query or a type, so field names come from your schema. |
exports_create | Creates an export of the rows it needs. | When a script or dashboard needs the full table, not a summary. |
| Change things on Amazon | ||
actions_details_schema_get | Returns the payload schema and access mode for an Action type. | Before it builds a listing, price or Ads change. |
actions_start | Starts an Action. With dryRun=true it validates the payload and sends nothing to Amazon. | Preview it as a dry run if you like, then go live once you say yes. |
actions_get | Reports the status of one Action. | While a live change is still being processed. |
actions_list | Lists past Actions. | When you ask what changed on Amazon, and when. |
Run agent mcp list-tools datadoe to see every tool your organization has. Usage counts against the AI Tokens in your plan.
Each one used to start with a week of SP-API plumbing. With DataDoe connected, the agent starts from data that is already loaded, so the prompt is the spec.
A Python job that posts yesterday’s profit by SKU to Slack before the team logs in, with ad spend and refunds already netted out.
A small Next.js page the warehouse team can open: days of cover per ASIN, what’s inbound, and what to reorder this week.
Prices never drop below what each SKU needs to keep its margin. The Featured Offer estimate shows the price that still wins.
Moves converting search terms into exact-match targets and trims bids on terms that spend past break-even, account by account.
Agencies run the same code across every client account: the sellers-and-vendors endpoint lists each connected account, so one loop covers them all.
Cursor can write an SP-API client for you. It will also be the one debugging token refreshes, report polling and throttling at 2 a.m. This is what one orders pull looks like each way.
# 1. Trade the seller's refresh token for an access token tok = requests.post("https://api.amazon.com/auth/o2/token", data={ "grant_type": "refresh_token", "refresh_token": REFRESH, "client_id": LWA_ID, "client_secret": LWA_SECRET}).json()["access_token"] # 2. Ask for a report, then wait for Amazon to build it R = "/reports/2021-06-30" rep = sp_post(f"{R}/reports", tok, { "reportType": "GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL", "marketplaceIds": [US], "dataStartTime": since}) rid = rep["reportId"] while (s := sp_get(f"{R}/reports/{rid}", tok))["processingStatus"] != "DONE": time.sleep(30) # and handle FATAL, CANCELLED, 429s... # 3. Fetch the document, decompress, parse the TSV doc = sp_get(f"{R}/documents/{s['reportDocumentId']}", tok) rows = parse_tsv(gunzip(requests.get(doc["url"]).content)) # 4. Repeat per marketplace and region. Ads API: separate auth.
import os, requests r = requests.get( "https://api.datadoe.com/api/v1/util/sellers-and-vendors", headers={"datadoe-api-key": os.environ["DATADOE_API_KEY"]}) # Every Seller, Vendor and Ads account, already # connected and loaded. Orders, settlements and # ad spend sit in one schema, keyed by SKU and ASIN. # Or skip the code: ask Cursor's agent, # it calls DataDoe over MCP.
A repricer or bid tool is only useful if it can act. DataDoe Actions let your code and Cursor’s agent update listings, prices, A+ Content and Amazon Ads, on terms you set.
dryRun=true validates the payload without sending it to Amazon. It works even while the Action type is still off, so you can build and test first.actions_start off your allowlist and every live change waits for your click.actions_list shows what ran, when and with which payload. Listing changes can take a few hours to show on Amazon after that.actions_startdry runRun actions_start again with dryRun: false?
Cursor reads project rules from .cursor/rules on every request. Five lines keep the agent on DataDoe, on the right account and in dry-run mode until you say otherwise.
.cursor/rules/amazon.mdc--- description: Amazon data and changes through DataDoe alwaysApply: true --- # Amazon work in this repo - Read Amazon data through the DataDoe MCP server, never by scraping Seller Central. - Load a source's columns with exports_source_get before writing types or queries. - Name the marketplace and account in every query; we sell in more than one. - Any change on Amazon: call actions_start with dryRun=true first and show me the result. - Never put DATADOE_MCP_KEY or DATADOE_API_KEY in code, commits or chat.
DataDoe is one MCP server and one REST API, so a team can mix editors without connecting Amazon twice.
Open .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project, and add an entry under mcpServers. A remote server like DataDoe needs only a name and a url; local servers use command and args instead. The server then appears (reload the window if it doesn't) in Cursor’s MCP settings, where you can switch it on or off. If it fails to connect, the Output panel has an MCP Logs channel.
https://mcp.datadoe.com/mcp/v1. It speaks Streamable HTTP. With the plain url entry, Cursor opens a browser sign-in to DataDoe. If you prefer a key, add a headers object with datadoe-mcp-key and point it at an environment variable with ${env:DATADOE_MCP_KEY}.
No. You authorize DataDoe on Amazon's consent pages for Seller Central, Vendor Central and Amazon Ads, and DataDoe handles tokens, report jobs and throttling. If you want calls to run under your own SP-API or Ads application, that is an optional add-on.
Use MCP while you build: Cursor's agent explores the schema, writes queries and tests them in the chat. Use the REST API at https://api.datadoe.com/api/v1 with a datadoe-api-key header for code that runs on its own, such as a cron job or a dashboard backend. Both read the same data.
Only through DataDoe Actions you have switched on, on an Amazon account set to Read and write. Price updates are a separate Action type from listing edits. Any Action can be validated with dryRun=true first, Cursor asks before it runs an MCP tool unless you allowlist it, and every Action is logged.
Yes. The Cursor CLI reads the same mcp.json as the editor, and agent mcp login datadoe handles the sign-in. For Cloud Agents, add a custom HTTP server named DataDoe with the same URL; a team admin can share it from the dashboard, and each person signs in with their own DataDoe account.
Orders, settlements, fees, returns, inventory, listings, Vendor Central retail analytics and purchase orders, Brand Analytics and Amazon Ads, in 130+ tables. About two years of history are loaded when you connect, and most data refreshes daily, with orders and some other tables several times a day.
Nothing: Cursor bills you separately. DataDoe is $97 a month after a 14-day free trial, with unlimited Amazon account connections. MCP and the REST API are included; MCP usage counts against the AI Tokens in your plan.
Every DataDoe organization gets a free 30-minute call each month with the Deltologic engineers who build on SP-API every day.
Book your free callConnect Seller Central, Vendor Central and Amazon Ads once. Cursor’s agent reads them while it codes, and changes them only when you say so.
We use cookies to improve your experience and analyze traffic. By clicking "Accept", you agree to our use of cookies. Read the Cookie Policy.