# Web Search (/desktop/web-search)

Jan has **built-in web search**. When enabled, Jan advertises two tools - `web_search` and
`web_fetch` - to any model that supports tool use, so the model can look up current information and
read web pages on its own. It works out of the box with **no API key** and **no MCP server** required.

<Callout type="info">
Web Search is **on by default**. The default provider (Exa) uses a free, keyless endpoint, so you can
start asking about current events right away - no setup needed.
</Callout>

You can toggle web search for a chat from the input toolbar - the globe icon shows **Web Search (Active)** when it's on.

![Web Search toggle in the chat input](./_assets/web-search-toggle.png)

## The two tools [#the-two-tools]

| Tool | What it does |
|------|--------------|
| **`web_search`** | Searches the web and returns a ranked list of results (title, URL, snippet, and optional publish date). |
| **`web_fetch`** | Fetches a web page by URL and returns its readable text content, along with the source URL and title. |

A typical flow is `web_search` to find sources, then `web_fetch` to read a specific result in full.
`web_search` takes a `query` and an optional `count` (default 5, max 20); `web_fetch` takes an
http(s) `url`. Fetched content is length-bounded so it doesn't flood the model's context.

## Requirements [#requirements]

Web search only works with a model that supports **tool use**. The tools are advertised only to
tools-capable models, so pick a model that shows the **tools** capability in the model picker (most
local tool-calling models and the major cloud models qualify). If your model can't call tools, the
web tools won't be available.

## Configure it [#configure-it]

Open **Settings > Web Search**.

![Web Search settings](./_assets/web-search-settings.png)

### Enable Web Search [#enable-web-search]

Toggles whether the `web_search` and `web_fetch` tools are advertised to models that support tool
use. On by default. Works with no API key.

### Search Provider [#search-provider]

Choose the backend that answers `web_search` and `web_fetch`. Four providers are available:

| Provider | API key | Notes |
|----------|---------|-------|
| **Exa** (default) | Optional | Uses a free, keyless endpoint out of the box. Add a key for higher rate limits and structured results. |
| **Tavily** | Required | Needs a [Tavily](https://tavily.com) API key to return results. |
| **SearXNG** | Optional | Self-hosted. Point Jan at your own [SearXNG](https://searxng.org) instance URL (with the JSON API enabled). |
| **You.com** | Optional | Keyless search works out of the box, subject to a daily request cap. A [You.com](https://you.com/platform) API key lifts the cap and gives `web_fetch` extracted page content instead of raw HTML. |

### Exa API Key (optional) [#exa-api-key-optional]

With Exa selected, an API key is **optional** - leave it empty to use the free keyless endpoint.
Providing an [Exa](https://exa.ai) API key gives you higher rate limits and structured results.

<Callout type="info">
For **Tavily**, an API key is required. For **SearXNG**, you provide your instance's base URL instead
of a key. The settings panel shows the right field for whichever provider you pick.
</Callout>

## How it relates to MCP search [#how-it-relates-to-mcp-search]

This built-in web search is **native** - it does not use the [Model Context Protocol](/desktop/mcp).
Earlier versions of Jan relied on an Exa (or Serper) MCP server for web search; that's no longer
necessary. You can still connect an MCP-based search server if you want a specific provider or extra
control, but for most users the built-in Web Search is all you need.
