That persistence is the difference between a quote lookup and something you can actually ask about your holdings — the portfolio store survives restarts and gets enriched with live prices on every read. If you deploy it anywhere public, set the auth mode deliberately: the tools read a portfolio you own, and `none` is a real option in the configuration.
A market-data server that keeps state. Beyond quotes and history it holds a portfolio or watchlist on disk, values it against live prices, and evaluates per-ticker alert thresholds — so "how is my position doing" is one call rather than a series of lookups the model has to assemble.
- A normalised live quote with price, change, market cap, volume, exchange and timestamp — `get_stock_quote`
- Chart-ready OHLCV history over a period and interval you choose — `get_price_history`
- A company profile with key valuation fields where available — `get_company_overview`
- Your positions and watchlist returned with live quote enrichment and a portfolio market-value summary, and symbols added or removed from the persistent store — `get_portfolio`, `add_stock`, `remove_stock`
- Price thresholds configured per ticker and evaluated against the portfolio's rules — `set_stock_alert`, `get_portfolio_alerts`
- Financial headlines for a ticker or a query, and a context summary built for a downstream model — `get_stock_news`, `financial_context`
Run it locally over stdio with `MCP_TRANSPORT=stdio`, the default for Claude Desktop and other local clients, or deploy it as a remote endpoint at `https://<host>/mcp` where the default transport is `streamable-http`. Public deployments need authentication: `MCP_AUTH_MODE=static` with a strong secret in `MCP_ACCESS_TOKEN`, or `MCP_AUTH_MODE=oauth` with `OAUTH_ISSUER_URL`, `OAUTH_AUDIENCE` and `OAUTH_REQUIRED_SCOPES` — OAuth client credentials belong in the client, not on the server. One-click deploys are provided for Azure Container Apps, Render and Google Cloud Run, with a Cloudflare Worker available as an HTTPS proxy in front.
One command plus a key — mcp install server.py --name "Financial MCP Server", then supply credentials
