The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Openunfurl listing page.
A zero-signup link-unfurl / link-preview API. No account, no API key — one GET request.
Give it any public URL, get back clean preview metadata (title, description, image, siteName, favicon, Open Graph / Twitter Card, oembed) as JSON. Built so autonomous AI agents can use it as a tool — an agent has no human to do a signup.
Live: https://openunfurl.vercel.app
Sample response:
Any missing field is null. Errors return JSON with an error key and an
appropriate HTTP status (400 bad/blocked/missing URL, 422 fetch failed,
429 rate limited, 405 wrong method).
OpenUnfurl is also a remote MCP server, so an agent can call it as a tool with no signup, no API key, no OAuth.
https://openunfurl.vercel.app/api/mcpapplication/json response — no sessions, no SSE)unfurl — input { "url": "https://example.com" },
returns the same preview JSON as the REST endpoint (also as structuredContent)Drop this into any MCP client config (Claude Desktop, Cursor, or any client that speaks the Streamable HTTP transport):
Quick smoke test:
Over MCP, an upstream error comes back as a tool result with isError: true.
Managed link-preview alternatives — Microlink, OpenGraph.io, LinkPreview.net,
Unfurl.io, LinkPeek — all gate even their free tier behind a signup and/or an
API key. OpenUnfurl does not: it's a single anonymous GET (or one MCP
tools/call). That's especially useful to autonomous agents, which have no
human in the loop to complete a signup or paste in a key.
<meta> tags client-side you get the static fallback.The entire API is two single zero-dependency Node serverless functions:
api/unfurl.js (REST) and api/mcp.js (remote
MCP). No npm install, no cheerio/jsdom. Deploy the folder to Vercel
(zero-config /api detection) or drop the handlers into any Node serverless
runtime.
MIT — see LICENSE.