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.
Step one
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"}'Step two
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.
Step three
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.
| Tool | Cost | Behavior |
|---|---|---|
audit_website_preview | Free | Runs a Quick Intelligence Audit and returns the report inline — 1/day per calling IP |
extract_page_markdown | Paid | Returns the x402 handoff for /v1/extract — one page as clean Markdown with title, links, and word count |
extract_structured_data | Paid | Returns the x402 handoff for POST /v1/extract/structured — JSON extracted against your own JSON Schema, re-validated before return |
audit_agent_readiness | $0.075 | Returns the x402 handoff for the full Agent Readiness audit |
feed_parse | $0.003 | Returns the x402 handoff for RSS / Atom / JSON Feed normalization |
link_map | $0.003 | Returns the x402 handoff for a categorized link map |
summarize | $0.033 | Returns 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.
Step four
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.
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);Rationale
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.
Contracts
Machine surfaces
Everything Grok needs to reason about this service is public and versioned. Current release and live status are always machine-readable.