HPSILab - Quant Finance MCP Server for Stock Analysis and Options Analytics
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| analyze_stockA | Run a full institutional-grade quantitative analysis for a single stock. This is the primary tool for a complete market view. It aggregates results from AI prediction, implied-volatility radar, options-pressure map, Monte Carlo simulation, and strategy backtesting into one unified signal. Use this tool when:
Prefer the dedicated sub-tools (get_iv_radar, get_monte_carlo, etc.) when you need only a specific data dimension, to reduce latency and token usage. Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "AAPL", "SPY", "QQQ". Do NOT pass company names ("Nvidia") — use official tickers only. Returnsdict with keys: symbol : str — normalized ticker signal : str — "Bullish" | "Bearish" | "Neutral" confidence_score: int — 0–100 directional confidence bullish_factors : list — evidence supporting an upward move bearish_factors : list — evidence supporting a downward move summary : str — one-sentence synthesis Notes
|
| get_iv_radarA | Retrieve implied-volatility (IV) metrics for a single stock. Use this tool when:
Do NOT use this tool if you already called analyze_stock — the IV data is included in that response. Parameterssymbol : str Exchange ticker in uppercase, e.g. "TSLA", "NVDA", "IWM". Returnsdict with keys: symbol : str — normalized ticker atm_iv : float — at-the-money implied volatility (annualized %) iv_rank : float — 0–100; ≥80 = expensive, ≤20 = cheap iv_percentile : float — historical percentile (0–100) risk_reversal : float — 25-delta risk reversal (positive = call-skew) volatility_regime: str — "Low" | "Normal" | "Elevated" | "Extreme" |
| get_option_pressureA | Retrieve options-market positioning and dealer-hedging pressure zones. Use this tool when:
Parameterssymbol : str Exchange ticker in uppercase, e.g. "AAPL", "SPY", "NVDA". Returnsdict with keys: symbol : str — normalized ticker max_pain : float — max-pain strike price gamma_wall : float — largest gamma concentration strike expected_move : float — ±expected move in dollars for nearest expiry squeeze_target: float — upside squeeze price target expiry_date : str — target expiry date (YYYY-MM-DD) pressure_zones: list — list of significant strike/OI concentration dicts |
| get_monte_carloA | Run a Monte Carlo price-path simulation for a stock over a 30-day horizon. Use this tool when:
The simulation uses a GBM (Geometric Brownian Motion) model calibrated with the stock's realized volatility and current IV. 10,000 paths are run by default. Parameterssymbol : str Exchange ticker in uppercase, e.g. "MSFT", "NVDA", "SPY". Returnsdict with keys: symbol : str — normalized ticker current_price : float — spot price at simulation start mean_price : float — expected price at horizon range_90 : dict — {"lower": float, "upper": float} 90 % CI range_68 : dict — {"lower": float, "upper": float} 68 % CI prob_above_spot: float — probability (0–1) price is above current spot prob_10pct_drop: float — probability (0–1) of ≥10 % decline distribution : dict — histogram data: {"bins": list, "frequencies": list, "kde_x": list, "kde_y": list} |
| get_ai_predictionA | Get an AI/ML directional prediction for a stock's next-session move. Use this tool when:
The prediction engine uses an ensemble of gradient-boosted trees, an LSTM, and a VQC (quantum-classical hybrid) model. Features include VIX, relative strength, Treasury rates, and options flow signals. Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "META", "QQQ". Per-ticker model accuracy varies; META and QQQ have shown above- baseline hit rates in backtests. Returnsdict with keys: symbol : str — normalized ticker prediction : str — "Up" | "Down" | "Neutral" up_probability : float — 0.0–1.0 probability of upward close confidence : float — 0.0–1.0 ensemble agreement score model_votes : dict — per-model predictions and probabilities regime : str — "Bull" | "Bear" | "Chop" market regime signal_strength : str — "Strong" | "Moderate" | "Weak" |
| get_equity_curvesA | Retrieve backtested equity curves and performance metrics for standard quantitative strategies applied to a single stock. Use this tool when:
Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "AAPL", "SPY". Returnsdict with keys: symbol : str — normalized ticker strategies : list — each item is a dict with: name : str — strategy name total_return : float — cumulative return (e.g., 0.45 = +45 %) sharpe_ratio : float — annualized Sharpe ratio sortino_ratio : float — annualized Sortino ratio max_drawdown : float — maximum peak-to-trough loss (negative) win_rate : float — fraction of winning trades (0–1) pl_ratio : float — average win / average loss equity_curve : list — daily portfolio value series |
| generate_stock_research_reportA | Generate a structured, institutional-style markdown research report for a single stock, covering all major quantitative signal sources. The report is divided into six sections:
Output is a complete markdown string (~800–1200 words) ready to render or share. Response latency is ~10–20 s due to full multi-model data aggregation. Use this tool when:
Do NOT use this tool when:
Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "TSLA", "SPY". Do NOT pass company names — use official tickers only. Returnsdict with keys: symbol : str — normalized ticker report : str — full markdown report (~800–1200 words, 6 sections) generated_at : str — ISO 8601 generation timestamp Notes
|
| generate_stock_imagesA | Generate chart image URLs for a stock: price chart, IV surface, and options flow heatmap. Use this tool when:
Note: Images are served as public URLs. They expire after 24 hours. If images do not render in your client, copy the URL and open it in a browser directly. Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "AAPL". Returnsdict with keys: symbol : str — normalized ticker price_chart_url : str — URL to candlestick + volume chart (PNG) iv_surface_url : str — URL to 3-D IV surface chart (PNG) options_flow_url: str — URL to options flow heatmap (PNG) expires_at : str — ISO 8601 expiry timestamp for the URLs |
| get_pretrade_risk_scanA | Run a pre-trade risk scan for adding a single stock to the user's tracked portfolio, covering volatility/beta/VaR/drawdown deltas, market regime, a forward return distribution, position-sizing checks, sector/symbol exposure impact, and correlation against existing holdings. Use this tool when:
Do NOT use this tool for:
Parameterssymbol : str Exchange ticker in uppercase, e.g. "NVDA", "AAPL", "SPY". Exampleget_pretrade_risk_scan("NVDA") Returnsdict with keys: symbol : str — normalized ticker asOf : str — ISO 8601 date the scan was computed regime : str — "bull" | "bear" | "chop" market regime regimeConfidence: float — 0–1 confidence in the regime classification riskDeltas : list — before/after risk metrics from adding the position, each item a dict with: label : str — e.g. "Annualized Volatility", "Beta (vs SPY)", "1-Day VaR (95%)", "Max Drawdown (1Y)" beforeValue : float — metric value for current portfolio afterValue : float — metric value after adding the position unit : str — "%" or "" (unitless, e.g. beta) higherIsRiskier : bool — whether an increase in this metric is worse distribution : dict — forward return distribution: {"bins": list, "frequencies": list, "kde_x": list, "kde_y": list} range_90 : dict — {"lower": float, "upper": float} 90 % CI on forward return (%) mean : float — expected forward return (%) threshold : float — reference return threshold used in the scan sizingChecks : list — pass/warn/fail guardrail checks, each a dict: label : str — "Volatility" | "Drawdown Risk" | "Market Exposure" | "Liquidity" status : str — "pass" | "warn" | "fail" detail : str — human-readable explanation with the thresholds used exposure : dict — portfolio concentration impact: available : bool — false if the user has no watchlist symbols to compare against bySector : list of {sector, currentPct, postTradePct, deltaPct} — empty list when available is false bySymbol : list of {symbol, currentPct, postTradePct, deltaPct} — empty list when available is false concentrationFlag : str — "pass" | "warn" | "fail" | "unknown" ("unknown" when available is false) assumedPositionWeight: float | None — None when available is false weightingMethod : str — e.g. "equal_weight_proxy" reason : str — present only when available is false; human-readable explanation (e.g. "No watchlist symbols to compare against. Add symbols to your watchlist to see portfolio exposure.") — surface this to the user instead of guessing why the section is empty correlation : dict — correlation of the new symbol to holdings: available : bool — false if the user has no watchlist symbols to compare against aggregate : dict | None — None when available is false; otherwise {avgCorrelationWithPortfolio, level, mostCorrelated: {symbol, correlation}, leastCorrelated: {symbol, correlation}} matrix : dict | None — None when available is false; otherwise {"symbols": list, "values": list[list[float]]} full pairwise correlation matrix reason : str — present only when available is false; human-readable explanation (e.g. "No watchlist symbols to compare against. Add symbols to your watchlist to see correlation.") — surface this to the user instead of guessing why the section is empty Notes
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
Each tool targets a distinct aspect of stock/options analysis: aggregated analysis, chart generation, research reports, AI prediction, backtest curves, IV metrics, Monte Carlo simulation, options pressure, and pre-trade risk scan. Even the two comprehensive tools (analyze_stock and generate_stock_research_report) are clearly differentiated by output format (JSON vs. markdown) and recommended use cases.
All 9 tools follow a consistent verb_noun pattern in snake_case: analyze_stock, generate_stock_images, generate_stock_research_report, get_ai_prediction, get_equity_curves, get_iv_radar, get_monte_carlo, get_option_pressure, get_pretrade_risk_scan. The verbs are appropriate and the naming is uniform.
With 9 tools, the server is well-scoped for quantitative stock and options analytics. The tool count covers an aggregate analysis, specific data dimensions (AI, IV, Monte Carlo, options pressure, backtest, risk scan), and presentation (charts, reports) without unnecessary overlap or bloat.
The tool set provides comprehensive coverage for stock analysis and options analytics: directional prediction, volatility analysis, options positioning, Monte Carlo simulations, strategy backtests, risk scanning with portfolio context, and visualizations. There are no obvious gaps for the stated domain.