Credits & Billing
What costs a credit
| Method / tool | Cost |
|---|---|
initialize | Free |
tools/list | Free |
ping | Free |
notifications/* | Free |
tools/call → account_status | Free |
tools/call → any other tool | 1 credit |
Credits are organisation-wide, not per-key. They are shared with the REST API: any credits purchased for your account are usable across both surfaces.
How charging works
For every paid tools/call:
- The server debits 1 credit before running the tool.
- The request executes (with a 15-second timeout).
- On success, the response is returned with
credits.charged: 1. - On error or timeout, the credit is automatically refunded and
credits.refunded: true. You are not billed for failed lookups.
Argument validation runs before the charge step, so malformed requests never consume a credit.
Reading your balance
Every response includes the live balance in
result._meta.precursor.credits:
"credits": {
"charged": 1,
"remaining": 9998,
"refunded": false
}For a quick, free balance check, call the account_status tool. It is
the only tool that returns credit balance and key metadata at no cost.
curl -s https://mcp.precursorintelligence.com \
-H "Authorization: Bearer $PRECURSOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"account_status","arguments":{}}}'Insufficient credits
Once your balance drops below 1, paid tool calls return:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32002, "message": "insufficient_credits" }
}The response carries HTTP status 402. The error persists until you top
up from your dashboard. Free
methods (initialize, tools/list, ping) and the account_status
tool continue to work, so you can always check your balance before
topping up.
Cost guidance per tool
Every paid tool costs exactly 1 credit per successful call. There
are no premium tools, and pagination does not multiply the cost (one
call to search_iocs with limit: 200 is still 1 credit). To keep
spend low:
- Filter aggressively. A broad query with no type filters may return truncated results at the same cost as a precise, targeted one.
- Cache locally where appropriate. CVE and CPE data refreshes on a 60-second cadence at the source.
- Use
account_statusfor health checks: it returns your credit balance and key metadata in one free call.
You do not need to detect or claim refunds. When the server times out or
returns an error, the credit is reversed before the response is sent,
and credits.refunded: true is set so you can log it.