Lightweight Model Context Protocol (MCP) server that caches and serves weekly DDR/DRAM price series from memorys.com, plus historical memory technology data from hblok.net. It scrapes per-quarter pages, stores history in SQLite, and exposes tools for refresh, validation, analytics, forecasting, and chart rendering.
- Discovers available quarters and caches price history in SQLite (no re-download of old data unless forced).
- Tools for refresh, integrity checks, validation, resampling, returns, rolling stats, regime detection, forecasting (naive/ETS/ARIMA/trend), and PNG chart rendering.
- Forecasts fall back to naive when
statsmodelsis unavailable. - Memory.csv tooling for filtering by memory type and exploring historical costs.
- Exposes results in CSV/JSONL for downstream analysis.
- Python 3.10+ recommended.
- Dependencies: see
requirements.txt(mcp,requests,matplotlib;statsmodelsoptional but recommended).
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRAM_MCP_DB_PATH: path to SQLite cache (default~/.cache/ram-mcp/prices.sqlite).RAM_MCP_DEFAULT_PRODUCT_ID: default memorys.com product ID (default100227).- TTLs:
RAM_MCP_BASEPAGE_TTL_HOURS,RAM_MCP_CURQ_TTL_HOURS,RAM_MCP_OLDQ_TTL_DAYS. MCP_TRANSPORT:stdio(default) orstreamable-httpfor HTTP transport.
python ram_prices_mcp_server.py # MCP_TRANSPORT=stdio
# or
MCP_TRANSPORT=streamable-http python ram_prices_mcp_server.py # exposes an HTTP MCP endpointServer logs go to stderr; do not rely on stdout in MCP clients.
ram_prices_mcp_server.py: MCP tool definitions and entrypoint only.ram_mcp/config.py: configuration/constants and defaults.ram_mcp/storage.py: SQLite cache and persistence.ram_mcp/http_client.py: HTTP session/retry logic.ram_mcp/memorys.py: memorys.com refresh/parsing.ram_mcp/memory_csv.py: memory.csv ingestion and cache.ram_mcp/series.py: time-series transforms/analytics.ram_mcp/forecast.py: ETS/ARIMA/trend forecasting.ram_mcp/charts.py: PNG chart rendering.ram_mcp/validation.py: input validation helpers.
ram_refresh/ram_refresh_range: refresh cache (optionally force re-download).ram_cache_status,ram_integrity_check,ram_verify_sorting,ram_validate: health checks for coverage, ordering, and data quality.ram_get_history,ram_get_series,ram_returns,ram_growth,ram_rolling_stats,ram_regime_detect: analysis helpers.ram_forecast,ram_forecast_compare: cached forecasts (naive/ETS/ARIMA/trend).ram_export: export cached points as CSV/JSONL.ram_memory_types,ram_memory_history: explore memory.csv by type/year.ram_render_price_chart,ram_render_memory_chart: PNG chart rendering (supports optional forecast overlay).
# Refresh default product (respect TTLs)
python ram_prices_mcp_server.py # start the server, then from client call:
ram_refresh
# Export cached data
ram_export export_format=csv > ddr_prices.csvLM Studio:
{
"servers": {
"ram-prices": {
"transport": {
"type": "stdio",
"command": "python",
"args": ["ram_prices_mcp_server.py"]
}
}
}
}Claude Desktop (macOS/Windows) — same stdio transport:
{
"servers": {
"ram-prices": {
"transport": {
"type": "stdio",
"command": "python",
"args": ["ram_prices_mcp_server.py"],
"env": { "RAM_MCP_DB_PATH": "C:/Users/you/.cache/ram-mcp/prices.sqlite" }
}
}
}
}HTTP client / proxy (MCP over HTTP):
{
"servers": {
"ram-prices-http": {
"transport": {
"type": "http",
"url": "http://127.0.0.1:8000"
},
"command": "python",
"args": ["ram_prices_mcp_server.py"],
"env": { "MCP_TRANSPORT": "streamable-http" }
}
}
}Generic mcpServers layout (alternate clients):
{
"mcpServers": {
"ram-prices": {
"command": "python",
"args": ["/path/to/project/ram_prices_mcp_server.py"],
"env": {
"RAM_MCP_DEFAULT_PRODUCT_ID": "100227",
"RAM_MCP_DB_PATH": "/path/to/project/prices.sqlite",
"RAM_MCP_BASEPAGE_TTL_HOURS": "12",
"RAM_MCP_CURQ_TTL_HOURS": "6"
}
}
}
}- Run unit tests:
pytest. - Use
ram_validate,ram_verify_sorting, andram_integrity_checkafter refreshes to sanity-check data. - Suggested linting:
rufforflake8; aim for zero warnings.
- memorys.com price series: https://en.memorys.com/price/ews/
- Memory technology history CSV: https://hblok.net/storage_data/memory.csv
- See
AGENTS.mdfor contributor guidelines (structure, style, PR expectations). - Keep the user agent stable and honor TTLs to avoid hammering memorys.com.