escalator
escalator
URLを渡すと、クリーンなMarkdownが返ってきます。動作する最も安いラン段を登っていきます — 素のHTTPフェッチ、同じフェッチを住宅用プロキシ経由で、そしてステルスブラウザ — そして実際のコンテンツが返ってきた最初の段で停止します。
$ escalator scrape https://en.wikipedia.org/wiki/Web_scraping | head -3
# Web scraping
**Web scraping**, **web harvesting**, or **web data extraction** is [data scraping](...)クイックスタート
# 1. install uv (https://docs.astral.sh/uv/getting-started/installation/)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. configure this machine -- finds your browser, or fetches one
uvx escalator init
# 3. use it
uvx escalator scrape https://en.wikipedia.org/wiki/Web_scrapingそれがオンボーディングの全体です。init が設定ファイルを1つ書き出し、初回実行前に手で編集する必要はありません。何かおかしい場合は: escalator doctor。
最小限のLinuxでは(ベアコンテナ、新しいVPS)、Chromeはデスクトップがすでに持っているシステムライブラリを必要とします。escalatorはそれらをインストールしません — 正確な
apt-getの行を表示し、escalator doctorがそれを繰り返します。1回だけ、1コマンド:sudo apt-get update && sudo apt-get install -y \ libnss3 libnspr4 libatk1.0-0t64 libatk-bridge2.0-0t64 libcups2t64 libdrm2 \ libxkbcommon0 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 \ libgbm1 libglib2.0-0t64 libpango-1.0-0 libcairo2 libasound2t64 \ libatspi2.0-0t64 libxcb1 libdbus-1-3 libexpat1
設計上、バッテリーは同梱しません。 escalatorは未設定のまま出荷されます — ブラウザの同梱なし、プロキシの同梱なし、テレメトリなし、自身のディレクトリの外には何も書き込みません。init は、設定をREADMEの宝探しではなく2分の会話にするために存在します。
Related MCP server: Safer Fetch MCP Server
インストール
方法 | コマンド | タイミング |
uv(インストールなし) |
| 試してみる |
uv(永続的) |
| PATHに追加したい場合 |
pipx |
| すでにpipxを使っている場合 |
pip |
| 既存のvenv内 |
Docker |
| サーバー |
コアフローに必要なものはすべてデフォルトインストールに含まれています。ブラウザのラン段も含めて — ブラウザは同梱されず、それが escalator browser install の役割です。追加が1つあります: escalator[mcp] がMCPインターフェースを追加し、Dockerイメージにはそれが含まれています。
Docker
docker run --rm \
-e ESCALATOR_SERVER_API_KEYS=your-key \
-p 8000:8000 -v ./data:/data \
ghcr.io/ruslanstarikov/escalator serveイメージには固定されたブラウザが含まれ、環境変数だけで完全に設定されます — プロキシの配線については docker-compose.example.yml を参照してください。uid 1000 で実行されるため、バインドマウントされた ./data はその uid から書き込み可能である必要があります。
コマンド
escalator init [--yes] configure this machine; --yes for scripts
escalator doctor [--json] check everything, one fix per failure
escalator browser list every browser found, and which one wins
escalator browser install download Chrome for Testing into the data dir
escalator scrape URL one page to stdout, so it pipes
escalator serve the HTTP API and the MCP face
escalator --version tool, python, platformラダー
policy robots.txt (cached) + rate limit → may short-circuit (skip/deny/wait)
http curl_cffi, impersonate=chrome → ~100ms; clears undefended sites
http_proxy same, routed via residential IP → beats datacenter-IP bans
browser nodriver, headless Chrome → JS/SPA + Cloudflare-class defenses
│
└─ walled on the last rung? → status="challenged". Surrender.これが単なる for ループ以上のものになるのは2つの点です:
200 OK は成功ではありません。 Cloudflareのインタースティシャルを伴うHTTP 200を返すラン段は成功していません。core/detect.py は抽出後にすべてのレスポンスを分類します — content、thin、blocked — そして content だけが有効です。それがなければラダーは決してエスカレーションせず、キャッシュはジャンクを永遠に配信するドメインに対して「httpが機能する」と学習してしまいます。
キャッシュは忘れます。 学習された開始ラン段が上にしかラチェットしないと、すべてのドメインがブラウザ+プロキシへと漂い、プロキシ料金を静かに膨らませます。エントリは learned_at を保持します。ladder.tier_cache_ttl_hours を過ぎると、ドメインは1段安いラン段を再試行します。
なぜこの形になっているのか、そして意図的に何を拒否しているのかは DESIGN.md を参照してください。
設定
init によって書き込まれる1つのファイルで、プラットフォームの設定ディレクトリにあります(Linuxでは ~/.config/escalator/config.toml、macOSでは ~/Library/Application Support/escalator/config.toml)。場所は --config で上書きできます。
優先順位は、どこでも:
CLI flag > environment > config.toml > defaultすべてのキーには環境変数があり、それがファイルがまったく存在しなくてもDockerイメージが設定される方法です:
設定キー | 環境変数 | デフォルト | 機能 |
|
| — | Chrome/Chromiumバイナリへの絶対パス。空 = 検出。 |
|
|
| false はディスプレイ(またはXvfb)が必要で、検出が難しくなります。 |
|
|
| レンダリングもプロキシ経由でルーティングします。帯域幅を消費します。 |
|
|
| 小型マシンではChromeがRAMの上限です。 |
|
|
| ブラウザラン段のフェッチごとの期限。 |
|
|
| スイッチ。これが false の間は以下はすべて無視されます。 |
|
| — | http://user:pass@host:port、または socks5://... |
|
| — | 複数の出口。ラウンドロビンで使用。url と組み合わせます。 |
|
|
| 2つのhttpラン段のフェッチごとの期限。 |
|
|
| 抽出された文字数がこの数未満の場合、ページは「thin」とされ、ラダーが登ります。 |
|
|
| 学習されたラン段が1段安く減衰するまでに生存する時間。 |
|
|
| あなたのマシン、あなたの判断。 |
|
|
| ドメインごと。0 は間隔を完全に無効にします。 |
|
| Chrome UA | robots.txt のマッチングに使用。 |
|
| — |
|
|
|
| 127.0.0.1 はローカルネットワークから遮断します。コンテナは 0.0.0.0 を必要とします。 |
|
|
|
|
|
| — | データベースと管理されたブラウザ。空 = 以下のプラットフォームデフォルト。 |
|
|
| request_log に保持される行数。挿入時にトリミングされます。 |
データ — SQLiteデータベースとダウンロードされたブラウザ — はプラットフォームのデータディレクトリに置かれ、ESCALATOR_STORAGE_DATA_DIR で上書きできます。その外には何も書き込まれません。
ブラウザの入手先
escalator browser list は検索を順に表示します:
明示的なパス —
--browser-path、次にESCALATOR_BROWSER_PATH、次にbrowser.path。設定されていて間違っている場合は、パスを指定したエラーになります。黙ってフォールスルーすることはありません。このマシンにインストールされているブラウザ: 本物のGoogle Chromeが最初、次にChromium、次にEdgeとBrave。
以前に
escalator browser installがダウンロードしたブラウザ。
どれも見つからない場合は、それを修正する2つのコマンドを指定したエラーが表示されます。解決は自動でダウンロードしません — サーバーリクエストやcronジョブが副作用としてソフトウェアをインストールすべきではありません。
サーバーの使用
escalator serve # 127.0.0.1:8000 by defaultPOST /scrape {url, markdown?, min_tier?, max_tier?, timeout_ms?} -> FetchResult
GET /healthz -> {status, version}Authorization: Bearer <key> で認証します。ここで key は server.api_keys の1つです。そのリスト が 真実です:キーを削除すると、次の起動時に失効されます。新しいキーを発行するエンドポイントはありません。
壁はHTTPエラーではなく、200 OK と {"status": "challenged"} で返ってきます。これは意図的です:エージェントの側がそれに反応できるように。ループで再試行しても役に立ちません — escalatorは設計上CAPTCHAを解決しません。
[mcp] エクストラを使用すると、同じラダーが /mcp で1つのツールとして公開されます: scrape_url(url, force_browser=False)。
トラブルシューティング
まずここから:
escalator doctorPython、設定ファイル、データディレクトリ、ブラウザの解決、実際のヘッドレス起動、そして — プロキシが設定されている場合 — それを通した1回の実際のリクエストをチェックし、パスワードをマスクした状態で出口のIPと国を報告します。すべての❌にはそれを修正する1行が付属し、何かが失敗した場合は終了コードが非ゼロになるため、スクリプトでも使用できます。マシン向けには escalator doctor --json。
症状 | 通常の原因 |
|
|
Linux で | doctor がインストールするパッケージを指定します |
すべてが | 住宅用プロキシが必要です: |
| キーが設定されていない、または |
最初のブラウザフェッチが遅い | Chromeのコールドスタート。escalatorは起動を1回再試行します |
それでも動作しない場合は、escalator doctor の出力全体をissueに貼り付けてください — それがその最後の行が求めているものであり、回答への最速の道です。
開発
CONTRIBUTING.md を参照してください。要するに: uv sync、uv run pytest。
ライセンス
パブリックドメインとして公開されています — UNLICENSE を参照してください。保証なし、帰属表示不要、好きなように使ってください。
This server cannot be installed
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 Servers
- AlicenseNot gradedqualityCmaintenanceScrapes webpages and converts them to markdown using AI-powered interaction to automatically handle cookie banners, CAPTCHAs, paywalls, and other blocking elements before extracting clean content.1548Apache 2.0
- AlicenseBqualityDmaintenanceEnables fetching and converting web content to markdown with built-in prompt injection safeguards that detect and block malicious content attempting to manipulate the LLM.12MIT

HatFetchofficial
AlicenseAqualityAmaintenanceEnables LLM agents to read any website by scraping and crawling into clean Markdown, automatically bypassing bot detection with residential proxies.342MIT- AlicenseNot gradedqualityBmaintenanceFetches and renders web pages using a headless Chromium browser, returning clean Markdown or HTML content even for JavaScript-heavy single-page applications.207MIT
Related MCP Connectors
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Fetch any URL and get clean Markdown. Web scraping for AI agents.
Read any web page as clean Markdown for AI agents: fetch, search, metadata, links. SSRF-safe.
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/ruslanstarikov/escalator'
If you have feedback or need assistance with the MCP directory API, please join our Discord server