Skip to main content

A restricted TinyFish MCP gateway for free search and fetch capabilities.

Project description

🐟 microfish

中文

PyPI Docker License: MIT

Free-only MCP gateway for TinyFish — exposes just Search & Fetch, nothing else.

Why microfish?

Official MCP microfish
Search & Fetch (free)
Agent / Browser / Batch (paid) ✅ exposed ❌ stripped
Agent accidentally calls paid tools ⚠️ possible 🚫 impossible
API key pool ✅ built-in
Rate limit single key pooled, higher throughput
  • 🔒 Free-only by design — Only search, fetch_content, get_search_usage, and list_fetch_usage are registered. Paid APIs are never exposed, so agents can't see or invoke them — no accidental charges, no wasted tokens.
  • ⚡ Built-in key pool — Supply multiple TinyFish API keys and microfish round-robins across them. If one key fails, it automatically falls back to the next (up to 3 retries), effectively bypassing single-key rate limits.

Quick Start

Get a free API key → https://agent.tinyfish.ai/api-keys

stdio (recommended)

Claude Code:

TINYFISH_KEYS=<KEY> \
  claude mcp add microfish --env TINYFISH_KEYS -- uvx microfish

Cursor / other MCP clients:

{
  "mcpServers": {
    "microfish": {
      "command": "uvx",
      "args": ["microfish"],
      "env": { "TINYFISH_KEYS": "<KEY>" }
    }
  }
}

HTTP

MICROFISH_TRANSPORT=http TINYFISH_KEYS=<KEY> uvx microfish
# endpoint: http://localhost:8000/mcp

Tools

✅ Available

Tool Description
search Web search (free)
fetch_content Fetch & extract page content (free)
get_search_usage Search usage stats
list_fetch_usage Fetch usage stats

🚫 Blocked

Agent automation · Batch automation · Browser sessions · Run lifecycle

Authentication

1. Client-owned key — Leave TINYFISH_KEYS unset. Each client passes its own key via Authorization: Bearer.

2. Server-managed single key — Set TINYFISH_KEYS=<key>. Optionally set MCP_AUTH_TOKEN to protect the endpoint.

3. Server-managed key pool ⚡ — Set TINYFISH_KEYS=k1,k2,k3. Requests are distributed in order; failures automatically fall back to the next key (up to 3 retries).

Configuration

Variable Default Description
TINYFISH_KEYS Comma-separated API keys; enables server-managed mode
MCP_AUTH_TOKEN Bearer token required from clients (server-managed mode)
MICROFISH_TRANSPORT stdio stdio or http
MICROFISH_HOST 0.0.0.0 Bind host (HTTP mode)
MICROFISH_PORT 8000 Bind port (HTTP mode)
MICROFISH_MCP_PATH /mcp MCP endpoint path (HTTP mode)

Client Examples

  • Claude Code

    HTTP:

    # Without auth
    claude mcp add --transport http microfish http://localhost:8000/mcp
    
    # With auth
    claude mcp add --transport http microfish http://localhost:8000/mcp \
      --header "Authorization: Bearer <YOUR_MCP_OR_TINYFISH_TOKEN>"
    

    stdio:

    TINYFISH_KEYS=<KEY> \
      claude mcp add microfish --env TINYFISH_KEYS -- uvx microfish
    
  • Codex

    HTTP:

    [mcp_servers.microfish]
    url = "http://localhost:8000/mcp"
    bearer_token_env_var = "MICROFISH_MCP_BEARER"
    

    Set MICROFISH_MCP_BEARER to your TinyFish API key (client-owned) or MCP auth token (server-managed).

    stdio:

    [mcp_servers.microfish]
    command = "uvx"
    args = ["microfish"]
    env = { TINYFISH_KEYS = "<KEY>" }
    
  • Cursor

    HTTP:

    {
      "mcpServers": {
        "microfish": {
          "url": "http://localhost:8000/mcp",
          "headers": {
            "Authorization": "Bearer ${env:MICROFISH_MCP_BEARER}"
          }
        }
      }
    }
    

    Drop the headers block if no auth is required.

    stdio:

    {
      "mcpServers": {
        "microfish": {
          "command": "uvx",
          "args": ["microfish"],
          "env": { "TINYFISH_KEYS": "<KEY>" }
        }
      }
    }
    

Deployment

Local

uvx microfish@latest              # run directly, no clone needed (fetches latest)

Docker

docker compose up -d       # pulls ghcr.io/vvtommy/microfish:latest
  • docker-compose.yml — pulls the published image
  • docker-compose_build.yml — builds from local Dockerfile

Contributing

PRs and issues are welcome. Please open an issue first for major changes.

Releasing

Push a vX.Y.Z tag to trigger: PyPI publish + GHCR image publish.

License

MIT

Readme(中文)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microfish-1.1.2.tar.gz (340.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

microfish-1.1.2-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file microfish-1.1.2.tar.gz.

File metadata

  • Download URL: microfish-1.1.2.tar.gz
  • Upload date:
  • Size: 340.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for microfish-1.1.2.tar.gz
Algorithm Hash digest
SHA256 eaa0b598206a1dcdaa14e9e982feb6a91ddb2873761b106f803bc034bd79af5b
MD5 eecc8d9a9d486762c3d09196ed470432
BLAKE2b-256 1b0f7f4618a74ac570d1043afba64920b35e2ac6b0efae82cf200dece3c94528

See more details on using hashes here.

Provenance

The following attestation bundles were made for microfish-1.1.2.tar.gz:

Publisher: pypi.yml on vvtommy/microfish

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file microfish-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: microfish-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for microfish-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a13046e8c40ab3b353b20b8eb5ec1ec920c104b4a355266558c38a54ec82346c
MD5 5a70d20315fb46310400da63f1427267
BLAKE2b-256 213f01d3d9e62bed593322e26da932bc6abfa824a6fb240810940735526fcdf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for microfish-1.1.2-py3-none-any.whl:

Publisher: pypi.yml on vvtommy/microfish

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page