Web Research MCP
by idapixl
README.md
# Web Research MCP — Search, Fetch & Synthesize
An MCP server for AI agents that need to search the web, read pages, and synthesize research — all in a single tool call.
**Pay-per-use. No subscription. No idle charges.** Powered by Apify Standby.
---
## What it does
Three tools, designed to work together:
| Tool | What it does |
|---|---|
| `web_search` | Search the web. Returns titles, URLs, and snippets. Uses Brave Search API (if configured) or DuckDuckGo fallback. |
| `fetch_page` | Fetch any URL and return clean markdown. Strips ads, nav, and boilerplate. Supports article, full-body, or links-only extraction. |
| `research_topic` | Multi-step research in one call: search → fetch → score relevance → deduplicate → extract key facts → synthesize. |
---
## Quick connect
Add to your MCP client config (Claude Desktop, Cursor, etc.):
```json
{
"mcpServers": {
"web-research": {
"type": "http",
"url": "https://idapixl--web-research-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_API_TOKEN"
}
}
}
}
```
Replace `YOUR_APIFY_API_TOKEN` with your token from [apify.com/account/integrations](https://apify.com/account/integrations).
**Claude Code:**
```bash
claude mcp add web-research https://idapixl--web-research-mcp.apify.actor/mcp --transport http
```
**Cursor / Windsurf** — add via Settings > MCP Servers > HTTP URL.
---
## Pricing
Pay only for what you use. Charged per tool call.
| Event | Price |
|---|---|
| `web_search` | $0.003 |
| `fetch_page` | $0.005 |
| `research_topic` | $0.025 (single charge, includes all sub-calls) |
---
## Brave Search API setup (optional but recommended)
By default the actor uses DuckDuckGo HTML scraping, which works without any key. For better results and freshness filtering:
1. Go to [brave.com/search/api](https://brave.com/search/api/) and sign up for the free tier (2,000 queries/month)
2. Copy your API key
3. In the actor input, set **Brave Search API Key** (stored as secret — never exposed in logs)
When the key is set, `web_search` and `research_topic` will use Brave Search automatically. DuckDuckGo is the fallback on error.
---
## Example tool calls
### Search with freshness filter (Brave only)
```json
{
"tool": "web_search",
"arguments": {
"query": "Claude 4 release announcement",
"maxResults": 5,
"freshness": "pw"
}
}
```
### Read a page — links extraction mode
```json
{
"tool": "fetch_page",
"arguments": {
"url": "https://docs.anthropic.com/en/api/getting-started",
"extractMode": "links"
}
}
```
### Deep research with focus
```json
{
"tool": "research_topic",
"arguments": {
"topic": "Model Context Protocol",
"maxSources": 3,
"focus": "pricing and monetization"
}
}
```
---
## Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
| `braveApiKey` | string (secret) | — | Brave Search API key for higher-quality search |
| `maxSearchResults` | integer | 5 | Max results per `web_search` call (1–10) |
| `fetchTimeoutSecs` | integer | 30 | Page fetch timeout in seconds (5–120) |
| `proxyConfiguration` | object | — | Apify Proxy config (residential recommended for best success rates) |
---
## Tool reference
### `web_search`
- `query` (required) — search query, max 500 chars
- `maxResults` (optional) — 1–10, default 5
- `freshness` (optional) — `pd` past day, `pw` past week, `pm` past month, `py` past year (Brave only)
### `fetch_page`
- `url` (required) — page URL
- `timeoutSecs` (optional) — 5–120, default 30
- `extractMode` (optional) — `article` main content (default), `full` entire body, `links` all links
### `research_topic`
- `topic` (required) — research topic or question, max 500 chars
- `maxSources` (optional) — 1–5, default 3
- `focus` (optional) — sub-question to narrow the research (e.g. "performance benchmarks"), max 200 chars
---
## Notes
- Stateless: each MCP request gets an isolated server instance
- `research_topic` scores relevance, deduplicates near-duplicate sources (>70% sentence overlap filtered), and extracts key sentences containing your query terms
- Proxy: Apify Residential proxies improve success rates on pages that block datacenter IPs
- Charges fire before execution — if a page fails to load after charging, the tool returns an error
---
Built by [Idapixl](https://idapixl.com). TypeScript, MCP SDK 1.x, Apify SDK 3.x.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive