Skip to content
unfenced.ai

Model Context Protocol

An MCP server that can reach the whole web.

Most MCP web tools are a fetch call with a nicer name: they work on the pages that would have answered a plain HTTP request anyway. Unfenced is one remote connector that reaches the rest - the JavaScript-rendered, the bot-refused, and the signed-in.

What the connector adds

One remote MCP endpoint, authenticated with an API key. The tools fall into three groups, and the split matters because they carry different risk.

Reading, always available

fetch_page, fetch_batch and get_page_links take a URL and return clean markdown - or JSON, text, or HTML. No live browser is involved and nothing is stateful. This is the majority of what an agent actually needs: articles, listings, documentation, feeds, and PDFs read as text. What the extraction does to a page, and how the thresholds behind it were set, is on its own page.

Driving a live page

open_page, observe_page, act, see_page, extract_page and fill_form operate a real browser: click a cookie banner, page through results, sign in, submit a form. The agent observes structure rather than guessing at pixels, and each action is checked against a permission model before it happens. The rules around acting on a site you are signed in to - where the password lives, what the agent may do, what you can review afterwards - are in the logged-in pages guide.

Memory and permissions

remember, recall and forget hold short notes about task state that survive between sessions - a scratchpad for what the agent is doing, never a place for secrets. list_permissions, list_credentials and connect_site let the agent find out what it may do and hand you a link when it needs something it does not have.

Failures that tell an agent what to do

An HTTP status is a poor instruction. A 403 might mean "you are blocked", "this needs a login", or "this is not available in your country", and an agent that cannot tell them apart retries the ones it should abandon and abandons the ones it should retry.

So every failure comes back as a code that is an instruction: needs-credential (the page wants a signed-in session - fill a stored login), blocked (the site refused and escalating will not help - try another source), transient (the server faulted - retry shortly), http-error (the path is wrong or gone - check the URL), payment-required (the site quoted a price, which is a decision rather than an error), and legally-restricted (withheld for legal reasons, usually by jurisdiction).

Why a hosted connector rather than a local one

A browser on your laptop has your laptop's IP, your laptop's uptime, and your laptop's fingerprint. Sites that refuse automation refuse it there too, and a scheduled task cannot run when the lid is shut. Unfenced runs the browser on infrastructure built for it, keeps the logged-in session where the next run can find it, and answers from a real address.

A note on stale tool lists

MCP clients cache the tool list when a connector is added, and the transport is stateless, so nothing can tell a client that a tool changed. Every reply carries the surface version this build ships, and the dashboard shows you when a connector is running against an old one - so "it worked yesterday" has an answer rather than a shrug.

Questions

Before you ask for access

Which clients can connect?

Anything that speaks MCP over HTTP: Claude, Cursor, VS Code, Claude Code, Codex, LangChain, the Vercel AI SDK and more - 34 of them have exact configuration on the API keys screen, with your key already filled in. It is one remote URL and a bearer token, so a client not on that list works too if it speaks the transport.

Do I have to run anything on my machine?

No. The connector is remote, so the browser runs on our infrastructure rather than your laptop - which is the point: a laptop has your IP, your uptime and your fingerprint, and a scheduled run cannot happen with the lid shut. A local stdio bridge exists for clients that cannot speak MCP over HTTP, and even then the fetch still happens on our worker.

What happens when my agent hits a site it is not allowed to act on?

It gets permission-required and a connect_site link, not an error to retry. Reading is never gated; acting is, by an allowlist only you can add to. The agent can ask - which raises a request you approve with one tap - but it cannot grant itself a site.

Why does my client show tools that no longer match?

Because MCP clients cache the tool list when the connector is added and the transport is stateless, so nothing can tell a client that a tool changed. Every reply carries the surface version the build ships, and the dashboard shows you when a connector is running against an old one - so re-add the connector and "it worked yesterday" has an answer rather than a shrug.

Is this an MCP authorization server?

Not in the sense the spec means. The MCP authorization spec describes how a client gets a token for a service; we are the service, and an API key is how you authenticate to it. What we add is the part the spec does not cover: reaching sites that are not MCP services at all and never will be.

Point your agent at the rest of the web

Access is by invitation while we are in private preview. Tell us what you would use it for and we will get you a key.