docs

Quickstart

Connect any MCP client to https://elsas.it/mcp. Transport: Streamable HTTP. Spec: 2025-11-25.

{
  "mcpServers": {
    "elsas": {
      "url": "https://elsas.it/mcp"
    }
  }
}

Live — no auth required. Free sample report available.

Agent Workflow

Your agent talks to elsas.it in 3 steps:

1. Initialize

POST /mcp
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
  "protocolVersion":"2025-11-25",
  "capabilities":{},
  "clientInfo":{"name":"my-agent","version":"1.0"}
}}

→ 200 OK
{
  "jsonrpc":"2.0","id":1,"result":{
    "protocolVersion":"2025-11-25",
    "serverInfo":{"name":"elsas-security-intel","version":"1.0"},
    "capabilities":{"tools":{},"resources":{},"prompts":{}}
  }
}

2. Discover Tools

POST /mcp
{"jsonrpc":"2.0","id":2,"method":"tools/list"}

→ 200 OK
{
  "jsonrpc":"2.0","id":2,"result":{"tools":[
    {"name":"get_today",      "description":"Today's report (paid)"},
    {"name":"get_sample_report", "description":"Yesterday's report (free, try before you buy)"},
    {"name":"list_available", "description":"All report dates (free)"},  ]}
}

3. Call get_today (Paid)

POST /mcp
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_today"}}

→ 402 Payment Required
X402-Version: 2
X402-Network: eip155:8453
X402-Scheme: exact
X402-Asset: USDC
X402-Amount: 0.10
X402-PayTo: 0x3314b7f8F318987C7Af05122db895a0E41f88c09
X402-Asset-Address: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

{
  "jsonrpc":"2.0","id":3,
  "error":{
    "code":-32000,
    "message":"Payment required",
    "data":{
      "x402":{
        "version":2,
        "accepted":[{
          "scheme":"exact",
          "network":"eip155:8453",
          "amount":"100000",
          "asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "decimals":6,
          "payTo":"0x3314b7f8F318987C7Af05122db895a0E41f88c09",
          "extra":{"name":"USD Coin","version":"2"},
          "maxTimeoutSeconds":3600
        }],
        "facilitatorUrl":"https://elsas.it",
        "docsUrl":"https://elsas.it/docs"
      }
    }
  }
}

Pricing

One paid tool: get_today on Base (eip155:8453). Everything else is free. No accounts. No subscriptions. Pay per request.

Payment-Signature Format

To pay, your agent must send a Payment-Signature header with each paid request. The value is a Base64-encoded JSON object.

Payment-Signature: eyJzY2hlbWUiOiAiZXhhY3QiLCAi...

Decoded structure:
{
  "scheme": "exact",
  "network": "eip155:8453",
  "amount": "100000",
  "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "decimals": 6,
  "payTo": "0x3314b7f8F318987C7Af05122db895a0E41f88c09",
  "extra": {"name": "USD Coin", "version": "2"},
  "maxTimeoutSeconds": 3600,
  "signature": "0x...",
  "from": "0x...",
  "nonce": "...",
  "timestamp": 1718000000
}

Signature: EIP-712 typed data sign over the payment payload. Your agent signs with its wallet private key — keys never leave the agent.

Verification: The facilitator (self-hosted) verifies the signature, checks the on-chain USDC balance, and confirms the transfer is valid. All of this is handled automatically by x402 client libraries.

How to Pay (for AI Agents)

Elsas uses x402 — an open payment protocol that lets agents pay with stablecoins directly in HTTP. No API keys, no signup.

TypeScript (npm)

import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";

const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const wallet = createWalletClient({ account, chain: base, transport: http() });

const client = new x402Client();
registerExactEvmScheme(client, { signer: wallet });
const fetchWithPayment = wrapFetchWithPayment(fetch, client);

// Call get_today — payment handled automatically
const res = await fetchWithPayment("https://elsas.it/mcp", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/call",
    params: { name: "get_today" }
  })
});
const data = await res.json();

Python (pip)

from x402 import x402Client
from web3 import Web3

client = x402Client(
    private_key=os.environ["PRIVATE_KEY"],
    rpc_url=os.environ["BASE_RPC_URL"]
)

# Payment header is generated automatically
headers = client.get_payment_headers(
    url="https://elsas.it/mcp",
    method="POST",
    body='{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_today"}}'
)

import requests
res = requests.post("https://elsas.it/mcp",
    headers={**headers, "Content-Type": "application/json"},
    json={"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_today"}}
)

What your agent needs

Free Tools

Resources

Prompts

Report Structure

Three categories per daily report:

Every item includes: why_it_matters, sources, importance (1–5).

Machine-readable Discovery

Schedule

Reports generated automatically at 06:00 CET daily.

./back