# Chaconne Verify / Chaconne Agent > Evidence-backed verification and conditional execution for tokenized US stocks (xStocks) on X Layer. Every result is a signed, hash-anchored report whose evidence can be re-checked without an account. Not investment advice; nothing predicts price direction; nothing executes without the owner's own wallet signature. Base URL: https://verify.chaconne.xyz Evidence mode on this deployment: LIVE · report price USD 0 · payment network eip155:1952 · chain 196 Assets: stablecoins USDG / USDC / USD₮0; stock tokens AAPLx (AAPL) / NVDAx (NVDA) / SPYx (SPY) / SPCXx (SPCX) / CRCLx (CRCL) / HOODx (HOOD) / GMEx (GME) / COINx (COIN) / MSTRx (MSTR) / SNDKx (SNDK) / INTCx (INTC) / BMNRx (BMNR) / QQQx (QQQ) / MRVLx (MRVL) / TSLAx (TSLA) / DELLx (DELL) / MUx (MU) / GOOGLx (GOOGL) / ORCLx (ORCL) / AMDx (AMD) / AMZNx (AMZN) / AVGOx (AVGO) / SLVx (SLV) / ASMLx (ASML) / MSFTx (MSFT) / METAx (META) / PLTRx (PLTR) / MCDx (MCD) / TSMx (TSM) / BRK.Bx (BRK.B) / KOx (KO) / IWMx (IWM) / IBMx (IBM) / MRKx (MRK) / SMCIx (SMCI) / WMTx (WMT) / SKHYx (SKHY) / ICEx (ICE) / MRNAx (MRNA) / RDDTx (RDDT) (symbols, 0x addresses and eip155 keys are all accepted on A2MCP endpoints) ## Free endpoints (no API key; per-IP rate limit with RateLimit-* headers) - GET https://verify.chaconne.xyz/healthz — liveness, evidence mode, registry version, release.treeHash, capability flags - GET https://verify.chaconne.xyz/v1/assets — verified asset registry (chain + contract are the identity) - GET https://verify.chaconne.xyz/v1/policies — STRICT_LIVE / REFERENCE_CONTEXT / QUOTE_ONLY definitions and hashes - GET https://verify.chaconne.xyz/v1/products — SKUs, prices, what counts as delivered - GET https://verify.chaconne.xyz/v1/playbooks — task templates (session_dca, event_aware_accumulate, discount_watch, target_sell, portfolio_rebalance, agent_goal) and their parameters - GET https://verify.chaconne.xyz/v1/context?tier=agent — signed market context; always 200, unavailable fields are marked, never zeroed - GET https://verify.chaconne.xyz/v1/events?from=YYYY-MM-DD&to=YYYY-MM-DD — earnings / macro / Fed / holiday events with revisions - POST https://verify.chaconne.xyz/a2mcp/verify — verify one purchase (A2MCP; see below) - POST https://verify.chaconne.xyz/a2mcp/plan — plan candidates (A2MCP) - POST https://verify.chaconne.xyz/a2mcp/monitor — register a signed TradeMandate for monitoring (A2MCP) - POST https://verify.chaconne.xyz/a2mcp/agent-tasks — event impacts + ready-to-submit task drafts (A2MCP) - GET https://verify.chaconne.xyz/pub/reports/{shareId} and https://verify.chaconne.xyz/pub/reports/{shareId}/bundle — public report and its evidence bundle (bundleHash + attestation signature) - GET https://verify.chaconne.xyz/pub/openapi.json — OpenAPI 3.1 · GET https://verify.chaconne.xyz/pub/agent-card.json — agent card ## Call it once ``` curl -X POST https://verify.chaconne.xyz/a2mcp/verify -H 'Content-Type: application/json' \ -d '{"ownerAddress":"0x1111111111111111111111111111111111111111","outputAssetKey":"AAPLx","amount":"100"}' ``` A2MCP transport rule: the response is HTTP 200 both when delivered (body.status = delivered) and when input is missing or invalid (body.status = input_required, with missingParams / problems / schema / example / howToCall). The X-A2MCP-Status header mirrors body.status. Paid tiers answer 402 with an x402 challenge. A delivered verification includes publicUrl (key-less public report) and publicBundleUrl (evidence bundle); the same (owner, asset, amount, policy) within 60 s reuses the same job. ## Keyed endpoints Owner-scoped endpoints under /v1/jobs, /v1/tasks, /v1/theses, /v1/event-impacts, /v1/portfolio, /v1/notify need x-api-key (or Authorization: Bearer). Wallet-bound keys are created at /agent/keys with one wallet signature and act for that wallet (no extra header); operator keys also send x-verify-caller: <0x address>. Error bodies are { error, message (English), messageZh?, details? }. Wrong HTTP method on a known path answers 405 with an Allow header. ## MCP server The MCP server (@chaconne/verify-mcp) is a workspace package in the public repository, not on npm: ``` git clone https://github.com/Bachamht/verify_chaconne && cd verify_chaconne pnpm install VERIFY_SERVICE_URL= node packages/verify-mcp/bin/chaconne-verify-mcp.mjs # free read-only tools need no VERIFY_API_KEY; keyed tools report not_available until VERIFY_API_KEY is set ``` Without VERIFY_API_KEY it starts with the free read-only tool set (get_market_context, list_supported_assets, get_verification_policy, get_events, verify_once_free, plan_free, agent_tasks_free); keyed tools answer { status: "not_available", reason: "api_key_required" } instead of failing. The server holds no keys, never signs and never pays unless you opt into its agent-wallet mode with your own wallet. ## Rules that never bend - Unknown is never shown as zero; unavailable data stays unavailable. - No policy is downgraded automatically; a rejected verdict is a delivered result. - Service-side pause/cancel only stops new certificates; the hard stop is on-chain revokeMandate. - Evidence bundles are verifiable offline with @chaconne/core verifyBundleOffline or the verify-bundle CLI in the repository.