{"name":"io.github.tiliondev/fortress","slug":"tiliondev-fortress","title":null,"description":"Stealth browser for AI agents: fetch pages behind Cloudflare/DataDome/CAPTCHA, extract clean data.","url":"https://mcp.market/server/tiliondev-fortress","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"scraping","tags":["scraping","devtools"],"presence":{"score":50,"stars":654,"forks":43,"downloads_week":124,"last_push_at":"2026-07-23T23:54:52.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/tiliondev/fortress","website":"https://tilion.dev","version":"0.1.3","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"tilion","version":"0.1.3","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"tilion-mcp","type":"positional","valueHint":"console-script"}],"environmentVariables":[{"description":"Boot the browser at startup so the first tool call is instant (default 1).","name":"TILION_MCP_PREWARM"},{"description":"Set 0 to show a visible browser window (default 1).","name":"TILION_MCP_HEADLESS"},{"description":"Set 1 to allow tools to reach localhost / private IPs (SSRF guard off).","name":"TILION_ALLOW_PRIVATE_EGRESS"},{"description":"Run browsers on a hosted Tilion server instead of locally.","name":"TILION_BASE_URL"},{"description":"Bearer key for the hosted Tilion server (cloud mode only).","isSecret":true,"name":"TILION_API_KEY"}]}],"tools":[{"name":"click_button","description":"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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"close_tab","description":"Close a tab by index (from list_tabs).","write_action":false,"price_micros":0,"input_schema":null},{"name":"crawl_site","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"current_page","description":"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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"download_file","description":"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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evaluate_js","description":"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)`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"extract_document","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_page","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fetch_protected_page","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_field","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_cookies","description":"Get the cookies on the current (or a navigated) page — inspect or export an authenticated session. Returns {cookies:[...]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_html","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_stealth_cdp_endpoint","description":"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`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_browser_tasks","description":"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, ...).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tabs","description":"List the open browser tabs (index + url + which is current).","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_profile","description":"Restore a saved session (cookies + localStorage) from a named profile — reuse a login without re-authenticating. Navigate to the site afterward.","write_action":false,"price_micros":0,"input_schema":null},{"name":"page_elements","description":"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[]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"press_key","description":"Press a key on the current page: Enter (submit a focused field), Tab, Escape (dismiss a dialog), ArrowDown, PageDown, etc. Returns the resulting {url}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_page","description":"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}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recon_site_apis","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_browser_task","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"save_page","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_profile","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_page","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_web","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wait_for","description":"Wait for a CSS selector to appear (navigates to `url` first if given). Use before reading a page whose content loads late via JavaScript.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":77,"grade":"B","scanned_at":"2026-09-26T11:35:02.423Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T11:35:02.424Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 64 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"tilion","version":"0.1.3","found":true,"weeklyDownloads":124,"license":"LicenseRef-Tilion-Proprietary","dependencyCount":40,"publishedAt":"2026-07-07T05:22:49.099246Z"}],"repo":{"found":true,"owner":"tiliondev","repo":"fortress","archived":false,"pushedAt":"2026-07-23T23:54:52Z","stars":654,"forks":43,"openIssues":8,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/298404667?v=4","ownerCreatedAt":"2026-06-30T18:58:05Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/298404667?v=4&s=128","source":"github"},"presence":{"stars":654,"forks":43,"downloadsWeek":124,"license":"NOASSERTION","lastPushAt":"2026-07-23T23:54:52.000Z","score":50}}}},"grade_history":[],"reviews":[]}