npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

firecrawl-pool

v1.3.1

Published

Multi-key Firecrawl proxy with credit-aware routing, keyless fallback, and 402 retry. CLI + Go binary (~5MB RAM) with Node.js fallback.

Readme

firecrawl-pool

Multi-key proxy for Firecrawl API. Pools multiple API keys, routes to the healthiest, retries on 402, falls back to free tier.

Why this exists

The firecrawl-mcp npm package takes one FIRECRAWL_API_KEY. When that key runs out of credits (HTTP 402), every search/scrape/crawl fails until next month.

If you have multiple Firecrawl accounts — maybe you signed up a few times to get separate free-tier quotas — this proxy sits in front of them and automatically tries the next key when one is exhausted.

Important: Firecrawl credits are per-account (team), not per-key. Two keys from the same account share the same credit pool. This proxy only helps when keys belong to different accounts with independent balances.

Install

# For pi coding agent
pi install npm:firecrawl-pool

# Or globally via npm
npm install -g firecrawl-pool

Quick Start

# 1. Run the setup wizard
firecrawl-pool init

# 2. Check your keys
firecrawl-pool status

# 3. Add to your MCP config (or use pi extension)

CLI

| Command | What it does | |---|---| | firecrawl-pool init | Interactive setup wizard | | firecrawl-pool status | Show key balances and health | | firecrawl-pool validate | Test that all keys work | | firecrawl-pool proxy | Run the MCP proxy (default) |

Setup (Manual)

1. Create your keys file

cp firecrawl-keys.example.json ~/.config/firecrawl/keys.json
chmod 600 ~/.config/firecrawl/keys.json

Edit ~/.config/firecrawl/keys.json:

{
  "version": 1,
  "upstream": "https://api.firecrawl.dev",
  "cooldown": { "baseMs": 900000, "maxMs": 21600000 },
  "keys": [
    { "id": "personal", "apiKey": "fc-your-key-here", "enabled": true },
    { "id": "work", "apiKey": "fc-another-key", "enabled": true }
  ]
}

2. Point your MCP host at the proxy

Before (single key):

{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": { "FIRECRAWL_API_KEY": "fc-your-key" }
    }
  }
}

After (pooled keys):

{
  "mcpServers": {
    "firecrawl": {
      "command": "firecrawl-pool",
      "env": { "FIRECRAWL_KEYS_FILE": "/path/to/keys.json" }
    }
  }
}

Or for pi coding agent — the extension handles this automatically.

Auto-discovery

The proxy looks for keys file in order:

  1. FIRECRAWL_KEYS_FILE env var
  2. firecrawl-keys.json next to the binary
  3. ~/.config/firecrawl/keys.json
  4. ~/.firecrawl-keys.json

How it works

MCP host → stdio → firecrawl-pool → api.firecrawl.dev

Single process, handles MCP protocol directly. Go binary (~5MB RAM) or Node.js fallback.

  • Credit-aware routing: Probes each key's balance on startup, routes to the healthiest
  • 402 auto-retry: When a key is exhausted, retries with the next one
  • Keyless fallback: Search/scrape still work via Firecrawl's free tier when all keys die
  • Cooldown with backoff: Blocked keys auto-recover after exponential cooldown

Config options

| Field | Default | What it does | |-------|---------|-------------| | upstream | https://api.firecrawl.dev | Firecrawl API base URL. Change only if self-hosting. | | cooldown.baseMs | 900000 (15 min) | Initial cooldown when a key gets a 402. | | cooldown.maxMs | 21600000 (6 hrs) | Maximum cooldown (doubles each consecutive 402). | | keys[].id | — | Label for logging. Pick something you recognize. | | keys[].apiKey | — | Your fc-... API key. | | keys[].enabled | true | Set to false to temporarily skip a key without removing it. |

What happens when keys run out

For search, scrape, and interact: the proxy falls back to Firecrawl's keyless free tier (rate-limited, no API key needed). You'll get results, just slower.

For everything else (crawl, agent, map, extract): the proxy returns a 503.

Blocked keys automatically become available again after their cooldown expires. No restart needed.

License

MIT