Why an agent's data query returns empty results
An empty result is almost never a bug. Four causes account for most of them: the since window is shorter than the publisher's cadence, the query was written as a sentence instead of keywords, a filter enum silently excluded everything, or the wire does not cover the topic at all.
/mcp. Nothing here needs an API key or a signup.
The order matters, because each check costs a different amount. Widening a window is free to reason about, switching wires is not.
Cause 1: the window is shorter than the publisher's cadence
This is the most common one, and it is usually correct behaviour rather than a miss. Most primary sources do not publish continuously. They publish on a schedule, and a window narrower than that schedule returns nothing.
The Federal Register is the clearest example. It publishes on federal business days only. A query against its API for Sunday 2 August 2026 returns exactly zero documents, and so will any wire reading it with since=24h on a Sunday morning. Nothing is broken; the publisher did not publish.
Rate-of-arrival works the same way. USGS recorded 648 earthquakes of magnitude 4.5 or greater in the 30 days to 9 August 2026, which is about 0.9 an hour globally. A query with mag=m4.5&since=1h is close to a coin flip on any given hour, and treating the empty half as a failure is a misreading of the data.
This is why the sparse wires carry different since defaults: 3 days on regulations, 7 days on court opinions, 14 days on Fed announcements, 30 days on travel advisories. Those defaults are the publisher's cadence, written down. More detail is in how recent agent data actually needs to be.
Cause 2: the query is a sentence, not keywords
The q parameter runs a ranked keyword search. It is not semantic search and it is not a vector index, so a natural-language question is matched literally, word for word, and the filler words drag the score down.
Sent as q | Result |
|---|---|
what did the Fed chair say about inflation | Matches almost nothing |
Powell inflation | Matches the item you wanted |
Two or three distinctive terms beat a full question every time. If results come back with low relevance scores across every item rather than none at all, the query grammar is usually fine and the wire is wrong.
Cause 3: a filter narrowed it to nothing
Every wire takes exactly one filter besides q, since and limit, and the filter is an enumerated value rather than free text. src, type, form, provider, project, mag, severity and category each accept a fixed list. A value outside that list does not error. It matches nothing.
Filters combine as AND, so q=tariff&type=rule&since=24h has to satisfy all three at once. Dropping the filter first, then widening since, then dropping q isolates which one did it.
The enum for every route is published in the routing table at /llms-full.txt, and the MCP endpoint at /mcp lists the same catalogue with no payment and no items, which makes it the cheapest place to check a filter value before spending anything on a call.
Cause 4: the wire does not cover it
Coverage has edges, and they are documented rather than implied. There are 301 wires reading named government, science and news publishers, not the whole internet. Government coverage is US-centric plus the European Commission, the UK, Canada, the WTO and UN humanitarian reporting, so a question about a regulator outside that list has no wire that owns it. Headlines, links and summaries are carried; full article text, price quotes and OHLCV data are not. Retention is a rolling window, 72 hours by default and up to 30 days on the sparse government and science wires, so since=90d does not reach back 90 days on a wire that keeps 3.
An empty result here is the honest answer. It is also worth reading freshest in the response: if the newest item in the window is old, the source has been quiet, which is signal rather than an error.
The debug ladder, cheapest step first
# free, no payment, no items: confirm the route, the filter enum and the price claude mcp add --transport http botwire https://thebotwire.com/mcp # 1. baseline: no q, no filter, wide window ($0.005) curl -i "https://thebotwire.com/reg/latest?since=7d&limit=10" # 2. add the filter back ($0.005) curl -i "https://thebotwire.com/reg/latest?type=rule&since=7d&limit=10" # 3. add distinctive keywords, not a question ($0.005) curl -i "https://thebotwire.com/reg/latest?q=tariff%20exclusion&type=rule&since=7d" # three calls, $0.015, USDC on Base, no API key and no signup
If step 1 returns items and step 3 does not, the query is the problem. If step 1 is also empty, widen since before concluding anything. If a wide, unfiltered window is still empty, the source has been quiet or you are on the wrong wire. Every route and its filter enum is in the docs, and poll cadence is published live at /health.
FAQ
Does an empty result still cost money?
Yes. A call that returns count:0 is a completed request and settles at the route's price, $0.005 or $0.01 depending on the wire. That is the argument for using the free MCP catalogue to confirm the route and filter enum first, and for widening since before adding more parameters.
How do I tell an empty result from a failed payment?
By the status code. A 402 is a payment step, not a data answer, and it never carries a result body. An empty result arrives as a normal 200 with count:0 and a took_ms value. If you are looking at 402s rather than empty arrays, the cause is on the payment side, covered in why an x402 call keeps returning 402.
Should an agent retry an empty query?
Not with the same parameters. Retrying an identical call spends again for the same answer. Change one thing per retry, widest and cheapest first: drop the filter, then widen since, then simplify q. Cap it at two or three attempts and report what was checked rather than looping.
Is low relevance the same as an empty result?
No, and the difference tells you what to fix. Zero items means nothing matched the filters at all. Items with uniformly low relevance scores mean the wire answered, but the topic is not what it covers. The first is a parameter problem; the second is a routing problem, and re-querying the same wire will not fix it.
Sources
Publication cadence is verifiable directly at the publishers. The Federal Register API returns a count of 0 documents for Sunday 2 August 2026, and the USGS earthquake catalog returned 648 events of magnitude 4.5 or greater for the 30 days ending 9 August 2026, both read on 9 August 2026. Poll cadence, retention tiers and the live wire count for this service are published at thebotwire.com/health.
Related: Freshness windows: how recent does agent data need to be? · Why does my x402 call keep returning 402?