zenrows-mcp
OfficialZenRows MCP 서버
ZenRows MCP(Model Context Protocol) 서버는 AI 시스템이 ZenRows를 사용하는 표준 방식입니다. 단일 연결로 AI 어시스턴트, 에이전트 또는 애플리케이션이 모든 웹사이트에 실시간으로 액세스할 수 있습니다.
📚 전체 문서: docs.zenrows.com/integrations/mcp/mcp-overview
ZenRows MCP를 사용하는 이유
봇을 차단하는 사이트 접근. 안티봇 시스템에 차단되지 않고 모든 웹사이트에 대규모로 액세스하세요.
관리형 스크래핑 인프라. 프록시 로테이션, 헤드리스 브라우저 오케스트레이션, 안티봇 회피 및 세션 관리가 ZenRows 인프라에서 실행됩니다.
기존 AI와 연동. AI 어시스턴트, 에이전트 프레임워크, AI SDK, IDE 플러그인 및 맞춤형 애플리케이션을 포함한 모든 MCP 클라이언트와 작동합니다.
쉬운 영어, 스크래핑 코드 불필요. 작업을 자연어로 설명하면 AI가 적절한 도구를 선택합니다. 선택자(selector), 프록시 관리, 안티봇 튜닝이 필요 없습니다.
Related MCP server: defuddle-mcp
빠른 시작
ZenRows MCP는 두 가지 전송 옵션을 지원합니다. 둘 다 동일한 도구와 기능을 제공하므로 클라이언트에 맞는 것을 선택하세요.
원격 MCP 서버
AI 애플리케이션이 LLM API를 직접 호출할 때 호스팅된 ZenRows MCP 서버를 사용하세요. 서버가 ZenRows 인프라에서 실행되므로 설치, 구성 또는 업데이트할 필요가 없습니다.
서버 URL:
https://mcp.zenrows.com/mcp전송: Streamable HTTP
인증: OAuth 기반. 모든 요청의 Authorization 헤더에 ZenRows API 키를 Bearer 토큰으로 전달하세요.
Authorization: Bearer YOUR_ZENROWS_API_KEY대부분의 MCP 클라이언트는 도구 구성의 authorization 약식 필드를 통해 이를 허용하며 자동으로 Bearer 토큰으로 전달합니다. 일부 클라이언트는 대신 자유 형식의 headers 필드를 사용합니다. 두 방식 모두 작동합니다.
예시: OpenAI Responses API
import os
from openai import OpenAI
ZENROWS_API_KEY = os.environ["ZENROWS_API_KEY"]
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.responses.create(
model="gpt-5",
tools=[
{
"type": "mcp",
"server_label": "zenrows",
"server_description": "Web scraping MCP server for accessing live web content.",
"server_url": "https://mcp.zenrows.com/mcp",
"authorization": ZENROWS_API_KEY,
"require_approval": "never",
}
],
input="Visit https://news.ycombinator.com/ and summarize the three most recent posts.",
)
print(response.output_text)프레임워크별 예시가 포함된 전체 가이드는 원격 MCP 서버 문서를 참조하세요.
로컬 MCP 서버
MCP 클라이언트가 원격 URL을 호출하는 대신 로컬 하위 프로세스로 서버를 실행할 때 로컬 stdio 구성을 사용하세요. 이는 Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Zed 및 JetBrains IDE를 포함한 데스크톱 AI 도구 및 IDE 플러그인의 표준 설정입니다.
패키지: npm의 @zenrows/mcp
인증: ZENROWS_API_KEY 환경 변수를 통한 API 키.
요구 사항: Node.js 설치됨 (npx가 작동해야 함).
구성:
{
"mcpServers": {
"zenrows": {
"command": "npx",
"args": ["-y", "@zenrows/mcp"],
"env": {
"ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY"
}
}
}
}이 구성의 정확한 위치는 클라이언트마다 다릅니다. 클라이언트의 파일 경로는 클라이언트별 설정 가이드를 참조하세요.
도구
ZenRows MCP는 두 가지 도구 제품군을 제공합니다:
scrape: 마크다운, 일반 텍스트, HTML, JSON, PDF 또는 스크린샷을 반환하는 단일 요청 가져오기. Universal Scraper API 기반.browser_*: 탐색, 클릭, 양식 채우기, JavaScript 실행, 쿠키, 탭 및 지속적 세션을 포함한 전체 브라우저 자동화를 위한 30개 이상의 도구. Scraping Browser 기반.
AI가 프롬프트에서 적절한 도구를 선택합니다. 코드에서 도구를 직접 호출할 필요가 없습니다.
모든 도구, 매개변수 및 반환 값에 대한 전체 도구 참조를 확인하세요.
개발
git clone https://github.com/ZenRows/zenrows-mcp
cd zenrows-mcp
npm install
cp .env.example .env # Add your API key
npm run dev # Run with .env loaded (requires Node.js 20.6+)
npm run build # Compile to dist/
npm run inspect # Open the MCP inspector UI풀 리퀘스트와 이슈는 언제나 환영합니다.
리소스
라이선스
Available Tools
1 toolscrapeARead-onlyInspect
Scrape any webpage and return its content using ZenRows.
Use this tool to fetch webpage content for analysis. By default it returns clean markdown, which is ideal for LLM processing.
When to enable options:
js_render: page uses React/Vue/Angular, loads content dynamically, or content appears missing on the first attempt
premium_proxy: site returns 403/blocked errors even with js_render enabled
wait_for: specific content loads after initial render (requires js_render)
css_extractor: you only need specific elements, not the whole page
autoparse: structured data pages like products or articles
Examples: Basic: { url: "https://example.com" } Dynamic: { url: "https://spa.com", js_render: true } Protected:{ url: "https://protected.com", js_render: true, premium_proxy: true } Extract: { url: "https://shop.com", css_extractor: '{"title":"h1","price":".price"}' }
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The webpage URL to scrape | |
| js_render | No | Enable JavaScript rendering via headless browser. Required for SPAs (React, Vue, Angular) and pages that load content dynamically. | |
| premium_proxy | No | Use premium residential proxies to bypass anti-bot protection. Required for heavily protected sites. Implies higher credit cost. | |
| proxy_country | No | Country for geo-targeted scraping. ISO 3166-1 alpha-2 code (e.g. 'US', 'GB', 'DE'). Requires premium_proxy=true. | |
| response_type | No | Output format. 'markdown' (default) preserves structure and is ideal for LLMs. 'plaintext' strips all formatting for pure text extraction. 'pdf' returns a PDF of the page. 'html' returns the raw HTML source (omits the response_type param; ZenRows default). Ignored when autoparse, css_extractor, outputs, or screenshot params are set. | markdown |
| autoparse | No | Automatically extract structured data from the page into JSON. Best for product pages, articles, and listings. | |
| css_extractor | No | Extract specific elements using CSS selectors. JSON object mapping names to selectors, e.g. '{"title":"h1","price":".price-tag"}'. Returns JSON instead of full page content. | |
| wait_for | No | CSS selector to wait for before capturing. Use when key content loads after the initial page render. Requires js_render=true. | |
| wait | No | Milliseconds to wait after page load before capturing content. Max 30000 (30s). Requires js_render=true. | |
| js_instructions | No | JSON array of browser interactions to run before scraping. Requires js_render=true. Example: [{"click":"#load-more"},{"wait":1000},{"wait_for":".results"}] | |
| outputs | No | Comma-separated list of data types to extract as structured JSON. Available: emails, headings, links, menus, images, videos, audios. Use '*' for all types. Returns JSON instead of full page content. | |
| screenshot | No | Capture an above-the-fold screenshot of the page. Returns an image instead of text content. Useful for visual verification or debugging. | |
| screenshot_fullpage | No | Capture a full-page screenshot including content below the fold. Returns an image instead of text content. | |
| screenshot_selector | No | Capture a screenshot of a specific element using a CSS selector. Example: ".product-card". Returns an image instead of text content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds valuable behavioral context: default markdown output ideal for LLMs, and crucially explains that certain parameters (css_extractor, autoparse, outputs, screenshot) change the return type from text to JSON or images. This output-switching behavior is not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear information hierarchy: purpose statement, default behavior, conditional options guide, and examples. Every section earns its place. Examples section is slightly verbose but appropriate for a 14-parameter tool where syntax matters. Good use of formatting (bullet points, code blocks).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 parameters and no output schema, description adequately explains return value variations (markdown default vs JSON vs images depending on params). Covers the ZenRows-specific options (premium_proxy credit cost mentioned in schema, wait_for interactions explained). Could mention error handling or rate limits, but sufficient for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing baseline 3. Description adds significant value via the 'When to enable options' section which provides contextual semantics for when to use parameters (e.g., 'page uses React/Vue/Angular' triggers js_render). The concrete examples demonstrate parameter interactions and valid value formats (e.g., CSS selector JSON syntax).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with specific verb+resource ('Scrape any webpage') and identifies the underlying service ('using ZenRows'). Clearly states default output format ('clean markdown') and primary use case ('fetch webpage content for analysis'). No siblings to differentiate from, but scope is precisely defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains explicit 'When to enable options' section that maps specific technical conditions (React/Vue/Angular, 403 errors, delayed content loading) to parameter usage. Provides concrete decision trees for selecting js_render, premium_proxy, and other options. Includes practical JSON examples showing parameter combinations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no possibility of confusion or overlap between tools. The single 'scrape' tool has a clear, distinct purpose of fetching webpage content.
There is only one tool name, so consistency is inherently perfect. The name 'scrape' follows a clear verb-based pattern appropriate for its function.
A single tool is too few for most server purposes, as it limits functionality and flexibility. While scraping is a focused domain, having only one tool feels thin and may not cover related needs like batch processing or error handling.
The tool covers basic webpage scraping with options for dynamic content and proxies, but there are notable gaps. Missing operations might include checking scrape status, managing sessions, or handling rate limits, which could lead to agent workarounds or failures in complex scenarios.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
One MCP for the Web. Easily search, crawl, navigate, and extract websites without getting blocked.…
Scrapingdog MCP — wraps Scrapingdog (scrapingdog.com), a proxy-based web
Firecrawl MCP — wraps the Firecrawl API (firecrawl.dev) for web
Turn any URL into clean Markdown and structured data. Scrape, crawl, search and extract.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP-native web scraping and search API for AI agents. Converts any URL to clean Markdown with 90% success rate, including Cloudflare-protected sites and JS SPAs. Real-time web search via Brave Search API. CAPTCHA solving built-in. 10 free scrapes/day.595MIT
- AlicenseNot gradedqualityFmaintenanceAn MCP server that extracts clean Markdown or HTML content from web pages by stripping away ads, navigation, and clutter. It offers tools to process URLs or raw HTML, returning structured metadata alongside the main article content.2MIT
- AlicenseAqualityBmaintenanceWeb extraction MCP server for AI agents. Extract structured data from any URL with built-in Cloudflare bypass, JavaScript rendering, and intelligent parsing. Returns clean markdown or JSON.57942MIT
- AlicenseNot gradedqualityAmaintenanceRemote MCP server for web scraping with anti-bot evasion. Provides stealth HTTP fetching, headless browser with Cloudflare bypass, CSS selectors, YouTube transcripts, and Markdown conversion.1MIT
Appeared in Searches
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/ZenRows/zenrows-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server