About researchsearch
researchsearch is a CLI and MCP server for web research powered by the Tavily API. It supports ranked search, page extraction, site crawling, and URL mapping; a Tavily API key is required.
Key features
- 01Ranked web search with optional answers
- 02Extract clean page content
- 03Crawl sites within set limits
- 04Map reachable site URLs
- 05CLI and stdio MCP server
Use cases
- 01Search for sources with ranked excerpts
- 02Extract text from selected pages
- 03Crawl a site under depth and breadth limits
- 04Map a site before reading its pages
MCP support
Exposes Tavily search, extract, crawl, and map tools to MCP clients over stdio. A `TAVILY_API_KEY` is required, and tool responses pass through the corresponding Tavily API results.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @reneturcios/researchsearchLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
4Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| days | number | No | Number of days back from today to search, for the news topic. |
| query | string | Yes | The search query to run against the web. |
| topic | string | No | Search topic: "general", "news", or "finance". |
| max_results | number | No | Maximum number of search results to return. |
| search_depth | string | No | Search depth: "basic" or "advanced". Unset lets the service choose. |
| include_answer | boolean | No | Whether to include an AI-generated answer summarising the results. |
| exclude_domains | array | No | List of domains to exclude from the results. |
| include_domains | array | No | List of domains to restrict results to; only results from these domains are returned. |
| include_raw_content | boolean | No | Whether to include the cleaned raw page content for each result. |
Details
From the project READMEresearchsearch
researchsearch is a research desk for the web, powered by the Tavily API. It searches with ranked, content-bearing results (and an optional generated answer), pulls the clean text out of specific pages, crawls a site page by page under limits you set, and maps a site's structure so you can see what is there before you read it. It works from the command line or as an MCP server for agents.
A Tavily API key is required. Put it in the TAVILY_API_KEY
environment variable; without it, every operation stops with an error
that names the missing variable, before any request is made.
Install
export TAVILY_API_KEY="tvly-..."
npx @reneturcios/researchsearch search "composting basics"
Or run the container image:
docker run -i -e TAVILY_API_KEY="tvly-..." ghcr.io/cloudcorprecords/researchsearch
The container defaults to the MCP server (see below). Pass CLI arguments to use it as a CLI instead.
CLI
# Search; results print as JSON
researchsearch search "composting basics"
researchsearch search "rate decision" --topic news --days 3 --max-results 5 --answer
# Extract the clean content of one or more pages
researchsearch extract https://example.com/article
researchsearch extract https://example.com/a https://example.com/b --depth advanced
# Crawl a site from a starting page
researchsearch crawl https://example.com --max-depth 2 --limit 25
researchsearch crawl https://example.com --instructions "Focus on the guides"
# Map a site's structure (URLs only, no page content)
researchsearch map https://example.com --max-depth 1 --limit 50
researchsearch --version
Exit codes: 0 on success, 1 when an operation fails (a missing
TAVILY_API_KEY, an HTTP error from the service, an unreachable host),
2 for usage errors.
MCP server
One bin serves both faces. The mcp subcommand starts a stdio MCP
server:
npx -y @reneturcios/researchsearch mcp
MCP client configuration:
{
"mcpServers": {
"researchsearch": {
"command": "npx",
"args": ["-y", "@reneturcios/researchsearch", "mcp"],
"env": {
"TAVILY_API_KEY": "tvly-..."
}
}
}
}
Tools
| Tool | Input | What it returns |
|---|---|---|
tavily-search | query (string, required), search_depth, topic, days, max_results, include_answer, include_raw_content, include_domains, exclude_domains (all optional) | Ranked results with content excerpts and scores, plus a generated answer and raw page content when requested. |
tavily-extract | urls (string array, required), extract_depth, include_images, query (optional) | The clean extracted content of each page, with failures reported separately. |
tavily-crawl | url (string, required), max_depth, max_breadth, limit, instructions, extract_depth (optional) | The pages visited from the starting URL, each with its extracted content. |
tavily-map | url (string, required), max_depth, max_breadth, limit, instructions (optional) | The list of URLs reachable from the starting page, without page content. |
Each tool is one call to the matching Tavily API endpoint. Only the parameters you set are sent — unset optionals are omitted so the service applies its own defaults — and each response is the service's JSON, passed back unchanged.
Development
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, no network (fake fetch fixtures)
npm run dev # run the CLI from source via tsx
License
MIT — see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.