> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keenable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Rakazo

> Keenable as a built-in web provider in Rakazo, the open source self-hosted AI agent. Serves web_search and web_fetch, no key needed.

*Built-in web provider*

Keenable is a built-in web provider in [Rakazo](https://rakazo.com), an open source AI agent for persistent teammates that you can self-host. It serves both of Rakazo's builtin web tools: `web_search` returns titles, URLs and snippets, and `web_fetch` returns a page as readable text.

→ [View the change on GitHub](https://github.com/elie222/rakazo/pull/1522)

## Install

### No separate install

Keenable ships with Rakazo itself (merged upstream on October 20, 2026). There is no Keenable package to install.

> [!NOTE]
>
> The provider is on `main` and is not in v0.3.1, the latest release. The published-images install in Rakazo's self-hosting guide pulls the `edge` tag, which is rebuilt on every push to `main`, so it already includes Keenable. A deployment pinned to a release tag (`latest`, `v0.3.1`) or kept current by the updater sidecar gets it with the next release. To use it now, set these in `.env` and pull the images again, or run from a source checkout of `main`:
>
> ```bash theme={"system"}
> RAKAZO_IMAGE_TAG=edge
> RAKAZO_COMPUTER_IMAGE_TAG=edge
> ```

### Select Keenable

The default stays keyless HTTP search (DuckDuckGo HTML) with local Readability extraction. Switch it in the deployment's `.env`:

```bash theme={"system"}
WEB_PROVIDER=keenable
# Optional; omit to run keyless.
KEENABLE_API_KEY=keen_...
```

Then restart both the API and the worker, since each one builds its own web provider. Without a key, requests are anonymous and rate limited per IP address. With `KEENABLE_API_KEY` set on the API and worker, Rakazo sends it to Keenable and those limits no longer apply. Set `WEB_PROVIDER=keyless-http`, or remove the line, to go back to the default.

### Try it

Ask a bot something that needs the web. The thread shows `Searching the web: ...` while `web_search` runs and `Reading page: ...` while `web_fetch` reads a page.

## How it works

* `web_search` calls Keenable's `search_web_pages` tool on the hosted MCP server at `https://api.keenable.ai/mcp`. It returns 5 results by default and up to 10.
* `web_fetch` calls `fetch_page_content` on the same server. It returns 8,000 characters by default, up to 50,000 when the bot asks for more, and marks longer pages as truncated. Rakazo checks that the URL points to a public address before it leaves your deployment.
* Keenable receives search queries and the page URLs a bot asks to read, plus an `X-Keenable-Title: rakazo` header that names the app. No user, bot or conversation identifiers are sent.
* Rate-limit and other provider errors go back to the bot as tool errors. Rakazo does not fall back to another provider.
* A bot's **Disabled tools** setting still turns either tool off.

> [!NOTE]
>
> Set `KEENABLE_API_KEY` to authenticate — this removes the hourly request cap. Without a key, calls run on the shared public tier at [lower rate limits](/rate-limits).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.