Give Claude Code live web access — search, scrape, screenshot, and drive a real cloud browser — by adding the Scrapeless MCP server. 21 tools, one config file, no wrapper code.
Clone this repo, add your key, and Claude Code picks the server up from .mcp.json automatically.
Claude Code is strong at reasoning over code and weak at seeing the live web: it cannot open a page behind bot protection, cannot check what a competitor's pricing page says today, and cannot screenshot a rendered site. This server closes that gap, which unlocks:
- Research with real sources — "search for X, open the top 5 results, and summarize what they actually say."
- Scraper development with a live target — iterate on selectors against the real page inside the same session where you write the code.
- Competitive and SEO checks — pull a SERP, or a rival's page as Markdown, and diff it against last week.
- Visual verification — screenshot a deployed page and have Claude describe what rendered.
- Multi-step browser flows — search, click, type, scroll, and wait through a real Chromium session.
- Claude Code installed
- Node.js 18+ (for
npx) - A Scrapeless API key — create a free account
git clone https://github.com/<owner>/scrapeless-claude-code.git
cd scrapeless-claude-code
cp .env.example .env
export SCRAPELESS_API_KEY=your_key_here # .mcp.json expands this
claudeClaude Code prompts you to approve the project's MCP server on first launch. Confirm it loaded:
/mcp
You should see scrapeless connected with 21 tools.
The server reads SCRAPELESS_KEY, not SCRAPELESS_API_KEY. Verified behavior:
| Environment | Result |
|---|---|
SCRAPELESS_KEY set |
Works — tools respond |
Only SCRAPELESS_API_KEY set |
Server starts, then never responds — no error, just a hang |
| Neither set | Server starts, then never responds |
There is no "missing credentials" message; a tool call simply hangs. .mcp.json in this repo maps one to the other ("SCRAPELESS_KEY": "${SCRAPELESS_API_KEY}") so either name works for you, but if you write your own config, set SCRAPELESS_KEY.
claude mcp add scrapeless --env SCRAPELESS_KEY=your_key_here -- npx -y scrapeless-mcp-serverUse --scope user to make it available in every project instead of just this one.
verify_mcp.py speaks MCP over stdio directly — the same protocol Claude Code uses — so you can confirm the server works independently of the agent:
export SCRAPELESS_API_KEY=your_key_here
python3 verify_mcp.py # list the tools
python3 verify_mcp.py --call # also scrape example.comReal output:
server: scrapeless-mcp-server 0.2.0
tools : 21
google_search Universal Information Search Engine...
scrape_markdown Scrape a URL and return its content as Markdown.
...
calling scrape_markdown on https://example.com ...
returned 184 characters of markdown
Full tool list with input schemas: results/tools.json.
Note: serverInfo reports 0.2.0 while the npm package publishes as 0.4.9 — the server's self-reported version lags its release version. Don't use serverInfo.version to gate anything.
Search and one-shot fetch — no session needed, each call is independent:
| Tool | What it does |
|---|---|
google_search |
Search engine query; returns result data |
google_trends |
Google Trends interest data |
scrape_html |
Fetch a URL, return full HTML |
scrape_markdown |
Fetch a URL, return content as Markdown (best default for LLM reading) |
scrape_screenshot |
Capture a screenshot of any page |
Cloud browser session — stateful; browser_create first, browser_close when done:
| Tool | What it does |
|---|---|
browser_create |
Create or reuse a cloud browser session |
browser_goto |
Navigate to a URL |
browser_get_html / browser_get_text |
Read the current page |
browser_snapshot |
Capture DOM + resources for inspection |
browser_screenshot |
Screenshot the current page |
browser_click / browser_type / browser_press_key |
Interact with elements |
browser_scroll / browser_scroll_to |
Scroll by position or to an element |
browser_wait / browser_wait_for |
Fixed pause, or wait for an element |
browser_go_back / browser_go_forward |
History navigation |
browser_close |
Terminate the session |
Prefer scrape_markdown for reading a page — it is one call and returns the least noise. Reach for the browser_* family only when the task needs interaction (login, pagination clicks, filters) or the page needs to settle before reading.
See examples/PROMPTS.md for prompts covering research, SERP collection, competitive monitoring, scraper development, and multi-step browser flows.
| Symptom | Cause and fix |
|---|---|
| Tool call hangs with no error | SCRAPELESS_KEY is not set in the server's environment. See the table above. |
/mcp shows no scrapeless server |
You did not approve the project server, or you launched claude outside this directory. Re-run claude from the repo root. |
npx fails or downloads every launch |
Pre-install once: npm install -g scrapeless-mcp-server, then set "command": "scrapeless-mcp-server" with no args. |
| Browser tools error about no session | Call browser_create before other browser_* tools. |
| A page comes back nearly empty | It was read before the challenge cleared. Use browser_wait_for on a content selector, then browser_get_html. |
${SCRAPELESS_API_KEY} appears literally |
Your shell did not export the variable before claude started. Export it, then restart Claude Code. |
scrapeless-claude-code/
├── .mcp.json # project MCP config — Claude Code reads this
├── verify_mcp.py # stdio MCP self-check, no agent required
├── examples/PROMPTS.md # worked prompts
├── results/tools.json # live tool list with input schemas
└── LICENSE
- Product: Scraping Browser · Universal Scraping API · Deep SERP API
- Integration page: Scrapeless with Claude
- Guides: Scrapeless MCP server on Claude · Claude web scraping
- Upstream server: scrapeless-ai/scrapeless-mcp-server
MIT — see LICENSE.