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.
They answer different questions, and the difference is visible in one tool call:
| what it covers | what its date means | |
|---|---|---|
| Liveness | free, no-key public data APIs | re-measured whenever the site is rebuilt — one read-only GET per API, recording HTTP status and latency. generated_at is when that happened |
| Offers | free tiers, trial credits, discounts | dated per row, re-verified on a rolling basis. verified_at is when that row was last read against the provider's own page |
Read the dates rather than assuming a cadence. Nothing here promises how often either one refreshes, because nothing schedules builds — so a gap can be any length, and the page cannot tell you the current one. generated_at on the feed and verified_at on the row both say what actually happened, and a row that has not been re-read recently says so instead of looking identical to one checked this morning.
**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** — the last 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.
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.
The endpoint is https://ai-deals.rockpool.cc/mcp. No key, no signup. Each format below is the client's own documented one, as read on 2026-10-09.
https://cursor.com/docs/mcp/install-links)
claude mcp add --transport http ai-deals-sentinel https://ai-deals.rockpool.cc/mcp
https://code.visualstudio.com/docs/agent-customization/mcp-servers):
code --add-mcp '{"name":"ai-deals-sentinel","type":"http","url":"https://ai-deals.rockpool.cc/mcp"}'
mcp_config.json (source:https://docs.windsurf.com/windsurf/cascade/mcp):
{"mcpServers":{"ai-deals-sentinel":{"serverUrl":"https://ai-deals.rockpool.cc/mcp"}}}
{"context_servers":{"ai-deals-sentinel":{"url":"https://ai-deals.rockpool.cc/mcp"}}}
free offer that exists.
expires_at is recorded where a provider states an end date, and set tounknown where an offer is time-limited but no date is published. Absence means no known expiry.
reported means a figure could not beestablished 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.