Playbook 02 LangGraph • Claude MCP • AgentKit • A2A x402 USDC on Base

Integrating predictive alpha into an autonomous trading agent

Autonomous trading agents fail in production when they rely solely on LLM reasoning over unverified social chatter or raw candle data without a calibrated risk and capital-allocation model. This playbook covers integrating predictive alpha into an autonomous trading agent using Alpha Sentinel's zero-signup machine discovery manifests (/.well-known/mcp.json, /.well-known/x402, and /.well-known/agent-card.json), orchestrating a cost-efficient 4-stage intelligence funnel (fetch_price → analyze_volatility → calculate_risk_score → generate_market_report), sizing positions mathematically from multi-factor risk weights, and settling pay-per-call USDC micropayments on Base (eip155:8453).

Cost-Optimized Agent Economics: Instead of calling every expensive endpoint on every tick, gate your autonomous loop in tiers: start with fetch_price ($0.005 or free via MCP), escalate to analyze_volatility ($0.02) and calculate_risk_score ($0.03) only when price velocity warrants evaluation, and reserve generate_market_report ($0.15) for daily/weekly portfolio rebalancing.

1. Zero-Config Discovery Flow for Autonomous Agents

Well-behaved agents discover Alpha Sentinel dynamically without hardcoded endpoints by probing the four canonical discovery documents:

  1. MCP Manifest (GET /.well-known/mcp.json): Returns the Streamable HTTP URL (https://alpha-sentinel-mcp.vercel.app/mcp), transport binding, and full JSON Schema definitions for all 5 tools.
  2. x402 & AgentCash Catalog (GET /.well-known/x402): Lists every paid resource URL, HTTP method, atomic USDC amount, settlement network (eip155:8453), and challenge/payment header names (PAYMENT-REQUIRED, PAYMENT-SIGNATURE, PAYMENT-RESPONSE).
  3. A2A v1.0 Agent Card (GET /.well-known/agent-card.json): Exposes skills 1:1 with the tool registry and advertises the a2a-x402 extension URI for JSON-RPC task negotiation at POST /a2a.
  4. LLM Context Summary (GET /llms.txt): Compact Markdown overview designed for direct injection into an agent's system prompt.

2. End-to-End Autonomous Trading State Machine

┌────────────────────────────────────────────────────────────────────────────────────┐
│  STAGE 0: DYNAMIC DISCOVERY                                                        │
│  GET /.well-known/mcp.json  │  GET /.well-known/x402  │  GET /.well-known/agent-card.json
└──────────────────────────────────────────┬─────────────────────────────────────────┘
                                           │
                                           ▼
┌────────────────────────────────────────────────────────────────────────────────────┐
│  STAGE 1: HIGH-FREQUENCY SPOT SCREENING ($0.005 USDC / Free on MCP)                │
│  Tool: fetch_price({"symbol": "sol"})                                              │
│  Gate: Proceed to Stage 2 only if |change_24h| > 1.5% or scheduled rebalance tick  │
└──────────────────────────────────────────┬─────────────────────────────────────────┘
                                           │
                                           ▼
┌────────────────────────────────────────────────────────────────────────────────────┐
│  STAGE 2: STATISTICAL ANOMALY DETECTION ($0.02 USDC)                               │
│  Tool: analyze_volatility({"symbol": "sol", "window_minutes": 60, "z_threshold": 2.0})
│  Gate: Abort entry if alert_level == "CRITICAL" (>3.0σ spike)                      │
└──────────────────────────────────────────┬─────────────────────────────────────────┘
                                           │
                                           ▼
┌────────────────────────────────────────────────────────────────────────────────────┐
│  STAGE 3: MULTI-FACTOR RISK SCORING & POSITION SIZING ($0.03 USDC)                 │
│  Tool: calculate_risk_score({"symbols": ["sol"], "include_factors": [...]})        │
│  Weights: Volatility (40%) + Liquidity (25%) + Market Cap (20%) + BTC Corr (15%)   │
│  Action: Scale base notional by (1.0 - overall_score) and set stop-loss            │
└──────────────────────────────────────────┬─────────────────────────────────────────┘
                                           │
                                           ▼
┌────────────────────────────────────────────────────────────────────────────────────┐
│  STAGE 4: EXECUTIVE SYNTHESIS & AUDIT TRAIL ($0.15 USDC, Daily/Weekly)             │
│  Tool: generate_market_report({"report_type": "daily", "symbols": ["btc","sol"]})  │
└────────────────────────────────────────────────────────────────────────────────────┘

3. Multi-Factor Risk Scoring & Position Sizing Mathematics

The calculate_risk_score tool (implemented in app/intelligence/risk.py) computes a normalized composite risk score $R \in [0.0, 1.0]$ across four orthogonal risk dimensions:

Risk Factor Weight Normalization Formula Risk Interpretation
Volatility Risk ($r_{\text{vol}}$) 40% (0.40) $\min(1.0, |Z_{\max}| / 3.0)$ Penalizes assets experiencing $\ge 3\sigma$ price dispersion.
Liquidity Risk ($r_{\text{liq}}$) 25% (0.25) $1.0 - \min(1.0, \text{Vol}_{24\text{h}} / \$5\text{B})$ Measures order-book depth and 24h turnover resilience.
Market Cap Tier ($r_{\text{cap}}$) 20% (0.20) large=0.1, mid=0.3, small=0.6, micro=0.9 Captures structural tail risk of smaller-cap tokens.
BTC Correlation ($r_{\text{corr}}$) 15% (0.15) $|\rho_{\text{asset, BTC}}| \times 0.30$ Quantifies systemic beta contagion during Bitcoin drawdowns.

The composite risk score is calculated as:

overall_score = 0.40 * vol_risk + 0.25 * liquidity_risk + 0.20 * cap_risk + 0.15 * corr_risk

Mapping overall_score & risk_level to Autonomous Position Sizing

Risk Classification overall_score Range Position Sizing Multiplier Stop-Loss & Leverage Policy
LOW $0.00 \le R < 0.20$ 1.00x target allocation Standard trailing stop (8–10%); DCA accumulation permitted.
MEDIUM $0.20 \le R < 0.40$ 0.70x target allocation Moderate stop-loss (6–8%); max 1.5x leverage.
HIGH $0.40 \le R < 0.60$ 0.35x target allocation Tight trailing stop (4–5%); spot only (zero leverage).
CRITICAL $R \ge 0.60$ 0.00x (No new long entries) Hard stop $\le 5\%$ below entry; reduce existing exposure by 50–100%.

4. Production Implementation: TypeScript / Node.js Autonomous Agent

Below is a complete TypeScript agent module compatible with LangGraph, Coinbase AgentKit, and AgentCash that discovers Alpha Sentinel, runs the multi-tool decision pipeline, and calculates exact USDC position sizes:

// autonomous_alpha_agent.ts
// Compatible with Node 20+, LangGraph tool nodes, and AgentCash / x402 signers.

const BASE_URL = process.env.ALPHA_SENTINEL_URL ?? "https://alpha-sentinel-mcp.vercel.app";

interface RiskAssessment {
  overall_score: number;
  risk_level: "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
  factors: {
    volatility: { score: number; weight: number; input_z_score: number };
    liquidity: { score: number; weight: number; estimate: number };
    market_cap: { score: number; weight: number; tier: string };
    correlation: { score: number; weight: number; btc_correlation: number };
  };
  recommendations: string[];
}

async function callAlphaSentinelTool<T>(
  toolPath: string,
  body: Record<string, unknown>,
  signX402Challenge: (challenge: unknown) => Promise<string>
): Promise<T> {
  const url = `${BASE_URL}${toolPath}`;
  let res = await fetch(url, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });

  if (res.status === 402) {
    const challenge = await res.json();
    const signature = await signX402Challenge(challenge);
    res = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "PAYMENT-SIGNATURE": signature,
        "X-Agent-Id": "langgraph-alpha-trader-01",
      },
      body: JSON.stringify(body),
    });
  }

  if (!res.ok) {
    throw new Error(`Alpha Sentinel ${toolPath} failed: HTTP ${res.status}`);
  }
  return (await res.json()) as T;
}

export async function evaluateTradeOpportunity(
  symbol: string,
  portfolioEquityUsd: number,
  baseAllocationPct: number,
  signX402Challenge: (challenge: unknown) => Promise<string>
) {
  // 1. Fetch real-time spot price ($0.005 USDC)
  const priceResp = await callAlphaSentinelTool<any>(
    "/tools/fetch_price",
    { symbol },
    signX402Challenge
  );
  const spotPrice = priceResp.data?.price_usd ?? priceResp.price_usd;

  // 2. Analyze statistical volatility ($0.02 USDC)
  const volResp = await callAlphaSentinelTool<any>(
    "/tools/analyze_volatility",
    { symbol, window_minutes: 60, z_threshold: 2.0 },
    signX402Challenge
  );
  const alertLevel = volResp.data?.alert_level ?? "NORMAL";
  if (alertLevel === "CRITICAL") {
    return {
      action: "HOLD_CIRCUIT_BREAKER",
      reason: `Volatility alert_level is CRITICAL (>3.0 sigma)`,
      notionalUsd: 0,
    };
  }

  // 3. Calculate multi-factor risk score ($0.03 USDC)
  const riskResp = await callAlphaSentinelTool<any>(
    "/tools/calculate_risk_score",
    {
      symbols: [symbol],
      include_factors: ["volatility", "liquidity", "correlation"],
    },
    signX402Challenge
  );

  const assetRisk: RiskAssessment = riskResp.data.individual[symbol];
  const score = assetRisk.overall_score;

  // 4. Risk-adjusted position sizing
  const multiplierMap: Record<RiskAssessment["risk_level"], number> = {
    LOW: 1.0,
    MEDIUM: 0.7,
    HIGH: 0.35,
    CRITICAL: 0.0,
  };
  const riskMultiplier = multiplierMap[assetRisk.risk_level] * (1.0 - score * 0.5);
  const targetNotionalUsd = Number(
    (portfolioEquityUsd * baseAllocationPct * riskMultiplier).toFixed(2)
  );
  const stopLossPrice = Number((spotPrice * (assetRisk.risk_level === "HIGH" ? 0.95 : 0.92)).toFixed(4));

  return {
    action: targetNotionalUsd > 0 ? "EXECUTE_LIMIT_ENTRY" : "SKIP",
    symbol,
    spotPrice,
    volatilityAlert: alertLevel,
    riskLevel: assetRisk.risk_level,
    overallRiskScore: score,
    targetNotionalUsd,
    stopLossPrice,
    recommendations: assetRisk.recommendations,
  };
}

5. Multi-Agent Negotiation via A2A Protocol (POST /a2a)

Agents implementing the Google Agent-to-Agent (A2A v1.0) specification with the a2a-x402 commerce extension can invoke any Alpha Sentinel skill via message/send and poll task state via tasks/get:

# Step 1: Send an A2A skill invocation request
curl -sX POST https://alpha-sentinel-mcp.vercel.app/a2a \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "a2a-risk-1",
    "method": "message/send",
    "params": {
      "skill": "calculate_risk_score",
      "symbols": ["btc", "eth"],
      "include_factors": ["volatility", "liquidity", "correlation"]
    }
  }' | jq .

When called without payment metadata, the A2A endpoint returns a task in state input-required containing status.message.metadata["x402.payment.required"]. The calling agent signs the challenge and submits a follow-up message/send carrying the same taskId and metadata["x402.payment.payload"], transitioning the task to completed with the full risk assessment artifact and x402.payment.receipts.