web-scrapper-stdio
웹 스크래퍼 서비스 (MCP Stdin/Stdout & HTTP)
강력한 헤드리스 웹 스크래핑을 위한 Python 기반 MCP 서버입니다. 웹 페이지에서 주요 텍스트 콘텐츠를 추출하여 AI 및 자동화 통합을 위해 Markdown, 텍스트 또는 HTML로 출력합니다.
주요 기능
헤드리스 브라우저 스크래핑 (Playwright, BeautifulSoup, Markdownify)
Markdown, 텍스트 또는 HTML 출력
MCP (Model Context Protocol) stdio/JSON-RPC 통합을 위해 설계됨
이중 전송: stdio(기본값) 및 공유 서비스 모드를 위한 Streamable HTTP
지속적 브라우저 풀: 빠른 스크래핑을 위해 Chromium이 요청 간에도 활성 상태 유지
스마트 DOM 대기: 고정된 대기 시간 대신 MutationObserver 기반의 콘텐츠 안정화
Docker화 및 사전 빌드된 이미지 제공
환경 변수를 통한 구성 가능
강력한 오류 처리 (타임아웃, HTTP 오류, Cloudflare 등)
도메인별 속도 제한
AI 도구 및 IDE와 쉬운 통합 (Cursor, Claude Desktop, Continue, JetBrains, Zed 등)
Cursor용 원클릭 설치, Claude용 대화형 설치 프로그램
Related MCP server: Fetcher MCP
빠른 시작
Docker로 실행 (stdio 모드 — 클라이언트당 컨테이너 하나)
docker run -i --rm ghcr.io/justazul/web-scrapper-stdio공유 HTTP 서비스로 실행 (컨테이너 하나, 여러 클라이언트)
docker run -d --name web-scraper \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HTTP_PORT=8080 \
-e BROWSER_POOL_SIZE=3 \
-p 8080:8080 \
--shm-size=3gb \
ghcr.io/justazul/web-scrapper-stdio또는 Docker Compose 사용:
docker compose --profile service up -d원클릭 설치 (Cursor IDE)
전송 모드
stdio (기본값)
각 MCP 클라이언트는 docker run -i를 통해 자체 컨테이너를 생성합니다. 간단하고 별도의 구성이 필요 없으며 모든 MCP 클라이언트와 작동합니다.
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/justazul/web-scrapper-stdio"]
}
}
}Streamable HTTP (공유 서비스)
HTTP를 통해 여러 MCP 클라이언트에 서비스를 제공하는 하나의 지속적인 컨테이너를 실행합니다. 여러 AI 도구 인스턴스(예: 여러 Claude Code 세션)를 실행할 때 리소스를 절약합니다.
서비스 시작:
docker run -d --name web-scraper \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HTTP_PORT=8080 \
-p 8080:8080 \
--shm-size=3gb \
ghcr.io/justazul/web-scrapper-stdioMCP 클라이언트에서 연결:
{
"mcpServers": {
"web-scrapper": {
"url": "http://localhost:8080/mcp"
}
}
}AI 도구 및 IDE와의 통합
이 서비스는 MCP(Model Context Protocol)를 구현하는 다양한 AI 도구 및 IDE와의 통합을 지원합니다. 아래는 가장 인기 있는 환경에 대한 즉시 사용 가능한 구성 예시입니다. 사용자 지정 빌드에 필요한 경우 이미지/태그를 교체하십시오.
Cursor IDE
.cursor/mcp.json(프로젝트 수준) 또는 ~/.cursor/mcp.json(전역)에 추가:
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}Claude Desktop
Claude Desktop MCP 구성(claude_desktop_config.json)에 추가:
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}Claude Code
.mcp.json 또는 전역 ~/.claude.json에 추가:
stdio 모드 (세션당 컨테이너 하나):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/justazul/web-scrapper-stdio"]
}
}
}HTTP 모드 (공유 서비스 — 먼저 서비스를 시작하세요):
{
"mcpServers": {
"web-scrapper": {
"url": "http://localhost:8080/mcp"
}
}
}Continue (VSCode/JetBrains 플러그인)
continue.config.json 또는 Continue 플러그인 MCP 설정에 추가:
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}IntelliJ IDEA (JetBrains AI Assistant)
**Settings > Tools > AI Assistant > Model Context Protocol (MCP)**로 이동하여 새 서버를 추가합니다. 다음을 사용하세요:
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}Zed Editor
Zed MCP 구성에 추가 (정확한 경로는 Zed 문서 참조):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}사용법
MCP 서버 (도구/프롬프트)
이 웹 스크래퍼는 MCP(Model Context Protocol) 도구로 사용되어 AI 모델이나 기타 자동화 도구에서 직접 사용할 수 있습니다.
도구: scrape_web
매개변수:
url(문자열, 필수): 스크래핑할 URLmax_length(정수, 선택): 반환되는 콘텐츠의 최대 길이 (기본값: 제한 없음)timeout_seconds(정수, 선택): 페이지 로드 타임아웃(초) (기본값: 30)user_agent(문자열, 선택): 브라우저에 직접 전달되는 사용자 지정 User-Agent 문자열 (기본값: 무작위 에이전트)wait_for_network_idle(불리언, 선택): 스크래핑 전 네트워크 활동이 안정될 때까지 대기 (기본값: true)custom_elements_to_remove(문자열 리스트, 선택): 추출 전 제거할 추가 HTML 요소 (CSS 선택자)grace_period_seconds(부동 소수점, 선택): 탐색 후 JS 렌더링을 기다리는 시간. 스마트 감지를 위해 MutationObserver를 사용합니다. 완전히 건너뛰려면 0으로 설정하세요. (기본값: 0.5)output_format(문자열, 선택):markdown,text또는html(기본값:markdown)click_selector(문자열, 선택): 제공된 경우, 탐색 후 추출 전에 이 선택자와 일치하는 요소를 클릭합니다.
반환값:
웹 페이지에서 추출된 Markdown 형식의 콘텐츠 (문자열)
오류는
[ERROR] ...로 시작하는 문자열로 보고됩니다.
예시: click_selector 및 custom_elements_to_remove 사용
{
"url": "http://uitestingplayground.com/clientdelay",
"click_selector": "#ajaxButton",
"grace_period_seconds": 10,
"custom_elements_to_remove": [".ads-banner", "#popup"],
"output_format": "markdown"
}프롬프트: scrape
매개변수:
url(문자열, 필수): 스크래핑할 URLoutput_format(문자열, 선택):markdown,text또는html(기본값:markdown)
반환값:
선택한 형식으로 웹 페이지에서 추출된 콘텐츠
참고:
기본적으로 Markdown이 반환되지만
output_format을 통해 텍스트나 HTML을 요청할 수 있습니다.스크래퍼는 robots.txt를 확인하지 않으며 제공된 모든 URL을 가져오려고 시도합니다.
REST API나 CLI 도구는 포함되어 있지 않으며, 순수 MCP stdio/JSON-RPC 도구입니다.
스크래퍼는 항상 웹 페이지의 전체
<body>콘텐츠를 추출하며, 필수적인 노이즈 제거(script, style, nav, footer, aside, header 및 유사한 비콘텐츠 태그 제거)만 적용합니다. 스크래퍼는 Cloudflare 챌린지 화면을 감지하고 처리하여 특정 오류 문자열을 반환합니다.
구성
환경 변수를 사용하여 대부분의 구성 옵션을 재정의할 수 있습니다:
핵심 설정
DEFAULT_TIMEOUT_SECONDS: 페이지 로드 및 탐색 타임아웃 (기본값: 30)DEFAULT_MIN_CONTENT_LENGTH: 추출된 텍스트의 최소 콘텐츠 길이 (기본값: 100)DEFAULT_MIN_CONTENT_LENGTH_SEARCH_APP: search.app 도메인의 최소 콘텐츠 길이 (기본값: 30)DEFAULT_MIN_SECONDS_BETWEEN_REQUESTS: 동일한 도메인에 대한 요청 간 최소 지연 시간 (기본값: 2)DEFAULT_GRACE_PERIOD_SECONDS: JS 렌더링을 위한 기본 유예 기간 (기본값: 0.5)DEBUG_LOGS_ENABLED: 디버그 수준 로그를 활성화하려면true로 설정 (기본값:false)
브라우저 풀
BROWSER_POOL_ENABLED: 지속적 브라우저 풀 활성화 (기본값:true). 요청별 브라우저 실행(기존 동작)을 위해false로 설정하세요.BROWSER_POOL_SIZE: 활성 상태로 유지할 Chromium 인스턴스 수 (기본값: 2). 각 인스턴스는 약 100-200MB의 RAM을 사용합니다.
전송
MCP_TRANSPORT: 전송 모드 —stdio또는streamable-http(기본값:stdio)MCP_HTTP_PORT: streamable-http 전송 사용 시 HTTP 서버 포트 (기본값: 8080)MCP_HTTP_HOST: HTTP 서버 바인딩 주소 (기본값:0.0.0.0)
Cloudflare 우회
CAPTCHA_API_KEY: 캡차 해결 서비스용 API 키. 설정 시 Cloudflare Turnstile 챌린지가 자동으로 해결됩니다. 비어 있으면(기본값) CF 보호 페이지는 오류를 반환합니다.CAPTCHA_PROVIDER: 캡차 해결 제공자 —2captcha,capsolver또는capmonster(기본값:2captcha)CAPTCHA_BASE_URL: 사용자 지정 해결 API 엔드포인트 (기본값: 제공자의 공식 URL 사용)CAPTCHA_TIMEOUT: 캡차 해결 타임아웃(초) (기본값: 120)
테스트 설정
DEFAULT_TEST_REQUEST_TIMEOUT: 테스트 요청 타임아웃 (기본값: 10)DEFAULT_TEST_NO_DELAY_THRESHOLD: 테스트에서 인위적인 지연을 건너뛰기 위한 임계값 (기본값: 0.5)
오류 처리 및 제한 사항
스크래퍼는 탐색 실패, 타임아웃, HTTP 오류(404 포함) 및 Cloudflare 봇 방지 챌린지에 대한 오류를 감지하고 반환합니다.
속도 제한은 도메인별로 적용됩니다 (기본값: 요청 간 2초).
Cloudflare 우회: 수동 회피를 위해 Patchright(CDP 수준의 탐지 방지)를 사용합니다. 대부분의 CF 보호 사이트는 챌린지를 트리거하지 않고 스크래핑됩니다. Turnstile 챌린지가 트리거되고
CAPTCHA_API_KEY가 설정된 경우, 타사 API를 통해 자동으로 해결됩니다.제한 사항:
REST API나 CLI 도구 없음 (MCP stdio/JSON-RPC 전용)
HTML이 아닌 콘텐츠(PDF, 이미지 등) 지원 안 함
보호된 페이지에 대한 인증 또는 세션 관리 없음
대규모 스크래핑이나 사이트 이용 약관 위반을 위한 용도가 아님
개발 및 테스트
테스트 실행 (Docker Compose)
모든 테스트는 Docker Compose를 사용하여 실행해야 합니다. Docker 외부에서 테스트를 실행하지 마십시오.
모든 테스트:
docker compose up --build --abort-on-container-exit testMCP 서버 테스트만:
docker compose up --build --abort-on-container-exit test_mcp스크래퍼 테스트만:
docker compose up --build --abort-on-container-exit test_scrapper벤치마크 실행
docker compose run --rm benchmark결과는 benchmarks/RESULTS.md에 저장됩니다.
기여
기여를 환영합니다! 버그 수정, 기능 추가 또는 개선 사항이 있으면 이슈를 열거나 풀 리퀘스트를 보내주세요. 중요한 변경 사항을 계획 중이라면 먼저 이슈를 열어 제안을 논의해 주십시오.
라이선스
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
This server cannot be deployed
Maintenance
Related MCP Connectors
Cloud scraping & crawling API for AI agents. Turn any URL into clean, LLM-ready markdown.
Clean Markdown and AI-readability scoring for any URL. Built for AI agents.
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Web scraping for agents. Point it at a URL and it returns the page as clean markdown, JavaScript-rendered pages included. Point it at a site and it maps the URLs or crawls the section you need in the background, a few pages at a time so results fit in the conversation. Search the web and read full pages, extract fields with a JSON schema you define (validated, never invented), read a store's catalogue or a blog's posts from the platform's own feed, and check whether a page has changed. Failed requests cost nothing. The free plan includes 1,500 credits a month.
Related MCP Servers
- AlicenseAqualityAmaintenanceThis server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.21156,058 PyPI91,120MIT
- -licenseCqualityNot gradedmaintenanceA server that allows fetching web page content using Playwright headless browser with AI-powered capabilities for efficient information extraction.25,346 npm7-
- AlicenseNot gradedqualityBmaintenanceA context-optimized web scraping server that converts HTML to markdown/text and applies CSS selectors server-side, reducing token usage by 70-90% while providing AI tools with clean, filtered web content.7MIT
- AlicenseNot gradedqualityDmaintenanceProvides advanced web scraping with HTTP client, smart content extraction to Markdown, browser automation via Playwright, screenshot/PDF generation, and Docker sandbox execution environments.1MIT