Skip to content

xeonvs/DDR-Price-MCP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAM Prices MCP Server

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.

Features

  • 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 statsmodels is unavailable.
  • Memory.csv tooling for filtering by memory type and exploring historical costs.
  • Exposes results in CSV/JSONL for downstream analysis.

Requirements

  • Python 3.10+ recommended.
  • Dependencies: see requirements.txt (mcp, requests, matplotlib; statsmodels optional but recommended).

Installation

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Configuration

  • RAM_MCP_DB_PATH: path to SQLite cache (default ~/.cache/ram-mcp/prices.sqlite).
  • RAM_MCP_DEFAULT_PRODUCT_ID: default memorys.com product ID (default 100227).
  • TTLs: RAM_MCP_BASEPAGE_TTL_HOURS, RAM_MCP_CURQ_TTL_HOURS, RAM_MCP_OLDQ_TTL_DAYS.
  • MCP_TRANSPORT: stdio (default) or streamable-http for HTTP transport.

Running the server

python ram_prices_mcp_server.py           # MCP_TRANSPORT=stdio
# or
MCP_TRANSPORT=streamable-http python ram_prices_mcp_server.py  # exposes an HTTP MCP endpoint

Server logs go to stderr; do not rely on stdout in MCP clients.

Module layout

  • 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.

Key MCP tools

  • 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).

Example workflows

# 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.csv

Client configuration examples (mcp.json)

LM 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"
      }
    }
  }
}

Testing & linting

  • Run unit tests: pytest.
  • Use ram_validate, ram_verify_sorting, and ram_integrity_check after refreshes to sanity-check data.
  • Suggested linting: ruff or flake8; aim for zero warnings.

Data sources

Contributing

  • See AGENTS.md for contributor guidelines (structure, style, PR expectations).
  • Keep the user agent stable and honor TTLs to avoid hammering memorys.com.

About

Lightweight Model Context Protocol (MCP) server that caches and serves weekly DDR/DRAM memory price series

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages