MCP server

Ask your AI assistant about gold, silver, platinum, palladium and copper prices, derived metrics, country monetary data and your own portfolio. The Bullion API MCP server is read-only: it can look things up and can never change anything.

A 50-second tour with music and no speech: an agent asks whether China’s central bank is still adding gold and answers from Bullion API with the figure, date and source; it compares central-bank holdings, adds rates and price context, shows the read-only approval screen and the matching REST response, then how to connect. Download the MP4.

Connect

The server is at https://api.bullionapi.dev/mcp and speaks Streamable HTTP with OAuth 2.1. Add that address to any agent that supports remote MCP servers with sign-in, such as Claude, ChatGPT, Cursor, VS Code or Gemini CLI. The agent registers itself the first time it connects; you then sign in with your Bullion API account and approve exactly what it may read.

The approval page shows the agent's name as unverified, because any agent can choose its name. Check where you will be sent next and approve only a connection you started.

Example: Claude Code

Shell
claude mcp add --transport http bullion https://api.bullionapi.dev/mcp

Then run /mcp, choose bullion and sign in. Approve Stay connected to stay connected without signing in again every few minutes.

What you approve

PermissionWhat it allows
Market data
market:read
Read precious-metals market prices and related market data.
Macroeconomic data
macro:read
Read macroeconomic indicators and time series.
Your private portfolio
portfolio:read
Read your account’s private portfolio and transaction history. This does not allow changes.
Stay connected
offline_access
Keep this connection working for up to 30 days without signing in again. Access to your data is still renewed every five minutes.

Access tokens last five minutes and are renewed automatically while the connection is active. Withdrawing your approval ends the connection immediately.

Tools

ToolDescriptionPermission
get_metal_priceLatest cached spot price for one metal, in a currency and weight unit (default USD per troy ounce). One dated observation; cached, not real-time.market:read
get_metal_price_historyCached weekday closing prices for one metal as a dated time series. start is required; end defaults to today. Suited to a table or line chart.market:read
get_metal_changePrice change for one metal over a period (1d, 1w, 1m, 1y) or between a start and end date: start and end prices, the change, and change_percent relative to the start price.market:read
get_gold_caratGold price per gram for each karat (24k down to 6k) in a currency, for the latest cached day or a given date.market:read
get_gold_silver_ratioGold-to-silver price ratio as a dated series. Give start and end together for a range, or neither for the latest value.market:read
get_gold_moving_averageSimple moving average of gold closes (50 or 200 closes), per troy ounce, as a dated series. start, end and window are required.market:read
get_gold_volatilityAnnualised volatility of 30 daily gold returns as a dated series of fractions (0.15 means 15%). start and end are required.market:read
get_gold_drawdownGold drawdown from its running peak as a dated series of fractions at or below zero (-0.25 means 25% below the peak). start and end are required.market:read
get_central_bank_reservesCentral-bank reserves. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
get_central_bank_goldCentral-bank gold holdings. Omit country for a compact summary of the latest holdings and value of every covered country; give a country (and optional start and end) for its history, stock changes and methodology.macro:read
get_inflationInflation by country and basis (year_over_year, breakeven, implied, expectation). Omit country for the latest value of every covered country.macro:read
get_policy_ratesCentral-bank policy rates. Omit country for the latest rate of every covered country; give a country (and optional start and end) for its history.macro:read
get_bond_yieldsGovernment bond yields by tenor (2y, 5y, 10y, 30y) and basis. Omit country for the latest yields of every covered country.macro:read
get_money_supplyMoney supply by country. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
get_central_bank_balance_sheetCentral-bank balance-sheet series. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
get_government_debtGovernment debt. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
get_government_borrowingGovernment borrowing. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
get_debt_interestGovernment debt interest costs. Omit country for the latest value of every covered country; give a country (and optional start and end) for its history.macro:read
list_countriesCountries that have per-country datasets, with which datasets each has. Use it to discover where data exists before querying.macro:read
get_countryWhich datasets exist for one country or aggregate code such as EA (euro area).macro:read
list_symbolsThe metals and currencies this service supports, in the configured serviceable catalogue.market:read
get_portfolioSummary of the connected account's portfolio: holdings in grams, cost basis, realised and unrealised profit and loss, valued at the latest cached spot price. Takes no account id; it always reads the connected account.portfolio:read
get_portfolio_lotsOpen lots (purchases not yet sold) with remaining quantity and cost, for the connected account only.portfolio:read
get_portfolio_gainsRealised gains and losses for one calendar year or one UK tax year, grouped by capital-gains status, for the connected account only. Give exactly one of calendar_year or uk_tax_year.portfolio:read
list_portfolio_transactionsThe connected account's purchases and sales, paged with limit and cursor (next_cursor is null on the last page). Filter by type, form, capital-gains status or one year.portfolio:read
get_portfolio_transactionOne transaction by id for the connected account only, with its lots and allocations. Use an id from list_portfolio_transactions.portfolio:read

Ready-made prompts

  • Gold overview (gold_overview): Latest gold price with recent change, volatility and drawdown.
  • Compare precious metals (compare_metals): Gold, silver, platinum and palladium side by side, with the gold-silver ratio.
  • Country macro snapshot (macro_snapshot): Inflation, policy rate, bond yields, money supply and government debt for one country.
  • Portfolio review (portfolio_review): My holdings, current value, gains and recent transactions.

Example

Plain text
get_metal_price_history {"metal":"gold","start":"2026-09-28","end":"2026-10-05"}
markdown
**Get metal price history**: gold, USD, 2026-09-28 to 2026-10-05.

Gold spot price (daily, weekday_close, per troy_oz)

| Date       | Value         |
|------------|---------------|
| 2026-09-28 | 3499.67053894 |
| 2026-09-29 | 3499.50566282 |
| ...        | ...           |

Cached observations, not real-time quotes.

Every result also carries the exact data as structured JSON. Prices and quantities are decimal strings, never rounded floats.

Credits, privacy and limits

  • Market and macro calls use the same credits and plan limits as the REST API. Connecting, signing in and listing tools are free.
  • Portfolio tools read only the account that signed in, and never another account.
  • Each connection is limited to 60 requests a minute.
  • Data is cached, not real-time. Prices are informational only and are not financial advice.
  • When no data is stored for a request, the tool returns no_data rather than an estimate.