The value of a search server is mostly in how little it costs the model to use, and a single call with named parameters is about as cheap as that gets — the difference between a quick check and a deep dive is one string. Retries and timeouts are handled inside rather than left to the client, which matters more than it sounds: a search that fails silently mid-answer is worse than one that takes another second.
A small Python MCP server in front of the Tavily search API. The whole surface is one tool with a handful of parameters, built so a model can reach for web results mid-reasoning without a separate research step.
- A `search` tool that takes a `query` and returns clean markdown-formatted results with snippet previews and source URLs
- `search_depth` set to basic or advanced, so a quick lookup and a deeper crawl are the same call with one parameter changed
- `max_results` anywhere from 1 to 20, so the answer size is yours to cap
- A `topic` of news for stories rather than pages, `include_images` for image results, and `include_raw_content` when the snippet is not enough
- Asynchronous request handling with automatic retries on failure and configurable timeouts, so a slow upstream does not hang the turn
A Tavily API key, supplied as `TAVILY_API_KEY` — either in a `.env` file or in the `env` block of your client config. Python 3.11 or higher and the uv package manager. The package is `mcp-tavily-search` (0.2.0 in pyproject); install with `uv pip install -e .` from a clone and launch `server.py` with `uv run`, or let the Smithery CLI install it into Claude Desktop in one command.
One command plus a key — npx -y @smithery/cli install mcp-tavily-search --client claude, then supply credentials
