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. The free preview needs 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. Note the endpoint travels inline in each request — there is no connector to install and nothing persisted on an account, which is the main way this differs from the Claude setup, where the server is registered once and then available to every conversation. 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. One free preview executes and returns a full result inline. The other six 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 — 1/day per calling IP
extract_page_markdownPaidReturns the x402 handoff for /v1/extract — one page as clean Markdown with title, links, and word count
extract_structured_dataPaidReturns the x402 handoff for POST /v1/extract/structured — 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 free preview is one call per day per calling IP.

That matters when Grok is the caller: a hosted agent reaches this server from xAI infrastructure, so that single daily call is shared by every Grok user at once. Treat the preview as a sample of the output, not as capacity — for anything beyond evaluation, pay per call. There is no quota on the paid endpoints.

Try it without a 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 — one audit per day per calling IP. 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 and the exact URL to pay for:

{
  "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."
    }
  ]
}

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.