Developers

One scoring core. Two ways in.

The REST API and the MCP server both call the exact same deterministic core (orai/service.py) — the number never disagrees with itself depending on how you asked for it. No API key required today; this is read-only, public ledger data.

REST API

Base URL: https://vaultscore.io/api — everything below is relative to that.

GET/score/{address}

Computes (or returns a cached) VaultScore for a real XRPL mainnet address. Add ?refresh=true to bypass the cache and recompute from live ledger data.

$ curl https://vaultscore.io/api/score/rrrrrrrrrrrrrrrrrrrrrhoLvTp

{
  "address": "rrrrrrrrrrrrrrrrrrrrrhoLvTp",
  "score": 614,
  "scale": "300-850 (THIN_FILE)",
  "thin_file": true,
  "reason_codes": [
    { "factor": "repayment_history", "weight": 0.35, "subscore": 0.5,
      "direction": "negative", "detail": "no repayment history on record" }
  ],
  "cached": false
}

Tracking endpoints

Opt any address into monthly re-scoring. No accounts, no API keys — the address is the identity, same as the rest of VaultScore.

POST/track/{address}

Starts tracking. Safe to call more than once — returns the existing record instead of resetting the anniversary.

{
  "tracked": true,
  "first_tracked_at": "2026-09-10T02:00:00Z",
  "next_check_due": "2026-10-10T02:00:00Z",
  "last_checked_at": "2026-09-10T02:00:00Z"
}
GET/track/{address}

Current tracking status for an address (whether it's tracked, and its schedule).

GET/track/{address}/history

Every score snapshot recorded so far — the initial one plus one per monthly check — for plotting a trend.

{
  "address": "rnNq...",
  "history": [
    { "score": 614, "scale": "300-850 (THIN_FILE)", "thin_file": true, "checked_at": "2026-09-10T02:00:00Z" },
    { "score": 629, "scale": "300-850 (THIN_FILE)", "thin_file": true, "checked_at": "2026-10-10T02:00:00Z" }
  ]
}

MCP server

VaultScore's scoring core also ships as an MCP tool — any MCP-compatible client (Claude Desktop, Claude Code, another agent framework) can call it directly, no web UI involved. This is what actually delivers "AI utility" as a callable capability, not just AI branding on a website.

# Add VaultScore as an MCP tool source, then call:
score_xrpl_wallet(address="rrrrrrrrrrrrrrrrrrrrrhoLvTp")

# Returns the same shape as the REST endpoint:
{ "score": 614, "scale": "300-850 (THIN_FILE)", "thin_file": true, "reason_codes": [...] }

Run it locally over stdio for testing, or as a standalone HTTP server for deployment — see mcp_server/server.py in the repo.

Errors

StatusMeaning
404Address has never been funded on XRPL mainnet.
502The public XRPL node returned an error — safe to retry.
503Tracking isn't configured on this deployment (no Supabase connection).