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 | |||
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/haiyunsky/hpsilab-quant-finance-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server