Fortress MCP server
Stealth browser for AI agents: fetch pages behind Cloudflare/DataDome/CAPTCHA, extract clean data.
654 stars124 downloads/wk
Reviews
Write oneNobody has reviewed Fortress yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Fortress tools (26, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
click_buttonClick a BUTTON or link by its visible text on the current page (navigates to `url` first if given). Use to press buttons, submit, open menus, follow links. Returns the resulting {clicked, url, title}.
close_tabClose a tab by index (from list_tabs).
crawl_siteCrawl a whole website (BFS, auto-handles SPA/JS + lazy-load) through the stealth browser and return every discovered page/document + a sitemap. Use to map or harvest a site that blocks conventional crawlers.
current_pageGet the current working page's URL and title WITHOUT navigating — use to check where you landed after click_button / fill_field(submit=True). Returns {open, url, title}.
download_fileDownload a file (preserving the stealth browser's cookies/session) to a sandboxed path. Use for PDFs/CSVs/exports behind auth or bot detection. Returns {url, path, bytes}.
evaluate_jswrite actionRun a JavaScript expression on the current (or a navigated) page and return its result. Use for custom scraping the high-level tools don't cover, e.g. `Array.from(document.querySelectorAll('.price')).map(e=>e.innerText)`.
extract_documentExtract clean text/markdown + tables from a DOCUMENT — a PDF, DOCX, XLSX, CSV, or HTML file, given a local path OR a URL (even one behind bot detection). Use for reports, datasheets, filings, or any file the agent must read.
extract_pageExtract clean, LLM-ready content from a page that may be behind bot detection — returns markdown + tables + metadata (or a schema-shaped record if `schema` is given). Use instead of raw HTML scraping when you want structured, readable content and the site blocks normal scrapers.
fetch_protected_pageFetch a web page that normal HTTP clients / headless browsers CAN'T get — pages behind Cloudflare, DataDome, PerimeterX, Akamai, or that return 403 / 'Access Denied' / 'Are you a robot' / CAPTCHA challenges.
fill_fieldType `value` into a form FIELD (CSS selector, e.g. 'input[name=q]') on the current page (navigates to `url` first if given). Set submit=True to press Enter and submit — the reliable way to submit a search box. Pair with page_elements to find field selectors.
get_cookiesGet the cookies on the current (or a navigated) page — inspect or export an authenticated session. Returns {cookies:[...]}.
get_page_htmlGet the RAW HTML of a page (behind bot detection or not). Use when you need the exact markup rather than cleaned markdown. Returns {url, html} (capped).
get_stealth_cdp_endpointReturn a Chrome DevTools Protocol (CDP) websocket URL for a running stealth browser you can connect your OWN automation stack to — browser-use, Playwright, Puppeteer, Crawl4AI, Stagehand all accept a `cdp_url`.
list_browser_tasksList the browser-automation flow names accepted by run_browser_task (login, paginate_collect, infinite_scroll_collect, extract_table, multi_step_checkout, download_file, navigate_spa, ...).
list_tabsList the open browser tabs (index + url + which is current).
load_profileRestore a saved session (cookies + localStorage) from a named profile — reuse a login without re-authenticating. Navigate to the site afterward.
page_elementsMap a page's interactive STRUCTURE — its buttons, links, form fields, and headings (the layout/design overview). Use to discover what you can click or fill before calling click_button / fill_field. Returns {url, buttons[], links[], fields[], headings[]}.
press_keyPress a key on the current page: Enter (submit a focused field), Tab, Escape (dismiss a dialog), ArrowDown, PageDown, etc. Returns the resulting {url}.
read_pageGet clean, reader-mode MARKDOWN of ANY web page (protected or not) — the readable article/content as markdown plus any tables. Use to read a page's content without the HTML noise. Returns {url, title, markdown, tables}.
recon_site_apisReverse-engineer a site's PRIVATE API: drive the page in a stealth browser and capture the XHR/fetch endpoints, auth flow, and JSON traffic behind it (secret-scrubbed). Use when you want to hit a site's real backend API directly instead of scraping HTML.
run_browser_taskwrite actionRun a multi-step browser automation on a stealth browser that won't get flagged as a bot — logging in, paginating, infinite-scroll collection, table extraction, form fill, file download, multi-step checkout, SPA navigation.
save_pageSave a page (behind bot detection or not) as pdf | html | text | screenshot to `path`. Use to archive/export a protected page as a PDF.
save_profileSave the current authenticated session (cookies + localStorage) to a named profile so you can restore the login later with load_profile — no need to log in again. Do this AFTER a successful login (e.g. via run_browser_task).
screenshot_pageScreenshot a page (that may be behind bot detection) as PNG. Writes to `path` if given, else returns base64 (large images are saved to a temp file instead, to avoid flooding context). Use for visual verification/QA.
search_webwrite actionRun a web search through a real stealth browser (not a paid SERP API) and return organic results. Useful when you need fresh search results and SERP APIs are unavailable or the search engine blocks scripted queries.
wait_forWait for a CSS selector to appear (navigates to `url` first if given). Use before reading a page whose content loads late via JavaScript.
Public scan report
scanner v0.1.9 · 2026-09-26 · same rubric, same numbers if you re-run it
- Code scan5 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 64 days ago12/15
- Maintainer identityregistry namespace matches repository owner7/10
What the publisher says
From the Fortress repository's README, as published. We do not edit it. Read it on GitHub
One browser engine to rule them all
Stealth Chromium engine
Fortress is a stealth Chromium engine that stops your scrapers and browser agents from getting blocked, with one line of code change. Bot detectors flag automation by reading the browser fingerprint; Fortress corrects that fingerprint inside Chromium's C++, so the browser presents as an ordinary Chrome install. Scrapers finish their runs, agents reach the pages they were sent to, and CreepJS, Sannysoft, BrowserScan, and live Cloudflare Turnstile all read it as human. Point your existing Playwright or Puppeteer at Fortress over CDP, and nothing else in your code changes.
Blink · V8 · BoringSSL patched in-tree · ANGLE / D3D11-backed WebGL · JA3/JA4-coherent TLS · monthly upstream rebase · reproducible, gauntlet-gated releases
34single-surfaceC++ patches 0%CreepJSheadless / stealth [native code]across everyrealm BSD-3open engine,rebuild it yourself
Unedited capture of the Fortress binary in a real window: it clears a live Cloudflare challenge, turns bot.sannysoft.com all green, then reads BrowserScan “Normal”. Reproduce with tools/gauntlet.py.
Native-code parity
Every spoofed getter is a C++ getter: toString returns [native code], realm-invariant across main frame, iframes, and Web Workers.
Drop-in CDP
nodriver-style raw CDP on :9222, with no Runtime.enable leak. Keep Playwright, Puppeteer, or any CDP client; swap the browser, keep your code.
Clears the gauntlet
0% headless on CreepJS; Sannysoft, BrowserScan, and live Cloudflare Turnstile cleared, all as a stock Chrome install.
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
claude mcp add fortress -- uvx tilion
Fortress: common questions
- Is Fortress MCP server safe?
- Mostly: it is graded B (77/100). Read the Fortress safety report
- How do I install Fortress?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does Fortress need an API key?
- Yes. The registry entry asks for
TILION_API_KEY. - Is Fortress maintained?
- The last commit was 65 days ago (2026-07-23). The latest release is v0.1.3.
- What can I use instead of Fortress?
- Servers from other publishers that do the same job: Zahori MCP server, AIHawk MCP server and Browser Use MCP server. Compare all Fortress alternatives.
Alternatives to Fortress
Same job from other publishers: the closest match first, then the best rated.
- ZahoriFind the media stream behind any web page: browser-driven HLS/DASH/MP4 with learnable site profilesnot reviewedGrowingA
- AIHawkAI browser agent: browses, clicks, types, and reads real web pages from plain-English instructions.not reviewedWidely usedA
- Browser UseControl a real Chrome browser to complete any task: fill forms, extract data, book flights.not reviewedEstablishedA
- ScrapelessWeb search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.not reviewedEstablishedA
- Openbrowser AIAI browser automation. Write async Python to navigate, click, type, and extract data.not reviewedEstablishedB