Scavio MCP Server
Scavio is a unified Web Search API and MCP server that gives AI agents web search, page extraction, and structured data from e-commerce, social, travel, jobs, real-estate, app-store, ad-library and company-filing sources. 272 tools across 40 platforms plus Extract, map, crawl and batch, one API key.
The 22 platforms added in 0.13.0 are opt-in. Registering all 272 tools puts ~260KB of tool definitions — roughly 65k tokens — into every session before you type anything. So the default is the platform set 0.12.x already had, plus Extract: 142 tools, 112KB. Upgrading never removes a tool you were using. Everything else is one env var away: see Choosing which tools load.
Remote MCP Server
Connect directly to Scavio's remote MCP server without any local installation:
https://mcp.scavio.dev/mcp
Two ways to authenticate:
- Sign in with OAuth, no key to copy. Claude Desktop, claude.ai and Claude Code sign in to your Scavio account through the server. In Claude Desktop or claude.ai: Settings > Connectors > Add custom connector, name it Scavio, paste the URL, then Connect and Authorize. In Claude Code:
claude mcp add --transport http scavio https://mcp.scavio.dev/mcp, then run/mcpand choose Authenticate. - API key. Pass it in the
x-api-keyheader. Get your key at scavio.dev.
Run Locally (npx)
Prefer to run the server on your own machine? Use npx with no clone or build. The server runs over stdio and only needs your SCAVIO_API_KEY.
Claude Code
claude mcp add scavio -e SCAVIO_API_KEY=YOUR_SCAVIO_API_KEY -- npx -y @scavio/mcp-server
Any MCP-Compatible Client (Claude Desktop, Cursor, Windsurf, VS Code, etc.)
{
"mcpServers": {
"scavio": {
"command": "npx",
"args": ["-y", "@scavio/mcp-server"],
"env": {
"SCAVIO_API_KEY": "YOUR_SCAVIO_API_KEY"
}
}
}
}
Requires Node.js 20+. Get your API key at scavio.dev.
Install
Claude Code
Sign in with OAuth, then run /mcp inside Claude Code and choose Authenticate:
claude mcp add --transport http scavio https://mcp.scavio.dev/mcp
Or pass an API key:
claude mcp add --transport http scavio https://mcp.scavio.dev/mcp --header "x-api-key: YOUR_SCAVIO_API_KEY"
Claude Desktop
No API key needed: Settings > Connectors > Add custom connector, name it Scavio, paste https://mcp.scavio.dev/mcp, then Connect and sign in to your Scavio account. The same steps work on claude.ai.
Or run the server locally. Add to claude_desktop_config.json (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"scavio": {
"command": "npx",
"args": ["-y", "@scavio/mcp-server"],
"env": {
"SCAVIO_API_KEY": "YOUR_SCAVIO_API_KEY"
}
}
}
}
Requires Node.js 20+. Restart Claude Desktop after saving.
Cursor
Or add to .cursor/mcp.json in your project root or ~/.cursor/mcp.json for global:
{
"mcpServers": {
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
}
}
VS Code
Create .vscode/mcp.json in your project root:
{
"servers": {
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
}
}
ChatGPT
- Go to ChatGPT > Settings > Apps & Connectors
- Click Add custom connector
- Enter the MCP server URL:
https://mcp.scavio.dev/mcp - Configure authentication with your API key
Cline
Add to cline_mcp_settings.json (open via Cline sidebar > MCP Servers > Configure):
{
"mcpServers": {
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
}
}
Zed
Add to settings (Cmd+,):
{
"assistant": {
"mcp_servers": {
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
}
}
}
Any MCP-Compatible Client
{
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY"
}
}
Choosing which tools load
Scavio exposes 272 tools. Loading all of them costs ~260KB of tools/list —
roughly 64k tokens of context in every session before the user has said anything,
and more tools than some clients will accept at all. So the server registers a
curated subset by default and lets you pick the rest. The sizes below are
measured, not estimated: npm run toolslist reproduces them.
SCAVIO_PLATFORMS is a comma-separated allowlist of platform keys:
| Value | Registers |
|---|---|
(unset) or default |
Every platform 0.12.x had, plus extract — 142 tools, 112KB |
all |
every platform — 272 tools, ~260KB |
extract,sec,g2 |
just those platforms — 18 tools, 21KB |
default,zillow,metaads |
the default set plus two more — 148 tools, 120KB |
default,chatgpt,gemini |
the default set plus ChatGPT and Gemini — 144 tools, 115KB |
none |
no platform tools, only get_usage |
Keys are matched case- and punctuation-insensitively, so meta-ads, metaads
and META_ADS are the same thing, and twitter resolves to x. An unknown key
is logged to stderr and skipped rather than failing the server.
get_usage always registers — it is free, and it is what every install guide
tells you to call to check the server works.
Platform keys: extract, google, chatgpt, gemini, youtube, tiktok, instagram,
reddit, x, linkedin, threads, kuaishou, amazon, walmart, ebay,
target, homedepot, costco, heb, kroger, mercadolibre, tiktok-shop, booking, airbnb,
tripadvisor, yelp, zillow, redfin, realtor, rightmove, indeed, glassdoor,
appstore, googleplay, g2, capterra, trustpilot, googleads, metaads, sec, companieshouse
Local (stdio)
{
"mcpServers": {
"scavio": {
"command": "npx",
"args": ["-y", "@scavio/mcp-server"],
"env": {
"SCAVIO_API_KEY": "YOUR_SCAVIO_API_KEY",
"SCAVIO_PLATFORMS": "extract,google,zillow,redfin"
}
}
}
}
Remote (HTTP)
The hosted server has no env var to read, so pass the allowlist per connection — either as a header or as a query parameter:
{
"scavio": {
"type": "http",
"url": "https://mcp.scavio.dev/mcp",
"headers": {
"x-api-key": "YOUR_SCAVIO_API_KEY",
"x-scavio-platforms": "extract,google,sec,companieshouse"
}
}
}
https://mcp.scavio.dev/mcp?platforms=all
Upgrading from 0.12.x
Nothing to do. The default set is exactly the 10 platforms 0.12.x registered, plus Extract — every tool you were using still loads. Those platforms keep gaining tools (Walmart grew from 2 to 7; TikTok, YouTube, Reddit and X gained 19 in 0.20.0; Extract gained map, crawl and batch in 0.21.0; Instagram gained 8 in 0.22.0; Google gained google_custom_search in 0.23.0), which is why the default count is now 142.
The 22 platforms added in 0.13.0 are opt-in. Add them additively:
SCAVIO_PLATFORMS=default,zillow,redfin,sec
One breaking fix worth knowing: search_walmart previously sent
fulfillment_speed: "anytime" on every call, which the API rejects. The
parameter is now today or tomorrow with no default.
Available Tools
Every tool costs 1 credit per call unless its section says otherwise. Several
platforms price per endpoint (YouTube, Instagram, LinkedIn, Kuaishou) or per
request body (Extract, Threads, Walmart); get_amazon_options and get_usage
are free.
Extract
| Tool | Description |
|---|---|
extract_url |
Read any web page and return it as clean Markdown, plain text, or raw HTML |
map_website |
List a site's page URLs from its sitemaps and start page, path-filtered, with lastmod when known |
crawl_website |
Crawl a site from one URL and extract every same-site page; waits up to wait_seconds and returns results, or the job id |
get_crawl_status |
A crawl's status, page counts, credits used and page results, paged by cursor; can wait for completion |
cancel_crawl |
Stop a running crawl; nothing more is billed, results so far stay readable |
batch_extract |
Extract a list of URLs in one job, results in input order; waits up to wait_seconds |
get_batch_status |
A batch's status and results, paged by cursor; can wait for completion |
cancel_batch |
Stop a running batch |
Extract is tier-priced by the mode parameter, not flat: normal (the default)
and advanced (renders JavaScript) cost 1 credit, ultra (for the hardest pages)
costs 2. Start at normal and escalate only when the
content comes back empty or blocked. You are billed only on a successful
extraction — a dead link, a bot wall or a timeout costs nothing. There is no
pagination: the whole page comes back in one call.
Map, crawl and batch (new in 0.21.0) are the multi-page operations:
- Pricing.
map_websitecosts 1 credit. Crawl and batch bill per successful page at Extract's price for the tier (normal 1, advanced 1, ultra 2); failed and skipped pages are free, and status and cancel calls are free. Credits are taken page by page, and a job stops cleanly withstopped_reason: "insufficient_credits"if the balance runs out. - Plan limits (max pages per crawl / active jobs / URLs per batch): Free 10 / 1 / 10, PAYG 100 / 1 / 50, Project 500 / 2 / 100, Bootstrap 2,000 / 3 / 500, Startup 5,000 / 5 / 1,000, Growth 10,000 / 10 / 1,000. Starting a job past the active-job limit returns a 429 that names the running jobs.
- Behaviour. Robots.txt is always obeyed for map and crawl. A crawl stays on the start URL's site (subdomains optional) and visits pages under the start path first. Results are kept for 3 days; a job runs for at most 6 hours.
- Built for tool-call time limits. MCP clients usually cancel a tool call
after about 60 seconds, so a crawl is a job, not one long call.
crawl_website/batch_extractstart the job and wait up towait_seconds(default 30, max 50): a small job comes back finished with its first page of results; a large one returns the job id (andwebhook_secret, shown only once, if you setwebhook_url).get_crawl_status/get_batch_statustake the samewait_secondsto long-poll, andcursorto page. - Output stays small. Status calls return 10 results per call by default
(
limitup to 100) and clip each page's content tomax_content_chars(default 4,000); clipped pages carrycontent_clipped: truenext to the fullcontent_length.map_websiteasks for 200 links when you set nolimit(the API default is 1,000). Every response that has more to read carries a_hintnaming the exact next call. Repeat a start call with the sameidempotency_keyand you get the original job back instead of a second one.
Google Search API
| Tool | Description |
|---|---|
search_google |
Web search (v2) with organic results, ads, and AI Overview |
google_custom_search |
Google results in the Custom Search JSON API format (items[], searchInformation, queries.nextPage) for code ported from CSE |
google_ai_mode |
AI Mode conversational answer with cited sources |
google_maps_search |
Search Google Maps for local businesses |
google_maps_place |
Place details: address, phone, hours, rating |
google_maps_reviews |
Reviews for a place with pagination |
google_shopping |
Product listings with price, store, and rating |
google_shopping_product |
Product detail and sellers |
google_shopping_stores |
More sellers for a product (pagination) |
google_flights |
Flight itineraries with prices and stops |
google_hotels |
Hotel search with prices and ratings |
google_hotels_detail |
Hotel property details |
google_news |
News results by query, topic, story, or publication |
google_trends |
Interest-over-time and related queries |
google_trending |
Trending searches |
ChatGPT and Gemini
| Tool | Description |
|---|---|
chatgpt_prompt |
Ask ChatGPT a prompt: the full Markdown answer, every cited page (title, publisher, date), the web searches it ran and the products it recommended |
gemini_prompt |
Ask Google Gemini a prompt: the full Markdown answer, the URLs it cites and the products it recommended |
For AI visibility and brand monitoring: ask what a buyer would ask ("best CRM for small
agencies") and see whether a brand is recommended, which competitors are, and which pages
the answer cites. Both tools return the same shape (answer.markdown, sources[],
search_queries[], shopping[]), so comparing assistants needs one parser. Every call is a
fresh answer and takes 10-40 seconds. ChatGPT costs 2 credits and Gemini 5 credits per answered
prompt; failed prompts are free.
Opt-in: add chatgpt and gemini to SCAVIO_PLATFORMS (e.g. default,chatgpt,gemini).
Docs: ChatGPT,
Gemini.
YouTube Data API
| Tool | Description |
|---|---|
search_youtube |
Search videos, channels, and playlists |
search_youtube_shorts |
Search short-form videos |
youtube_search_suggestions |
Get search autocomplete suggestions |
get_youtube_video |
Get full video details, chapters, and captions |
get_youtube_metadata |
Deprecated alias of get_youtube_video |
get_youtube_comments |
Get comments on a video with pagination |
get_youtube_comment_replies |
Get replies to a specific comment |
get_youtube_transcript |
Get a video transcript as plain text or SRT |
get_youtube_related |
Get videos related to a video |
search_youtube_channels |
Search channels by keyword |
get_youtube_channel |
Get channel profile by ID, handle, or URL |
get_youtube_channel_videos |
List a channel's videos |
get_youtube_channel_shorts |
List a channel's Shorts |
get_youtube_channel_community |
List a channel's community posts |
resolve_youtube_channel |
Resolve a handle or URL to a channel ID |
get_youtube_streams |
Get direct media stream URLs for a video |
get_youtube_community_post |
Get one community post: text, author, likes, images, comments cursor |
get_youtube_community_post_comments |
Get comments on a community post with pagination |
Credit cost varies: get_youtube_transcript costs 5, get_youtube_streams 3,
search_youtube and search_youtube_shorts 2, and every other YouTube tool 1.
get_youtube_related accepts a cursor but never returns one, so treat it as a
single page.
Amazon Product API
| Tool | Description |
|---|---|
search_amazon |
Search product listings across 22 marketplaces (no sort option) |
get_amazon_product |
Get full product details by ASIN |
get_amazon_offers |
List every seller offering an ASIN, with buy-box winner |
get_amazon_options |
List the supported marketplaces and their country codes (free) |
Walmart API
| Tool | Description |
|---|---|
search_walmart |
Search product listings with price and delivery filters |
get_walmart_product |
Get full product details by product ID |
get_walmart_reviews |
Customer reviews with ratings, text, author, date and the rating breakdown |
get_walmart_category |
Products within a category, same product shape as search |
get_walmart_offers |
The buy-box offer for a product: price, seller, condition, buy-box flag |
get_walmart_seller |
Marketplace seller storefront: name, rating, Pro Seller badge, business details |
get_walmart_seller_products |
A seller's catalogue; total_count is the real size |
get_walmart_stores |
Stores near a US ZIP or Canadian postal code, nearest first, with store_id, address, distance and hours |
Walmart is priced by the request body, not at a flat rate: com (US, default)
and ca cost 1 credit, com.mx costs 2. Only search_walmart and
get_walmart_category accept every domain.
Store targeting: pass delivery_zip and store_id together on search_walmart
or get_walmart_product to get one store's assortment and availability. Take the
store_id from get_walmart_stores on the same domain (walmart.com or
walmart.ca). A store-targeted call costs 2 credits, takes 10-60 seconds, and
echoes the store it used in data.location. get_walmart_product accepts
domain: "ca" only together with a store pair.
Two shapes to plan for. get_walmart_offers returns the buy-box winner only —
Walmart server-renders just that one offer, so expect a single row even when
total_offer_count is higher. And get_walmart_seller_products is capped at
roughly the first 40 items with no page or cursor parameter; read total_count
to know you are looking at a slice. Both seller tools need the NUMERIC
seller_catalog_id from a product, search or offers response — the GUID-form
seller_id in those same responses 404s.
TikTok API
| Tool | Description |
|---|---|
get_tiktok_profile |
Get user profile (bio, follower/following counts, likes) |
get_tiktok_user_posts |
List a user's videos with stats |
get_tiktok_video |
Get detailed info for a single video |
get_tiktok_video_comments |
Get comments on a video |
get_tiktok_comment_replies |
Get replies to a specific comment |
search_tiktok_videos |
Search videos by keyword |
search_tiktok_users |
Search users by keyword |
get_tiktok_hashtag |
Get hashtag details and stats |
get_tiktok_hashtag_videos |
List videos for a hashtag |
get_tiktok_user_followers |
Get a user's follower list |
get_tiktok_user_followings |
Get a user's following list |
get_tiktok_trending_searches |
Search terms trending now (about 90, no region filter) |
get_tiktok_trending_videos |
A sample of trending videos (about 6 |
