Skip to main content
Glama
Santhosh-p653

Scrapling MCP Server

AWS Lightsail의 Scrapling MCP 서버

라이브 웹 콘텐츠를 LLM에 바로 사용할 수 있는 Markdown으로 변환하는 고성능 웹 추출 MCP 서버 — 한 번 배포하면 AI IDE, 에이전트, RAG 파이프라인, 자동화 워크플로우에 연결할 수 있습니다.

AWS MCP Python Docker Scrapling

개요

현대 AI 애플리케이션은 점점 더 신선하고 구조화된 외부 지식에 대한 접근이 필요해지고 있습니다. 모든 RAG 시스템이나 AI 에이전트 내부에서 웹 스크래핑을 개별적으로 구현하는 대신, 이 프로젝트는 Scrapling의 웹 추출 기능을 Model Context Protocol (MCP)을 통해 노출합니다.

배포가 완료되면 MCP 호환 AI 클라이언트는 서버에 연결하여 재사용 가능한 웹 데이터 수집 구성 요소로 사용할 수 있습니다.

┌──────────────────────┐
│   AI IDE / AI Agent   │
│ Claude / MCP Client   │
└──────────┬────────────┘
           │ MCP
           ▼
┌──────────────────────┐
│   Scrapling MCP       │
│      Server           │
└──────────┬────────────┘
           ▼
┌──────────────────────┐
│        Web            │
│  Dynamic / Static      │
│     Content            │
└──────────┬────────────┘
           ▼
┌──────────────────────┐
│      Markdown          │
│   LLM-ready Data       │
└──────────┬────────────┘
           ▼
┌─────────────────────────────────┐
│ RAG / Embeddings / Vector DB /   │
│ Knowledge Base / Agent Memory    │
└─────────────────────────────────┘

Related MCP server: read-website-fast

웹 추출에 MCP를 사용하는 이유

전통적으로 웹 데이터가 필요한 모든 AI 애플리케이션은 자체적으로 다음을 구현합니다:

  • HTTP 요청

  • HTML 파싱

  • 브라우저 자동화

  • 동적 페이지 처리

  • 추출 로직

  • 재시도 메커니즘

  • 콘텐츠 정규화

이는 중복된 인프라를 만듭니다. MCP를 사용하면 웹 추출이 공유 기능이 됩니다.

이전 — 여러 구현:

RAG App        ──────► Scraper
Agent          ──────► Scraper
Research Tool  ──────► Scraper
AI IDE         ──────► Scraper

이후 — 하나의 기능, 여러 클라이언트:

RAG App    ──┐
Agent      ──┼──► Scrapling MCP Server
AI IDE     ──┤
Research   ──┘

서버를 한 번 배포하고 MCP 호환 워크플로우 전반에 걸쳐 재사용하세요.

단순한 웹 스크래퍼가 아닌

이 프로젝트의 핵심 아이디어는 스크래핑보다 더 넓습니다. 많은 LLM 애플리케이션에서 외부 정보는 궁극적으로 파싱, 정리, 구조화, 청킹, 임베딩, 인덱싱, 검색이 가능한 표현이 되어야 합니다.

Markdown은 유용한 문서 계층 구조를 보존하기 때문에 이 파이프라인에서 특히 유용합니다:

Web Page → Scrapling → Markdown
                          ├── Heading
                          ├── Subheading
                          ├── Paragraph
                          ├── List
                          ├── Table
                          └── Links
                          │
                          ▼
                      Chunking → Embeddings → Vector Database → RAG / Agent

이로 인해 MCP 서버는 단순한 스크래핑 유틸리티가 아닌 LLM 데이터 삽입/수집 계층으로 유용합니다.

기능

  • MCP 호환 웹 추출

  • Scrapling 기반

  • AI 에이전트 및 AI IDE용으로 설계

  • Markdown 중심 출력

  • RAG 수집 파이프라인에 적합

  • Docker로 컨테이너화

  • AWS Lightsail에 배포 가능

  • 여러 AI 애플리케이션에서 재사용 가능

  • 데이터 획득을 AI 애플리케이션 자체와 분리

  • 에이전트 워크플로우에 통합 가능

아키텍처

                    Internet
                       │
                       ▼
                ┌───────────────┐
                │      Web       │
                └───────┬───────┘
                        ▼
              ┌───────────────────┐
              │     Scrapling      │
              │  Extraction Layer  │
              └─────────┬─────────┘
                        ▼
              ┌───────────────────┐
              │    MCP Server      │
              │   Tool Interface   │
              └─────────┬─────────┘
                        │
                   MCP Protocol
                        │
          ┌─────────────┼─────────────┐
          ▼             ▼             ▼
       AI IDE         Agent          RAG
          │             │             │
          └─────────────┼─────────────┘
                        ▼
                Markdown / Data
                        ▼
              ┌────────────────────┐
              │ LLM Data Pipeline   │
              └──────────┬─────────┘
                        ▼
              ┌────────────────────┐
              │  Embeddings / DB    │
              └──────────┬─────────┘
                        ▼
                     LLM / RAG

기술 스택

구성 요소

기술

웹 추출

Scrapling

프로토콜

Model Context Protocol (MCP)

언어

Python

컨테이너화

Docker

클라우드

AWS Lightsail

CI/CD

GitHub Actions

출력

Markdown / 구조화된 콘텐츠

AI 통합

MCP 호환 클라이언트

프로젝트 구조

.
├── src/
│   └── ...
├── Dockerfile
├── requirements.txt
├── .dockerignore
├── .gitignore
├── docker-compose.yml
└── README.md

저장소가 다른 소스 레이아웃을 사용하는 경우 위 구조를 조정하세요.

로컬에서 실행

1. 저장소 클론

git clone https://github.com/Santhosh-p653/aws-mcp-test.git
cd aws-mcp-test

2. 의존성 설치

가상 환경을 생성하고 활성화합니다:

python -m venv .venv

# Linux / macOS
source .venv/bin/activate

# Windows
.venv\Scripts\activate

의존성을 설치합니다:

pip install -r requirements.txt

Docker로 실행

이미지를 빌드합니다:

docker build -t scrapling-mcp .

컨테이너를 실행합니다:

docker run -d \
  --name scrapling-mcp \
  -p 8000:8000 \
  scrapling-mcp

컨테이너가 실행 중인지 확인합니다:

docker ps

AWS Lightsail에 배포

이 프로젝트는 AWS Lightsail에서 컨테이너화된 서비스로 실행되도록 설계되었습니다.

대략적인 배포 흐름:

GitHub → Push → GitHub Actions → Build → Docker Image → Deploy → AWS Lightsail
                                                                      │
                                                                      ▼
                                                          Scrapling MCP Server
                                                                      │
                                                                      ▼
                                                      MCP-Compatible AI Clients

배포 단계

  1. AWS Lightsail 컨테이너 서비스 생성 — AWS 콘솔 또는 AWS CLI에서 생성합니다.

  2. Docker 이미지 빌드

    docker build -t scrapling-mcp .
  3. 컨테이너 푸시/배포 — CI/CD 워크플로우에서 생성된 이미지를 사용하여 Lightsail 컨테이너 배포를 구성합니다.

  4. 환경 변수 구성 — 자격 증명과 배포 구성은 저장소 외부에 유지합니다:

    AWS_REGION=
    LIGHTSAIL_SERVICE=
    CONTAINER_NAME=

⚠️ 비밀번호나 자격 증명을 Git에 커밋하지 마세요.

GitHub Actions

저장소는 GitHub Actions를 사용하여 배포를 자동화할 수 있습니다:

git push → GitHub Actions
             ├── Checkout
             ├── Configure AWS credentials
             ├── Build container
             ├── Push/deploy
             └── Update Lightsail

배포는 간단한 워크플로우를 따릅니다:

git add .
git commit -m "update scraper"
git push origin main

워크플로우가 완료되면 업데이트된 MCP 서버가 배포됩니다.

MCP 서버 사용

서버가 배포되면 MCP 엔드포인트를 MCP 호환 AI 클라이언트에 연결합니다:

AI Client → MCP → https://your-mcp-server.example.com → Scrapling → Web Content

AI 클라이언트는 워크플로우의 일부로 노출된 도구를 호출할 수 있습니다 — 서버는 AI 애플리케이션용 플러그인처럼 동작하여 모든 프로젝트의 맞춤형 스크래핑 코드를 대체합니다:

AI Application
      ├── RAG
      ├── Agents
      ├── Research
      └── Automation
             │
             ▼
        MCP Server → Scrapling

RAG 통합

일반적인 RAG 파이프라인은 이 서버를 수집 계층으로 사용할 수 있습니다:

Web Sources → Scrapling MCP → Markdown → Document Parser → Chunking
    → Embeddings → Vector Store → Retriever → LLM

가능한 다운스트림 구성 요소는 다음과 같습니다:

  • Qdrant

  • PostgreSQL + pgvector

  • Elasticsearch

  • OpenSearch

  • Chroma

  • FAISS

  • 맞춤형 지식 저장소

MCP 서버는 다운스트림 저장소 계층과 독립적으로 유지됩니다.

에이전트 워크플로우

서버는 AI 에이전트가 사용할 수 있는 도구가 될 수도 있습니다:

User → AI Agent
         ├── Decide what information is required
         ├── Call Scrapling MCP
         ├── Extract relevant content
         ├── Transform/use Markdown
         ├── Store information
         └── Generate final response

이를 통해 에이전트는 정적 학습 데이터나 이전에 인덱싱된 문서에만 의존하지 않고 동적으로 정보를 획득할 수 있습니다.

왜 Markdown인가?

Markdown은 의미 구조를 보존하기 때문에 LLM 파이프라인에 유용한 중간 표현을 제공합니다.

Markdown:

# AWS Lambda

## Overview
AWS Lambda is a serverless compute service.

## Features
- Event-driven execution
- Automatic scaling
- Pay-per-use pricing

## Architecture
### Invocation
Lambda functions can be invoked through multiple AWS services.

원시 HTML과 비교:

<div>
    <h1>AWS Lambda</h1>
    <div>
        <h2>Overview</h2>
        ...
    </div>
</div>

Markdown은 일반적으로 검사, 정리, 청킹, 처리, 저장, LLM 파이프라인 전달이 더 쉽습니다.

따라서 목표는 단순히 "웹페이지를 스크래핑"하는 것이 아니라 LLM 데이터 파이프라인에 자연스럽게 들어갈 수 있는 형태로 외부 지식을 획득하는 것입니다.

사용 사례

사용 사례

설명

RAG 시스템

인덱싱 전에 신선한 웹 정보를 자동으로 획득합니다.

AI 리서치 에이전트

에이전트가 라이브 웹사이트에서 정보를 검색하고 분석할 수 있게 합니다.

지식 베이스

지속적으로 업데이트되는 지식 저장소를 구축합니다.

AI IDE

MCP를 통해 코딩 어시스턴트에 외부 웹 추출 기능을 제공합니다.

문서 수집

온라인 문서를 다운스트림 처리에 적합한 Markdown으로 변환합니다.

에이전트 자동화

자율 워크플로우에서 웹 추출을 여러 도구 중 하나로 사용합니다.

성능 중심 설계

아키텍처는 웹 획득 계층을 AI 애플리케이션과 분리합니다.

모든 AI 애플리케이션이 맞춤형 스크래퍼를 유지하는 대신, 접근 방식은 다음과 같습니다:

                ┌───────────────┐
                │ Scrapling MCP  │
                └───────┬───────┘
                        │
          ┌─────────────┼─────────────┐
          ▼             ▼             ▼
        RAG          Agent          AI IDE

이를 통해 스크래핑 인프라를 한 번 배포하고 여러 워크플로우에서 재사용할 수 있습니다.

보안 고려 사항

서버를 공개적으로 배포할 때:

  • 컨테이너에 AWS 자격 증명을 노출하지 마세요

  • 프로덕션에서 HTTPS를 사용하세요

  • 적절한 경우 네트워크 접근을 제한하세요

  • 요청된 URL을 검증하세요

  • 필요한 경우 속도 제한을 적용하세요

  • 리소스 사용량을 모니터링하세요

  • 웹사이트의 이용 약관이나 관련 법률을 위반하는 스크래핑을 피하세요

  • 비밀번호는 환경 변수나 전용 비밀 관리자에 보관하세요

프로덕션 권장 사항

프로덕션 배포를 위해 다음을 추가하는 것을 고려하세요:

  • 인증

  • API/MCP 접근 제어

  • HTTPS

  • 속도 제한

  • 요청 로깅

  • 관찰 가능성

  • 재시도 정책

  • 캐싱

  • URL 허용 목록

  • 리소스 제한

  • 상태 확인

  • 모니터링 및 알림

향후 개선 사항

  • MCP 클라이언트 인증

  • URL/도메인 허용 목록

  • 콘텐츠 캐싱

  • 분산 크롤링

  • 큐 기반 수집

  • 자동 문서 청킹

  • 벡터 데이터베이스 직접 통합

  • S3 기반 문서 저장

  • 크롤링 스케줄링

  • 관찰 가능성 대시보드

  • 다중 사용자 접근 제어

엔드투엔드 워크플로우 예시

User / Agent → MCP-Compatible IDE → Scrapling MCP Server → Website
    → Markdown → Document Processing → Chunking → Embeddings
    → Vector DB → Retriever → LLM → Final Response

저장소

GitHub: github.com/Santhosh-p653/aws-mcp-test

기술 문서

이 프로젝트의 아키텍처, 배포, 동기는 AWS Builder Center에 문서화되어 있습니다:

Scrapling, MCP, AWS Lightsail을 사용한 에이전트 AI 고속 웹 스크래핑 강화

기여

기여, 아이디어, 개선, 실험을 환영합니다. 이 MCP 서버를 사용하여 무언가를 구축했다면 이슈나 풀 리퀘스트를 열어 워크플로우를 공유해 주세요.

저자

Santhosh P

다음 분야의 시스템 구축:

  • AI 에이전트

  • RAG

  • MCP

  • 클라우드 인프라

  • 웹 데이터 파이프라인

  • AI/ML

GitHub: @Santhosh-p653


핵심 아이디어: 스크래핑 기능을 한 번 배포하세요. 신선하고 구조화된 웹 데이터가 필요할 때마다 AI 워크플로우에 연결하세요.

Scrapling + MCP는 웹 추출을 현대 LLM 스택을 위한 재사용 가능한 인프라 구성 요소로 만듭니다.

Available Tools

16 tools
browser_actionsBrowser actionsA
Destructive

Run mouse, field, key, dialog, and wait actions in order; return plain text without a snapshot. Stop on the first error, identifying its action; partial effects remain. No retries. Element mouse targets auto-wait and scroll into view; coordinates and wheel do not wait for navigation or scrolling. Cancelled/timed-out clicks attempt button release. Load waits observe the current document, not future navigation.

NameRequiredDescriptionDefault
slowlyNoFresh random delays: 50-150 ms per character, 100-300 ms between all actions, including waits.
actionsYesOrdered actions; fields need target; mouse needs target or viewport (x, y).
session_idYesID from `browser_open`; call `browser_fetch` first.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond annotations: ordered execution, stop-on-first-error with action identification, partial effects remaining, no retries, auto-wait/scroll behavior for element targets, coordinate/wheel non-waiting behavior, button release on cancelled/timed-out clicks, and load-wait scope. These details are consistent with destructiveHint=true and give the agent a precise operational picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and return behavior, then adds operational constraints in compact sentences. Every sentence carries useful information, with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive, open-world tool, the description covers execution order, error behavior, partial effects, retry policy, waiting semantics, and return format. The schema supplies parameter details and session prerequisites, so the description is complete enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents parameters thoroughly. The description still adds actionable semantics by clarifying that element mouse targets auto-wait and scroll into view while coordinate and wheel actions do not wait, and that load waits observe the current document rather than future navigation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: run ordered browser actions covering mouse, field, key, dialog, and wait categories. It also distinguishes the output profile by returning plain text without a snapshot, making the tool's role clear relative to screenshot/extract/fetch siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its list of interactive action types, but it does not explicitly say when to choose this tool over browser_evaluate, browser_extract, browser_fetch, or other siblings. There are no named alternatives or exclusions, so routing is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_evaluateRun JavaScriptA
Destructive

Run JavaScript on the current page, await promises, and return JSON text without a snapshot. Return JSON-compatible values; null/undefined become null. Script effects are not undone on failure. Cancellation stops waiting, but may not stop the script.

NameRequiredDescriptionDefault
argNoJSON object passed to the function; use properties for scalar or array values.
expressionYesJavaScript expression or function to invoke.
session_idYesID from `browser_open`; call `browser_fetch` first.
isolated_contextNoFalse accesses the page's own JS variables; True uses a separate context with the same DOM.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds two pieces of genuine context the agent could not infer: script effects are not undone on failure, and cancellation may not stop the script. That is exactly the operational caveat a caller needs before invoking an irreversible page mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action, then return-value normalization, then two failure caveats. No filler; the only mild cost is that 'without a snapshot' is left unexpanded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by explaining the return shape (JSON text, null/undefined coerced to null). Combined with the failure and cancellation caveats, the agent has enough to invoke it safely; only error-signaling specifics are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter (including isolated_context and arg) is already documented in the schema; the description adds no parameter-level guidance such as when to disable isolated_context or how expression vs arg interact. Baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run JavaScript on the current page') plus scope details: awaits promises and returns JSON text without a snapshot, which implicitly distinguishes it from browser_screenshot and browser_extract. It never names a sibling, so differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'without a snapshot' hints that this is the no-screenshot path, but there is no explicit statement of when to choose browser_evaluate over browser_extract, browser_actions, or browser_fetch, nor any prerequisite sequencing beyond the session_id note in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_extractExtract page contentA
Read-only

Read the current page or one element as snapshot, HTML, Markdown, or text without navigating. Return plain text; snapshot search keeps refs, ancestor paths and three lines of nearby context.

NameRequiredDescriptionDefault
boxesNoInclude viewport bounding boxes in snapshots; ignored for other formats.
depthNoSnapshot depth before search; unlimited if omitted. Ignored for other formats.
searchNoSnapshot-only Python regex; case-sensitive unless (?i). No matches returns empty text.
targetNoPlaywright selector or aria-ref=<ref> matching one element; omitted reads the page.
session_idYesID from `browser_open`; call `browser_fetch` first.
extraction_typeNoOutput format; defaults to an AI ARIA snapshot.snapshot
main_content_onlyNoClean body/target content for AI; ignored for snapshots.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, the description discloses that extraction does not navigate and that snapshot search preserves refs, ancestor paths, and nearby context. It does not cover error behavior or permission requirements, but it adds useful behavioral detail for a read-only extraction tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tightly written sentences with no filler. It front-loads the action and scope, then adds the most relevant output behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the fully described schema and read-only/openWorld annotations, the description is largely complete: it covers formats, non-navigation, and snapshot search context. It does not fully explain return shapes for every format, which is a minor gap because no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description adds some useful context about snapshot search output, but it does not add parameter-level meaning beyond what the schema already provides for target, depth, boxes, session_id, and main_content_only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: read the current page or one element as snapshot, HTML, Markdown, or text. The phrase 'without navigating' directly distinguishes it from navigation/fetch siblings, so an agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context by specifying reading the current page or a single element without navigating. It does not explicitly name alternatives such as browser_fetch or browser_evaluate, so it stops short of full when/when-not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_fetchFetch in browser sessionB
Read-only

Fetch a URL in an open stealthy browser session. Options apply only to this request.

NameRequiredDescriptionDefault
urlYesURL to fetch.
waitNoExtra milliseconds after the page is ready, before returning.
timeoutNoNavigation and page-operation timeout in milliseconds.
load_domNoWait for DOMContentLoaded.
session_idYesID from `browser_open`.
css_selectorNoSelect after `main_content_only` filtering; snapshots require exactly one match.
network_idleNoTry to wait for 500 ms without network activity; continue if the wait fails.
extra_headersNoAdditional request headers.
google_searchNoSet a Google referer, overriding any supplied referer.
pierce_shadowNoInclude open Shadow DOM content; ignored for snapshots.
wait_selectorNoWait for the first CSS match; continue if the wait fails.
blocked_domainsNoBlock requests to these domains and their subdomains.
extraction_typeNoContent output format; snapshots include element bounding boxes.markdown
solve_cloudflareNoAttempt to solve Cloudflare Turnstile/interstitial challenges.
disable_resourcesNoBlock font, image, media, beacon, object, imageset, texttrack, websocket, csp_report, and stylesheet requests.
main_content_onlyNoSanitize <body> before selection; False uses the full document. Ignored for snapshots.
wait_selector_stateNoTarget state of `wait_selector`.attached

Output Schema

NameRequiredDescription
urlYesThe URL given by the user that resulted in this response.
statusYesThe status code returned by the website.
contentYesThe page content as Markdown, HTML, text, or an AI ARIA snapshot.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network reach are covered structurally. The description adds two useful traits — the session is "stealthy" and options do not persist across calls — but says nothing about failure behavior for the 17 options (timeout, cloudflare solving, blocked domains) or what happens when the session is stale.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and with zero filler. The brevity is efficient; the only cost is that the second sentence is doing very little work for a tool with 17 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values and annotations cover read-only/open-world, so those burdens are lifted. Still, for a 17-parameter tool with 2 required fields, the description should state the session-lifecycle constraint and the distinction from browser_fetch_once; "options apply only to this request" only partly covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including wait, network_idle, pierce_shadow and extraction_type is already documented. The description adds no parameter meaning beyond "options apply only to this request", so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Fetch a URL") and scopes it to an existing browser session, which separates it from browser_open. However it never names browser_fetch_once or browser_extract, so the sibling with the near-identical name is not disambiguated from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"In an open stealthy browser session" implies a prerequisite (session_id from browser_open, as the schema notes) and "Options apply only to this request" hints at per-call vs persistent state. There is no explicit when-to-use/when-not guidance against browser_fetch_once, browser_extract, or make_request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_fetch_onceFetch page in browserB
Read-only

Fetch a page with a stealth browser and JavaScript rendering.

NameRequiredDescriptionDefault
urlYesURL to fetch.
waitNoExtra milliseconds after the page is ready, before returning.
proxyNoProxy URL, or dictionary with server and optional username/password.
localeNoBrowser language, Accept-Language, and formatting locale; system default if omitted.
cdp_urlNoConnect to an existing Chromium browser over CDP in a new context; launch settings do not apply.
cookiesNoInitial cookies as Playwright cookie dictionaries.
timeoutNoNavigation and page-operation timeout in milliseconds.
headlessNoHide the browser window.
useragentNoUser-Agent override; otherwise generated in headless mode, native in headful mode.
allow_webglNoEnable WebGL; disabling it can trigger bot detection.
hide_canvasNoAdd noise to canvas operations.
real_chromeNoUse locally installed Chrome.
timezone_idNoBrowser timezone; uses the system timezone if omitted.
block_webrtcNoDisable non-proxied WebRTC UDP to reduce IP leaks.
css_selectorNoSelect matching elements after `main_content_only` filtering.
network_idleNoTry to wait for 500 ms without network activity; continue if the wait fails.
extra_headersNoAdditional request headers.
google_searchNoSet a Google referer, overriding any supplied referer.
pierce_shadowNoInclude open Shadow DOM content.
wait_selectorNoWait for the first CSS match; continue if the wait fails.
additional_argsNoBrowser context options that override Scrapling settings.
executable_pathNoAbsolute Chromium-compatible executable path; overrides the server default.
extraction_typeNoContent output format.markdown
solve_cloudflareNoAttempt to solve Cloudflare Turnstile/interstitial challenges before returning.
disable_resourcesNoBlock font, image, media, beacon, object, imageset, texttrack, websocket, csp_report, and stylesheet requests.
main_content_onlyNoSanitize <body> content before selection; False uses the full document.
wait_selector_stateNoTarget state of `wait_selector`.attached

Output Schema

NameRequiredDescription
urlYesThe URL given by the user that resulted in this response.
statusYesThe status code returned by the website.
contentYesThe page content as Markdown, HTML, text, or an AI ARIA snapshot.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and open-world nature are covered. The description adds genuinely useful context by naming stealth and JS rendering, but omits the tradeoffs an agent cares about here — whether a session persists, what gets destroyed, and why one would choose this over browser_fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though the leanness borders on under-specification given the tool's 27-parameter complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema and rich annotations reduce what the description must carry, but with 27 parameters and 16 sibling browser/session tools, the description should at least clarify one-shot versus session semantics. It leaves that ambiguity unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 27 parameters, so the schema carries the full burden of explaining url, wait, timeout, extraction_type, cookies, and stealth flags. The description adds nothing beyond what the schema documents, which is the expected baseline when coverage is this high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (fetch a page) plus the distinguishing mechanism (stealth browser, JavaScript rendering). However, it never contrasts with sibling tools like browser_fetch, browser_open, or make_request, so an agent must infer where it fits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no mention of alternatives. The 'once' in the name implies one-shot versus session-based fetching, but the description never confirms or explains this relative to browser_open or open_request_session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_load_stateLoad browser stateA
Destructive

Replace browser cookies, local storage and IndexedDB from a Playwright-compatible JSON file.

Leaves sessionStorage and open tabs unchanged. Fetch or reload pages to use the restored login.

NameRequiredDescriptionDefault
pathYesFile on the MCP server host; relative to its working directory.
session_idYesID from `browser_open`; no page fetch required.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructiveHint=true; the description adds the crucial scope of that destruction (which stores are overwritten), a non-obvious carve-out (sessionStorage and open tabs untouched), and the follow-up needed for the restoration to take effect. That is exactly the kind of detail structured fields cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The primary effect is front-loaded and the caveats/follow-up immediately follow it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with rich annotations and no output schema, the description covers what changes, what doesn't, and what the agent must do next. What remains unstated is behavior on error or a missing/invalid state file, which is a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with path and session_id fully documented in the schema. The description contributes only one extra semantic detail, the file being Playwright-compatible, which is minor additional meaning; the schema does the heavy lifting as expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Replace') plus the exact resources affected (cookies, local storage, IndexedDB) and the source format (Playwright-compatible JSON file). This is clearly the inverse of browser_save_state, so an agent can distinguish the pair from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Fetch or reload pages to use the restored login' tells the agent what must happen after the call, and 'Leaves sessionStorage and open tabs unchanged' defines the boundaries of what this call restores. It stops short of explicitly naming browser_save_state as the counterpart or stating when not to use this, so it falls just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_network_requestRead network requestA
Read-only

Read a complete saved request part without resending it, with structured data and availability notes.

NameRequiredDescriptionDefault
partNoRequest summary, headers, or text body; incomplete headers are marked.summary
request_idYesID from `browser_network_requests`.
session_idYesBrowser session ID.

Output Schema

NameRequiredDescription
dataNo
noteNo
partYes
request_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that retrieval does not resend the request and that 'availability notes' accompany the data, which is modest but real context beyond the annotations; it does not explain failure behavior when a part was not captured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the non-resend guarantee appears early. The phrasing 'complete saved request part' is slightly dense but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure needn't be explained, and the enum plus request_id provenance cover the parameters. The main residual gap is what happens when a requested part wasn't captured, only loosely covered by 'availability notes'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the 'part' enum is documented including the note that incomplete headers are marked, plus request_id pointing back to browser_network_requests. The description adds nothing about parameters beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('a complete saved request part'), and the phrase 'without resending it' implicitly distinguishes it from the fetch/make_request siblings. It stops short of naming browser_network_requests as the companion list tool, so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Without resending it' hints that this is the right choice when you already have a captured request and don't want to re-issue traffic, but there is no explicit statement of when to use this versus browser_network_requests or browser_fetch. Usage is implied, not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_network_requestsList network requestsA
Read-only

List completed requests across page changes, with IDs and pagination. Recording starts when the browser session opens.

NameRequiredDescriptionDefault
limitNoMaximum requests to return.
after_idNoReturn requests with a higher ID; use next_cursor for more.
session_idYesBrowser session ID.
url_patternNoFilter URLs by regular expression.
include_staticNoInclude successful non-API requests too.

Output Schema

NameRequiredDescription
has_moreYes
requestsYes
next_cursorYes
dropped_countYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral fact not in any structured field: recording begins when the browser session opens, so requests before that are not captured. It stops short of describing filtering defaults (static assets excluded) or the cursor mechanics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the core scope ('completed requests across page changes') front-loaded before the lifecycle caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the parameter schema is fully documented, so the return shape and argument semantics need not be restated. The description covers scope and the recording-start caveat; only the static-vs-API default filtering could be surfaced earlier, but the schema handles it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit, after_id, url_pattern, and include_static all documented inline, including the next_cursor hand-off. The description only echoes the existence of IDs and pagination, adding no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List completed requests') plus scope ('across page changes') and mentions IDs and pagination. It reads clearly enough to separate it from the singular browser_network_request, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'across page changes' hints this is the paged-list counterpart to fetching a single request, but there is no explicit when-to-use or when-not-to-use guidance, and no mention of browser_network_request or the fetch tools as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_openOpen browserA

Open a reusable stealthy browser session. Pass per-request options to browser_fetch.

NameRequiredDescriptionDefault
proxyNoProxy URL, or dictionary with server and optional username/password.
localeNoBrowser language, Accept-Language, and formatting locale; system default if omitted.
cdp_urlNoConnect to an existing Chromium browser over CDP in a new context; launch settings do not apply.
cookiesNoInitial cookies as Playwright cookie dictionaries.
headlessNoHide the browser window.
useragentNoUser-Agent override; otherwise generated in headless mode, native in headful mode.
session_idNoCustom ID; a random 12-character hex ID if omitted.
allow_webglNoEnable WebGL; disabling it can trigger bot detection.
hide_canvasNoAdd noise to canvas operations.
real_chromeNoUse locally installed Chrome.
timezone_idNoBrowser timezone; uses the system timezone if omitted.
block_webrtcNoDisable non-proxied WebRTC UDP to reduce IP leaks.
additional_argsNoBrowser context options that override Scrapling settings.
executable_pathNoAbsolute Chromium-compatible executable path; overrides the server default.

Output Schema

NameRequiredDescription
session_idYesThe unique identifier of the session.
session_typeYesThe type of the session: 'stealthy' or 'static'.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds the meaningful traits 'stealthy' and 'reusable', but says nothing about session lifetime, cleanup requirements (close_session), or resource persistence, leaving important behavioral context unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, with zero filler. The downstream-tool hint is placed immediately after the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be described. However, for a 14-parameter session opener, the description omits how sessions are reused across calls, whether they must be closed, and what happens if a session_id already exists — leaving the lifecycle under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds one genuinely useful routing signal: per-request options belong on browser_fetch, clarifying the division of labor between session creation and request execution beyond what the schema alone conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — open a reusable stealthy browser session — and names a downstream sibling (browser_fetch). It does not distinguish itself from other session-creating siblings such as open_request_session or browser_fetch_once, so differentiation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Pass per-request options to browser_fetch' implies the session is a container for later fetch calls, but it never says when to choose this over open_request_session or browser_fetch_once. Usage is inferable but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_save_stateSave browser stateB
Destructive

Save browser cookies, local storage and IndexedDB as Playwright-compatible JSON. Excludes sessionStorage.

NameRequiredDescriptionDefault
pathYesFile on the MCP server host; relative to its working directory. Overwrites the file; parent must exist.
session_idYesID from `browser_open`; no page fetch required.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so safety is covered structurally. The description earns credit for enumerating exactly which storage areas are captured and that sessionStorage is deliberately dropped — a real behavioral constraint beyond the annotations. It does not restate the overwrite behavior, which lives in the path schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the contents and format, with the exclusion clause placed where it reads as a qualifier. No filler whatsoever.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter write tool with full schema coverage and destructive annotations, the description supplies the one thing the schema cannot: what state is and isn't captured. The only minor omission is the round-trip relationship to browser_load_state, which an agent restoring state would want stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the path parameter already documents relative-to-working-directory, overwrite, and parent-must-exist semantics, plus session_id ties back to browser_open. The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Save) and a precisely enumerated resource (cookies, local storage, IndexedDB) plus the output format (Playwright-compatible JSON). The explicit exclusion of sessionStorage further sharpens scope. It does not, however, name its inverse sibling browser_load_state, so the pairing must be inferred from the shared 'state' naming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says what is captured but never when to use this instead of alternatives; the obvious pairing with browser_load_state for persist/restore workflows is left unstated. No preconditions (an open session, a writable host path) are mentioned in the description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_screenshotTake browser session screenshotA
Read-only

Capture the current page or one element without navigating; return the image and current URL. Element capture waits and scrolls into view. Use browser_actions for other waits before capture.

NameRequiredDescriptionDefault
refNoCurrent snapshot element reference; omit both targets for page capture.
qualityNoJPEG quality, 0-100; invalid for PNG.
timeoutNoCapture limit in milliseconds; 0 disables it.
selectorNoPlaywright selector matching one element; omit when using ref.
full_pageNoCapture the full scrollable page; incompatible with selector/ref.
image_typeNoImage format.png
session_idYesID from `browser_open`; call `browser_fetch` first.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description still adds real behavior: no navigation occurs, element capture waits and scrolls into view, and the return includes the image plus the current URL. It omits cost/size implications and timeout behavior, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and the 'no navigation' constraint, then the alternative tool. Nothing is redundant, though the second sentence's phrasing is slightly clipped.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating what is returned (the image and current URL). Combined with annotations and full schema coverage, an agent has enough to call it correctly; missing pieces like full_page behavior and timeout effects are minor and schema-documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter (ref, selector, full_page, quality, image_type, timeout) is documented in-schema, so the baseline of 3 applies. The description's only additional signal is that capture targets either the page or 'one element', which is already inferable from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Capture the current page or one element') and adds the key constraint 'without navigating', which separates it from navigation-capable siblings like browser_open/browser_fetch. It does not explicitly contrast with browser_extract or browser_evaluate, so sibling differentiation is partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

One usage pointer is given ('Use browser_actions for other waits before capture'), which is genuinely useful. However there is no guidance on when to prefer screenshots over browser_extract/browser_evaluate, nor on when not to use it (e.g. session not yet fetched, non-visual data extraction).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_sessionClose sessionB

Close a session and free its resources.

NameRequiredDescriptionDefault
session_idYesSession ID to close.

Output Schema

NameRequiredDescription
messageYesA confirmation message.
session_idYesThe unique identifier of the closed session.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false, readOnlyHint=false, and openWorldHint=true, so safety framing is covered. The description adds that resources are freed, which hints at resource cleanup, but omits idempotency (what happens on a second close), the effect on in-flight requests, and behavior for an invalid session_id — all material for a lifecycle-mutating call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though its brevity reflects under-specification rather than disciplined compression.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. However, for a state-changing session-termination tool with annotations only carrying hint flags, the description should at least cover idempotency and error conditions to be complete; it covers neither.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and the schema documents it at 100% coverage ('Session ID to close.'). The description adds no syntax, format, or origin information for session_id, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Close a session') plus a secondary effect ('free its resources'). It is distinguishable from siblings like open_request_session and list_sessions, but it never names which session types it applies to, so the boundary with browser sessions vs. request sessions is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to close a session versus leaving it to expire, no prerequisites (e.g., that the session_id must come from open_request_session), and no mention of alternatives such as list_sessions for verifying what exists. The agent must infer the entire lifecycle context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsList sessionsB
Read-only

List registered sessions, their status, and effective settings.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that results include status and effective settings, which hints at response content, but says nothing about whether the list is scoped to the current connection or global, or how large it can get.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though so terse that the key ambiguity about what a 'session' is here goes unaddressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and an output schema present, the description needn't explain return values. But given a sibling set dense with both request-session and browser-session tools, the omission of which session domain this lists is a meaningful gap in an otherwise minimal tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description correctly implies no filtering inputs are needed, matching the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (registered sessions) plus the fields returned (status, effective settings). It does not, however, distinguish this from session-adjacent siblings like open_request_session or close_session, so an agent can't tell from the description alone whether these are request sessions, browser sessions, or both.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus the many sibling session tools, no prerequisites, and no stated outcome for the agent to use in routing decisions. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

make_requestSend HTTP requestB
Read-only

Make an HTTP request without JavaScript. Suitable for low-to-mid protection.

NameRequiredDescriptionDefault
urlYesURL to fetch.
authNoBasic auth: {"username": ..., "password": ...}.
dataNoForm or raw body; ignored for GET.
jsonNoJSON body; ignored for GET.
http3NoUse HTTP/3; may conflict with browser impersonation.
proxyNoProxy URL, optionally including credentials.
methodNoHTTP method.GET
paramsNoQuery parameters.
verifyNoVerify TLS certificates.
cookiesNoRequest cookies.
headersNoRequest headers.
retriesNoMaximum attempts, including the first; None or values below 1 send once.
timeoutNoTimeout in seconds.
proxy_authNoProxy basic auth: {"username": ..., "password": ...}.
impersonateNoBrowser/version to impersonate; "chrome" uses the latest supported Chrome profile. Lists pick randomly per attempt; None disables impersonation.chrome
retry_delayNoSeconds between retries.
css_selectorNoSelect matching elements after `main_content_only` filtering.
max_redirectsNoRedirect limit; -1 means unlimited.
extraction_typeNoContent output format.markdown
follow_redirectsNo"safe" blocks redirects to private/internal IPs; True allows all; False disables redirects.safe
stealthy_headersNoFill missing browser headers and use a Google referer if none was supplied.
main_content_onlyNoSanitize <body> content before selection; False uses the full document.

Output Schema

NameRequiredDescription
urlYesThe URL given by the user that resulted in this response.
statusYesThe status code returned by the website.
contentYesThe page content as Markdown, HTML, text, or an AI ARIA snapshot.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external reach are covered. The description adds the meaningful behavioral note that no JavaScript executes and that it targets low-to-mid protection sites, but it is silent on the significant behaviors exposed by the schema (retries, impersonation conflicts, redirect safety) that an agent should understand before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with zero filler and the key differentiator placed early. It is efficiently written, though the brevity borders on under-specification for a 22-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, but for a 22-parameter tool with impersonation, retries, proxy, and redirect-safety behaviors, the description omits routing guidance versus the many sibling fetch/session tools and any note on limits or typical failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 22 parameters are self-documented with defaults, enums, and semantics (e.g. follow_redirects safe mode, impersonate list randomization). The description adds no parameter-level meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Make an HTTP request") and adds a differentiator against the browser siblings by noting it runs "without JavaScript." An agent can tell this is the non-browser fetch path, though it doesn't name which specific sibling to prefer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Suitable for low-to-mid protection" implies a scope boundary and hints that heavier protection needs another tool, but it never names the alternative (browser_fetch, browser_fetch_once, session_make_request) nor states explicit when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_request_sessionOpen HTTP sessionA

Open a reusable HTTP session for session_make_request, keeping cookies, connections, and request settings.

NameRequiredDescriptionDefault
proxyNoProxy URL for all session requests, optionally including credentials.
session_idNoCustom ID; a random 12-character hex ID if omitted.
impersonateNoBrowser/version to impersonate; "chrome" uses the latest supported Chrome profile. Lists pick randomly per attempt; None disables impersonation.chrome

Output Schema

NameRequiredDescription
session_idYesThe unique identifier of the session.
session_typeYesThe type of the session: 'stealthy' or 'static'.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false. The description adds genuine value by disclosing persistence semantics (cookies, connections, request settings are retained), but says nothing about session lifetime, resource cleanup via close_session, or whether sessions expire.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the purpose and the key persistence benefit both land immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and all parameters documented, the description only needs to cover intent and lifecycle. Intent is covered; the missing piece is that this creates stateful server-side resources that should be released with close_session.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so proxy, session_id, and impersonate are already fully documented including defaults and the random-hex fallback. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Open a reusable HTTP session") and names the sibling it feeds (session_make_request), so the agent can separate it from make_request and browser_open. It stops short of explicitly contrasting with browser_open, which also opens a session-like resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "for session_make_request" implies the intended pairing, but there is no explicit when-to-use, when-not-to-use, or alternative routing (e.g., use make_request for one-off calls, browser_open for JS-rendered pages). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_make_requestSend HTTP request in HTTP sessionB
Read-only

Make an HTTP request using the session's cookies, connections, impersonation, and proxy. Options apply to this request.

NameRequiredDescriptionDefault
urlYesURL to fetch.
authNoBasic auth: {"username": ..., "password": ...}.
dataNoForm or raw body; ignored for GET.
jsonNoJSON body; ignored for GET.
http3NoUse HTTP/3; may conflict with browser impersonation.
methodNoHTTP method.GET
paramsNoQuery parameters.
verifyNoVerify TLS certificates.
cookiesNoRequest cookies.
headersNoRequest headers.
retriesNoMaximum attempts, including the first; None or values below 1 send once.
timeoutNoTimeout in seconds.
session_idYesHTTP session ID from `open_request_session`.
retry_delayNoSeconds between retries.
css_selectorNoSelect matching elements after `main_content_only` filtering.
max_redirectsNoRedirect limit; -1 means unlimited.
extraction_typeNoContent output format.markdown
follow_redirectsNo"safe" blocks redirects to private/internal IPs; True allows all; False disables redirects.safe
stealthy_headersNoFill missing browser headers and use a Google referer if none was supplied.
main_content_onlyNoSanitize <body> content before selection; False uses the full document.

Output Schema

NameRequiredDescription
urlYesThe URL given by the user that resulted in this response.
statusYesThe status code returned by the website.
contentYesThe page content as Markdown, HTML, text, or an AI ARIA snapshot.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network reach are covered. The description adds real context by listing the session state it inherits (cookies, connections, impersonation, proxy) and that "Options apply to this request" (per-call overrides of session defaults). It omits two loaded behaviors an agent needs: whether cookies/state from the response are written back into the session, and that a POST/PUT/DELETE is a genuine external mutation despite readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, front-loaded with the action and the state it consumes. It is not padded, but the second sentence is vague enough that its brevity shades toward under-specification rather than efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema and annotations are present, and the schema documents all 20 parameters, so the description needn't restate them. Still, for a tool this behaviorally rich (redirect safety modes, browser impersonation, content extraction, session state carry-over), the description leaves the session/mutation semantics and sibling routing unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 20 parameters, so the schema already explains url, method, data/json, retries, follow_redirects and the rest. The description contributes only the blanket claim that options apply per-request, adding no semantics for any specific parameter. Baseline 3 is appropriate when the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Make an HTTP request") and adds the distinguishing trait that it draws on the session's cookies, connection pool, impersonation, and proxy. That implicitly separates it from the stateless `make_request` sibling, but the sibling is never named and an agent must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase "using the session's cookies" hints this is the tool for requests that must stay within an existing session, and the schema's session_id points at `open_request_session`. However, there is no explicit when-to-use / when-not-to-use guidance against `make_request` or the `browser_fetch*` siblings, and no statement that a session must be opened first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.1.0
    • First observedbrowser_actions
    • First observedbrowser_evaluate
    • First observedbrowser_extract
    • First observedbrowser_fetch
    • First observedbrowser_fetch_once
    • First observedbrowser_load_state
    • First observedbrowser_network_request
    • First observedbrowser_network_requests
    • First observedbrowser_open
    • First observedbrowser_save_state
    • First observedbrowser_screenshot
    • First observedclose_session
    • First observedlist_sessions
    • First observedmake_request
    • First observedopen_request_session
    • First observedsession_make_request

TDQS

B3.4/5.0

Scored across 16 tools

Disambiguation3/5

The set contains several close pairs whose boundaries require careful reading of descriptions: make_request vs session_make_request, browser_fetch vs browser_fetch_once, and browser_network_requests vs browser_network_request. The distinctions exist (stateless vs session-bound, one-off vs persistent, list vs detail), but an agent can easily misselect without parsing the long descriptions.

Naming Consistency3/5

There are two coherent families: browser_* prefixed tools and session/verb-first tools (open_request_session, close_session, list_sessions, session_make_request, make_request). Within each family it is readable, but the mixed conventions across the set (browser_open vs open_request_session, bare make_request vs session_make_request) create inconsistency.

Tool Count3/5

16 tools is borderline heavy for the surface. Many are justified (fetch variants, network inspection), but the fetch/request pairs (browser_fetch vs browser_fetch_once, make_request vs session_make_request) inflate the count and add selection burden without adding fundamentally new capability.

Completeness4/5

The surface covers the full scraping lifecycle: session lifecycle (open/close/list), state save/load, multiple fetch/request modes, extraction, actions, evaluation, network inspection, and screenshots. Minor gaps exist (no explicit browser teardown distinct from close_session, no cookie-specific tool), but the core workflow is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents and MCP clients to fetch webpages and crawl sites, extract main content, and convert it into clean Markdown with preserved links for fast, token-efficient scraping.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables MCP clients and AI agents to fetch webpages and crawl sites, strip noise, and convert content into clean, link-preserving Markdown with caching and configurable multi-page depth while minimizing token usage.
    MIT