olostep-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OLOSTEP_API_KEY | Yes | API key required to use the Olostep MCP server |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Olostep gives you live web data. Pick the tool by goal:
Find pages on a topic, no URL yet: search_web.
Read one known URL: scrape_website.
A factual answer with sources: answers.
List a site's URLs without their content: create_map.
Content of many pages from one site: create_crawl.
Content of a known list of URLs: batch_scrape_urls.
create_crawl and batch_scrape_urls return the content if the job finishes within wait_for_completion_seconds; otherwise they return a crawl_id or batch_id. Fetch it with get_crawl_results or get_batch_results, and do not start a new job for the same URLs. Page content is cut at 20,000 characters per page by default. A cut page says so and links to its full text; call scrape_website with a higher max_characters to read more. For structured fields from a page, call scrape_website with output_format "json" and an llm_extract schema. For a list of items on one page (latest posts, a price table), scrape that page rather than using answers.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_mapA | 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 |
| create_crawlA | 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 |
| get_crawl_resultsA | 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 |
| batch_scrape_urlsA | 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 |
| get_batch_resultsA | 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 |
| answersA | 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 |
| search_webA | Use this when you need web pages on a topic and do not have a URL yet. Returns up to |
| scrape_websiteA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.