MrScraper MCP server for AI agents

Live

OAUTH 2.1

WEB SCRAPING

AI

MrScraper MCP gives your agent web scraping through MrScraper: fetch a known page as HTML, Markdown, or a screenshot, search Google with parsed results, and check account usage and rate limits.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
MrScraper MCP
agent · Acme Q3
Run
Get the pricing page at acme.com as Markdown.
S
mrscrapermcp_scraperapi
146ms
Web research agent
The page loaded with status 200. It lists 3 plans, and the Markdown is ready to summarize.
Sources: 1 page
mrscrapermcp
1 page
18:29
Message Claude...

Tools your web research agent reaches for on MrScraper, scoped per user.

CALL ANY TOOL
3 tools for web scraping in MrScraper: fetch a page as HTML, Markdown, or a screenshot, search Google with parsed JSON results, and check account usage and remaining tokens.
mrscrapermcp_scraperapi
Scraperapi
Retrieves a known page through MrScraper's Scraper API as HTML, Markdown, a screenshot, or a combination. Matches the Python SDK's scraper_api options. Omit browser_rendering for automatic browser fallback; screenshot=true always enables it. super enables real-device routing independently. home_page maps to warmStart. Proxy, cookie, target-header, retry, and timeout options control page loading. Returns status_code, data, and sanitized headers.
Parameters
Name
Type
Required
Description
url
string
Required
Required absolute HTTP or HTTPS page URL.
block_resources
boolean
Optional
Block images, CSS, and fonts during loading. Default: `false`.
browser_rendering
boolean
Optional
True forces browser rendering, false disables it; omit or use null for automatic fallback.
bypass_proxy
boolean
Optional
Enable the API's proxy-bypass/resource-blocking behavior. Default: `false`.
cookie_jar
string
Optional
Cookie configuration string, such as domain=example.com&country=us&max_used=100&max_age=50m.
discard_token_secret
string
Optional
Optional value for the x-discard-token-secret upstream header. Default: ``.
geo_code
string
Optional
Proxy geolocation country code, such as US, ID, or SG. Default: `US`.
headers
object
Optional
Target page request headers as an object or JSON string.
home_page
boolean
Optional
Visit the site's root before the target URL; sent as warmStart=true. Default: `false`.
html
boolean
Optional
Request HTML page content. Default: `true`.
markdown
boolean
Optional
Request Markdown page content. Default: `false`.
max_retries
integer
Optional
Maximum Web Unblocker retries; 0 disables retries. Default: `3`.
proxy
string
Optional
Custom proxy in username:password@host:port form.
proxy_country
string
Optional
Compatibility country option sent as proxyCountry.
screenshot
boolean
Optional
Capture a screenshot; always enables browser rendering. Default: `false`.
stream
boolean
Optional
Ask the API to stream; the MCP server buffers the response into the normal envelope.
super
boolean
Optional
Use real-device routing independently of browser rendering. Default: `false`.
timeout
integer
Optional
Page timeout in seconds (1-300); transport allows 30 additional seconds. Default: `120`.
token_cap
integer
Optional
Optional nonnegative retry-token budget.
use_proxy
boolean
Optional
Allow the service to use a configured proxy. Default: `true`.
wait_for_selector
string
Optional
CSS selector to wait for before returning page content.
mrscrapermcp_status
Status
mrscrapermcp_websearch
Websearch
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// MrScraper tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mrscrapermcp"], toolNames: [
    "mrscrapermcp_status",
    "mrscrapermcp_websearch",
    "mrscrapermcp_scraperapi"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Search Google for agent auth platforms and scrape the top result as Markdown" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mrscrapermcp"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Search Google for agent auth platforms and scrape the top result as Markdown" }],
  tools,
});

// Execute the tool call with the user's vaulted MrScraper OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mrscrapermcp"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Search Google for agent auth platforms and scrape the top result as Markdown" }],
  tools,
});

// Tool call runs with the user's vaulted MrScraper OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mrscrapermcp"] }, pageSize: 100,
});

const agent = new Agent({
  name: "web_research_agent",
  model: "gemini-2.5-pro",
  instruction: "MrScraper tools scoped to this user",
  tools,
});

await agent.run("Search Google for agent auth platforms and scrape the top result as Markdown");
Try these prompts
Copy any prompt into your agent. Each maps directly to a MrScraper MCP tool. Click to copy, paste into your agent, done.
Scrape pages
Copy the prompt
Copied
Get our competitor's pricing page as Markdown.
Copy the prompt
Copied
Take a screenshot of the homepage at acme.com.
Copy the prompt
Copied
Fetch this product page with browser rendering on.
Google search
Copy the prompt
Copied
Search Google for agent authentication platforms and return parsed results.
Copy the prompt
Copied
Search Google in Germany for CRM software and show page 2.
Copy the prompt
Copied
Run this Google search URL and list the top 10 results.
Account
Copy the prompt
Copied
How many MrScraper tokens do I have left?
Copy the prompt
Copied
What is my MrScraper rate limit?
Copy the prompt
Copied
Check my subscription status before a large scrape.
SEE HOW AUTH WORKS
Each user signs in to MrScraper once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
MrScraper MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
MrScraper MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
MrScraper MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
MrScraper MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other AI and web automation connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
Test other agents
See the same per-user auth pattern across other AI and web automation connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared MrScraper token looks fine in a demo. In production every scrape and search looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
MrScraper today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access MrScraper as the user or through a shared service account?
As the user. Each user signs in to MrScraper once, and Scalekit stores and refreshes their tokens. Every scrape and search in your audit trail is attributed to that user, not a shared service account.
Where is the MrScraper OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in MrScraper?
Yes. All MrScraper tools only read: they fetch pages, run searches, and report account usage, and none changes anything in the account. Filter by tool name in listScopedTools to expose only what you want, for example mrscrapermcp_websearch without mrscrapermcp_scraperapi. Scalekit also enforces scope checks before every API call.
What happens when a user revokes MrScraper access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
How does the agent see how much MrScraper quota is left?
mrscrapermcp_status returns the connected account's subscription status, token limit, token usage, remaining tokens, and rate limit. It takes no input, so the agent can call it before a large batch of requests.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""mrscrapermcp"": {
""url"": ""https://mcp.scalekit.com/mrscrapermcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.mrscrapermcp]
url = ""https://mcp.scalekit.com/mrscrapermcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""mrscrapermcp"": {
""url"": ""https://mcp.scalekit.com/mrscrapermcp"",
""type"": ""http""
}
}
}