Integration · Remote MCP · xAI

Grok-ready website intelligence in one line

Grok supports Remote MCP tools. Santos publishes a public MCP server over Streamable HTTP. Point Grok at it and seven website-intelligence tools appear in the model’s tool list — no account, no API key, no server to run. Free previews need no wallet. Paid tools return a canonical x402 request that settles in USDC on Base, and only on success.

Add the server

Register the endpoint as a Remote MCP tool in the xAI SDK. Grok performs discovery itself — it calls tools/list, reads the strict input schemas, and decides when to invoke. Nothing else is required to get the tools in front of the model.

from xai_sdk.tools import mcp

tools = [
    mcp(
        server_url="https://api.santosautomation.com/mcp",
        server_label="santos",
    )
]

The server_labelis how the tools are namespaced in the model’s context; santos keeps traces readable. Verify the same list the model sees, from your own shell:

curl -X POST https://api.santosautomation.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Ask Grok to use it

Nothing else to configure. Paste this into Grok with the server registered — it audits this very page, so you can check the answer against what is in front of you.

audit https://www.santosautomation.com/integrations/grok with the Santos tools.

Grok picks audit_website_preview on its own — a free tool, so no wallet is involved — and returns scores across the four dimensions, the individual pass/fail checks, and prioritized fixes. If that comes back, your wiring is correct and everything else on this page is a variation on it.

What Grok sees

Seven tools. The three free previews execute and return a full result inline. The four paid tools validate the target and return the canonical x402 HTTP request — they never move funds themselves.

ToolCostBehavior
audit_website_previewFreeRuns a Quick Intelligence Audit and returns the report inline
extract_page_markdownFreeReturns one page as clean Markdown with title, links, and word count
extract_structured_dataFreeReturns JSON extracted against your own JSON Schema, re-validated before return
audit_agent_readiness$0.075Returns the x402 handoff for the full Agent Readiness audit
feed_parse$0.003Returns the x402 handoff for RSS / Atom / JSON Feed normalization
link_map$0.003Returns the x402 handoff for a categorized link map
summarize$0.033Returns the x402 handoff for a structured page summary

All prices are USDC on Base mainnet (eip155:8453). The three free previews share one quota: one call per day per identity.

That identity matters when Grok is the caller. Without a token the quota is keyed on the calling IP — and a hosted agent reaches this server from xAI infrastructure, so a single daily call is shared by every Grok user at once. Pass a token and the quota moves onto that individual user instead. Every free tool accepts one:

# once per user — 6-digit code by email, token valid 30 days
curl -X POST https://api.santosautomation.com/api/leads/verify/request \
  -H 'Content-Type: application/json' \
  -d '{"email":"you@example.com","url":"https://example.com"}'

curl -X POST https://api.santosautomation.com/api/leads/verify/confirm \
  -H 'Content-Type: application/json' \
  -d '{"email":"you@example.com","code":"123456"}'

# then pass it as a tool argument
{"name":"audit_website_preview","arguments":{"url":"https://example.com","token":"<token>"}}

An invalid token is rejected outright rather than silently falling back to the shared IP allowance. For anything beyond evaluation, pay per call — there is no quota on the paid endpoints.

Start free, no wallet

Ask Grok to audit a URL and it will reach for audit_website_preview on its own. That call executes end to end and returns scores, pass/fail checks, and remediation guidance inline — no payment, no wallet, no configuration beyond the one line above. Same for extract_page_markdown and extract_structured_data. This is the fastest way to confirm the wiring works before a key is ever involved.

Then pay per call

Paid tools need a funded EVM wallet holding USDC on Base mainnet. Fund a dedicated key with only what you expect to spend — never a treasury or personal key. There is still no account and no API key: authorization is the signed payment itself, carried in the HTTP request. A failed call is never charged.

The handoff pattern

This is the part worth understanding. A paid MCP tool does not settle payment. It validates the target, then returns the exact HTTP request to pay for — method, URL, price, network, and protocol. Your agent, or a thin wrapper around it, performs the settlement. Santos never holds a key of yours and never signs on your behalf.

# tools/call audit_agent_readiness — returns terms, moves no funds
Grok → santos.audit_agent_readiness(url)
← canonical x402 request + price + network
→ your wrapper retries that URL with a PAYMENT-SIGNATURE header
← 200 · versioned evidence + PAYMENT-RESPONSE receipt

The tool result comes back on MCP’s error channel — isError: true with one text block. That is deliberate: a payment-required result is not a finished answer, and signalling it as an error keeps the model from reporting a price quote as though it were an audit. The text names the price, the exact URL to pay for, and the free preview:

{
  "isError": true,
  "content": [
    {
      "type": "text",
      "text": "PAYMENT_REQUIRED: Agent Readiness costs $0.075 USDC per successful
               audit on Base mainnet via x402 v2. Request
               https://api.santosautomation.com/api/agent-readiness?url=https%3A%2F%2Fexample.com%2F&depth=quick
               without a signature to receive PAYMENT-REQUIRED terms, then sign and
               retry with PAYMENT-SIGNATURE. Free preview: GET
               https://api.santosautomation.com/api/agent-readiness/demo?url=https%3A%2F%2Fexample.com%2F
               (1/day per IP, shared quota, same result shape)."
    }
  ]
}

Settling it is a single wrapped fetch against that URL. Any x402 v2 client works; the payment step is identical to the one in the CI recipe.

// Any x402 v2 client settles the URL named in the handoff text.
import { privateKeyToAccount } from "viem/accounts";
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";

const fetchWithPay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{
    network: "eip155:8453",
    client: new ExactEvmScheme(privateKeyToAccount(process.env.X402_PRIVATE_KEY)),
  }],
});

// Build the same URL the handoff names — the 402, signing, and retry are automatic.
const target = "https://example.com";
const res = await fetchWithPay(
  `https://api.santosautomation.com/api/agent-readiness?url=${encodeURIComponent(target)}&depth=quick`
);
const report = await res.json();
console.log(report.website_intelligence_score);

Why this works

MCP does the discovery

Tools carry strict JSON Schemas for both input and output, so Grok selects and calls them without glue code or prompt scaffolding. Registered in the official MCP Registry as com.santosautomation/site-audit.

x402 removes onboarding

Payment travels inside the HTTP request. No signup, no key rotation, no invoice, no per-seat plan — an autonomous agent can transact without a human provisioning anything first.

Settlement only on success

Funds move only on a 2xx response. A timeout, an unreachable target, or a target that fails validation costs nothing, so a retrying agent cannot burn money on failures.

Applicability-aware scoring

An informational site is not penalized for lacking an API, MCP, or machine commerce. Checks that do not apply are marked non-applicable rather than failed, and every report states its own evidence coverage.

Verifiable output

Every report is HMAC-SHA256 signed and independently checkable at /verify. An agent can prove a score came from Santos and was not altered in transit.

We hold ourselves to it

Santos scores 100/100 on its own Agent Readiness audit — first of 311 public reports, against an index average of 59.6. The report is public, signed, and re-runnable.

Machine surfaces

Everything Grok needs to reason about this service is public and versioned. Current release and live status are always machine-readable.