Tools
Every tool description ends with its own price, generated from config, so the model can see the meter running and pace itself instead of looping blind.Module prices come from the same table as the REST API, so the same data costs the same
whichever door you come through. See Credits and Modules.
Failed calls are never billed.
search_signals
The cross-company question: who did something worth reacting to, and when.
The response also reports how many companies produced signals in the window at all, so a
ranked list of 25 is not mistaken for the whole market.
find_company
Every tool here takes a domain, and you will usually have a name. Guessing the domain is the expensive mistake: a wrong guess comes back as “not indexed” for a company we actually hold, and sends the agent on to spend a scan on a host nobody checked.find_company takes a name (a domain works too and is resolved directly), an optional
country and limit, and returns a handful of candidates with the few fields that tell them
apart — country, founding year, headcount, and when we last saw a signal. It never picks for
you. Once you have chosen, get_company returns the full profile.
If search is unavailable it returns an explicit error rather than an empty list, because
“we could not look” and “not in the index” are different answers and only one of them is true.
search_companies
Firmographic search over the companies we watch:country, min_employees, max_employees,
funding_stage, observed_within_days, founded_after, founded_before, limit.
observed_within_days is floored at 30 and capped at 365. There is deliberately no way to
search the whole index: this tool covers what we observe, and every answer carries a coverage
block saying how many companies that is.
Each result reports signal_activity.level — light, moderate, high — rather than a raw
count. Nobody acts differently on six signals versus eight, and a bare number invites a
comparison against vendors who count every conference badge. latest_signal_date stays exact;
timing is the thing worth being precise about.
get_company / get_company_signals
get_company takes a domain and an optional include list of enrichment modules.
get_company_signals takes a domain plus days, categories, signal_keys and limit,
and returns the dated timeline — the raw material for a “why now” argument.
refresh_company / get_refresh_status
refresh_company takes a domain and optional modules, queues a scan and hands back a
batch_id. get_refresh_status polls that id for free until the scan lands — the call blocks
and waits for you, so a scan costs two or three patient calls rather than twenty impatient ones.
A scan only refreshes what you ask for, and anything left out keeps the date it already had.
The default is signals + funding, the two that go out of date fastest; every result names
both what it refreshed and what it did not.
watch_company / check_watches
MCP is request-response: a server can only ever answer, never initiate. So every company-data MCP server is read-only pull, and an agent finds out something changed only if a human happens to ask again. It does not need the protocol. Registration is an ordinary tool call; the wake-up travels out of band.watch_company records a standing interest in a company, optionally narrowed by
signal_keys or min_weight. When a matching signal lands it is delivered two ways:
- An inbox, drained by
check_watches— free, and it returns only what is new since your last call. This is the path for an agent living inside a chat client, which has no address to be called back on. - A webhook, if the key has one configured —
signal.matched, signed exactly like an enrichment webhook so you do not need a second verifier. This is the path that genuinely wakes a hosted agent.
Prompts
The server also exposes MCP prompts — ready-made workflows that clients surface as a menu or slash command. Rendering one is free; the tools it triggers are billed normally.The real value is not the phrasing. Each template has the correct tool sequence and the
freshness caveats baked in — check coverage before calling a company quiet, do not report a
rumour as an event — so a first-time user gets expert behaviour without knowing the rules.
Errors
Two channels, and the difference matters:- JSON-RPC errors mean the call was malformed — unknown method, bad envelope. The client sees them; usually the model does not.
- Tool errors mean the call was fine but the answer is a failure — out of credits, unknown domain, quota hit. These come back as results so the model can read them and adapt.
429 also carries Retry-After.

