Gold Data MCP Server
Connect any AI assistant to live gold data. Five read-only tools covering spot price, daily history, the intraday series XAUS records itself, central bank reserves and multi-asset comparisons. No API key, no account, no rate limits.
Connect in one line
The server lives at a single URL. There is no key to request, no OAuth flow and no sign up, so most clients need nothing beyond the address itself.
https://xaus.com/mcp
Most desktop assistants read a JSON config file. Add XAUS as a remote server:
{
"mcpServers": {
"xaus": {
"url": "https://xaus.com/mcp"
}
}
}To check the connection by hand, send the handshake a client sends first. The Accept header must list both media types, which is a protocol requirement rather than a quirk of this server:
curl -X POST https://xaus.com/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize", "params":{"protocolVersion":"2025-06-18","capabilities":{}, "clientInfo":{"name":"curl","version":"1"}}}'
Then list the tools over the same connection:
curl -X POST https://xaus.com/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
What the tools do
Five tools, all read-only. Each one is a thin adapter over the public XAUS REST API, so a tool result contains exactly what the matching endpoint returns, provenance included. Call tools/list for the machine-readable schemas.
| Tool | What it returns | Arguments |
|---|---|---|
| get_gold_price | Live XAU/USD spot price, plus silver, the gold/silver ratio, tokenized gold (XAUT, PAXG) and Bitcoin comparisons. | currency ISO 4217 code, default USD unit oz · gram · kg, default oz |
| get_gold_history | Up to five years of daily closes with 52 week high and low, trading ranges and period returns. | range for example 1m, 6m, 1y, 5y |
| get_gold_intraday | The price series XAUS records itself, sampled every two minutes from the live quote and retained for 14 days. First-party, not republished from another vendor. | symbol xau · xag, default xau hours 1 to 48, default 24 |
| get_central_bank_reserves | Official gold holdings in metric tonnes, ranked, with month over month change and the IMF reporting month behind each figure. | country optional name filter |
| compare_gold_to_asset | OHLCV series for gold alongside another asset, for relative performance questions. | symbol required: silver, btc, sp500, nasdaq, dxy, eurusd, oil, platinum, palladium range for example 1m, 1y, 5y |
A missing price is an answer
XAUS never simulates a number. Every tool result carries the same data_state object the REST API returns, so a model can tell the difference between a live figure and a cached one without guessing:
| data_state.status | What it means | What the tool does |
|---|---|---|
| fresh | The price came straight from the upstream source. | Returns the figure with its timestamp. |
| stale | The upstream source is down; this is the last real price XAUS saw. | Returns it, labelled stale in the text, with its age in seconds. |
| unavailable | The upstream source is down and there is no cached price. | Says so plainly. No number is invented and no protocol error is raised. |
data_state describes freshness at the moment the response was generated. If your client fetches through a caching layer, validate updated_at against the current time yourself.
Protocol details
| Property | Value |
|---|---|
| Protocol versions | 2025-11-25 back to 2024-10-07, negotiated during initialize. You do not need to pick one: your client sends what it speaks and the server agrees on the best match. |
| Transport | Stateless Streamable HTTP, JSON-RPC 2.0 over POST. Built on the official MCP SDK, so protocol handling is not hand-rolled here. |
| Methods | The standard set: initialize · tools/list · tools/call |
| Sessions | None. The server runs stateless, so each request is independent and no session id is issued. |
| Authentication | None. The data is public and read-only, so there is nothing to authorize. |
| Verbs | POST only. GET returns 405 rather than opening a streaming connection a serverless function cannot hold open. |
| Required headers | Content-Type: application/json and an Accept listing both application/json and text/event-stream. A request missing either media type is answered 406 by the protocol layer. |
| Rate limit | 120 requests per minute per IP. Generous for a conversation, tight enough to stop a runaway retry loop. |
| CORS | Fully open. You can call the server from browser JavaScript. |
Limits and fair use
Price data is a different matter and should not be cached for long. The spot quote refreshes roughly every 30 seconds. For high-volume commercial use, get in touch via the contact page.
Prices are indicative mid-market rates, not tradable quotes, and nothing here is financial advice. Sources and methodology are documented on the about page.