MCP server for LLM-driven VARMA (Vector ARMA) analysis with exact maximum-likelihood estimation, forecasting, and diagnostics. Multivariate counterpart of ART's univariate Box-Jenkins MCP.
Server has 10 well-named, domain-specific tools with clear descriptions (avg 180 chars, within baseline 194). All tools have input schemas with typed parameters and descriptions. However, output schemas are NOT documented, LLMs cannot predict return structure for downstream chaining. Parameter descriptions lack format constraints (e.g., 'freq = obs/year (1/4/12)' is in description but not enforced as enum). No error handling guidance. Sentinel values (-99, -1) for parameter overrides are undocumented and confusing. Missing idempotency/destructiveness hints on state-modifying tools (load_data, confirm_and_estimate).
Run ART's univariate identification per component; save characteristics (λ, d, seasonality, orders) to session and derive joint consensus (λ, d, deseason). This is the SEED that drives all downstream transformations.
Fit a VARMA(p,q) model by exact maximum-likelihood estimation using the seed transformation. Stores the fitted model in session for downstream diagnostics and forecasting.
Compute cross-correlation matrices (CCM) between all pairs of series at lags 0 to max_lag. Returns lag at which correlations become negligible (suggests MA order q).
Run model adequacy diagnostics: Hosking Q-test for residual autocorrelation and Jarque-Bera test for multivariate normality. Returns test statistics and p-values.
Generate point forecasts and 95% confidence bands for all series h periods ahead. Returns forecasts in native level units (not transformed) using the fitted model.
Search a grid of (p, q) orders using AIC/BIC/HQ information criteria. Returns ranked candidates and a reasoned recommendation based on the seed transformation.
Output schemas not documented. LLMs cannot predict return structure (e.g., what fields does cross_correlation_matrices return? Is it a matrix, a dict, a list of dicts?). This breaks tool chaining and forces agents to guess.
Sentinel parameter values (-99, -1, <-90) used to mean 'use seed value' are undocumented and confusing. LLMs will not understand that passing -99 for 'lam' means 'ignore this and use the seed'. Should use explicit enum or separate boolean flag like 'use_seed_lam: true'.
No error handling guidance. Tools lack recovery hints (e.g., 'If characterize_series fails, check that data has at least 2 series' or 'If confirm_and_estimate fails to converge, try reducing max_p/max_q'). Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Compute orthogonalized impulse response functions (OIRF) showing the dynamic response of each series to a one-standard-deviation shock in each innovation.
Load the m ORIGINAL (untransformed) series into the session under `name`. Provide EITHER `path` (an .xlsx/.xls Excel or a .csv, one column per series, optional header row) OR `values_json` (a JSON list of rows). freq = obs/year (1/4/12); start = (start_year, start_period). series_names = optional comma-separated labels. Do NOT pass pre-transformed or pre-differenced data.
Compute partial autoregression matrices (Tiao-Box method) to identify AR order p. Returns the last lag with significant cross-variable effects.
Compute forecast error variance decomposition (FEVD) showing the proportion of forecast error variance in each series attributable to shocks in each innovation.
State-modifying tools (load_data, confirm_and_estimate) lack destructiveness hints. No indication that load_data overwrites session state or that confirm_and_estimate replaces the fitted model. Agents cannot reason about side effects.
Parameter 'freq' accepts 1/4/12 but is not declared as enum. Description says '(1/4/12)' but LLMs may pass 2, 6, or other values. Should be enum: [1, 4, 12].