Start building with ContextFetch
A web search and page-contents API for agents: Markdown, highlights and pruned context in one credit, and 25 free requests a day with no key.
If you’re an LLM, read llms.txt
Add ContextFetch to your agent
Get started in under a minute, no signup.
Examples
# pip install exa-pyfrom exa_py import Exa exa = Exa(api_key="YOUR_API_KEY", base_url="https://api.contextfetch.dev") res = exa.search( "vector database benchmarks 2026", num_results=5, contents={"text": True, "highlights": True},)for r in res.results: print(r.url, r.highlights)// npm i exa-jsimport Exa from "exa-js"; const exa = new Exa("YOUR_API_KEY", "https://api.contextfetch.dev"); const res = await exa.search("vector database benchmarks 2026", { numResults: 5, contents: { text: true, highlights: true },});for (const r of res.results) console.log(r.url, r.highlights);# no key needed: 25 free requests a daycurl -s https://api.contextfetch.dev/v1/search \ -H "Content-Type: application/json" \ -d '{"query":"python asyncio timeout","numResults":5,"contents":{"text":true,"highlights":true}}'# pip install exa-pyfrom exa_py import Exa exa = Exa(api_key="YOUR_API_KEY", base_url="https://api.contextfetch.dev") res = exa.get_contents( ["https://docs.python.org/3/library/asyncio-task.html"], text=True, highlights={"query": "task groups"},)print(res.results[0].highlights)// npm i exa-jsimport Exa from "exa-js"; const exa = new Exa("YOUR_API_KEY", "https://api.contextfetch.dev"); const res = await exa.getContents(["https://docs.python.org/3/library/asyncio-task.html"], { text: true, highlights: { query: "task groups" },});console.log(res.results[0].highlights);curl -s https://api.contextfetch.dev/v1/contents \ -H "Content-Type: application/json" \ -d '{"urls":["https://docs.python.org/3/library/asyncio-task.html"],"text":true,"highlights":{"query":"task groups"}}'import requests url = "https://docs.python.org/3/library/asyncio-task.html"r = requests.get(f"https://api.contextfetch.dev/r/{url}", params={"q": "task groups"}) print(r.headers["x-token-savings"], "% fewer tokens")print(r.text)const url = "https://docs.python.org/3/library/asyncio-task.html";const r = await fetch(`https://api.contextfetch.dev/r/${url}?q=task+groups`); console.log(r.headers.get("x-token-savings"), "% fewer tokens");console.log(await r.text());curl -si "https://api.contextfetch.dev/r/https://docs.python.org/3/library/asyncio-task.html?q=task+groups"claude mcp add contextfetch -- npx -y @contextfetch/mcp{ "mcpServers": { "contextfetch": { "command": "npx", "args": [ "-y", "@contextfetch/mcp" ] } }}claude mcp add contextfetch -e CONTEXTFETCH_API_KEY=YOUR_API_KEY -- npx -y @contextfetch/mcpAvailable APIs
Base URL https://api.contextfetch.dev. Plain-text docs for agents: llms-full.txt
python asyncio timeout
- runebook.dev
- docs.python.org
- stackoverflow.com
Search
Web results with page Markdown, highlights and pruned context
Coroutines and Tasks
Contents
Full pages as Markdown, billed only for pages that load
- GET /r/https://example.com/
content-type: text/markdown x-token-savings: 73.1Reader
Prepend /r/ to any URL; add ?q= to prune it to a question
- terminal
$ claude mcp add contextfetch -- npx -y @contextfetch/mcp ✓ 6 tools, keyless
MCP server
6 tools for Claude Code, Cursor and other MCP clients