olostep-mcp
Olostep MCP server lets AI agents fetch live web data at scale through scraping, search, AI answers, crawling, URL mapping, and batch scraping.
Scrape a URL into clean markdown, HTML, text, or structured JSON (via parser or LLM extraction), with geo-routing, JS wait times, and truncation links.
Search the web for URLs, titles, and descriptions, optionally scraping result pages in the same call.
Get AI-powered factual answers with sources/citations, optionally shaped as flat JSON fields.
Batch scrape up to 100k known URLs and retrieve results in paginated sets.
Crawl a website from a start URL, then poll/retrieve discovered pages and their content.
Map a site’s URLs, rank them by search query, and filter with include/exclude glob patterns.
Run via hosted OAuth/API-key endpoint or locally with Docker/npx, with error and rate-limit reporting.
Provides structured data from Google search results through the google_search tool, including organic search results, knowledge graph data, and related questions
Supports waiting for JavaScript-heavy websites to render before scraping content, with configurable wait times
Retrieves webpage content in clean markdown format for easier consumption and formatting
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@olostep-mcp scrape the latest news from techcrunch.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Olostep MCP Server
Docker Hub npm version License: ISC
Live web search, scraping and crawling API for AI. Get structured, LLM-ready data from any site. Scale to 1M requests with 10 parallel batches at low cost.
Olostep is web data infrastructure for AI agents and enterprise AI workflows. Its APIs provide live web search, scraping and crawling to extract, clean and structure data from the web. This is the official Olostep Model Context Protocol (MCP) server, which gives any MCP-compatible AI agent those capabilities.
Use the hosted server at https://mcp.olostep.com/mcp (sign in with OAuth, or use an API key), or run it locally with an API key from the Olostep website.
Why Olostep
Web data infrastructure for developers and enterprises
Scales to hundreds of millions to billions of requests per customer per month
The most performant, reliable and cost-effective API on the market
Used by the fastest-growing AI companies
From extracting data from a handful of URLs to crawling hundreds of millions of pages, Olostep gives developers and AI companies reliable, scalable and highly cost-effective access to clean, structured web data.
Related MCP server: Parallel Task MCP
Features
Scrape website content in HTML, Markdown, JSON or Plain Text (with optional parsers)
Parser-based web search with structured results
AI Answers with citations and optional JSON-shaped outputs
Batch scraping of up to 100k URLs
Autonomous site crawling from a start URL
Website URL discovery and mapping (with include/exclude filters)
Country-specific request routing for geo-targeted content
Configurable wait times for JavaScript-heavy websites
Comprehensive error handling and reporting
Simple API key configuration
Installation
There are multiple ways to connect to the Olostep MCP Server. Choose the one that best fits your workflow.
One-click install
Connect to the hosted server and sign in with your Olostep account (OAuth). No API key or local setup needed.
Or from the terminal:
# Claude Code
claude mcp add --transport http olostep https://mcp.olostep.com/mcp
# Gemini CLI (prompts for your API key)
gemini extensions install https://github.com/olostep/olostep-mcp-serverFor other clients, see Client Setup.
☁️ Remote Endpoint (Recommended)
The simplest way — no local installation required. Connect directly to our hosted MCP server:
https://mcp.olostep.com/mcpAuthentication is done via a Bearer token in the Authorization header using your Olostep API key. See the Client Setup section below for configuration examples.
🐳 Docker Hub
Pull and run the official Docker image:
docker pull olostep/mcp-server
docker run -i --rm \
-e OLOSTEP_API_KEY="your-api-key" \
olostep/mcp-server🔧 Local Docker Build
If you prefer to build the image yourself from source:
git clone https://github.com/olostep/olostep-mcp-server.git
cd olostep-mcp-server
npm install
npm run build
docker build -t olostep/mcp-server:local .
docker run -i --rm -e OLOSTEP_API_KEY="your-api-key" olostep/mcp-server:local📦 npx
Run without any installation using npx:
env OLOSTEP_API_KEY=your-api-key npx -y olostep-mcpOn Windows (PowerShell):
$env:OLOSTEP_API_KEY = "your-api-key"; npx -y olostep-mcpOn Windows (CMD):
set OLOSTEP_API_KEY=your-api-key && npx -y olostep-mcpOr install globally:
npm install -g olostep-mcpClient Setup
Gemini CLI
Install the Olostep extension in Gemini CLI (requires an Olostep API key):
gemini extensions install https://github.com/olostep/olostep-mcp-serverConfigure your API key through Gemini CLI's sensitive extension settings:
gemini extensions config olostep OLOSTEP_API_KEYGemini CLI stores this value in your system keychain. Restart Gemini CLI, then verify the extension and MCP server:
gemini extensions list
gemini mcp listFor authentication errors, configure the key again. For connection errors, restart Gemini CLI and run gemini mcp list. See the official Gemini CLI extensions documentation for details.
Cursor
The easiest way is to use the remote endpoint. Create or edit .cursor/mcp.json in your project root:
{
"mcpServers": {
"olostep": {
"url": "https://mcp.olostep.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Alternative (local): Go to Cursor Settings > Features > MCP Servers, click "+ Add New MCP Server":
Name:
olostepType:
commandCommand:
env OLOSTEP_API_KEY=your-api-key npx -y olostep-mcp
Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"mcp-server-olostep": {
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Alternative (Docker):
{
"mcpServers": {
"olostep": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "OLOSTEP_API_KEY=YOUR_API_KEY_HERE",
"olostep/mcp-server"
]
}
}
}Or install via the Smithery CLI in your device terminal:
npx -y @smithery/cli install @olostep/olostep-mcp-server --client claudeClaude Code
Add the remote endpoint to your Claude Code MCP configuration:
{
"mcpServers": {
"olostep": {
"url": "https://mcp.olostep.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Alternative (local):
{
"mcpServers": {
"olostep": {
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Windsurf
Add this to your ./codeium/windsurf/model_config.json:
{
"mcpServers": {
"olostep": {
"serverUrl": "https://mcp.olostep.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Alternative (local):
{
"mcpServers": {
"mcp-server-olostep": {
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Cline
Add this to your cline_mcp_settings.json (Cline → MCP Servers → Configure):
{
"mcpServers": {
"olostep": {
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
},
"disabled": false,
"autoApprove": []
}
}
}Cline can also set this up for you: ask it to install the MCP server from this repository, and it follows llms-install.md.
VS Code
Add this to your .vscode/mcp.json:
{
"servers": {
"olostep": {
"type": "http",
"url": "https://mcp.olostep.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Alternative (local):
{
"servers": {
"olostep": {
"type": "stdio",
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}GitHub Copilot CLI
Inside Copilot CLI, run /mcp add and enter:
Name:
olostepType: HTTP
URL:
https://mcp.olostep.com/mcpHeaders: leave empty
Save with Ctrl+S, then sign in with your Olostep account when prompted (OAuth). Check the connection with /mcp show olostep.
This writes the following to ~/.copilot/mcp-config.json:
{
"mcpServers": {
"olostep": {
"type": "http",
"url": "https://mcp.olostep.com/mcp",
"tools": ["*"]
}
}
}Zed
Add this to your Zed settings.json:
{
"context_servers": {
"olostep": {
"url": "https://mcp.olostep.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Alternative (extension): the Olostep Zed extension runs the local server and asks for your API key in Zed's setup screen.
Metorial
Option 1: One-Click Installation (Recommended)
Open Metorial dashboard
Navigate to MCP Servers directory
Search for "Olostep"
Click "Install" and enter your API key
Option 2: Manual Configuration
Add this to your Metorial MCP server configuration:
{
"olostep": {
"command": "npx",
"args": ["-y", "olostep-mcp"],
"env": {
"OLOSTEP_API_KEY": "YOUR_API_KEY_HERE"
}
}
}The Olostep tools will then be available in your Metorial AI chats.
Configuration
Environment Variables
OLOSTEP_API_KEY: Your Olostep API key (required)ORBIT_KEY: An optional key for using Orbit to route requests.
Available Tools
1. Scrape Website (scrape_website)
Use this when you have a URL and need what is on the page. Returns markdown (default), html or text with the page's url and title, after rendering JavaScript. Long pages are cut at max_characters (default 20,000) and link to their full text.
{
"name": "scrape_website",
"arguments": {
"url_to_scrape": "https://example.com",
"output_format": "markdown",
"country": "US",
"wait_before_scraping": 1000,
"parser": "@olostep/amazon-it-product"
}
}Parameters:
url_to_scrape: The URL of the website you want to scrape (required)output_format: Choose format (html,markdown,json, ortext) - default:markdowncountry: Optional country code (e.g., US, GB, CA) for location-specific scrapingwait_before_scraping: Wait time in milliseconds before scraping (0-10000)parser: Optional parser ID for specialized extractionmax_characters: Max characters of page content to return (default: 20000). Raise it to read more of a long page.
Response (example):
The page's url and title come first. When the content is longer than max_characters, it is cut and truncated gives the full length and a full_text_url. JSON output is never cut: it is returned whole up to 100,000 characters. Above that, json_content is left out and json_content_omitted gives its size and a json_url to fetch the full JSON.
{
"url": "https://en.wikipedia.org/wiki/Web_scraping",
"title": "Web scraping - Wikipedia",
"markdown_content": "Web scraping - Wikipedia ...",
"markdown_hosted_url": "https://olostep-storage.s3.us-east-1.amazonaws.com/markDown_....txt",
"truncated": [
{ "field": "markdown_content", "returned_characters": 20000, "total_characters": 57235, "full_text_url": "https://olostep-storage.s3.us-east-1.amazonaws.com/markDown_....txt" }
],
"truncation_note": "Content was cut at 20000 characters. ..."
}2. Search the Web (search_web)
Search the web for a query and get each result's URL, title and description. Optionally get each result page's content as markdown in the same call.
{
"name": "search_web",
"arguments": {
"query": "your search query",
"limit": 10,
"include_domains": ["docs.olostep.com"],
"scrape_results": true
}
}Parameters:
query: Search query in natural language (required)limit: Number of results, from 1 to 25 (default:10)include_domains: Only return results from these domains (optional)exclude_domains: Never return results from these domains (optional)scrape_results: Also return each result page's content as markdown (default:false). Each scraped page uses extra credits.max_characters: Withscrape_results, the maximum characters of content per page (default:20000)
Response:
JSON (as text) with
query,search_id,total_resultsandresults: each result hasurl,titleanddescription, plusmarkdown_contentwhenscrape_resultsis true. Cut pages list the cut fields undertruncated.
3. Answers (AI) (answers)
Search the web and return AI-powered answers in the JSON structure you want, with sources and citations.
{
"name": "answers",
"arguments": {
"task": "Who are the top 5 competitors to Acme Inc. in the EU?",
"json": "Return a list of the top 5 competitors with name and homepage URL"
}
}Parameters:
task: Question or task to answer using web data (required)json: Optional JSON schema/object or a short description of the desired output shape
Response includes:
answer_id,object,task,result(JSON if provided),sources,created
4. Batch Scrape URLs (batch_scrape_urls)
Scrape up to 100k URLs in one batch. Perfect for large-scale data extraction. New accounts start at 100 URLs per batch, and info@olostep.com can lift this.
{
"name": "batch_scrape_urls",
"arguments": {
"urls_to_scrape": [
{"url": "https://example.com/a", "custom_id": "a"},
{"url": "https://example.com/b", "custom_id": "b"}
],
"output_format": "markdown",
"country": "US",
"wait_before_scraping": 500,
"parser": "@olostep/amazon-it-product"
}
}Response includes:
batch_id,status,total_urls,created_at,formats,country,parser,urls
5. Create Crawl (create_crawl)
Start an async crawl that autonomously discovers and scrapes entire websites by following links. Returns a crawl_id — the crawl runs in the background and does not return content in this response. You must then call get_crawl_results with the crawl_id to poll status and retrieve the scraped pages (same two-step pattern as batch_scrape_urls + get_batch_results).
{
"name": "create_crawl",
"arguments": {
"start_url": "https://example.com/docs",
"max_pages": 25,
"output_format": "markdown",
"country": "US",
"parser": "@olostep/doc-parser"
}
}Response includes:
crawl_id,object,status,start_url,max_pages,created,formats,country,parser
Pair this call with
get_crawl_results— do not pass acrawl_idtoget_batch_results(crawls and batches are separate resources).
6. Create Map (create_map)
Get all URLs on a website. Extract all URLs for discovery and analysis.
{
"name": "create_map",
"arguments": {
"website_url": "https://example.com",
"search_query": "blog",
"top_n": 200,
"include_url_patterns": ["/blog/**"],
"exclude_url_patterns": ["/admin/**"]
}
}Response includes:
map_id,object,url,total_urls,urls,search_query,top_n
7. Get Batch Results (get_batch_results)
Retrieve the results of a previously submitted batch scrape job using its batch_id.
{
"name": "get_batch_results",
"arguments": {
"batch_id": "batch_abc123"
}
}Parameters:
batch_id: The batch ID returned frombatch_scrape_urls(required)items_limit: Max items to retrieve content for per call, 1–100 (default: 20)cursor: Passnext_cursorfrom the previous result to get the next pages (default: 0)max_characters: Max characters of content per URL (default: 20000). Longer pages are cut and link to their full text.
Large batches return their pages a set at a time. When has_more is true, call again with next_cursor until you have every page.
Response includes:
batch_id,status(processingorcompleted),total_urls,completed_urls,items(array of scraped results per URL withurl,custom_id,markdown_content,html_content,json_content,text_content,status,page_metadata)
8. Get Crawl Results (get_crawl_results)
Retrieve the status and scraped pages for an async crawl started with create_crawl. This is the required companion to create_crawl — create_crawl only kicks off the job and returns a crawl_id; this tool is how you actually fetch the discovered pages and their content.
{
"name": "get_crawl_results",
"arguments": {
"crawl_id": "crawl_abc123",
"formats": ["markdown"],
"items_limit": 20,
"cursor": 0
}
}Parameters:
crawl_id: The crawl ID returned fromcreate_crawl(required)formats: Array of formats to retrieve per page —markdown,html,json,text(default:["markdown"])items_limit: Max pages to retrieve content for, 1–100 (default: 20)cursor: Pagination cursor into the list of discovered pages (default: 0)search_query: Optional filter to rank/select pages by relevance to a querymax_characters: Max characters of content per page (default: 20000). Longer pages are cut and link to their full text.
Response includes:
While in progress:
crawl_id,status(in_progress),pages_completed,pages_total, and amessageprompting you to call again in ~10 seconds.When completed:
crawl_id,status(completed),pages_returned,next_cursor,has_more, and apagesarray where each entry hasurl,title,custom_id, and the requested content fields (markdown_content,html_content,json_content,text_content).
Older tool names
get_webpage_content and get_website_urls duplicated scrape_website and create_map. They are no longer listed to clients, so models choose between fewer, clearer tools, but calls to them still work. Use scrape_website and create_map instead.
Error Handling
The server provides robust error handling:
Detailed error messages for API issues
Network error reporting
Authentication failure handling
Rate limit information
Example error response:
{
"isError": true,
"content": [
{
"type": "text",
"text": "Olostep API Error: 401 Unauthorized. Details: {\"error\":\"Invalid API key\"}"
}
]
}Distribution
Docker Images
The MCP server is available as a Docker image:
Docker Hub:
[olostep/mcp-server](https://hub.docker.com/r/olostep/mcp-server)Official Docker MCP Registry:
mcp/olostep(coming soon - enhanced security with signatures & SBOMs)GitHub Container Registry:
ghcr.io/olostep/olostep-mcp-server
Docker Desktop MCP Toolkit
The Olostep MCP Server is being added to Docker Desktop's official MCP Toolkit, which means users will be able to:
Discover it in Docker Desktop's MCP Toolkit UI
Install it with one click
Configure it visually
Use it with any MCP-compatible client (Claude Desktop, Cursor, etc.)
Status: Submission in progress to Docker MCP Registry
Supported Platforms
linux/amd64linux/arm64
Building Locally
# Clone the repository
git clone https://github.com/olostep/olostep-mcp-server.git
cd olostep-mcp-server
# Build the image
npm install
npm run build
docker build -t olostep/mcp-server .
# Run locally
docker run -i --rm -e OLOSTEP_API_KEY="your-key" olostep/mcp-serverAbout Olostep
Olostep is web data infrastructure for AI. It provides live web search, scraping and crawling API to extract and structure data, used in production by AI companies to give their agents fresh, LLM-ready web data at scale.
Website: https://www.olostep.com
Documentation: https://docs.olostep.com
Get an API key: https://olostep.com/auth
License
ISC License
Available Tools
8 toolsanswersAnswersARead-onlyIdempotentInspect
Use this when the user asks a factual question the live web can answer in a sentence or a few fields, such as a company's founding year, a CEO's name or a product's current price. Searches and reads the pages itself and returns the answer with its source URLs, optionally as a flat JSON object of the fields you list in json. For a list of items from one page (latest blog posts, a price table), call scrape_website on that page instead.
Inputs: task (required), json.
batch_scrape_urlsBatch Scrape URLsARead-onlyInspect
Use this when you have a known list of URLs to scrape, such as URLs from a CSV or from search results (up to 100k in one batch). Waits up to wait_for_completion_seconds (default 45) and returns the content if the batch finishes in that time. Larger batches usually take 5-8 min and return a batch_id: get their content with get_batch_results, a set at a time, passing next_cursor for the rest. For one or a few URLs, scrape_website is faster; to discover a site's pages, use create_crawl.
Inputs: urls, parser, country, output_format, +3 more.
create_crawlCreate CrawlARead-onlyInspect
Use this when you need the content of many pages from one website, such as a docs section or a blog: it follows links from a start URL and scrapes each page it finds, up to max_pages. Waits up to wait_for_completion_seconds (default 45) and returns the pages if the crawl finishes in that time; otherwise returns a crawl_id to pass to get_crawl_results (not get_batch_results). For a known list of URLs use batch_scrape_urls; for one page use scrape_website.
Inputs: url, parser, country, max_pages, +3 more.
create_mapCreate MapARead-onlyIdempotentInspect
Use this when you need the list of URLs on a website, not their content: to see a site's pages, find a section, or pick pages to scrape. Can rank URLs by search_query and filter them with glob patterns. Returns URLs only. To get the content of many pages from the site, use create_crawl.
Inputs: url, top_n, website_url, search_query, +2 more.
get_batch_resultsGet Batch ResultsARead-onlyIdempotentInspect
Use this to get the content of a batch started with batch_scrape_urls, using its batch_id. While the batch is in_progress it returns the status: call again in about 10 seconds. Once completed it returns each URL's url, title and content, up to items_limit per call; when has_more is true, pass next_cursor for the rest. Do not start a new batch to check on one that is still running.
Inputs: batch_id (required), cursor, formats, items_limit, +1 more.
get_crawl_resultsGet Crawl ResultsARead-onlyIdempotentInspect
Use this to get the pages of a crawl started with create_crawl, using its crawl_id. While the crawl is in_progress it returns the status: call again in about 10 seconds. Once completed it returns each page's url, title and content, up to items_limit per call; when has_more is true, pass next_cursor for the rest. Do not start a new crawl to check on one that is still running.
Inputs: crawl_id (required), cursor, formats, items_limit, +2 more.
scrape_websiteScrape WebsiteARead-onlyIdempotentInspect
Use this when you have a URL and need what is on the page. Returns the page as clean markdown (default), html or text, with its url and title, after rendering JavaScript. For structured fields, set output_format to "json" with an llm_extract schema or a parser. Long pages are cut at max_characters (default 20,000) with a link to the full text. For many known URLs use batch_scrape_urls; for many pages of one site use create_crawl.
Inputs: url, parser, country, llm_extract, +4 more.
search_webSearch WebARead-onlyIdempotentInspect
Use this when you need web pages on a topic and do not have a URL yet. Returns up to limit results (1-25), each with its URL, title and description. Set scrape_results to true to also get each result page's content as markdown in the same call (each scraped page costs extra credits); otherwise pass the URLs you need to scrape_website, or to batch_scrape_urls for many. Use include_domains to search one site. For a direct factual answer with sources, use answers.
Inputs: query (required), limit, max_characters, scrape_results, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool has a clearly distinct role, and the descriptions explicitly disambiguate near-neighbors (create_map for URLs vs create_crawl for content, batch_scrape_urls vs scrape_website by cardinality, answers vs search_web by intent). The paired async polling tools are also explicitly separated ("pass to get_crawl_results (not get_batch_results)").
Most names follow a verb_noun snake_case pattern (create_map, create_crawl, get_crawl_results, search_web, scrape_website). `answers` breaks the pattern as a bare noun/verb with no object, and `batch_scrape_urls` uses a modifier prefix not seen elsewhere, but overall the convention is readable and predictable.
Eight tools is well within the sweet spot for a web-scraping/extraction server. Every tool earns its place: two discovery methods, two fetch modes, two async result retrievers, search, and direct Q&A, with no redundant entries.
The surface covers the full pipeline: discover (create_map, create_crawl, search_web), fetch (scrape_website, batch_scrape_urls), extract (answers), and retrieve async results with pagination. Minor gaps exist around job lifecycle management (listing or cancelling runs) and no explicit retry/status-check-by-id beyond the two result tools.
Maintenance
Related MCP Connectors
Web search, scraping, crawling, research, a browser agent, and company and people data.
Web scraping, search, crawling, structured extraction and research for AI agents.
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
Emails, phones and social links from any list of websites. Pay only for sites with a contact.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables web searching and content scraping through Google Custom Search API. Provides tools to search the internet, extract webpage content, and automatically scrape search results for comprehensive information gathering.3MIT
- -

HasData MCP Serverofficial
AlicenseAqualityBmaintenanceDirect access to 40+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.6317MIT
Potarix enricherofficial
AlicenseAqualityDmaintenanceFind contact/websites for any company/person912 npmMIT