cute-web-scraper
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCRAPER_DELAY_MS | No | Base delay between requests to the same domain | 1000 |
| SCRAPER_AUTH_TOKEN | No | Bearer token for HTTP mode | |
| SCRAPER_CACHE_TTL_S | No | How long a fetched page stays reusable | 300 |
| SCRAPER_MAX_CONCURRENT | No | Maximum parallel requests | 5 |
| SCRAPER_CACHE_MAX_ENTRIES | No | Cached pages before least-recently-used eviction | 500 |
| SCRAPER_CHROME_USER_DATA_DIR | No | Chrome profile to inherit logged-in sessions from |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| fetch_pageA | Fetch one web page and return its content as clean markdown with metadata. Set js_render=true for pages that need JavaScript to render (SPAs, infinite-scroll listings, most modern storefronts). If a rendered page still comes back sparse, give it longer with wait_ms, or wait for a specific element with wait_for (a CSS selector) — that is more reliable than a fixed delay. Article-shaped pages have their navigation, cookie banners and footers stripped automatically; set main_content=false to keep the whole page. PDFs are extracted to text.
|
| fetch_pagesA | Fetch many web pages in parallel. Returns JSON with |
| crawl_siteA | Discover the pages on a website. Prefers the site's sitemap (following sitemap indexes and robots.txt), and falls back to following links. Returns JSON with |
| analyze_websiteA | Inspect a website before scraping it: detects the platform (Shopify, WordPress, Wix, ...), locates its sitemap, estimates how many pages it has, and reports whether JavaScript rendering is needed. |
| extract_emailsA | Scan a list of URLs for email addresses. Returns JSON with |
| extract_phonesA | Scan a list of URLs for phone numbers. Returns JSON with |
| extract_linksA | Collect every hyperlink from a list of URLs, resolved to absolute URLs. Returns JSON with |
| extract_social_linksA | Find social media profile links (LinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest) across a list of URLs. Returns JSON with |
| extract_productsA | Extract structured product data (name, price, currency, availability, brand, sku, image, rating, review_count) from a list of product URLs. Reads the page's own JSON-LD, OpenGraph or microdata rather than guessing at selectors, so it works across most storefronts without configuration. Pass save_as='' to store the rows for querying. |
| extract_by_selectorA | Extract arbitrary fields from pages using CSS selectors — the general case the fixed extractors do not cover. |
| search_webA | Search the web and get back ranked results with titles, URLs and snippets — the way in when you have a question rather than a URL. Feed the urls straight into fetch_pages or extract_by_selector. No API key and no quota. |
| inspect_networkA | Render a page and report the API calls it makes, with their JSON responses. A JavaScript site usually loads its data from an endpoint you can read directly — cleaner and far cheaper than parsing rendered markup, and it survives redesigns that break selectors. Use this when a page is hard to scrape, then fetch the endpoint it reveals. Set include_types to widen beyond JSON. |
| track_changesA | Fetch a page and report what changed since the last time it was checked. Returns status 'new', 'same' or 'changed', with a unified diff and line counts when it changed. This is monitoring without a scheduler: check a price, a job board or a policy page whenever you want and see only the difference. |
| list_trackedA | List the pages being tracked for changes, with when each was last seen. |
| untrackC | Stop tracking a page and forget its stored snapshot. |
| list_shopify_collectionsA | List a Shopify store's collections with their product counts. Use this to pick which collections to extract before calling extract_shopify_store. |
| extract_shopify_storeA | Extract a Shopify store's catalogue as one row per product variant — price, sku, options, availability, vendor, image and product URL. Reads the store's public products.json, so it needs no rendering and no selectors. Pass save_as='' to store the rows (recommended: catalogues are large). max_products caps how many products are pulled. |
| find_placesA | Search for places and local businesses by name or description — 'the British Museum', 'cafes in Shoreditch'. Returns name, address, coordinates, phone, website, opening hours and category. Data comes from OpenStreetMap, so there are no star ratings or review counts; for those you would need a paid Google Places key. Pass save_as='' to store the results. |
| find_places_nearbyA | Find every business of a category within a radius of a place — 'dentists near Bath', 'cafes within 2km of Shoreditch'. This is the tool for local lead generation: it returns name, address, phone, website and opening hours for each. |
| list_tablesA | List saved result tables with their row counts and columns. Result tables are produced by any tool called with save_as. |
| get_tableA | Inspect one result table: its columns, row count, and a small sample of rows. |
| query_tableA | Run a read-only SQL SELECT against saved result tables. This is how you analyse a large scrape without pulling it into the conversation: filter, aggregate, group and sort a table of any size and get back only the rows you asked for. Only SELECT is permitted — the query can never modify saved data. Example: SELECT vendor, COUNT(*) AS n, AVG(price) AS avg_price FROM catalogue GROUP BY vendor ORDER BY n DESC. Pass save_as='' to persist the query's result as a new table. That is how you clean data here: SELECT DISTINCT deduplicates, aliases rename columns, |
| export_tableA | Export a result table to a file on disk as CSV or JSON, and return its path. Use this to hand data to a spreadsheet or another tool. |
| drop_tableA | Delete a saved result table. This permanently removes the stored rows; the scraped pages themselves are unaffected. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| scrape_site | Discover a whole site and scrape it into a queryable table. |
| scrape_shopify_store | Export a Shopify store's catalogue, one row per variant. |
| find_contacts | Find email addresses, phone numbers and social profiles for a site. |
| compare_prices | Scrape product pages into a table and compare prices. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/maccydee/cute-web-scraper'
If you have feedback or need assistance with the MCP directory API, please join our Discord server