PG1

PG1 for agents

For agents

Why agents use PG1

An autonomous agent acts on things it has never seen before: it pays a wallet, opens a link, installs a package, patches a CVE. PG1 checks that thing first and answers in one machine-readable shape, reasons + status + checks, so the agent can decide on its own and a person can audit why.

Connect in under 30 seconds. Add the MCP server to your client:

json
{ "mcpServers": { "pg1": { "type": "http", "url": "https://pg1-ai-agent.vercel.app/api/mcp" } } }

Or call it directly:

bash
curl -X POST https://pg1-ai-agent.vercel.app/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_hostname_reputation","arguments":{"hostname":"example.com"}}}'

A2A agents use https://pg1-ai-agent.vercel.app/api/a2a (agent card at /.well-known/agent-card.json).

Which tool to call

You haveCallNotes
One IP, domain, URL or file hashget_ioc_contextFree when nothing is on record (found: false). PG1's licensed records hold only CVE ids from NVD today, so an IP, domain, URL or hash returns found: false; for a domain or hostname also run the two hostname checks below.
Several indicators (up to 20)get_ioc_batchFree when none is found (the same CVE-only records as above). Read each entry in results, not only the batch status.
A CVE idget_cve_detailsSeveral ids: get_cve_batch (up to 20).
A vendor and product, no CVE idget_cve_by_productKnown-exploited CVEs come first.
A wallet address you are about to pay or trustcheck_wallet_sanctions and check_wallet_ageSanctions list match, then on-chain age; a wallet with no history is flagged.
A link, hostname or possible phishing sitecheck_hostname_reputation and check_domain_ageListed or look-alike hostname, then registration age; a domain under 30 days old is flagged.
An npm or PyPI package before installing itcheck_packageFlags a name that does not exist, a malicious report, or a new look-alike of a popular package.
A threat actor or APT nameget_threat_actor_profileMITRE ATT&CK dossier.
One public IP and your own AbuseIPDB keycheck_ip_abuseSend the key in X-AbuseIPDB-Key; PG1 has no key of its own.
The CVE list to ingestget_threat_indicatorsSTIX 2.1 bundle of CVE records from NVD: CVE id and an NVD reference, no scores, no IP/domain/URL/hash indicators. REST: GET /api/ioc. Free while it holds no current data (PG1_FEED_PAID off): no payment, no licence key, and it does not use the 5 free calls a day.
Your remaining free callsget_usage_statusAlways free.

What status means

statusMeaningWhat to do
"no_flags"Nothing bad is recorded in the sources checked (see checks). It is not proof the target is safe.Proceed under your own policy.
"flagged"At least one warning in reasons.Stop, or escalate to a person. Match on reasons[].code, never on message.
"unknown"A source timed out, errored or was skipped, so the answer is incomplete.Never treat it as clean: retry, or fail closed.

Informational codes (WALLET_DELEGATED, IP_TOR_EXIT_NODE, IP_WHITELISTED, IP_REPORTS_SCORED_ZERO) report a fact and never change status. Every code: /docs/reason-codes.

Free tier and rate limits

ToolCostLimit without a licence key
check_wallet_sanctionsAlways free120 calls/hour per caller
check_domain_age, check_hostname_reputation, check_wallet_age, check_packageAlways free60 calls/hour per caller, per tool
check_ip_abuseAlways free (your own AbuseIPDB quota)60 calls/hour per caller
get_usage_statusAlways freenone
get_ioc_context, get_ioc_batchFree when nothing is found; paid when something isPaid calls use the free tier first
get_threat_indicators, GET /api/ioc (the STIX feed)Free while the feed holds no current data (PG1_FEED_PAID off)none, and it does not use the 5 free calls a day
get_cve_details, get_cve_batch, get_cve_by_product, get_threat_actor_profilePaid: 0.01 USD per call5 free calls a day per caller, shared across all of them, then x402
Test fixtures (/docs/testing)Always freenone, and they spend no free call