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              # run directly, no clone needed

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.1.tar.gz (340.0 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.1-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: microfish-1.1.1.tar.gz
  • Upload date:
  • Size: 340.0 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.1.tar.gz
Algorithm Hash digest
SHA256 cc73fa137dde03073a275063f375c483ed42fabe2513dd435bd08ea017f77f69
MD5 d90b57cac2176ddc327434a67c365b8c
BLAKE2b-256 906019bc0adab881a6783091f0531a59b003b8a051f02a3c806d03db249f4a36

See more details on using hashes here.

Provenance

The following attestation bundles were made for microfish-1.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: microfish-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2d762a394f1918fce6c940ff2497bdf6d173542079fa94c8d560f2510882ec01
MD5 145f61b837dfe14c1ae78e10de8ba910
BLAKE2b-256 77eb91b9dfd53546efddff7ec2f1501b188cbd256481739392f135caefaf5a2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for microfish-1.1.1-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