Skip to main content
Glama
haolamnm
by haolamnm
README.md
# TinyRoe

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](https://www.tinyfish.ai/blog/search-and-fetch-are-now-free-for-every-agent-everywhere) 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 |

## Install

Needs [uv](https://docs.astral.sh/uv/). No clone, no Node. Get a key at [agent.tinyfish.ai/api-keys](https://agent.tinyfish.ai/api-keys) — it is shown once.

```sh
mkdir -p ~/.config/tinyroe
echo 'TINYFISH_API_KEY=your_key' > ~/.config/tinyroe/.env
```

Then add the server:

```sh
claude mcp add tinyroe -s user -- uvx tinyroe   # Claude Code, all projects
codex mcp add tinyroe -- uvx tinyroe            # Codex
```

OpenCode uses its own schema, in `opencode.json` or `~/.config/opencode/opencode.json`:

```json
{ "mcp": { "tinyroe": { "type": "local", "command": ["uvx", "tinyroe"], "enabled": true } } }
```

Any other client takes the same two fields:

```json
{ "mcpServers": { "tinyroe": { "command": "uvx", "args": ["tinyroe"] } } }
```

Restart the client. You should see two tools and no authentication step.

## The key

`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.

## Development

```sh
uv sync
uv run ruff format . && uv run ruff check . && uv run basedpyright
uv run tinyroe
```

## Licence

MIT. Not affiliated with TinyFish; bring your own key.

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

Search discovers relevant URLs while fetch_content retrieves page content, making their roles complementary rather than overlapping. The description explicitly advises using search before fetch_content when the target page is unknown, further reducing ambiguity.

Naming Consistency4/5

Both tool names are clear action-oriented verbs, though one is a bare verb (search) and the other follows a verb_noun pattern (fetch_content). This is a minor stylistic inconsistency rather than a functional or comprehension problem.

Tool Count3/5

Two tools is borderline for a web research server, but the pair covers the essential search-then-fetch workflow compactly. The limited surface feels thin rather than bloated, and each tool earns its place.

Completeness4/5

The two tools form a complete core workflow: discover URLs via search and retrieve full content via fetch_content. Minor gaps exist, such as lacking search filters or page-level extraction options, but agents can accomplish the main research task without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues