MCP server: dated answers about free AI APIs

Every answer this server returns carries the date it was verified, and how many days ago that was. Your agent applies its own freshness tolerance rather than trusting that a page is current.

That is the point of it. A list can tell you something was free at some point; it cannot tell you whether it is free now. Neither can this server — but it can tell you when it last looked, per row, and let you decide.

{
  "mcpServers": {
    "ai-deals-sentinel": {
      "url": "https://ai-deals.rockpool.cc/mcp"
    }
  }
}

No API key, no signup, no account. The endpoint speaks JSON-RPC over HTTP POST.

What "dated" means here — there are two cadences

They are not the same promise, and the difference is visible in one tool call:

what it covershow often
Livenessfree, no-key public data APIsmeasured daily — one read-only GET per API, recording HTTP status and latency
Offersfree tiers, trial credits, discountsdated per row, re-verified on a rolling basis — not daily

Both carry dates. Only liveness is daily. Every offer row exposes verified_at and verified_days_ago, so a row that has not been re-read recently says so instead of looking identical to one checked this morning.

The three tools

**find_free_inference** — free tiers, trial credits and discounts on AI APIs, filterable by capability (inference, gpu, search, embeddings, vector-db, speech-vision, compute-sandbox, eval-observability) or by provider. Every row carries source_url and verified_at.

By default it returns only offers an agent can consume via API once a human has cleared signup. Pass agent_usable_only: false to see the rest — several well-known free GPU offers are notebook environments a script cannot drive, and that default excludes them rather than the catalog missing them.

**get_offer** — full detail for one provider's offer: the caveats, the access barrier, what the allowance actually covers, and where the claim came from.

**check_api_health** — today's measured liveness of free, no-key public data APIs: HTTP status and latency from one read-only GET each. Use counts.measured as the denominator, not counts.total; the difference is rows that were never called because they need a key.

Provenance, and one thing to know before piping this into a model

Rows are sourced to the provider's own page, never to an aggregator, and each carries the URL the claim came from.

Tool responses quote third-party provider text verbatim — caveats and allowance descriptions are the providers' own words, reproduced so you can read what they actually said rather than a paraphrase.

Offers that ended are kept and marked rather than deleted, so an agent asking about a provider gets "this ended" instead of silence. An absent row and a retired row are different answers, and only one of them is useful.

Limits worth knowing

free offer that exists.

unknown where an offer is time-limited but no date is published. Absence means no known expiry.

established first-party — most often a provider documenting a benefit without publishing its quantum — and the row says so rather than repeating a number from elsewhere.