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


Further Reading


See also: run_token_audit | Prediction MCP Overview | Setup Guide