Mmcp.market

Fortress MCP server

by tiliondev·io.github.tiliondev/fortress·v0.1.3

Stealth browser for AI agents: fetch pages behind Cloudflare/DataDome/CAPTCHA, extract clean data.

B77/100grade B
What users say
No reviews yet
Be the first
Safety scan
B77/100

full report

Adoption
Established

654 stars124 downloads/wk

Reviews

Write one

Nobody 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 posts

Read from the package source without running it. The installed server may list more.

  • click_button

    Click 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_tab

    Close a tab by index (from list_tabs).

  • crawl_site

    Crawl 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_page

    Get 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_file

    Download 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 action

    Run 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_document

    Extract 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_page

    Extract 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_page

    Fetch 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_field

    Type `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_cookies

    Get the cookies on the current (or a navigated) page — inspect or export an authenticated session. Returns {cookies:[...]}.

  • get_page_html

    Get 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_endpoint

    Return 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_tasks

    List 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_tabs

    List the open browser tabs (index + url + which is current).

  • load_profile

    Restore a saved session (cookies + localStorage) from a named profile — reuse a login without re-authenticating. Navigate to the site afterward.

  • page_elements

    Map 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_key

    Press a key on the current page: Enter (submit a focused field), Tab, Escape (dismiss a dialog), ArrowDown, PageDown, etc. Returns the resulting {url}.

  • read_page

    Get 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_apis

    Reverse-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 action

    Run 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_page

    Save 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_profile

    Save 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_page

    Screenshot 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 action

    Run 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_for

    Wait 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

no findings
  • 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
Overall 77/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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
Add to Cursor

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.

All Fortress alternatives →
  • Zahori
    Find the media stream behind any web page: browser-driven HLS/DASH/MP4 with learnable site profiles
    A
  • AIHawk
    AI browser agent: browses, clicks, types, and reads real web pages from plain-English instructions.
    A
  • Browser Use
    Control a real Chrome browser to complete any task: fill forms, extract data, book flights.
    A
  • Scrapeless
    Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
    A
  • Openbrowser AI
    AI browser automation. Write async Python to navigate, click, type, and extract data.
    B

More from tiliondev →