Web search and any page as LLM-ready Markdown for AI agents. Free keyless tier, no signup.
Call this server's tools from your browser. Nothing to install.
ContextFetch API key. Leave unset for the free keyless tier (25 requests per day per IP).
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Answer a question with passages quoted verbatim from the web, never generated: searches, scores every passage of the top pages with a cross-encoder and returns the best ones with [n] citations to their sources. Use it for quick factual lookups; the quotes may not fully answer an open-ended question. Costs 1 credit.
The question.
Pages searched for passages (1-10, default 5).
Answer a question with passages quoted verbatim from the web, never generated: searches, scores every passage of the top pages with a cross-encoder and returns the best ones with [n] citations to their sources. Use it for quick factual lookups; the quotes may not fully answer an open-ended question. Costs 1 credit.
| Argument | Type | Description |
|---|---|---|
| query* | string | The question. |
| num_results | integer | Pages searched for passages (1-10, default 5). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "The question."
},
"num_results": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Pages searched for passages (1-10, default 5)."
}
}
}Turn auto-reload on or off, or change it: when credits drop below `threshold`, the saved card buys `pack` again, up to `monthly_max_usd` per month. Needs an API key and a card saved at checkout. The monthly cap cannot be raised above $500 here.
| Argument | Type | Description |
|---|---|---|
| pack | string | Pack to buy: instant $15/15,000, builder $50/60,000, scale $150/200,000. |
| enabled* | boolean | true to turn auto-reload on, false to turn it off. |
| threshold | integer | Reload when credits drop below this (100-100,000, default 1,000). |
| monthly_max_usd | number | Monthly spending cap in USD (at most 500). |
{
"type": "object",
"required": [
"enabled"
],
"properties": {
"pack": {
"enum": [
"instant",
"builder",
"scale"
],
"type": "string",
"description": "Pack to buy: instant $15/15,000, builder $50/60,000, scale $150/200,000."
},
"enabled": {
"type": "boolean",
"description": "true to turn auto-reload on, false to turn it off."
},
"threshold": {
"type": "integer",
"maximum": 100000,
"minimum": 100,
"description": "Reload when credits drop below this (100-100,000, default 1,000)."
},
"monthly_max_usd": {
"type": "number",
"maximum": 500,
"description": "Monthly spending cap in USD (at most 500).",
"exclusiveMinimum": 0
}
}
}Show the API key's remaining credits, daily burn rate (7-day average) and auto-reload settings, including the last auto-reload error if a payment failed. Needs an API key (Authorization: Bearer); free.
No arguments.
{
"type": "object",
"properties": {}
}Crawl one website from a start URL and get its pages as Markdown: same-site links only, up to `max_depth` hops (<= 3) and `limit` pages (<= 50). Pass `query` to rank the pages by relevance and return only their relevant passages. Costs 1 credit per page returned.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) start URL. |
| limit | integer | Maximum pages to return (1-50, default 10). |
| query | string | Optional topic: ranks pages and prunes each to the relevant passages. |
| max_depth | integer | Link hops from the start page (0-3, default 1). |
| exclude_paths | array | Regexes; never follow links whose path matches one. |
| include_paths | array | Regexes; only follow links whose path matches one, e.g. ["^/docs/"]. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) start URL."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum pages to return (1-50, default 10)."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Optional topic: ranks pages and prunes each to the relevant passages."
},
"max_depth": {
"type": "integer",
"default": 1,
"maximum": 3,
"minimum": 0,
"description": "Link hops from the start page (0-3, default 1)."
},
"exclude_paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Regexes; never follow links whose path matches one."
},
"include_paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Regexes; only follow links whose path matches one, e.g. [\"^/docs/\"]."
}
}
}Deep research in one call, no LLM: a deep search of the question, its sub-topics (or your sub_queries) as searches of their own, and the pages its list and index results link to, returned as one cited report: summary, key facts, a section per sub-topic and the sources, every passage quoted verbatim with [n]. Costs 1 credit. For a quick evidence pack use contextfetch_research.
| Argument | Type | Description |
|---|---|---|
| query* | string | The research question. |
| sub_queries | array | Up to 3 search queries covering different angles of the question. Strongly recommended. |
| num_results_per_query | integer | Results per sub-query (1-25, default 5; at most 10 are used). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "The research question."
},
"sub_queries": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 3,
"minItems": 1,
"description": "Up to 3 search queries covering different angles of the question. Strongly recommended."
},
"num_results_per_query": {
"type": "integer",
"default": 5,
"maximum": 25,
"minimum": 1,
"description": "Results per sub-query (1-25, default 5; at most 10 are used)."
}
}
}Fetch a public web page (docs, articles, GitHub files, arXiv papers) as clean Markdown with tables preserved. Pass `query` to get only the passages relevant to it instead of the whole page.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL to read. |
| query | string | Optional question or topic; returns only the relevant passages. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) URL to read."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Optional question or topic; returns only the relevant passages."
}
}
}Find pages similar to a given URL (alternatives, related docs, competing libraries), excluding the source domain. Returns titles, URLs and the most relevant passages as Markdown.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL to find similar pages for. |
| num_results | integer | Number of results to return (1-25, default 5). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) URL to find similar pages for."
},
"num_results": {
"type": "integer",
"default": 5,
"maximum": 25,
"minimum": 1,
"description": "Number of results to return (1-25, default 5)."
}
}
}Get a free ContextFetch API key (no signup, no payment) with starter credits, for when the keyless daily limit runs out. One key per network, ever: keep the key it returns and use it as `Authorization: Bearer <key>`.
No arguments.
{
"type": "object",
"properties": {}
}List a website's URLs without fetching its pages: its sitemaps (from robots.txt, else /sitemap.xml) plus the start page's links, same site only, up to `limit` (<= 5,000). Use it to find the right pages before contextfetch_extract_url or contextfetch_crawl. Costs 1 credit.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL of the site (any page on it). |
| limit | integer | Maximum URLs (1-5,000, default 100). |
| exclude_paths | array | Regexes; never list URLs whose path matches one. |
| include_paths | array | Regexes; only list URLs whose path matches one, e.g. ["^/blog/"]. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) URL of the site (any page on it)."
},
"limit": {
"type": "integer",
"default": 100,
"maximum": 5000,
"minimum": 1,
"description": "Maximum URLs (1-5,000, default 100)."
},
"exclude_paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Regexes; never list URLs whose path matches one."
},
"include_paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Regexes; only list URLs whose path matches one, e.g. [\"^/blog/\"]."
}
}
}Research a question in one call, server-side: runs up to 5 web searches (sub-queries) concurrently, dedupes the pages by URL, ranks them all against the question with a cross-encoder and returns one Markdown evidence pack with numbered [n] sources and their query-pruned passages, quoted verbatim (no generated text). Costs 1 credit. Pass your own `sub_queries` (distinct angles on the question) for better coverage; if omitted they are derived from `query`: the query, query + "documentation", and query + "benchmark" (speed or comparison questions) or + "example".
| Argument | Type | Description |
|---|---|---|
| query* | string | The research question. |
| sub_queries | array | Up to 5 search queries covering different angles of the question. Recommended. |
| num_results_per_query | integer | Results per sub-query (1-10, default 5). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "The research question."
},
"sub_queries": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 5,
"minItems": 1,
"description": "Up to 5 search queries covering different angles of the question. Recommended."
},
"num_results_per_query": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Results per sub-query (1-10, default 5)."
}
}
}Search the web and get LLM-ready Markdown. Each result has its title, URL and only the passages relevant to the query (cross-encoder pruned context), so it costs far fewer tokens than raw pages. Use for current events, documentation, APIs, research and fact checking.
| Argument | Type | Description |
|---|---|---|
| query* | string | Natural-language search query. |
| topic | string | news: news sources, recent pages first. finance: SEC filings and finance sites. Default general. |
| country | string | Two-letter country code (US, DE): that country's results rank higher. |
| category | string | Focus on one kind of page: company, research paper, news, pdf, github, personal site, linkedin profile, financial report, people. |
| language | string | Two-letter language code (en, de): results in that language rank higher. |
| time_range | string | Only pages published in the last day, week, month or year. |
| num_results | integer | Number of results to return (1-25, default 5). |
| exclude_domains |
Fetch the full text of a search result by its id (a URL). Returns {id, title, text, url, metadata} as JSON.
| Argument | Type | Description |
|---|---|---|
| id* | string | An id from `search` (the page URL). |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "An id from `search` (the page URL)."
}
}
}Search the web. Returns {results: [{id, title, url}]} as JSON; pass an id to `fetch` for the page text.
| Argument | Type | Description |
|---|---|---|
| query* | string | Search query. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Search query."
}
}
}| array |
| Never return results from these domains. |
| include_domains | array | Only return results from these domains, e.g. ["docs.python.org"]. |
| end_published_date | string | Only pages published on or before this date (YYYY-MM-DD). |
| start_published_date | string | Only pages published on or after this date (YYYY-MM-DD). Undated pages are dropped. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language search query."
},
"topic": {
"enum": [
"general",
"news",
"finance"
],
"type": "string",
"description": "news: news sources, recent pages first. finance: SEC filings and finance sites. Default general."
},
"country": {
"type": "string",
"minLength": 1,
"description": "Two-letter country code (US, DE): that country's results rank higher."
},
"category": {
"type": "string",
"minLength": 1,
"description": "Focus on one kind of page: company, research paper, news, pdf, github, personal site, linkedin profile, financial report, people."
},
"language": {
"type": "string",
"minLength": 1,
"description": "Two-letter language code (en, de): results in that language rank higher."
},
"time_range": {
"enum": [
"day",
"week",
"month",
"year"
],
"type": "string",
"description": "Only pages published in the last day, week, month or year."
},
"num_results": {
"type": "integer",
"default": 5,
"maximum": 25,
"minimum": 1,
"description": "Number of results to return (1-25, default 5)."
},
"exclude_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Never return results from these domains."
},
"include_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only return results from these domains, e.g. [\"docs.python.org\"]."
},
"end_published_date": {
"type": "string",
"minLength": 1,
"description": "Only pages published on or before this date (YYYY-MM-DD)."
},
"start_published_date": {
"type": "string",
"minLength": 1,
"description": "Only pages published on or after this date (YYYY-MM-DD). Undated pages are dropped."
}
}
}