DataDoe + Cursor

Build on Amazon data without writing an SP‑API client

Add 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.

  • MCP and REST APIMCP + API
  • Writes off by defaultOff until enabled
  • 14-day free trial14 days free
• Cursor MCP setup

The exact config. Four steps, once.

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.

  1. 1

    Connect Amazon to DataDoe

    Authorize Seller Central, Vendor Central and Amazon Ads on Amazon’s own consent pages. No SP-API developer registration of your own.

  2. 2

    Add the server to mcp.json

    Use .cursor/mcp.json for one repository or ~/.cursor/mcp.json for every project. Keep any servers already in the file.

  3. 3

    Sign in when Cursor asks

    Pick the DataDoe organization that holds your Amazon accounts. The server speaks Streamable HTTP, so there is no SSE address to add.

  4. 4

    Check the tools loaded

    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.

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.

• Under the hood

What Cursor’s agent actually calls

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.

DataDoe MCP tools used by Cursor’s agent
ToolWhat it doesWhen the agent reaches for it
Find and read data
exports_sources_getSearches 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_getLoads 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_createCreates 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_getReturns the payload schema and access mode for an Action type.Before it builds a listing, price or Ads change.
actions_startStarts 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_getReports the status of one Action.While a live change is still being processed.
actions_listLists 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.

• What people build

Four Amazon tools worth an afternoon in Cursor

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.

Script

Morning profit digest

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.

Files the agent writes

  • digest.py
  • cogs.csv
  • .env.example
  • crontab

Reads

OrdersSettlementsAds spend
Internal dashboard

Stock-out board for ops

A small Next.js page the warehouse team can open: days of cover per ASIN, what’s inbound, and what to reorder this week.

Files the agent writes

  • app/stock/page.tsx
  • lib/datadoe.ts
  • lib/cover.ts

Reads

FBA inventoryRestockInbound
Repricer

Margin-floor repricer

Prices never drop below what each SKU needs to keep its margin. The Featured Offer estimate shows the price that still wins.

Files the agent writes

  • repricer/rules.py
  • repricer/run.py
  • tests/test_floor.py

Reads and writes

ListingsFee estimatesFeatured offerPrice update
PPC tooling

Search-term harvester

Moves converting search terms into exact-match targets and trims bids on terms that spend past break-even, account by account.

Files the agent writes

  • ppc/harvest.py
  • ppc/breakeven.py
  • ppc/report.md

Reads and writes

Search termsTargetsMarginTargets addTargets update

Agencies run the same code across every client account: the sellers-and-vendors endpoint lists each connected account, so one loop covers them all.

• DataDoe vs raw SP-API

Same question, a fraction of the code

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.

Raw SP-API

Orders, one marketplace
# 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.

With DataDoe

Every account
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.
• Write access

Code that changes Amazon, after you approve it

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.

Off until you switch it on
Every Action type is disabled for a new organization. You enable the ones you want in Settings → Actions, and the Amazon account must be set to Read and write.
Dry run whenever you want one
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.
Cursor asks before each call
MCP tools follow Cursor’s run modes. Keep actions_start off your allowlist and every live change waits for your click.
Every Action is logged
actions_list shows what ran, when and with which payload. Listing changes can take a few hours to show on Amazon after that.
• Project rules

Write the house rules once

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.
• Other places to build

Not on Cursor? Same server.

DataDoe is one MCP server and one REST API, so a team can mix editors without connecting Amazon twice.

Working in a chat app instead? Claude ChatGPT Gemini Any MCP client
FAQ

Before you edit mcp.json.

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.

Building something bigger?

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 call
• Get started

Your next Amazon tool starts in mcp.json.

Connect Seller Central, Vendor Central and Amazon Ads once. Cursor’s agent reads them while it codes, and changes them only when you say so.

  • MCP and REST API
  • Seller, Vendor and Ads
  • Optional dry run on writes
  • $97/mo after 14 days free