Broker Analysis MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BROKER_ANALYSIS_HOME | No | Directory holding hooks.json, alerts/*.jsonl and charts/ | ~/.broker-analysis |
| BROKER_ANALYSIS_WEBHOOK_ALLOW | No | URL prefix of allow-listed webhook targets; webhooks are off without it |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| risk_metricsA | Risk and performance of one security or index from daily total-return prices. Returns CAGR, close-to-close and range-based volatility (Garman-Klass, Parkinson, Rogers-Satchell), Sharpe with its standard error, Probabilistic Sharpe Ratio, Sortino, Omega, maximum drawdown, CDaR, Calmar, historical and Cornish-Fisher one-day VaR and expected shortfall. With a benchmark ticker (converted to the security's currency) also daily beta and correlation, Bloomberg-style beta (two years of weekly returns, adjusted 0.67 raw + 0.33), Jensen's alpha, Treynor, M2, information ratio and tracking error, and Morningstar-style up and down capture on monthly returns. period: 1y, 2y, 3y, 5y, 10y or max. risk_free_annual as a decimal (0.03 = 3%). |
| technical_indicatorsA | Snapshot of standard technical indicators with adjustable parameters: close, two SMAs with the price's distance from each, RSI, MACD, Bollinger bands, ATR in currency and as % of the close, 52-week high and low with distances. Keys carry the period (sma50, rsi14, atr14). Use a period long enough for the slow SMA. For custom indicators, expressions, conditions or a chart use custom_analysis. |
| fundamental_ratiosA | Ratios from the latest annual statements (USMx accounting and financial ratios sheet):
valuation (P/E, EV/EBITDA, EV/EBIT, P/B, P/S, FCF yield), profitability and DuPont (ROE = net
margin x asset turnover x equity multiplier, ROA, ROIC, margins), turnover (receivables,
inventory, days sales/inventory/payables, cash conversion cycle), liquidity (current, quick,
cash ratios, operating cash flow coverage, working capital), leverage and coverage, payout.
With risk_free_annual and equity_risk_premium (decimals, from the analyst) also CAPM cost of
equity, WACC, EVA and unlevered beta; beta defaults to Yahoo's. Also the Piotroski F-score
(financial strength, 0-9), Altman Z and Z'' (distress) and Beneish M-score (earnings
manipulation), with their components in |
| peer_comparisonA | Fundamental ratios and scores for several companies side by side (2 to 10 tickers), for relative valuation within one sector. Failed tickers are reported, not dropped silently. Score components and their inputs are left out: call fundamental_ratios for one company. |
| etf_analysisA | ETF cost and replication quality: TER, tracking difference (fund minus benchmark, annualised) and tracking error against a benchmark ticker, which is converted to the fund's currency. Prefer a total-return index or a reference ETF on the same index. |
| list_indicator_catalogA | Parametric building blocks for custom_analysis and create_hook: every catalog indicator with its typed parameters (default, min, max), outputs and pane; the functions allowed in expressions and conditions; the expression syntax. |
| custom_analysisA | User-defined technical analysis on one ticker, with an optional chart. indicators: catalog indicators with parameters, e.g. [{"id": "ema20", "fn": "ema", "params": {"n": 20}}, {"id": "rsi14", "fn": "rsi"}, {"id": "bb", "fn": "bollinger", "params": {"n": 20, "k": 2}}] series: derived series by expression, e.g. [{"id": "dist", "expr": "close / bb.lower - 1"}] conditions: true/false rules evaluated on every bar, e.g. [{"name": "Oversold in uptrend", "when": "rsi14 < 30 and close > sma200"}, {"name": "Golden cross", "when": "crosses_above(sma50, sma200)"}] For each: active now, number and dates of events, and forward returns after events against all bars (5 and 20 sessions) with a t statistic. levels: horizontal lines, e.g. [{"price": 25.5, "label": "support"}]. Returns JSON with last values and condition reports, plus the PNG chart when chart is true. Call list_indicator_catalog first to see indicators, parameters and functions. |
| create_hookA | Save a condition hook: when the condition fires on a new bar, a JSON event is delivered. action: {"type": "file", "target": "alerts_name"} appends JSON lines on the server, or {"type": "webhook", "target": "https://..."} posts JSON (only to prefixes the operator allowed). Past events are not replayed. Hooks are evaluated by run_hooks or the broker-analysis-hooks command (schedule it with cron). Analysis alerts only: nothing is ever traded. |
| list_hooksB | Saved condition hooks with their condition, action and last delivered event. |
| run_hooksA | Evaluate every saved hook now and deliver the events newer than each hook's last one. |
| delete_hookC | Delete a saved hook by id. |
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 11 tools
Most tools target a clearly distinct analysis domain (ETF cost quality, risk/performance, standard technicals, custom expressions, fundamentals, peer comparison) plus a self-contained hook lifecycle. The main fuzziness is technical_indicators vs custom_analysis, which is largely a subset relationship, and slight overlap between etf_analysis and risk_metrics on tracking error/beta; descriptions explicitly redirect between them, which mitigates it.
Two predictable patterns coexist: noun_phrase report tools (etf_analysis, risk_metrics, technical_indicators, fundamental_ratios, peer_comparison, custom_analysis) and verb_noun hook tools (list_hooks, create_hook, run_hooks, delete_hook, list_indicator_catalog). The split is semantically motivated and readable, though not a single uniform verb_noun scheme.
11 tools is well within the sweet spot and every tool maps to a distinct capability: six analysis endpoints, one catalog/reference tool, and four hook CRUD/execution tools. Nothing feels padded or missing at the count level.
The hook lifecycle (create, list, run, delete) plus a broad analysis surface covers the stated domain with no dead ends for typical workflows. Minor gaps: no update/edit hook (must delete and recreate) and no way to inspect delivered event history beyond each hook's last event.