get_token_audit_result
>-
get_token_audit_result¶
Retrieves the current result of a token audit. Call this after run_token_audit returns status: "queued". Poll every 5 seconds until audit_status == "complete".
Do not present module data to the user while audit_status is "queued" or "running" - fields may be null or stale until the audit completes.
MCP Endpoint: https://prediction.mcp.chainaware.ai/sse
Input Schema¶
| Field | Type | Required | Description |
|---|---|---|---|
contract_address |
string | Yes | Same contract address passed to run_token_audit |
network |
string | Yes | Same lowercase network identifier passed to run_token_audit |
Output Schema¶
{
"contract_address": "string",
"chain": "string",
"audit_status": "queued | running | complete",
"token_name": "string",
"token_symbol": "string",
"token_decimals": 18,
"token_creator": "string",
"token_feeder": "string",
"source_verified": true,
"is_proxy": false,
"behavioral_is_honeypot": false,
"honeypot_analysis": {
"verdict": "No Honeypot | Likely Honeypot | Confirmed Honeypot",
"score": 0,
"findings": [
{
"rule": "string",
"severity": "info | low | medium | high | critical",
"function": "string | null",
"detail": "string"
}
],
"flags": ["string"]
},
"aggregate": {
"verdict": "string",
"risk_score": 0,
"primary_signal": "string",
"simulate": true,
"version": "string",
"duration_ms": 0,
"last_run": "ISO-8601"
},
"modules": {
"ownership": { "status": "pass | warn | fail", "risk_score": 0, "owner_is_renounced": false, "blast_radius": "string", "can_mint": false, "can_blacklist": false, "can_drain": false, "has_shadow": false },
"liquidity": { "status": "pass | warn | fail", "risk_score": 0, "pool_count": 0 },
"supply": { "status": "pass | warn | fail", "risk_score": 0, "has_mint": false, "deployer_pct": 0.0 },
"transfer": { "status": "pass | warn | fail", "risk_score": 0, "monitoring": false },
"pausability": { "status": "pass | warn | fail", "applicable": false },
"approve": { "status": "pass | warn | fail", "risk_score": 0 },
"permit": { "status": "pass | warn | fail", "applicable": false },
"reentrancy": { "status": "pass | warn | fail", "risk_score": 0 }
}
}
Key Fields¶
audit_status¶
| Value | Meaning | Next Action |
|---|---|---|
queued |
Audit is queued, not yet started | Wait and poll again |
running |
Audit is actively running | Wait and poll again |
complete |
Audit is finished, all fields populated | Present results to user |
aggregate.risk_score Interpretation¶
| Range | Risk Level | Recommended Action |
|---|---|---|
0-20 |
Low | Contract appears safe |
21-50 |
Medium | Proceed with caution; monitor ownership and liquidity |
51-80 |
High | Warn users prominently before they deposit |
81-100 |
Critical | Block interaction or listing entirely |
aggregate.verdict¶
Human-readable verdict derived from the risk score and pattern analysis (e.g. "High Risk", "Safe", "Honeypot Detected").
modules.ownership Key Fields¶
| Field | Description |
|---|---|
owner_is_renounced |
true means no one can call privileged functions |
blast_radius |
Worst-case impact if the owner acts maliciously (none / low / medium / high / critical) |
can_mint |
Owner can create new tokens - supply inflation risk |
can_blacklist |
Owner can freeze specific addresses |
can_drain |
Owner has a direct withdrawal function - extreme danger |
has_shadow |
Hidden or proxy owner detected |
honeypot_analysis¶
| Field | Description |
|---|---|
verdict |
"No Honeypot", "Likely Honeypot", or "Confirmed Honeypot" |
score |
0-100 honeypot confidence score |
flags |
List of specific honeypot indicators detected |
Polling Logic¶
async function awaitAudit(contractAddress, network) {
while (true) {
const result = await client.callTool({
name: "get_token_audit_result",
arguments: { contract_address: contractAddress, network }
});
if (result.audit_status === "complete") return result;
await new Promise(r => setTimeout(r, 5000)); // poll every 5s
}
}
import time
def await_audit(contract_address, network):
while True:
result = session.call_tool("get_token_audit_result", {
"contract_address": contract_address,
"network": network
})
if result["audit_status"] == "complete":
return result
time.sleep(5)
The 8 Modules¶
| Module | What It Checks |
|---|---|
ownership |
Who controls the contract and what powers they hold |
liquidity |
Pool depth, lock status, and withdrawal risk |
supply |
Mint functions, deployer token concentration, hidden inflation |
transfer |
Transfer function invariants - can transfers be blocked or hijacked? |
pausability |
Whether transfers can be paused by a privileged address |
approve |
ERC-20 approve/allowance correctness |
permit |
EIP-2612 permit signature safety |
reentrancy |
Re-entrant call paths that could be exploited for fund drainage |
A module returns n/a when the feature it checks is absent from the contract - not the same as a pass.
Error Codes¶
| Code | Meaning |
|---|---|
400 |
Malformed contract_address or network |
500 |
Temporary backend failure - retry after a short delay |
Related Tools¶
run_token_audit- trigger an audit (get-or-create)predictive_rug_pull- second opinion on rug pull probabilitypredictive_fraud- assess the deployer's behavioral fraud history
Further Reading¶
- Token Audit: Modules - full module reference with all individual findings
- Token Audit: Verdicts - what each verdict means and how to act on it
- Token Audit: 10,000 CoinGecko Tokens Analysed
See also: run_token_audit | Prediction MCP Overview | Setup Guide