[ Integrations ]
One MCP endpoint. Every client.
13 tools, one URL, nothing to run locally.
The endpoint
https://api.hydrafetch.com/mcp
A streamable HTTP MCP server. Authenticate with an API key as a bearer token, or let the client run the OAuth flow and sign in through the browser.
Get an API keyscrape
Turn a URL into clean, LLM-ready markdown and structured data.
1 credit
map
Enumerate a site's URLs from its sitemap and links, without scraping them.
1 credit
crawl
Discover and scrape a whole site as one job. Returns a crawl id straight away; read it with crawl_status. Use this instead of calling scrape in a loop.
1 credit per page scraped
crawl_status
Read a crawl started with crawl: how far it has got, and the pages it has scraped.
free
batch
Scrape a list of URLs you already have as one job. Returns a batch id straight away; read it with batch_status.
1 credit per URL scraped
batch_status
Read a batch started with batch: how far it has got, and the results so far.
free
search
Search the web and return ranked results: title, url and snippet. Set scrapeResults to also fetch each result as markdown, at 1 extra credit per page.
1 credit plus 1 per scraped result
brand
A company's brand from its domain: logos for light and dark backgrounds, its real colours, name, description and socials. Answers 'what is this company' far better than a raw page dump.
5 credits
logo
A company's logo as a directly embeddable image URL, chosen for the background you name. Use this rather than brand when the mark is all you need — it costs a fifth as much and returns one asset instead of the whole record.
1 credit
extract
Pull typed structured data from one or more URLs by JSON schema or prompt.
5 credits per URL
styleguide
A site's design system read from computed styles in a real browser: colours by role with contrast ratios, the type scale, corner radius and button styling. Values defined through CSS variables come back resolved to the hex actually painted.
10 credits
screenshot
Render a page in a real browser and capture a PNG, returning its public URL. Use when the question is what the page looks like rather than what it says.
5 credits
images
Harvest a page's images with their metadata, without rendering it. Cheaper than a screenshot and returns the source images rather than a picture of the page.
1 credit
[01 / Clients]
Paste one block and restart.
Sign in through the browser, or send your key as a bearer token.
Claude Code
Scoped to your user, so it is available in every project. Swap --scope user for --scope project to commit it with one repo instead.
claude mcp add --scope user --transport http hydrafetch https://api.hydrafetch.com/mcp \
--header "Authorization: Bearer $HYDRAFETCH_API_KEY"claude mcp add --scope user --transport http hydrafetch https://api.hydrafetch.com/mcp
# then run /mcp inside Claude Code and sign inClaude Desktop
Settings, then Connectors, then Add custom connector. Paste the URL and sign in through the browser.
https://api.hydrafetch.com/mcp{
"mcpServers": {
"hydrafetch": { "url": "https://api.hydrafetch.com/mcp" }
}
}ChatGPT
Settings, then Apps and Connectors, then Advanced settings, and turn on developer mode. Add a custom connector, paste the URL and sign in. Paid plans only.
https://api.hydrafetch.com/mcp
Cursor
Global, so every project picks it up. Use .cursor/mcp.json in a repo instead if you want it scoped there. Drop the headers block and Cursor runs the OAuth flow instead.
{
"mcpServers": {
"hydrafetch": {
"url": "https://api.hydrafetch.com/mcp",
"headers": { "Authorization": "Bearer hf_your_key" }
}
}
}
VS Code
Copilot reads this from the workspace, so it travels with the repo. Leave the headers out and VS Code runs the OAuth flow on first use.
{
"servers": {
"hydrafetch": { "type": "http", "url": "https://api.hydrafetch.com/mcp" }
}
}
Codex CLI
codex mcp add hydrafetch --url https://api.hydrafetch.com/mcp --scope user[mcp_servers.hydrafetch]
url = "https://api.hydrafetch.com/mcp"Gemini CLI
gemini mcp add hydrafetch --url https://api.hydrafetch.com/mcp --scope user{
"mcpServers": {
"hydrafetch": { "httpUrl": "https://api.hydrafetch.com/mcp" }
}
}
Cline
Open the MCP Servers panel, choose Configure, and paste this into the settings file it opens. Cline keeps it in global storage, so it follows you across workspaces.
{
"mcpServers": {
"hydrafetch": {
"type": "streamableHttp",
"url": "https://api.hydrafetch.com/mcp",
"headers": { "Authorization": "Bearer hf_your_key" },
"disabled": false,
"autoApprove": []
}
}
}
OpenCode
The global config, so it applies everywhere. A project root opencode.json overrides it. OpenCode detects the 401 and can run the OAuth flow on its own, so the headers block is optional.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"hydrafetch": {
"type": "remote",
"url": "https://api.hydrafetch.com/mcp",
"enabled": true,
"headers": { "Authorization": "Bearer hf_your_key" }
}
}
}[02 / Official clients]
One install, every endpoint.
A thin wrapper over the same HTTP surface. Reads HYDRAFETCH_API_KEY, retries what is worth retrying, polls crawl and batch jobs.
Two more for the browser, built for a publishable key rather than a secret one. Logo pulls are metered on their own allowance and never touch your credit balance.
[03 / Frameworks]
Or call it from your own pipeline.
HTTP, not MCP. LangChain and LlamaIndex ship their own package; everything else calls an official client.
LangChain
A document loader that hands your splitter clean Markdown instead of the tag soup a raw HTTP loader returns. One page, a whole crawl, or a site map, and a retriever that searches the web.
$pip install langchain-hydrafetchfrom langchain_hydrafetch import HydrafetchLoader, HydrafetchSearchRetriever
# One page, a whole site, or just its URLs.
docs = HydrafetchLoader("https://example.com/article").load()
docs = HydrafetchLoader("https://example.com", mode="crawl", params={"limit": 50}).load()
# Stream a large crawl instead of holding it all in memory.
for doc in HydrafetchLoader("https://example.com", mode="crawl").lazy_load():
index.add(doc)
# Search the web as a retriever.
retriever = HydrafetchSearchRetriever(k=5)
docs = retriever.invoke("best open source vector databases")
LlamaIndex
A reader, so pages arrive stripped of navigation and boilerplate before they ever reach your index. Map a site first and load what you want: crawling everything and discarding most of it is the usual way to waste credits.
$pip install llama-index-readers-hydrafetchfrom llama_index.core import VectorStoreIndex
from llama_index.readers.hydrafetch import HydrafetchReader
reader = HydrafetchReader(params={"onlyMainContent": True})
# A single URL, a list of them, or a whole site.
docs = reader.load_data("https://example.com/article")
docs = reader.load_data(["https://example.com/a", "https://example.com/b"])
docs = reader.load_data("https://example.com", mode="crawl", limit=50)
index = VectorStoreIndex.from_documents(docs)
Vercel AI SDK
A tool your model can call mid-conversation when it needs a page it has not seen.
$npm install @hydrafetch/node-sdkimport { Hydrafetch } from '@hydrafetch/node-sdk';
import { tool } from 'ai';
import { z } from 'zod';
const hf = new Hydrafetch(process.env.HYDRAFETCH_API_KEY);
export const readPage = tool({
description: 'Read a web page and return it as clean Markdown.',
parameters: z.object({ url: z.string().url() }),
execute: async ({ url }) => hf.markdown(url),
});[04 / Second opinions]
Do not take our word for it. Ask an AI to check.
Point your coding agent at your own repository, or ask an assistant to compare us against the alternatives. Both answer with things we did not write.
Ask your coding agent
It reads your repo, not our pitch.
Paste one line into any agent that reads your repository. It comes back with file paths, a credit estimate, and where we are not worth it.
The skill reads our live endpoint list when it runs, so it covers anything we ship after you paste this.
Ask an assistant
Let it compare us to the alternatives.
The question is already written, and it asks for the comparison rather than the sales pitch. It opens in a new tab with the prompt filled in.
Assistants read the live site, so they answer from what is published today rather than from anything we hand them.
Either. Most clients speak the MCP OAuth flow, so you point them at the endpoint and sign in through the browser. The rest send an API key as a bearer token. The two are equivalent in what they can do.
The same as the matching HTTP endpoint. A page is one credit whatever it took to fetch, extract and brand are five, and a failed call costs nothing. Connecting over MCP never costs more than calling the API directly.
An API key belongs to the workspace, so a key in a shared config works for everyone and the usage lands on the same balance. Signing in with OAuth ties the connection to you inside that workspace.
Almost certainly. The endpoint is a standard streamable HTTP MCP server, so any client that can take a URL and an Authorization header can use it. The listed configs are just the shapes each client expects.
Every connection you authorize shows up on the MCP page in your dashboard, with the client that opened it and when it was last used. Revoke it there and that client stops working immediately. Key-based connections stop when you roll the key.
[ Start ]
Point your agent at it in under a minute.
13 tools, one endpoint, and the same credit cost as calling the API directly.
Success rate
Median scrape
ms