MCP server / Setup

Connect the MCP server

One remote endpoint, Streamable HTTP, stateless. The data and free tools need no token: paste the URL and ask.

Endpoint
https://mcp.arcadiumdata.io/mcp
Auth
None needed (14 tools, 25 calls a day per IP). Optional Authorization: Bearer <key> with a free Arcadium Data API key for your plan's limits. The live scraping tools need an Apify token instead.
Server
io.arcadiumdata/mcp v0.3.0, server card at /.well-known/mcp/server-card.json

Claude (claude.ai and Claude Desktop)

  1. Open Settings → Connectors and choose Add custom connector.
  2. Name: Arcadium Data. URL: https://mcp.arcadiumdata.io/mcp. Leave the auth fields empty.
  3. In a chat, enable the connector from the tools menu and ask, for example: "What changed at spotify.com in the last 30 days?"

To send your API key from Claude Desktop, use the mcp-remote bridge in claude_desktop_config.json:

{
  "mcpServers": {
    "arcadium-data": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.arcadiumdata.io/mcp",
               "--header", "Authorization: Bearer ${ARCADIUM_API_KEY}"],
      "env": { "ARCADIUM_API_KEY": "<your key>" }
    }
  }
}

Claude Code

claude mcp add --transport http arcadium-data https://mcp.arcadiumdata.io/mcp

# optional: your API key for your plan's limits
claude mcp add --transport http arcadium-data https://mcp.arcadiumdata.io/mcp \
  --header "Authorization: Bearer $ARCADIUM_API_KEY"

Check with claude mcp list; in a session, /mcp shows the tools.

Cursor

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Drop the headers line to start without a key.

{
  "mcpServers": {
    "arcadium-data": {
      "url": "https://mcp.arcadiumdata.io/mcp",
      "headers": { "Authorization": "Bearer ${env:ARCADIUM_API_KEY}" }
    }
  }
}

ChatGPT

  1. In Settings → Apps & Connectors → Advanced settings, turn on Developer mode (available on the plans that support custom connectors).
  2. Create a connector: name Arcadium Data, MCP server URL https://mcp.arcadiumdata.io/mcp, authentication No authentication.
  3. Pick it in a chat from the tools menu. Every tool is marked read-only.

VS Code, Windsurf, Cline and your own agent

Any client that speaks remote MCP over Streamable HTTP works with the URL above. VS Code (.vscode/mcp.json):

{
  "servers": {
    "arcadium-data": { "type": "http", "url": "https://mcp.arcadiumdata.io/mcp" }
  }
}

Raw JSON-RPC, to test from a shell:

curl -s https://mcp.arcadiumdata.io/mcp \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"company_pulse","arguments":{"domain":"spotify.com"}}}'

Tag where you found us with ?src=<channel> on the URL or an X-Arcadium-Src header. We count calls per channel; we never log your inputs, key or IP address.

Limits and errors

  • No key: 25 calls a day per IP for the data and free tools. With an API key: your plan's limits.
  • Every answer is JSON with status (done, not_found, invalid_input, rate_limited with retryAfterSecs, auth_required), results, a note with the as-of date and coverage, and quota (calls left).
  • Live tools on Apify's own endpoint (https://arcadium--arcadium-mcp.apify.actor/mcp) need an Apify token on every request; runs are billed per result on that Apify account.

Tool reference

Generated from the server's own tools/list (v0.3.0, 22 tools). Every tool declares readOnlyHint: true and destructiveHint: false.

Data tools: our own database, no account needed

company_profile Company profile from our database

One-call company profile read from our own database (not a live scrape; company_hiring is the live one): hiring board and open jobs, daily hiring signals, tools named in its job ads, recent hiring events, Shopify store if any. Answers carry an as-of date; refreshed daily.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
domain (required)stringCompany website domain or URL, e.g. "stripe.com" or "https://www.notion.so".
{"domain": "stripe.com"}

company_pulse Dated change events of one company

What changed at a company lately? Dated events from all our datasets, keyed by website domain: hiring up/down, new country or function, ATS switch, first job ad with pay, tools added/removed in ads, Shopify apps, review velocity and rating moves, public contract awards. Each has occurredAt and observedAt. History since 2026-10-21; score off until 2026-12-20.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
domain (required)stringCompany website domain or URL, e.g. "spotify.com" or "https://www.zalando.de".
types"hiring_up" | "hiring_down" | "new_country" | "new_function" | "ats_switch" | "pay_first_seen" | "review_velocity" | "rating_change" | "shop_app_installed" | "shop_app_removed" | "tech_added" | "tech_removed" | "tender_awarded"[]Only these event types, e.g. ["hiring_up", "new_country"]. Default: all.
sincestringEvents on or after this day (YYYY-MM-DD); default and earliest 90 days ago.
maxEventsintegerEvents to return, newest first, 1-200.
{"domain": "spotify.com"}

pay_bands Posted pay bands by country and occupation

What do job ads actually pay? Posted-pay p25 / median / p75 in EUR (plus local-currency median) per country and ISCO-08 occupation group, weekly, from open jobs in our database that state a salary. Thin cells are suppressed. Answers carry the week and as-of date.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
country (required)stringCountry, ISO alpha-2, comma-separated, e.g. "DE" or "DE,NL".
iscostringISCO-08 2-digit groups, e.g. "25,21"; "ALL" = every posting of the country. Default all groups.
maxRowsintegerRows to return, 1-200.
{"country": "DE", "isco": "25"}

pay_transparency Pay transparency tracker (EU directive)

Which share of job ads state pay? Daily share of open jobs and of employers posting pay per country and employer size, with the EU Pay Transparency Directive status and a fixed-panel share for clean trends. Newest first; default last 28 days. Answers carry the day.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
countrystringCountries, ISO alpha-2, comma-separated, e.g. "DE,FR"; default all.
sizeBand"all" | "1-9" | "10-49" | "50-249" | "250+"Employer size by open jobs: "all", "1-9", "10-49", "50-249" or "250+".
sincestringFirst day, YYYY-MM-DD, e.g. 2026-09-01; default 28 days ago.
maxRowsintegerRows to return, 1-200 (newest first).
{"country": "DE,FR", "sizeBand": "all"}

city_rate_curve Forward hotel-rate curve and demand index

What will hotels in a city cost over the next 90 nights, and which nights are busy? Daily median rate (3/4/5-star), demand index (100 = city median night), spike/soft flag and 7-day pickup, from our daily hotel-price snapshots. Unknown city lists the available ones. Answers carry the snapshot date.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
city (required)stringCity name or slug, e.g. "barcelona" or "Lisbon".
fromstringFirst check-in night, YYYY-MM-DD, e.g. 2026-11-01; default tomorrow.
tostringLast check-in night, YYYY-MM-DD, e.g. 2026-11-30.
maxNightsintegerNights to return, 1-120.
{"city": "barcelona", "from": "2026-11-01"}

review_velocity Review momentum of one company

Is one company's review momentum changing? Narrow form of review_panel: per day, its apps, software and chain listings rolled up by ticker (or by name): rating, count change over 1/7/28 days, new and removed reviews, reply rate. Derived metrics only, no texts. Last 28 days; answers carry the day.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
tickerstringStock ticker of one company, e.g. "DUOL". Use this or `entity`.
entitystringCompany or product name when no ticker is known, e.g. "Duolingo".
maxRowsintegerDays (rows) to return, 1-60, newest kept.
{"ticker": "DUOL"}

tenders_expiring Public contracts that end soon (re-tender radar)

Which public contracts in a sector and country come up for renewal, who holds them now and when the follow-up call is expected? Awarded EU TED and UK Find a Tender contracts by end date, soonest first: buyer, current holder (organisation + website when stated), value band (frameworks flagged), expected re-tender window.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
countrystringBuyer country, ISO alpha-2, comma-separated, e.g. "DE,AT"; GB for the UK.
cpvstringCPV prefixes, 2-8 digits, comma-separated, e.g. "72" (IT services) or "90910000" (cleaning).
monthsFromintegerContracts ending at least this many months from today.
monthsTointeger...and at most this many months from today.
minValueEurnumberContract value at least this many EUR.
maxContractsintegerContracts to return, 1-25.
cursorstring`nextCursor` from the previous call, to get the next page.
{"country": "DE", "cpv": "72", "monthsFrom": 3, "monthsTo": 18}

ats_market ATS market share and companies that switched ATS

Applicant tracking system market from our archive of public job boards since 2023: monthly share per vendor (Greenhouse, Workday, Ashby, SmartRecruiters; Lever to 2025-10), wins/losses, today’s live share across 10 ATS, or (view "switches") companies that moved ATS, dated, by domain. Share among employers we observe, not the whole market.

read-only: yes · destructive: no · idempotent: yes · open world: no · $0.01 per call (free during the preview)

InputTypeDescription
view"share" | "switches"share = monthly share table; switches = company list.
ats"greenhouse" | "workday" | "ashby" | "lever" | "smartrecruiters" | "workable" | "personio" | "teamtailor" | "recruitee" | "oracle"[]share: only these ATS.
countrystringEmployer country, ISO alpha-2, e.g. "DE".
fromstringshare: first month, YYYY-MM.
tostringshare: last month, YYYY-MM.
includeLeverbooleanshare: the 5-vendor series with Lever (ends 2025-10).
fromAts"greenhouse" | "workday" | "ashby" | "lever" | "smartrecruiters" | "workable" | "personio" | "teamtailor" | "recruitee" | "oracle"switches: old ATS.
toAts"greenhouse" | "workday" | "ashby" | "lever" | "smartrecruiters" | "workable" | "personio" | "teamtailor" | "recruitee" | "oracle"switches: new ATS.
sincestringswitches: dated in or after this month, YYYY-MM.
maxRowsintegerRows to return, 1-100.
{"view": "switches", "toAts": "ashby"}

Free tools: daily snapshots, no account needed

company_signals Company hiring signals history (free)

What is a company's hiring doing? From our daily jobs database (21k+ company job boards): open jobs, 7/30-day net change, openings vs closures, new countries and cities, remote and pay share, department mix, tools named in job ads, recent events (market entry, ATS switch, hiring surge or freeze).

read-only: yes · destructive: no · idempotent: yes · open world: no

InputTypeDescription
domain (required)stringCompany website domain or URL, e.g. "stripe.com" or "https://www.notion.so".
{"domain": "stripe.com"}

hiring_events Company hiring events feed (free)

Which companies just started hiring in a new country, switched ATS, surged, froze hiring or opened a new department? Newest first from our daily jobs database; filter by type, date and country. Events marked provisional come from under 28 days of history.

read-only: yes · destructive: no · idempotent: yes · open world: no

InputTypeDescription
type"market_entry" | "ats_switch" | "hiring_surge" | "hiring_freeze" | "new_department"Only this event type, e.g. "hiring_surge"; default all types.
sincestringOnly events on or after this date, YYYY-MM-DD, e.g. 2026-10-01.
countrystringOnly events in this country (ISO alpha-2), e.g. "DE".
confirmedOnlybooleanHide provisional events (under 28 days of history).
maxEventsintegerEvents to return, 1-50.
{"type": "market_entry", "country": "DE", "since": "2026-10-01"}

review_snapshot Review rating trajectory of a tracked listing (free)

How is a hotel, restaurant, place or app rated, and is it changing? From our daily review snapshots (Google Maps, Booking.com, Tripadvisor, Capterra, App Store, Google Play): latest rating, review count, histogram, topics, daily history, and 30-day new reviews, average rating and owner-reply share. No review texts or names. Covers ~430 tracked listings; for others use search_reviews (paid).

read-only: yes · destructive: no · idempotent: yes · open world: no

InputTypeDescription
place (required)stringListing name (e.g. "Figma", "Mercure Paris Gare Montparnasse") or its URL on one of the platforms.
platform"googlemaps" | "booking" | "tripadvisor" | "capterra" | "appstore" | "googleplay"Only this platform, e.g. "booking"; default all.
daysintegerDays of daily history, 7-365.
maxListingsintegerMatching listings to return, 1-5 (the same business on several platforms counts as several).
{"place": "Grand Hotel Sunny Beach"}

review_panel Daily review velocity panel by ticker (free)

Is a listed company's review momentum changing? Daily point-in-time panel of its apps, software and chain listings: stated rating and count, 1/7/28-day count change, star-histogram shift, new/edited/removed reviews, reply rate, topic shares. Derived metrics only, no texts or names; rollup "ticker" = one row per ticker and day. Since 2026-10-22.

read-only: yes · destructive: no · idempotent: yes · open world: no

InputTypeDescription
tickerstringStock ticker(s), comma-separated, e.g. "DUOL" or "UBER,LYFT".
companystringProduct or company name when no ticker is known, e.g. "Duolingo".
platform"googlemaps" | "booking" | "tripadvisor" | "capterra" | "appstore" | "googleplay"Only this platform, e.g. "appstore"; default all.
sincestringFirst day, YYYY-MM-DD; default 28 days before `until`.
untilstringLast day, YYYY-MM-DD; default today.
rollup"ticker""ticker" = one row per ticker and day (counts summed).
maxRowsintegerRows to return, 1-200 (oldest day first).
{"ticker": "DUOL"}

Live tools: run one scraper on your Apify account, billed per result

search_reviews Search reviews (Tripadvisor, Booking.com, Google Maps, Capterra)

What do recent reviews say about a hotel, restaurant, place or software product? Newest reviews (rating, title, text, pros/cons, date, language, owner reply; no reviewer names) plus the listing summary. Pass a Tripadvisor, Booking.com hotel, Google Maps or Capterra URL, or a place name with its city.

read-only: yes · destructive: no · idempotent: no · open world: yes

InputTypeDescription
place (required)stringA review page URL (e.g. https://www.tripadvisor.com/Hotel_Review-g60763-d93450-Reviews-Hyatt_Grand_Central_New_York-New_York_City_New_York.html, https://www.capterra.com/p/135003/Slack/reviews/) or a name with the city, e.g. "Katz's Delicatessen New York".
source"auto" | "google_maps" | "tripadvisor"Where to look up a place NAME: google_maps (default for names) or tripadvisor. Ignored for URLs.
maxReviewsintegerReviews to return, 1-50 (newest first).
dateFromstringOnly reviews on or after this date, YYYY-MM-DD, e.g. 2026-01-01.
{"place": "https://www.booking.com/hotel/gb/the-savoy.html", "maxReviews": 20}

hotel_prices Hotel prices (Google Hotels)

What does a hotel cost on given dates? Google Hotels prices for a city or named hotels: per night, total, deal note ("30% less than usual"), cheapest booking site, rating, class; includeOffers adds the 5 cheapest booking sites per hotel.

read-only: yes · destructive: no · idempotent: no · open world: yes

InputTypeDescription
locationstringCity or area to search, e.g. "Paris" or "Shibuya, Tokyo".
hotelsstring[]Specific hotels (max 5): a name with its city, e.g. "The Savoy London", or a Google Hotels link.
checkInstringCheck-in date YYYY-MM-DD, or days from today such as "+30d" (default).
nightsintegerNights to stay, 1-30.
adultsintegerAdults, 1-10.
currencystringISO currency code for prices, e.g. USD, EUR, GBP.
maxHotelsintegerHotels to return for a location search, 1-20.
sortBy"relevance" | "lowest_price" | "highest_rating" | "most_reviewed"Order of a location search.
hotelClass"2" | "3" | "4" | "5"[]Only these star classes, e.g. ["4", "5"].
includeOffersbooleanAlso list the 5 cheapest booking sites per hotel (adds offer rows; always on for specific hotels).
{"location": "Lisbon", "checkIn": "2026-12-04", "nights": 2, "maxHotels": 10, "sortBy": "lowest_price"}

news Google News search

Search Google News for recent articles on a topic, company or person of public interest: title, publisher, real article URL, published time, snippet, how many outlets cover the same story.

read-only: yes · destructive: no · idempotent: no · open world: yes

InputTypeDescription
query (required)stringSearch text; Google News operators work, e.g. "Tesla recall", "\"open source\" AI -crypto".
timeRange"1h" | "1d" | "7d" | "30d" | "1y" | "any"Only articles from the last hour, day, 7 days, 30 days, year, or any time.
maxArticlesintegerArticles to return, 1-50.
languagestringEdition language, e.g. en, de, fr, es.
countrystringEdition country (ISO code), e.g. US, GB, DE, IN.
sitesstring[]Only these publisher domains, e.g. ["reuters.com", "ft.com"].
{"query": "Nvidia earnings", "timeRange": "7d", "maxArticles": 10}

youtube_transcript YouTube transcript

Get the full transcript (captions as plain text) of YouTube videos, with title, channel, publish date, duration, views and the caption languages available; can translate. Pass video URLs or ids (also Shorts); a channel or playlist URL returns its newest videos.

read-only: yes · destructive: no · idempotent: no · open world: yes

InputTypeDescription
videos (required)string[]1-5 YouTube video URLs or ids, e.g. "https://youtu.be/dQw4w9WgXcQ", or a channel/playlist URL.
languagestringPreferred caption language code, e.g. "en", "de"; default: the video's original captions.
translateTostringTranslate the transcript to this language code with YouTube's auto-translate, e.g. "en".
maxVideosintegerVideos to read from a channel or playlist URL, 1-5 (newest first).
maxCharsintegerCut each transcript to this many characters (1,000-100,000) so it fits your context.
{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "maxChars": 20000}

company_hiring Company hiring signals (ATS lookup)

Find which applicant tracking system (Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Personio, Recruitee, Teamtailor) a company hires on and its live hiring signals: open jobs, jobs posted in the last 30 days, top departments and countries, remote share, posted pay ranges. Pass company domains or careers-board links.

read-only: yes · destructive: no · idempotent: no · open world: yes

InputTypeDescription
companies (required)string[]1-10 company domains or careers-board links, e.g. "stripe.com", "https://jobs.lever.co/zoox", "ashby:openai".
{"companies": ["stripe.com", "notion.so"]}

Helper

get_run_results Get results of a running call

Fetch the results of an earlier tool call that answered with status "running". Pass its runId and the tool name.

read-only: yes · destructive: no · idempotent: yes · open world: no

InputTypeDescription
runId (required)stringThe runId from the earlier result, e.g. "aBcD1234efGh5678".
tool (required)"search_reviews" | "hotel_prices" | "trends" | "news" | "youtube_transcript" | "company_hiring" | "job_search"The tool that started the run, e.g. "search_reviews".
maxItemsintegerRows to read, 1-60.
maxCharsintegeryoutube_transcript only: cut each transcript to this many characters, e.g. 20000.
{"runId": "aBcD1234efGh5678", "tool": "search_reviews"}

Support

Questions, a tool you need, or a wrong answer: [email protected]. How we handle data: privacy policy. Where the data comes from: sources and method.