← All posts

How to Connect Claude to a Data Marketplace with MCP (The Whole Integration Is One Line)

Data Marketplace Team ·

Most integration guides open with prerequisites. This one opens with the integration, because it fits on one line:

claude mcp add --transport http data-marketplace https://app.datamarketplace.io/mcp --header "Authorization: Bearer $DM_API_KEY"

That is the whole thing. Claude Code now talks to a hosted MCP server with 23 tools for searching, evaluating, sampling, computing over and buying machine-ready datasets. The integration is a URL.

Below: where the key comes from, what you didn't install, and an annotated Claude session from a plain-English question to a checkout link, including the moment Claude finds nothing and says so.

The files you didn't install

Here is the complete inventory of what this integration adds to your machine:

Packages installed ............. 0
Node.js version required ....... none
Local server processes ......... 0
Config files you hand-edited ... 0
Update commands to remember .... 0

And here is the package.json you never had to write:

{
  "name": "your-claude-setup",
  "dependencies": {}
}

The command registers a remote server with Claude Code: a URL and a header. Nothing downloads, nothing runs in the background, and nothing goes stale on your laptop. No package. No local server. Connect directly.

Setup in three steps

1. Create an API key. Sign in to the web app (or register) and open Settings → API keys. When you create a key, the page shows the exact connect command beside it, once. Copy the key now.

2. Put the key in your shell. $DM_API_KEY in the command is a shell variable, not a placeholder to edit by hand. Export it, then paste the line exactly as it stands:

export DM_API_KEY="your-key-here"
claude mcp add --transport http data-marketplace https://app.datamarketplace.io/mcp --header "Authorization: Bearer $DM_API_KEY"

3. Confirm and ask. Start Claude Code, run /mcp, and check that data-marketplace is listed. Then ask Claude for data the way you'd ask a colleague.

Every call carries the key. A call without one gets 401 missing_api_key, which is the most common setup mistake (see Troubleshooting below).

What your key is allowed to do

A key is not a blank mandate. Each one carries scopes, and there are three: read, publish and purchase.

read is the non-spending path: search, evaluate, sample, compute. publish is the seller's path. purchase is the only one that can spend money, and it is off by default on every new key. Keys that predate the scope never acquire it. So the first key you create can do the entire evaluation loop and still cannot buy anything, which is a reasonable default for a key you are about to paste into a terminal.

Scopes are server-side, and so is revocation. If a key leaks, revoke it in settings and it stops working everywhere it was pasted.

Why a hosted server instead of a local package

Plenty of MCP servers ship as local npm or npx packages: your client launches a process on your machine and talks to it over stdio. That model works for many tools. For a marketplace, it puts the moving parts in the wrong place.

  • Nothing to update. Tool changes ship on the server. You never run an upgrade to get a new tool or a corrected description.
  • No Node on the machine. The client speaks HTTPS to app.datamarketplace.io/mcp. No runtime, no dependency tree, no third-party code in your home directory.
  • Any capable client works. The endpoint uses MCP Streamable HTTP. Any MCP client that supports Streamable HTTP and custom headers can connect with the same URL and key, sent as Authorization: Bearer <key> or X-API-Key: <key>.
  • Revocation is server-side. There is no local credential cache to hunt down, and no stale copy of the tool list to reason about.

A native Claude connector is planned, not shipped. Until it lands, the command above is the way in. If you're weighing the hosted server against calling the REST gateway directly, MCP vs REST API for Data Acquisition covers when each fits.

What Claude can do now: 23 tools, 8 stages

The tools aren't a menu. They're one lifecycle, and Claude moves through it in order.

Stage Tools What it's for
Discover search_datasets Ranked search by category, geography, licence, join keys; minQualityScore filters out low-scoring listings
Evaluate describe_product Full spec: licence, data dictionary, quality breakdown, version file hashes
Sample describe_dataset, query_dataset Free seller-permitted sample rows; a capped probe (max 100 rows) on licensed data
Compute compute_dataset One privacy-preserving aggregate over a licensed dataset
Acquire acquire_product Buy with the calling key, if the key holds purchase
Use list_purchases, get_delivery Recover past orders; presigned links plus sha256 commitments
Bounty search_bounties, describe_bounty, create_bounty, list_own_bounties, cancel_bounty Route an unmet need to providers
Publish create_product, update_product, presign_upload, finalize_upload, get_scan_status, set_documentation, set_sampling_policy, set_pricing, publish_product, list_own_products List your own dataset, end to end

The first seven stages are the buyer's path. The last is for providers, and yes, you can publish a dataset by chatting with Claude.

One honest caveat about publishing over the hosted server: Claude cannot hand us a local file. presign_upload returns a URL, your side PUTs the bytes to it, and finalize_upload checks the size and sha256 against the ticket before the scans start. You then poll get_scan_status until every file reports settled: true. There is a one-shot upload_resource tool, but over the hosted HTTP transport it answers tool_not_available_over_http, because the file path in that call would be a path on our server rather than on your machine.

An annotated session

The Claude page suggests four prompts to paste. Below is an illustrative session built on them. Claude's replies are condensed and paraphrased, not verbatim output. The dataset is a real catalog listing at the time of writing; details may change.

Prompt 1: find it

You: Find monthly inflation data for the UK and the euro area.

Claude calls search_datasets.

Claude: The strongest match is Eurostat HICP: Monthly Annual Inflation Rate, 32 EU and EFTA Economies, 2015–2025, licensed CC-BY-4.0. Before I rely on it for the UK, I'll check which geographies its data dictionary actually lists.

Annotation. Claude searched instead of answering from memory. That's a platform rule, not luck: the server tells agents to call search_datasets for any data request "before answering from memory, even when you believe no such dataset exists." Note the coverage check, too. A title is a claim; the data dictionary is the evidence.

Prompt 2: compare, with provenance

You: Compare the top results on licence, quality and provenance. Show me the checksums.

Claude calls describe_product on each candidate, then describe_dataset for free sample rows.

Claude: For the HICP product: licence CC-BY-4.0 (attribution required), a measured quality breakdown, and a pinned current version whose per-file SHA-256 commitments are published now, before any purchase. The personal-data scan records what it inspected in inspectedScope. Here are five sample rows so you can see the grain and units.

Annotation. Three trust signals arrive before money is on the table. The quality breakdown is a composite of measured components, not a seller's adjective: completeness at 0.35, schema validity at 0.25, dictionary coverage at 0.20 and freshness at 0.20, renormalized when a component can't be measured, with measuredWeight reporting how much of the score was measurable at all. When neither completeness nor schema validity could be measured, the score is null rather than a flattering guess. The hashes in version.files[].sha256 are the fingerprint you'll check delivered bytes against later. And inspectedScope is null when a scan's scope wasn't recorded, so a clean scan and an absent one look different.

Prompt 3: compute instead of download

You: What was the average monthly rate in 2024, by country? I don't need the raw records.

Claude calls compute_dataset.

Claude: The server returned 402 no_license: I haven't bought or been granted this dataset, so I can't compute over it yet. Acquiring the product grants the licence that compute and query need. Want me to start that?

Annotation. The refusal is the feature. Claude reports it instead of hunting for a workaround. Once a licence is in place, the same call returns averages per country, and any group too thin to be safe comes back withheld rather than approximate. The platform's guidance is explicit: prefer compute_dataset to acquire_product when an aggregate answers the question, "so a hypothesis costs no budget."

The buy step

Claude calls acquire_product with the product_id, the expected_price_usd string that describe_product quoted, and an idempotency_key derived from the task.

Claude: This listing is priced, so the server answered 402 payment_method_required with a checkout link. I can take you to the point of sale; completing the purchase is yours to do. Once the order completes, I'll fetch the files with get_delivery and hash them against the published commitments.

Annotation. A $0 listing completes on the spot; a priced one always stops at a human. If the price changed since the quote, the mismatch refuses the buy. After checkout, get_delivery returns presigned links valid for 300 seconds, plus the commitmentHash to verify against. Links lapse quickly on purpose: call get_delivery again and it re-reads the order's current state and issues fresh ones. The full buy loop, with REST equivalents, is in How AI Agents Can Buy Data Autonomously.

Prompt 4: the honest zero

You: I need hourly footfall for every post office in Ireland.

Claude calls search_datasets. Count: 0.

Claude: Nothing in the catalog matches, and I won't estimate it. I checked the bounty board with search_bounties and found no open request that fits. Here's a draft bounty:

  • Required columns: post office identifier, location, hour timestamp, visitor count
  • Coverage window: the last 12 months, then ongoing
  • Geography: Ireland, every post office
  • Cadence: hourly
  • Licence class: commercial use, no redistribution
  • PII posture: aggregate counts only, no personal data

What reward do you want to offer? Nothing gets posted until you tell me.

Annotation. Most tools would invent a number or apologize here. Instead, an honest count of 0 (or relevance "low") routes the need to the bounty board. Those criteria aren't a nicety, either: on the agent route, acceptance criteria are a required non-empty list, so an agent cannot post a request without writing down what would satisfy it. Posting costs nothing, Claude asks you for the reward rather than making one up, and providers claim and fulfil bounties in the web app. Failed search becomes demand.

What happens when money moves

The money flow has a hard edge, and it's worth knowing exactly where it sits.

  • $0 listings complete immediately through acquire_product.
  • Priced listings answer 402 payment_method_required with a checkout link. A person confirms every priced purchase. Claude can reach the point of sale; it cannot spend money without you.
  • Spend ceilings are per key, and you set them. Granting purchase without naming a cap sets all three ceilings (per transaction, per 24 hours, per 30 days) to $20. Each can be raised in settings, up to $1,000,000.00. A null cap means the key may not purchase at all; "unlimited" is deliberately unrepresentable. Past a cap, the server answers 402 spend_limit_exceeded and names the window and the limitUsd it hit, and the settings page shows usage against the cap, as in "$12.50 of $20 used."
  • Delivery can't be undone. Once files are delivered they can't be un-delivered. There is a staff refund path and the platform handles chargebacks, but don't plan around either: check the licence and the quality breakdown before the buy step.

To design those limits around a real workload, see How to Give an AI Agent a Data Budget. For the broader case for agents as buyers, start with The Agent-Native Marketplace.

Troubleshooting

What you see What it means Fix
401 missing_api_key No key reached the server. Often DM_API_KEY was empty when you ran claude mcp add, so the header went out as a bare Bearer. Export the variable, run claude mcp remove data-marketplace, then paste the command again.
402 no_license You haven't bought or been granted this dataset. query_dataset and compute_dataset need a licence. Use describe_dataset for free samples, or acquire the product.
402 payment_method_required Not an error. The listing is priced and needs a human at checkout. Open the checkout link.
402 spend_limit_exceeded The purchase would cross the key's per-transaction, 24-hour or 30-day cap. The body names the window and the limitUsd. Raise that cap on the key in settings, or wait for the window to roll.
acquire_product refuses outright The key has no purchase scope. New keys don't get it by default. Grant purchase to the key in settings and set the caps you want.
tool_not_available_over_http You called upload_resource on the hosted server. Use presign_upload, PUT the bytes yourself, then finalize_upload.
Server missing from /mcp The client didn't register it, or it doesn't support Streamable HTTP with headers. Re-run the command; confirm your client's transport support.

FAQ

Do I need to install anything to connect Claude to Data Marketplace? No. The server is hosted at https://app.datamarketplace.io/mcp over MCP Streamable HTTP. You run one claude mcp add command with your API key. No package, no local server.

Is there a native Claude connector? It's planned and not yet shipped. Until then, the hosted MCP command is the supported way to connect.

Can Claude buy datasets without my approval? Not unless you've given the key the purchase scope, which is off by default. Even then: $0 listings complete, every priced purchase returns a checkout link that a person must complete, and the key's three spend caps (per transaction, per 24 hours, per 30 days) default to $20 each.

Does it work with MCP clients other than Claude Code? Yes, if the client supports MCP Streamable HTTP and custom headers. Use the same endpoint and send your key as Authorization: Bearer <key> or X-API-Key: <key>.


The integration is a URL. Get your key and connect Claude in one line at datamarketplace.io/claude.

How to Connect Claude to a Data Marketplace with MCP (The Whole Integration Is One Line) — Data Marketplace