scrape_url
Scrapes a webpage and returns the content in AI-readable Markdown format. Can access blocked sites through browser rendering.
urlrequiredformat
io.github.bamchiPublished by GitHub account bamchiv2.0.6Updated Oct 27, 2026
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Scrapi fetches web pages and returns clean, LLM-ready Markdown or plain text, with JavaScript rendering and anti-bot handling, plus credit and billing checks.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.bamchi%2Fscrapi/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"scrapi": {
"type": "http",
"url": "https://scrapi.ai/mcp"
}
}
}⚡ Fast & Reliable — Built on 8+ years of web scraping expertise, 1,900+ production crawlers, and battle-tested anti-bot handling.
An MCP (Model Context Protocol) server that lets AI agents fetch and read web pages. Simply give it a URL, and it returns clean, LLM-ready content — fast.
Before: AI can't read web pages directly
After: "Summarize this article" just works ✨
Scrapi MCP Server supports two transport modes:
No installation needed. Just configure your MCP client to use npx.
Tip: You can also pass the API key via CLI argument instead of env var:
See Step 2 for where to put this configuration.
hsmcp_ API keyOption A: Via Settings (Recommended)
Option B: Edit config file directly
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonConfiguration (npx):
Configuration (from source):
Note: Replace
/absolute/path/to/with the actual path where you cloned the repository.
Config file location:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.jsonConfiguration (npx):
Configuration (from source):
Create or edit .cursor/mcp.json in your project root:
Configuration (npx):
Configuration (from source):
Option 1: CLI command (Recommended)
Or with --api-key:
Option 2: Edit config file
Edit ~/.claude.json or project .mcp.json:
Connect via Streamable HTTP — no Node.js installation needed on the client side.
Endpoint: https://scrapi.ai/mcp
Cursor (.cursor/mcp.json):
Claude Code (CLI):
Cline (cline_mcp_settings.json):
Claude Desktop (claude_desktop_config.json):
Note: Claude Desktop requires the mcp-remote proxy for HTTP connections.
Run your own instance instead of using the hosted endpoint:
The server starts at http://localhost:3000 with the MCP endpoint at /mcp. Configure with PORT and HOST environment variables. Replace the URL in the client configurations above with your self-hosted URL (e.g. http://localhost:3000/mcp).
Health check: GET http://localhost:3000/health
You should see the MCP server connection indicator.
scrape_urlScrapes a webpage and returns AI-readable content.
Parameters:
Example:
Markdown Output:
Text Output:
scrape_urlsScrapes multiple webpages in parallel and returns AI-readable content.
Parameters:
Example:
Output:
scraper_server_statusCheck the status of all ScraperServer instances. Shows server health, circuit breaker state, failure counts, and timing info.
Parameters: None
Example:
Output:
Status values:
get_usageCheck your API usage and remaining credits.
Parameters: None
Example:
Output:
get_billingRetrieve detailed billing information including subscription, plans, daily usage, and spending limits.
Parameters:
Example — Current subscription:
Example — Available plans:
Example — Daily usage history:
Example — Spending limits:
Built by the team behind Scrapi, with 8+ years of web scraping experience:
Make sure your API key is provided via one of these methods:
SCRAPI_API_KEY in your configuration--api-key your-key in the argsVerify that your API key is correct and active in your Scrapi dashboard.
If you upgraded but still see old behavior, clear the npx cache:
node /absolute/path/to/scrapi-mcp-server/dist/index.js manually to check for errorsUpdate Claude Desktop to the latest version: Claude menu → "Check for Updates..."
MIT © Scrapi
Source: README.md at commit 9f2f366
Scrapes a webpage and returns the content in AI-readable Markdown format. Can access blocked sites through browser rendering.
urlrequiredformatScrapes multiple webpages in parallel and returns the content in AI-readable Markdown format. Can access blocked sites through browser rendering.
urlsrequiredformatCheck API usage and remaining credits. Returns current plan, subscription credits, purchased credits, and total remaining credits.
Takes no parameters.
Check the status of all ScraperServer instances. Shows server health, circuit breaker state, failure counts, and last success/failure times.
Takes no parameters.
Retrieve MCP billing information: subscription details, available plans, daily usage history, or spending limits.
actionrequiredend_datestart_date100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
{ "mcpServers": { "scrapi": { "command": "npx", "args": ["-y", "@scrapi.ai/mcp-server"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}"args": ["-y", "@scrapi.ai/mcp-server", "--api-key", "your-api-key"]# Clone the repositorygit clone https://github.com/bamchi/scrapi-mcp-server.gitcd scrapi-mcp-server
# Install dependencies and buildnpm install && npm run build{ "mcpServers": { "scrapi": { "command": "npx", "args": ["-y", "@scrapi.ai/mcp-server"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "node", "args": ["/absolute/path/to/scrapi-mcp-server/dist/index.js"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "npx", "args": ["-y", "@scrapi.ai/mcp-server"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "node", "args": ["/absolute/path/to/scrapi-mcp-server/dist/index.js"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "npx", "args": ["-y", "@scrapi.ai/mcp-server"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "node", "args": ["/absolute/path/to/scrapi-mcp-server/dist/index.js"], "env": { "SCRAPI_API_KEY": "your-api-key" } } }}claude mcp add scrapi-ai -s user -e SCRAPI_API_KEY=your-api-key -- npx -y @scrapi.ai/mcp-serverclaude mcp add scrapi-ai -s user -- npx -y @scrapi.ai/mcp-server --api-key your-api-key{ "mcpServers": { "scrapi": { "command": "npx", "args": ["-y", "@scrapi.ai/mcp-server", "--api-key", "your-api-key"] } }}{ "mcpServers": { "scrapi": { "url": "https://scrapi.ai/mcp", "headers": { "Authorization": "Bearer your-api-key" } } }}claude mcp add --transport http scrapi https://scrapi.ai/mcp \ --header "Authorization: Bearer your-api-key"{ "mcpServers": { "scrapi": { "type": "streamableHttp", "url": "https://scrapi.ai/mcp", "headers": { "Authorization": "Bearer your-api-key" } } }}{ "mcpServers": { "scrapi": { "command": "npx", "args": [ "mcp-remote", "https://scrapi.ai/mcp", "--header", "Authorization: Bearer your-api-key" ] } }}SCRAPI_API_KEY=your-api-key npx -y -p @scrapi.ai/mcp-server scrapi-http# or from source:SCRAPI_API_KEY=your-api-key node dist/http.js{ "url": "https://example.com/article", "format": "markdown"}# Article Title
> Author: John Doe | Published: 2024-01-15
## Introduction
This is the main content of the article, converted to clean markdown...
## Key Points
- Point 1: Important detail- Point 2: Another insight- [Related Link](https://example.com/related)Article Title
Author: John Doe | Published: 2024-01-15
Introduction
This is the main content of the article, converted to plain text...
Key Points
- Point 1: Important detail- Point 2: Another insight{ "urls": ["https://example.com/page1", "https://example.com/page2"], "format": "text"}[ { "url": "https://example.com/page1", "content": "Page 1 Title\n\nThis is the content of page 1..." }, { "url": "https://example.com/page2", "content": "Page 2 Title\n\nThis is the content of page 2..." }]{}## ScraperServer Status
Total: 3 | Available: 2
| Name | OS | Status | Failures | Last Success | Last Failure ||------|----|--------|----------|--------------|--------------|| pluto | linux | OK | 0 | 01/30 14:23:05 | - || mars | mac | FAIL | 2 | 01/29 10:00:00 | 01/30 13:55:12 || venus | linux | OPEN | 3 | 01/28 09:00:00 | 01/30 12:00:00 |
### Issues- **mars**: Connection refused - connect(2)- **venus**: Circuit breaker open until 01/30 12:30:00- **venus**: Net::ReadTimeout{}## MCP Credits
| Item | Value ||------|-------|| Plan | starter || Subscription Credits | 1,500 || Purchased Credits | 200 || Total Remaining | 1,700 || Period End | 2026-03-01 |{ "action": "subscription" }## MCP Subscription
| Item | Value ||------|-------|| Plan | starter (Starter) || Status | active || Monthly Credits | 2,000 || Price | $19.00/mo || Rate Limit | 30 RPM || Burst Limit | 5 concurrent || Period End | 2026-03-01 |{ "action": "plans" }## Available MCP Plans
| Plan | Credits/mo | Price | RPM | Burst ||------|-----------|-------|-----|-------|| Free (free) | 500 | Free | 10 | 2 || Starter (starter) | 2,000 | $19.00/mo | 30 | 5 || Pro (pro) | 10,000 | $49.00/mo | 60 | 10 || Business (business) | 50,000 | $149.00/mo | 120 | 20 |{ "action": "daily_usage", "start_date": "2026-02-01", "end_date": "2026-02-07" }## Daily Usage (2026-02-01 ~ 2026-02-07)
| Date | Requests | Credits | Top Tool ||------|----------|---------|----------|| 2026-02-07 | 45 | 45 | scrape#scrape (45) || 2026-02-06 | 120 | 120 | scrape#scrape (100) |
**Total**: 165 requests, 165 credits{ "action": "spending_limits" }## Spending Limits
| Item | Value ||------|-------|| Daily Limit | 500 credits || Today's Usage | 120 credits || Usage % | 24.0% |User: Summarize this article: https://news.example.com/article/12345
Claude: [calls scrape_url]
Here's a summary of the article:
## Key Points- Point 1: ...- Point 2: ...- Point 3: ...User: Get the content from https://example.com/data
Claude: [calls scrape_url]
# Page Title> Source: https://example.com/data
The page content is returned in clean Markdown format...User: What's the pricing on https://competitor.com/product/abc
Claude: [calls scrape_url]
Here's the pricing information:- **Product**: ABC Premium- **Regular Price**: $99.00- **Sale Price**: $79.00 (20% off)User: Read https://docs.example.com/api/v2 and write integration code
Claude: [calls scrape_url]
I've analyzed the API documentation. Here's the integration code:
// api-client.tsexport class ExampleApiClient { private baseUrl = 'https://api.example.com/v2'; async getData(): Promise<Response> { // ... }}┌─────────────────┐│ User ││ "Summarize this ││ URL for me" │└────────┬────────┘ │ ▼┌─────────────────┐│ Claude Desktop ││ / Cursor │└────────┬────────┘ │ ▼┌─────────────────┐ ┌─────────────────┐│ MCP Server │────►│ Scrapi API ││ (scrape_url) │ │ (format param) │└────────┬────────┘ └────────┬────────┘ │ │ │◄──────────────────────┘ │ Markdown/Text Response ▼┌─────────────────┐│ AI Response ││ (Summary, etc.) │└─────────────────┘npx clear-npx-cache