A side-by-side look at the PreReason MCP and XFuel MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose PreReason MCP for finance & fintech work as a local process; choose XFuel for finance & fintech as a local process. You can also run both side by side in one mcpServers block.
PREREASON_API_KEY.list_briefings, list_metrics, get_health.chat_completions, submit_inference, register_agent.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Finance & Fintech | Finance & Fintech |
| Quality signal | 64/100 · Good | 60/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | Freemium | Not declared |
| Required env vars | PREREASON_API_KEY | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 5 | 1 |
| Directory activity | 3 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 5 | 17 |
| Full listing | View PreReason MCP | View XFuel |
list_briefingsList all available pre-reasoned market briefings with tier requirements. Returns 18 LIVE briefings across Free (6), Basic (6), and Pro (6) tiers. Covers Bitcoin, macro, FX, commodities, and cross-asset financial data categories. No authentication required.list_metricsList all available individual metrics (119 metrics across bitcoin, macro, and calculated categories). Includes Bitcoin price, hash rate, Fed balance sheet, M2 supply, Treasury 10Y yield, net liquidity, and cross-asset indices (SPY, QQQ, VXX, UUP) used as BTC correlation signals. Optionally filter by category or search term. No authentication required.get_healthCheck API health status, version, and available endpoints. No authentication required.get_contextGet a pre-reasoned market briefing with trend signals, confidence scores, regime classification, and causal narratives for the requested domain (Bitcoin, macro, cross-asset, FX). Includes crypto, macro financial data, and cross-asset correlations (indices, bonds, volatility as BTC relationship signals). Output is decision-ready — designed to be consumed directly by reasoning agents, not parsed for individual values. Briefings are tier-gated: Free (btc.quick-check, btc.context, macro.snapshot, cross.correlations, btc.pulse, btc.grid-stress), Basic (btc.momentum, macro.liquidity, btc.on-chain, cross.breadth, btc.miner-survival, btc.etf-flows), Pro (btc.full, btc.factors, cross.regime, fx.liquidity, btc.energy, btc.treasury). Requires API key authentication via Authorization header.get_metricGet a single metric with pre-reasoned signal interpretation, trend analysis (7d/30d/90d), confidence score with factor breakdown, momentum, and percentile ranking. Available metrics: bitcoin-price, bitcoin-market-cap, bitcoin-volume-24h, bitcoin-change-24h, bitcoin-dominance, bitcoin-hash-rate, bitcoin-difficulty, bitcoin-tx-count, bitcoin-tx-volume, bitcoin-active-addresses, fed-balance, m2-supply, treasury-10y, rrp, eur-usd, cny-usd, yield-curve, tga, treasury-3mo, treasury-2y, treasury-5y, treasury-30y, breakeven-5y, breakeven-10y, t5yifr, mortgage-30y, t10y3m-spread, auction-bid-to-cover-10y, auction-bid-to-cover-30y, indirect-bidder-pct, dealer-takedown-pct, next-treasury-auction-days, fed-funds-rate, ecb-deposit-rate, boj-policy-rate, fed-ecb-spread, fed-boj-spread, carry-trade-returns-proxy, carry-trade-velocity-1d, mortgage-treasury-spread, iwm-spy-credit-spread, spy-vxx-correlation-30d, regime-stability-flag, jpy-usd, oil-brent, oil-wti, ovx, real-rate-10y, gld-gdx-ratio, copper-gold-ratio, slv-sil-ratio, gdxj-gdx-ratio, gold-silver-ratio, brent-wti-spread, etf-gld-1h-velocity, etf-cper-1h-velocity, etf-uso-1h-velocity, etf-uup-velocity-1h, crude-oil-stocks, natgas-storage, oil-inventory-zscore, natgas-storage-zscore, ecb-boj-spread, etf-gld-volume, etf-uso-volume, etf-uup-volume, etf-gld-volume-zscore-30d, etf-uso-volume-zscore-30d, etf-uup-volume-zscore-30d, net-liquidity, hash-ribbon, mvrv-proxy, etf-spy, etf-qqq, etf-iwm, etf-vxx, etf-uup, etf-gld, etf-gdx, etf-gdxj, etf-slv, etf-sil, etf-uso, etf-ung, etf-cper, etf-weat, etf-tlt, etf-ibit, etf-fxe, etf-fxy, usdt-market-cap, usdt-dominance, btc-price-200d-ma, btc-price-200d-distance, btc-etf-net-flow, btc-etf-cumulative-flow, btc-etf-aum, btc-etf-ibit-flow, btc-etf-fbtc-flow, btc-etf-gbtc-flow, btc-etf-other-flow, btc-etf-ibit-aum, btc-etf-fbtc-aum, btc-etf-bitb-aum, btc-etf-arkb-aum, btc-etf-btco-aum, btc-etf-ezbc-aum, btc-etf-brrr-aum, btc-etf-hodl-aum, btc-etf-btcw-aum, btc-etf-gbtc-aum, btc-etf-btc-aum, bitcoin-price-1h-change-pct, raw-hashprice-tick, on-chain-velocity-30d, bitcoin-volume-zscore-30d, btc-perp-oi-contracts, btc-perp-positioning-regime, btc-perp-funding-zscore-30d. Requires API key authentication. Returns analyzed context (signal, trend direction, momentum, 90d percentile), not raw values. Use when you need to understand what a metric means for decision-making, not just its number.chat_completionsGenerate text via Chit402's OpenAI-compatible POST /v1/chat/completions.
This is the first-hour / demo path. With the demo key it is unmetered (rate-limited).
It is NOT submit_inference and does NOT spend USDC.
Args:
- messages (required): OpenAI chat messages, e.g. [{role:"user", content:"Say hello"}]
- model (optional): catalog id from list_models (default xfuel/auto)
- max_tokens, temperature (optional)
Returns the completion plus top-level task_id and verify_url (also under xfuel).
proof_outcome may still be pending — use verify_receipt for offline binding checks.
Do not wait in this tool.submit_inferenceSubmit a PAID M2M inference task (POST /task-request). Default rail is USDC on Base.
Without a payer this returns HTTP 402. This is NOT the unmetered demo path —
use chat_completions to generate text with the demo key.
Pass messages or input so a live provider is actually called. input_hash/memo alone
do not send a prompt to the model.
Args:
- model (string): live catalog id from list_models
- sender (string): 0x address that owns/pays for the task
- amount (string): USDC 6 decimals; 2000 = $0.002; minimum 2000
- messages / input (optional): the prompt. Required for live routing.
- max_tokens, temperature (optional)
Poll get_task_status(task_id). Pay the live $0.01 door at POST /v1/chat/completions
from the agent's wallet — MCP does not take a human private key.register_agentPOST /v1/agents/register. Binds an AAWP official or smart-account agentWallet
to an integer agent_id using a collected HMAC-valid receipt (task_id from a paid
POST /v1/chat/completions). Demo receipts do not qualify. API key is not a wallet.
Does not accept a human private key.
Returns agent_id (required later by POST /erc8004/validate) and validate_score.get_agent_bookGET|POST /v1/agents/:agent_id/book. Possession-gated last-N collected
UsageSettled rows for that agent_id (task_id, payment.ref, rail, amount,
collected_at, route). Demo / unmetered rows never appear. Default N=50, max 200.
Totals: count, USDC sum, by rail. Response includes caps (budget Y, spent, remaining)
when set. Not a public index. API key is not possession.
Does not accept a human private key.
Pass the session issued by register_agent (or an HMAC over agent_id + window
using that session). Unauth or wrong proof returns 401/403 with an empty body.get_bookGET|POST /v1/agents/:agent_id/book. Possession-gated last-N collected
UsageSettled rows for that agent_id (task_id, payment.ref, rail, amount,
collected_at, route). Demo / unmetered rows never appear. Default N=50, max 200.
Totals: count, USDC sum, by rail. Response includes caps (budget Y, spent, remaining)
when set. Not a public index. API key is not possession.
Does not accept a human private key.
Pass the session issued by register_agent (or an HMAC over agent_id + window
using that session). Unauth or wrong proof returns 401/403 with an empty body.
Alias of get_agent_book for Eliza / Cursor clients.verify_receiptFetch GET /receipt/:task_id?format=json and verify payment binding locally
via @xfuel/verify — no trust in HTML, no private keys. This is the default "prove it"
path for agents holding hub, model, amount, verify_url.
Args:
- task_id (preferred) or verify_url — one required
- fetch_jwks (default true): load /.well-known/jwks.json for issuer signature check
- check_payer (default false): on-chain USDC payer match (Base or Solana RPC)
- check_nullifier (default false): SP1 nullifier anchor read (optional Tier-2)
Returns { verify_url, receipt, verification: { overall, binding, issuer_signature, … } }.
overall is verified | partial | failed. Unmetered demo receipts may be partial (no binding).get_task_statusGet the current status of a Chit402 task, including proof outcome and fee breakdown.
Args:
- task_id (string): from chat_completions (xfuel.task_id) or submit_inference
Returns JSON: { task_id, status, proof_outcome, verify_url, message_type, chain_id, gross_amount,
fee_amount, net_amount, fee_bps, payment_rail, payment_ref, result, sp1_proof, created_at, updated_at }.
'verify_url' is a public, no-auth receipt page you can open or share to prove settlement.
'status' reaches a terminal value ('completed' | 'fee_collected' | 'failed'); 'proof_outcome'
is one of 'pending' | 'valid' | 'regenerable' | 'invalid'.get_proofFetch the SP1 ZK settlement proof for a settled task.
Args:
- task_id (string): from chat_completions (xfuel.task_id) or submit_inference
Returns JSON: { task_id, status, proof_outcome, verify_url, payment_binding, sp1_proof: { proof,
publicInputs, nullifier, provingTimeMs }, fee }.
'verify_url' is a public, no-auth receipt page you can open or share to prove settlement.
The proof attests settlement metadata + a commitment to the output hash (NOT inference
correctness). To validate it, use verify_proof(task_id). Fails if the task has not
settled yet — poll get_task_status until proof_outcome is 'valid'.verify_proofIndependently verify a settled task's proof client-side (the "prove it" flow in one call):
1. a proof is present and proof_outcome === 'valid';
2. the x402 payment binding (if present) re-derives to the committed value;
3. (optional) the on-chain nullifier's spent state, when check_nullifier=true AND the
server was started with XFUEL_RPC_URL + ZK_VERIFIER_ADDRESS.
Args:
- task_id (string): from chat_completions (xfuel.task_id) or submit_inference
- check_nullifier (boolean, optional): also read the on-chain nullifier state (default false)
Returns JSON: { ok, checks: { hasProof, proofOutcomeValid, paymentBinding, nullifier }, reasons }.
'ok' is true when the proof is present + valid and any present payment binding is consistent.
The nullifier read is informational and does not gate 'ok'.quote_taskPreview per-rail pricing WITHOUT creating a task. Use before submit_inference.
Unknown model ids still return the $0.01 USDC floor — the human summary warns when
priced_model is null (inference will fail).
Args:
- model (preferred) or model_id: catalog id to price
- amount (optional): USDC 6 decimals for the USDC rail
- messages / max_tokens / tools: forecast the request you will submit
Unmetered chat_completions does not need this quote.get_healthCheck the connected Chit402 API's health and configuration (fee config, supported
chains, message types, demo limits). Useful for discovery/diagnostics.
Args: none.
Returns JSON: the /health payload (status, server, version, fee_config, chains, message_types, …).get_my_statsFetch usage for the configured API key (GET /stats/me).
The public demo key chit402-demo is SHARED — numbers are not this client.
Bring your own XFUEL_API_KEY for buyer-scoped stats.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"prereason-mcp": {
"command": "npx",
"args": [
"-y",
"@prereason/mcp"
],
"env": {
"PREREASON_API_KEY": "YOUR_PREREASON_API_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"xfuel": {
"command": "npx",
"args": [
"-y",
"chit402-mcp"
]
}
}
}