Odel
xsignal

xsignal

@philpof102-svgJavaScriptMITUpdated 2w ago

x402 pay-per-call data tools for Base agents. Flagship get_intent ABSTAINS instead of guessing.

Server endpointStreamable HTTPNo authProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

⚡ xsignal

Pay-per-call data ingredients for AI agents on Base, via x402 (USDC). The flagship is the one thing no other x402 signal does: get_intent abstains — it returns "no verdict" (and says so) when it isn't confident enough, instead of always answering and always charging. 3 free calls per wallet to try, then from $0.01. Verify-only: never signs or moves funds.

The tools (flagship first)

Tool / routePriceWhat you get
get_preflight · GET /preflight?addr=0x…$0.05The composed Base preflight: fuses on-chain safety (SAFE/WATCH/AVOID + rug flags, via MainStreet) with momentum into one verdict — GO / CAUTION / AVOID. Safety gates momentum, so it never green-lights a token that can rug.
get_intent · GET /intent?addr=0x…&min_confidence=0.7$0.01An outcome-priced momentum verdict (gaining/fading) only if confidence clears your bar, else a calibrated abstain. Paid answers carry a keyless tamper-evidence receipt.
get_token_brief · GET /brief?addr=0x…$0.05A meal: fuses market intel + cited social signal into a "what is happening with $TOKEN now" brief.
get_signal · GET /signal?q=<topic>$0.01A scored (virality + freshness) and cited real-time X/social signal.
get_token_intel · GET /token?addr=0x…$0.01Base token market data (liquidity/volume/price/age/flow + flags). Best as an input to the brief.
POST /mcpMCP (streamable-http): tools/list discovers the 5 tools; a tools/call returns an x402 payment pointer.
GET /health · /.well-known/mcp.json · /.well-known/agent-card.json · /skill.mdfreehealth + agent discovery + the installable skill (no data).

Try it free (3 calls per wallet)

Add ?wallet=0xYourAddress to any route for 3 free full results, so you can evaluate quality before paying. After 3, that wallet pays via x402.

curl "https://xsignal-production.up.railway.app/intent?addr=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&min_confidence=0.5&wallet=0xYourAddr"

Then run the example — a watchlist alerter that surfaces only the tokens confidently moving (and stays quiet on the rest):

WALLET=0xYourAddr node examples/watchlist-alerter.js

Pay with x402 (beyond the free probe)

The first post-probe request returns HTTP 402 with an accepts array (price in USDC, network base, payTo). Pay with x402-fetch/x402-axios and a funded Base wallet, resubmit with the X-PAYMENT header, get the result. /intent is pay-first: you pay, then get a verdict or an honest abstain.

Safety

We never sign or move funds. x402 means we receive USDC to payTo; payment is verify-only via a facilitator. Signals are scored from public X posts + public DEX data — verify before acting; not financial advice. Confidence is a mechanical heuristic, not a calibrated probability or a prediction.

Config (env)

VarPurpose
XSIGNAL_PAYTOaddress that receives USDC (public; no key). Default = the operator address.
XSIGNAL_PRICE_USD / XSIGNAL_BRIEF_PRICE_USD / XSIGNAL_INTENT_PRICE_USDper-call prices (default 0.01 / 0.05 / 0.01)
XSIGNAL_PROBE_FREEfree probe calls per wallet (default 3)
X402_NETWORK / FACILITATOR_URLbase (mainnet CDP, needs CDP_API_KEY_ID/CDP_API_KEY_SECRET) or base-sepolia (keyless x402.org)
X_BEARER_TOKEN or XAI_API_KEYlive X/Grok source for get_signal (token intel + intent are keyless via DexScreener). No key → a labelled DEMO seed.

Run

npm start      # :4520
npm test       # full self-test suite (signal · tokenintel · brief · intent · x402 · sources · server)

Zero runtime deps for the core (plain Node >=18); @coinbase/x402 is used only for CDP-facilitator auth on mainnet.