TinyFish's two free tools, and nothing else.
The official TinyFish MCP server ships 19 tools plus a long instructions block, and six of them spend money. TinyRoe exposes only search and fetch_content, which TinyFish made free for every agent at any wallet balance, including $0.
It skips the OAuth too — these two are served over a REST API behind an X-API-Key header, so nothing expires and there is no authenticate stub to swap out. The same two tools are advertised always.
The project is TinyRoe; the package and the tool prefix are lowercase tinyroe.
| tool | does | limit |
|---|---|---|
search |
web, news, or academic search | 30 requests/min |
fetch_content |
read up to 10 URLs, returns clean markdown | 150 URLs/min |
Needs uv. No clone, no Node. Get a key at agent.tinyfish.ai/api-keys — it is shown once.
mkdir -p ~/.config/tinyroe
echo 'TINYFISH_API_KEY=your_key' > ~/.config/tinyroe/.envThen add the server:
claude mcp add tinyroe -s user -- uvx tinyroe # Claude Code, all projects
codex mcp add tinyroe -- uvx tinyroe # CodexOpenCode uses its own schema, in opencode.json or ~/.config/opencode/opencode.json:
{ "mcp": { "tinyroe": { "type": "local", "command": ["uvx", "tinyroe"], "enabled": true } } }Any other client takes the same two fields:
{ "mcpServers": { "tinyroe": { "command": "uvx", "args": ["tinyroe"] } } }Restart the client. You should see two tools and no authentication step.
TINYFISH_API_KEY in the environment wins, then ~/.config/tinyroe/.env, then a .env in the working directory. Prefer the config file: a client launched from a desktop app never sources your shell profile, so an export in .zshrc reaches terminal-launched clients only.
It is read lazily on the first call, so a missing key is a readable error rather than a server that will not start.
uv sync
uv run ruff format . && uv run ruff check . && uv run basedpyright
uv run tinyroeMIT. Not affiliated with TinyFish; bring your own key.