voyager-browser
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@voyager-browserCheck https://example.com for security and accessibility issues"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@dir-ai/voyager-browser
Voyager's web-page sense. A safe, read-only observation of one live URL: its structure, forms, links, script origins, security posture (HTTPS / HSTS / CSP / mixed-content / cookies) and accessibility signals (lang, image alt coverage, heading order) — each with a described, never applied fix.
It parses static HTML — no JavaScript execution, no headless browser — so
it's honest about what it can and cannot see (it will not render a client-side
SPA's runtime state). Every piece of page text is returned framed as
untrusted. It is SSRF-gated: it refuses non-http(s) URLs and anything
resolving to private, loopback, or cloud-metadata addresses.
One sense in the Voyager family. Read-only, like all the senses — it never submits a form, clicks, or mutates anything.
Install
npm i -g @dir-ai/voyager-browserRelated MCP server: LinkPulse
Use
voyager-browser observe https://example.com
voyager-browser observe https://example.com --jsonhttps://example.com/
https://example.com — 200; 3 finding(s), worst: medium. 0 form(s), 1 link(s).
title: Example Domain
security: https · a11y lang:yes alt:n/a
med HTTPS without HSTS
↳ add Strict-Transport-Security: max-age=63072000; includeSubDomains
med no Content-Security-Policy
↳ add a Content-Security-Policy to constrain scripts/resources
low no X-Content-Type-Options: nosniff
↳ add X-Content-Type-Options: nosniffAs an MCP server
One tool, observe_page.
{ "command": "voyager-browser", "args": ["mcp"] }As a library
import { observe } from '@dir-ai/voyager-browser'
const brief = await observe('https://example.com')
console.log(brief.summary)
console.log(brief.security) // { https, hsts, csp, mixedContent, thirdPartyScripts, … }
console.log(brief.forms) // insecure / cross-origin / sensitive flags
console.log(brief.findings) // severity + described fixWhat it looks for
Security posture (quality, not just presence) — plain HTTP; missing/weak HSTS; missing CSP or a CSP graded weak (
unsafe-inline/unsafe-eval/wildcard/noobject-src/nobase-uri); missing clickjacking protection (X-Frame-Options /frame-ancestors); missingnosniff, Referrer-Policy, Permissions-Policy; version-leakingServer/X-Powered-By; mixed content on an HTTPS page (origin-compared, not prefix); per-cookie Secure/HttpOnly; third-party scripts without Subresource Integrity.Forms — a form on HTTPS posting to plain HTTP (
critical); a sensitive form (password/payment) posting cross-origin or over HTTP; a sensitivePOSTwith no anti-CSRF token; sensitive data onGET.Links — external
target="_blank"withoutrel="noopener"(reverse-tabnabbing).Body-content leaks — directory listings (Apache/nginx autoindex), language-specific stack traces (Python/Java/PHP/Node/Oracle/SQLSTATE/MySQL) and verbose framework debug pages (Werkzeug/Flask, Rails, Symfony/Whoops, ASP.NET YSOD) disclosed in the response body — each with the matched signature (framed).
Exposed JWTs — JWT-shaped tokens found in the HTML, response headers,
Set-Cookie, and same-origin bundles are decoded (header+payload, base64url, no signature verification, no secret cracking) and flagged foralg:none(critical), expired (expin the past), or missingexp. Claim values are framed as untrusted.Passive discovery of well-known sensitive paths — bounded, same-origin, read-only
GETs to a short fixed list (/.git/config,/.env,/.svn/entries,/.DS_Store,/config.json,/wp-config.php~,/backup/,/uploads/), flagging only a confirmed body signature — never a bare200. Pinned to the vetted IP; honours--authorized. Disable with--no-discovery.Accessibility — missing
<html lang>, images withoutalt, skipped heading levels, unlabeled form fields.Render honesty — a
render: static | hybrid | client-heavyfield: if a page's content is JavaScript-rendered, the brief says so and marks itself PARTIAL rather than reporting a shell as clean.Composition hints — third-party script origins to vet with
@dir-ai/voyager/@dir-ai/voyager-net.
Safety
Read-only. Fetches the page with a single GET; never submits, clicks, or mutates.
No code execution. Static HTML parsing only — the page's JavaScript is never run.
SSRF-gated, with IP pinning. Only
http(s); a single URL (no lists/credentials). The host is resolved, every address is classified canonically (IPv4-mapped IPv6, unspecified, CGNAT, NAT64, link-local, private, loopback, metadata all refused), and the connection is pinned to the vetted IP so DNS rebinding cannot swap in an internal address between the check and the fetch. Every redirect hop is re-vetted and re-pinned.Untrusted by construction. Every owner-controlled string that reaches the brief — title, headings, meta, links, form actions, field names — is injection-stripped and framed; the agent must treat it as data, not instructions.
Bounded. One deadline covers headers and body; the body is byte-capped; a truncated read downgrades confidence and is never reported as "clean".
Honest limits. It reads what the server sends. It does not see client-rendered state — and the
renderfield says exactly how much it saw.
Roadmap
v0.3 — same-origin JS-bundle static scan (exposed secrets/endpoints/source-maps), third-party/tracker/cookie inventory + tech fingerprinting, WCAG-mapped a11y depth, and a
CognitiveClaimadapter so a page observation drops into a@dir-ai/voyager-agentmission (page → host → dependency chain).v1.0 — an opt-in, consent-gated
--rendersandboxed headless pass (network-isolated, resource-capped) for true SPA/rendered-DOM coverage, always labeled as render-mode output; a stable finding-kindtaxonomy and a full posture score.
The line stays fixed: voyager-browser expands by reading more of what's already served, never by doing more to the server. Anything active (submitting, fuzzing, probing) belongs to a separate consent-gated organ.
The Voyager family
Package | Sense |
web — verified-internet retrieval | |
| web page — observe one live URL |
code — orient in a repository | |
hosts — authorized host audit | |
the cognitive contract the senses speak | |
the one agent that composes them |
License
MIT © dir-ai
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
- AlicenseAqualityDmaintenanceAudit any website for privacy, security, accessibility, and performance issues — with scores, grades, and actionable fix instructions. No account required.Last updated33MIT
- Flicense-quality-maintenanceURL reality check for AI agents — returns HTTP status, SHA-256 content hash, classification, readability score, title, and wayback-machine fallback when dead, cached 10 minutes at $0.001 per call.Last updated
- AlicenseAqualityAmaintenanceRelease gate agents call before they tell users a public website is ready to ship. Scans public websites across security, SEO, accessibility, legal compliance, and sustainability.Last updated39MIT
- Flicense-qualityDmaintenanceEnables AI-powered visual analysis of webpages for UI/UX assessment, including screenshot capture, element detection, accessibility auditing, and comprehensive JSON reporting.Last updated1
Related MCP Connectors
Scan any URL for AI agent readability — Vercel Spec, llmstxt.org, and agent-protocol manifests.
Scan any website or MCP server for agent-trust-readiness; returns a signed, verifiable scorecard.
URL reality check for agents: status, content hash, classification, wayback fallback.
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/dir-ai/voyager-browser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server