Skip to main content

MCP server for Central Bank of Russia (CBR) data: currency rates, key rate, inflation, macro stats.

Project description

mcp-cbr-rates

A Model Context Protocol (MCP) server that exposes public Bank of Russia (Центральный банк РФ, CBR) data — currency quotes, key rate, inflation and a compact macro snapshot — to AI agents.

License: MIT PyPI GitHub release Tests Coverage Python MCP Glama

mcp-cbr-rates MCP server

mcp-cbr-rates is part of the atomno family of MCP servers focused on the Russian fintech ecosystem. It is fully open-source, requires no API keys, and is built on top of the official public CBR endpoints.


Features

  • Five high-quality MCP tools, each with a strict Pydantic schema: get_rate, history_rates, key_rate, inflation, statistics.
  • Built-in TTL (Time-To-Live) cache: 1 hour for daily quotes, 24 hours for historical series, to be polite to the source.
  • Async httpx transport with automatic retries on 5xx errors.
  • Safe XML parsing via defusedxml.
  • 50+ unit tests with respx-mocked HTTP, ≥80 % coverage.
  • No secrets, no telemetry, no third-party trackers.

Quick start

Install from PyPI (recommended)

pipx install atomno-mcp-cbr-rates
mcp-cbr-rates  # starts the MCP server over stdio

Or with uv:

uv tool install atomno-mcp-cbr-rates

Install from source

git clone https://github.com/atomno-labs/mcp-cbr-rates.git
cd mcp-cbr-rates
pip install -e .
mcp-cbr-rates  # starts the MCP server over stdio

Use with Cursor

Add the following to .cursor/mcp.json (or your global ~/.cursor/mcp.json):

{
  "mcpServers": {
    "cbr-rates": {
      "command": "mcp-cbr-rates"
    }
  }
}

Use with Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "cbr-rates": {
      "command": "mcp-cbr-rates"
    }
  }
}

On Windows the config lives at %APPDATA%\Claude\claude_desktop_config.json; on macOS at ~/Library/Application Support/Claude/claude_desktop_config.json.

Use with Claude Code

claude mcp add cbr-rates -- mcp-cbr-rates

Tools

Name Inputs Returns
get_rate char_code: str, on_date?: date CurrencyRate — single quote on the given (or latest) date
history_rates char_code: str, date_from: date, date_to: date HistoryRates — series of daily quotes
key_rate date_from?: date, date_to?: date KeyRateHistory — CBR key-rate series
inflation year_from?: int, year_to?: int InflationData — monthly year-over-year CPI in percent
statistics (none) MacroSnapshot — combined dashboard: key rate + USD/EUR/CNY + inflation

Examples in plain English:

"What was the official EUR rate on April 25, 2024?" Tool: get_rate(char_code="EUR", on_date="2024-04-25")

"Plot the daily USD-RUB rate over the last 90 days." Tool: history_rates(char_code="USD", date_from=..., date_to=...)

"Give me the latest key rate, USD/EUR/CNY, and inflation in one go." Tool: statistics()

The history_rates window is capped at 366 days; for longer periods, call the tool repeatedly.


Configuration

All settings are optional and read from environment variables:

Variable Default Description
CBR_HTTP_TIMEOUT 15 HTTP timeout in seconds for CBR calls.
CBR_CACHE_DAILY_TTL 3600 Cache TTL for daily quotes (seconds).
CBR_CACHE_HISTORY_TTL 86400 Cache TTL for historical series and SOAP responses.
CBR_LOG_LEVEL INFO Standard Python log level.

There are no API keys to configure — all CBR endpoints used here are public.


Development

git clone https://github.com/atomno-labs/mcp-cbr-rates.git
cd mcp-cbr-rates
python -m venv .venv && source .venv/bin/activate  # or .\.venv\Scripts\activate on Windows
pip install -e ".[dev]"
pytest --cov=src/mcp_cbr_rates

Layout:

apps/mcp-cbr-rates/
├── src/mcp_cbr_rates/
│   ├── server.py        # FastMCP entry point, tool registration
│   ├── tools.py         # high-level async tools with caching
│   ├── client.py        # httpx wrapper around CBR XML / SOAP / HTML endpoints
│   ├── schemas.py       # Pydantic v2 models for inputs & outputs
│   ├── cache.py         # async TTL cache
│   ├── currency_codes.py # static ISO → CBR id map (with dynamic fallback)
│   └── errors.py        # typed exception hierarchy
└── tests/               # respx-mocked unit tests + fixtures

Data sources

  • https://www.cbr.ru/scripts/XML_daily.asp — daily currency quotes.
  • https://www.cbr.ru/scripts/XML_dynamic.asp — historical currency series.
  • https://www.cbr.ru/scripts/XML_valFull.asp — currency code lookup.
  • https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx — SOAP service for the CBR key rate.
  • https://www.cbr.ru/hd_base/infl/ — monthly year-over-year inflation table.

All endpoints are read-only and free of charge.


Disclaimer

This project is not affiliated with the Bank of Russia in any way. It is an unofficial, best-effort wrapper around publicly available data. Use at your own risk; the authors disclaim any responsibility for the freshness, accuracy or applicability of the data delivered through this server.

If CBR's HTML or XML schemas change, individual tools may stop working until this package is updated. Please open an issue if you notice a regression.


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atomno_mcp_cbr_rates-0.1.2.tar.gz (30.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atomno_mcp_cbr_rates-0.1.2-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file atomno_mcp_cbr_rates-0.1.2.tar.gz.

File metadata

  • Download URL: atomno_mcp_cbr_rates-0.1.2.tar.gz
  • Upload date:
  • Size: 30.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for atomno_mcp_cbr_rates-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fe992c6bbcc33b0a742521d8e396126f38b1354d0c8f95f48230c7e90a3c563f
MD5 14d5ce4d7572d3938eaea92f52d7af23
BLAKE2b-256 e1f13d7978890672524432c2a048033f0f374c7b2392622c26862343eb0fd18d

See more details on using hashes here.

File details

Details for the file atomno_mcp_cbr_rates-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for atomno_mcp_cbr_rates-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0a639f66f950e79a062f7dc1cdfa851a1598c352d9b2abf50b54836bc4136cd5
MD5 ea32144e0818b045b1acb11b1ac8c09f
BLAKE2b-256 eb6ee215a5e289f46722708e5e47b1deaeb5ddd0a564266770e158cdac64f3ef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page