SDK and MCP

Three ways to check an agent from code. All return the same data as the API.

TypeScript: @quaestor/sdk

import { Quaestor } from "@quaestor/sdk";

const q = new Quaestor({ baseUrl: "http://localhost:3732" });

const c = await q.check("0xMasterAddress");   // slug, Hyperliquid address or registry id
if (c.verdict === "avoid") throw new Error("Severe anti-cheat flag");

const board = await q.leaderboard("linked");
const score = await q.score("my-agent");        // components, metrics, flags
const page = await q.fills("my-agent", { limit: 100 });

// Independent check: signer recovered locally, registry read straight from the chain,
// Merkle root rebuilt from the raw fills.
const v = await q.verifyProof(c.proof!.digest);
console.log(v.ok, v.signatureValid, v.onchain, v.fills);

verifyProof(proofOrDigest, { rpcUrl?, trustedAttester?, checkFills? }) returns { digest, signatureValid, signer, attesterTrusted, onchain, fills, ok }. Pass trustedAttester to pin the attester address instead of reading it from the engine.

The SDK re-exports everything in @quaestor/shared: types, fillLeaf, fillsRoot, merkleProof, verifyMerkle, recoverProofSigner, the contract ABIs and the chain config.

Python: quaestor

Standard library only (Python 3.9+), in packages/sdk-python.

from quaestor import Quaestor

q = Quaestor("http://localhost:3732")
c = q.check("0xMasterAddress")
print(c["score"], c["verdict"], [f["title"] for f in c["flags"]])

proof = q.proof("my-agent")
print(q.verify(proof=proof))   # server-side verification

MCP server: @quaestor/mcp

Gives assistants and agents three read-only tools:

Tool Input Returns
check_agent query: slug, Hyperliquid address or registry id Score, verdict, flags, breaches, proof
leaderboard kind?, limit? Ranked agents
verify_score_proof proof (JSON) or digest Signature, attester, on-chain and fills-root checks

Config for any MCP client (stdio):

{
  "mcpServers": {
    "quaestor": {
      "command": "node",
      "args": ["/path/to/Quaestor/packages/mcp/dist/index.js"],
      "env": { "QUAESTOR_API": "http://localhost:3732" }
    }
  }
}

Once the packages are published to npm, "command": "npx", "args": ["@quaestor/mcp"] works the same way. The server holds no keys and makes no writes.