# Deep Research MCP - Web Search for AI Agents (`renzomacar/deep-research-mcp`) Actor

Give your AI agent the web: multi-source search, clean-markdown page reading, and one-call deep research dossiers. No OpenAI/Perplexity key required — your agent does the synthesis. MCP server, pay-per-event.

- **URL**: https://apify.com/renzomacar/deep-research-mcp.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Deep Research MCP Server — Web Search & Research for AI Agents

Give your AI agent real research skills in one tool call. **Deep Research MCP** searches the web, reads the top pages, and returns a clean, citation-ready Markdown dossier your LLM can answer from — built for **Claude, ChatGPT, Cursor**, and any MCP client, with **no external API key to manage**.

⭐ **Using it and it works? [Leave a 30-second review](https://apify.com/renzomacar/deep-research-mcp/reviews).** It's the single biggest thing that helps other developers find it.

### What is Deep Research MCP?

It's a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that gives an AI agent three web-research tools. Unlike search wrappers that force you to bring your own OpenAI / Perplexity / Tavily key, this runs search and page-reading on the Apify platform — **your agent is the LLM, so it does the synthesis itself.** No keys, no glue code, no per-failure billing surprises.

### What can it do?

| Tool | What it does |
|------|--------------|
| `web_search` | Search the web → a ranked list of `{title, url, snippet}`. Discover sources before reading them. |
| `read_url` | Fetch any URL → its main content as clean Markdown (nav, ads, and boilerplate stripped). Turn a page into LLM-ready context. |
| `deep_research` | One call: search → read the top N sources in parallel → return a **citation-ready dossier**. Your agent writes the cited synthesis. |

### How do I connect it to Claude, Cursor, or ChatGPT?

1. Click **Start** to run this Actor in **Standby** mode.
2. Point your MCP client at the server's `/mcp` endpoint (Streamable HTTP) or `/sse` (legacy).

```json
{
  "mcpServers": {
    "deep-research": {
      "url": "https://deep-research-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN"
    }
  }
}
````

Then just ask: *"Use deep\_research to compare the top open-source vector databases in 2026 and summarize with citations."* The agent calls the tool, gets a dossier of read sources, and writes a cited answer — no extra API keys, no scraping code.

### What does the output look like?

```json
{
  "query": "best open-source vector databases 2026",
  "sourcesFound": 8,
  "sourcesRead": 4,
  "sources": [
    { "index": 1, "title": "Best Open Source Vector Databases 2026", "url": "https://redis.io/blog/...", "content": "# ...clean markdown..." }
  ],
  "dossier": "# Research dossier: best open-source vector databases 2026\n\n## [1] ...cited, LLM-ready..."
}
```

### How much does it cost?

Pay-per-event — you pay only for what your agent actually does, no subscription:

| Event | Price |
|-------|-------|
| Actor start | $0.01 |
| `web_search` | $0.005 / search |
| `read_url` | $0.004 / page |
| `deep_research` | $0.02 / report |

A flat, predictable price per outcome — not opaque credits that expire, and no charge-on-failure.

### Why this over Tavily, Firecrawl, or RAG Web Browser?

- **No API key needed** — search + reading run on-platform; your agent supplies the intelligence.
- **Agentic, not just fetch** — `deep_research` orchestrates multi-source reading and hands back a citation-ready dossier, not a single page.
- **Flat per-call pricing** — no credit systems, no billing on failed runs.
- **MCP-native** — drops straight into Claude Desktop, Cursor, Windsurf, and OpenAI/Anthropic agents.

### FAQ

**Do I need an OpenAI or Perplexity API key?** No. The calling agent does the synthesis; this server only does search + reading.

**Which MCP clients work?** Claude Desktop, Cursor, Windsurf, Cline, and any Streamable-HTTP or SSE MCP client.

**Can I run it without MCP?** Yes — pass a `query` in the input for a one-off run; the dossier is saved to the dataset. Great for scheduled research.

**Is the data fresh?** It searches live web results. Pages published minutes ago may not be indexed yet.

### Other Actors by this author

Building agent tools and lead-gen data? See my [other Actors](https://apify.com/renzomacar) — contact & email finder, Google Maps, Reddit, Indeed, and more.

***

Built and maintained by [Renzo Madueño](https://apify.com/renzomacar). Found a bug or want another tool? Open an issue or leave a review and tell me — I read every message.

# Actor input Schema

## `query` (type: `string`):

Optional. If set, the Actor runs a single deep\_research on this query and stores the dossier in the default dataset (useful for testing outside MCP).

## `maxSources` (type: `integer`):

How many sources deep\_research reads.

## Actor input object example

```json
{
  "query": "best open-source vector databases 2026",
  "maxSources": 5
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "best open-source vector databases 2026"
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/deep-research-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "best open-source vector databases 2026" }

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/deep-research-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "best open-source vector databases 2026"
}' |
apify call renzomacar/deep-research-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=renzomacar/deep-research-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Deep Research MCP - Web Search for AI Agents",
        "description": "Give your AI agent the web: multi-source search, clean-markdown page reading, and one-call deep research dossiers. No OpenAI/Perplexity key required — your agent does the synthesis. MCP server, pay-per-event.",
        "version": "0.1",
        "x-build-id": "pQUcGnxIRg1ge7gf9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/renzomacar~deep-research-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-renzomacar-deep-research-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/renzomacar~deep-research-mcp/runs": {
            "post": {
                "operationId": "runs-sync-renzomacar-deep-research-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/renzomacar~deep-research-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-renzomacar-deep-research-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Test query (optional)",
                        "type": "string",
                        "description": "Optional. If set, the Actor runs a single deep_research on this query and stores the dossier in the default dataset (useful for testing outside MCP)."
                    },
                    "maxSources": {
                        "title": "Max sources",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many sources deep_research reads.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
