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.
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
claude mcp add --transport http bullion https://api.bullionapi.dev/mcpThen run /mcp, choose bullion and sign in. Approve Stay connected to stay connected without signing in again every few minutes.
What you approve
| Permission | What it allows |
|---|---|
Market datamarket:read | Read precious-metals market prices and related market data. |
Macroeconomic datamacro:read | Read macroeconomic indicators and time series. |
Your private portfolioportfolio:read | Read your account’s private portfolio and transaction history. This does not allow changes. |
Stay connectedoffline_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
| Tool | Description | Permission |
|---|---|---|
get_metal_price | Latest 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_history | Cached 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_change | Price 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_carat | Gold 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_ratio | Gold-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_average | Simple 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_volatility | Annualised 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_drawdown | Gold 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_reserves | Central-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_gold | Central-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_inflation | Inflation by country and basis (year_over_year, breakeven, implied, expectation). Omit country for the latest value of every covered country. | macro:read |
get_policy_rates | Central-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_yields | Government bond yields by tenor (2y, 5y, 10y, 30y) and basis. Omit country for the latest yields of every covered country. | macro:read |
get_money_supply | Money 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_sheet | Central-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_debt | Government 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_borrowing | Government 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_interest | Government 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_countries | Countries that have per-country datasets, with which datasets each has. Use it to discover where data exists before querying. | macro:read |
get_country | Which datasets exist for one country or aggregate code such as EA (euro area). | macro:read |
list_symbols | The metals and currencies this service supports, in the configured serviceable catalogue. | market:read |
get_portfolio | Summary 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_lots | Open lots (purchases not yet sold) with remaining quantity and cost, for the connected account only. | portfolio:read |
get_portfolio_gains | Realised 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_transactions | The 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_transaction | One 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
get_metal_price_history {"metal":"gold","start":"2026-09-28","end":"2026-10-05"}**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_datarather than an estimate.