sima
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 |
|---|---|
| examplesB | The worked examples that come with sima, to see how it works in real time: each is a real analysis, from the univariate models built in art, run node by node with the same tools and pauses as any other. load_example() starts one. |
| load_exampleB | N0 for a worked example: copy its files to a working folder ( Before going on, READ its tutorial, |
| load_dataA | N0r — RAW DATA: an analyst with series and no univariate models (docs/STUDY-raw-entry.md). An Excel (.xlsx/.xls) or CSV table, one column per series in ORIGINAL levels (never transformed or differenced), a header row with the names, and optionally a first column of dates (a year, or year-period: 1972-08, 1972Q3).
|
| characterizeC | N0c — Each raw series' transformation, with art's engine and in art's order: lambda (Box-Cox, 0 or 1), d (ADF + KPSS, art's policy: one step at a time), seasonality (HAC F-test; harmonics proposed when detected) and a preliminary outlier scan (reported, not treated). Each series keeps its OWN lambda and d — no joint consensus: forcing them alike was the old sima's first fault.
|
| build_univariateB | N0u — ROUTE U from raw data (docs/STUDY-raw-entry.md): build each series' univariate model with art's engine, then climb the ladder as always (Jenkins and Alavi: the univariate models first). On each series' characterization (characterize): the orders art ranks
first, the mean (d = D = 0) or a drift kept only if |t| >= 2, a fue fit,
a residual check; It then opens the ladder session of the same name with those files (the
guion goes on): next, run_gate. Existing files are kept unless
|
| write_specsC | N0v — ROUTE V from raw data (docs/STUDY-raw-entry.md): the vector
first, as Tiao and Box (1981). No univariate models: each series gets a
fue .inp with ONLY its characterization — lambda, d, D or harmonics, the
mean when d = D = 0 — in Then: run_gate (it certifies the cast; the diagonal here is white noise, or a random walk for d = 1, not a yardstick), canonical_analysis and identify_matrices' method 1 (R_k, S_k, Tiao and Box's M(l)) on the vector. estimate(p, q) in this route writes each series' spec with a FREE AR(p)/MA(q) of its own and fits the full VARMA(p, q): the diagonal is estimated with the cross terms. evaluate compares it with univariate models built by route U's builder, for the yardstick only. Route V writes no .pre for the system: its estimates are rows of the system, not univariate optima. |
| load_preA | N0 — Start a session from the univariate models: one fue file per series.
The files are read by fue's own parser and recognised by their content. The series must share their frequency and their LAST date (BUG-2): different start dates are aligned at the end; different ends are refused. |
| run_gateB | N1 — The diagonal gate: does the joint cast reproduce the univariate models? Each series is fitted alone on the common window; the diagonal system is then evaluated at those optima. The identity logL_joint = SUM logL_i is exact. If it fails, the analysis STOPS: nothing estimated on top of a joint model that does not reproduce its parts can be trusted. It also says whether each file is an OPTIMUM (it does not move when re-estimated) or a SPECIFICATION (it moves), which decides whether the yardstick is the analyst's certified model or not. |
| canonical_analysisA | N1b — Box and Tiao's (1977) canonical analysis of the transformed LEVELS
(each series' Box-Cox and seasonal differences; NOT its regular ones):
the combinations of the series ordered from least to most predictable.
Nearly white ones are relations among the series that stay stable over
time; nearly non-stationary ones (sqrt(lam) >= |
| identify_crossB | N2 — What the univariate models do NOT carry: residual cross-correlations. Reads the CCFs of the residuals of the diagonal system, pair by pair. Those residuals are each series' own innovations — prewhitened by construction — so a cross-correlation beyond the band is evidence of a dynamic between the series. Contemporaneous correlation points to a full innovation covariance; lead-lag correlation points to cross orders p (and q). Returns the evidence and the menu of candidates, each with its argument. It does not choose.
|
| identify_matricesC | N2 — Jenkins and Alavi's (1981) two identifications, as matrices. Method 2, prewhitened: the correlation matrices R_k of the residuals of the
diagonal system (the univariate models' residuals), which suggest an MA
residual model and its links. Method 1, not prewhitened: R_k, the partial
correlation matrices S_k (multivariate Yule-Walker) and Alavi's
q-conditioned S_k(q) of the stationary series of the same files, which
suggest the AR (and ARMA) orders; determinants with three or more series.
Then the comparison as a menu, with their warning when a cross AR shows:
prewhitening can mis-specify it. |
| identify_echelonA | N2 — the third form, the ECHELON VARMA of Lutkepohl and Poskitt (1996), and its Kronecker indices from the data. The indices n_i are the row degrees of the system's unique echelon form:
series i gets its own AR(n_i)/MA(n_i), and their table says which cross
terms are free, the contemporaneous ones included. Unlike the VARMA(p, q),
the form is identified: no common factors, no MA driven to the wall by
spare parameters. The univariate orders do NOT give the indices (every
component's marginal is ARMA(N, N), N = the sum of the indices), so they
are searched on the stationary vector: a long VAR (its residuals stand
for the innovations), then least squares on each candidate's echelon form
with one round of Hannan and Kavalieris' correction, and a criterion. SC
(default) or HQ, which overfits. Every candidate with each index in
0.. The ORDER of the series is part of the echelon form (A_0 is lower triangular): the indices are those of the files' order. Measured on simulated systems (drvarma docs/STUDY-echelon-search.md): the true indices in 80-97 % of the replications, more with more data; weak cross dynamics are missed (the search underfits), which check_residuals then shows. On ROUTE U each univariate model's seasonal and fixed-frequency factors are its row's FACTOR (they multiply the whole row; drvarma's echelon stage 4) and the search runs on each row filtered by them; the univariate regular ARMA is replaced by the row's own AR(n_i)/MA(n_i). |
| estimateA | N3/N4 — Estimate a candidate: cross orders p, q; full or diagonal covariance. Each series keeps its univariate model on the diagonal (its ARMA factors are
re-estimated jointly, its deterministic terms stay as in its file). Reports
the parameters, the LR test against the univariates (in sample: necessary,
not sufficient), the innovation correlations, the residual portmanteau and
how the optimiser stopped.
|
| simplifyA | N4s — Tiao and Box's (1981, §4) simplification by coefficient, on the
current fit: the cross coefficients (and, on route V or in the echelon
form, each series' own AR/MA coefficients) with |t| < |
| structureB | N4t — Is the system simultaneous? (Tiao and Box 1981, §3.1, §5.2.) On the current fit: for each ordered pair, the LR test that series j does not enter series i's equation (all its cross AR and MA lags at zero); with up to 4 series, every triangular ordering (each series receives only from those before it). If an ordering stands, the system is a TRANSFER NETWORK — a triangular VARMA is a transfer function model — and sima offers the hand-back to mtram with the same .pre files; it does not hand back on its own. The verdict is only as good as the order of the fit: Tiao and Box's gas furnace shows a spurious feedback at low order. |
| check_residualsC | N4 — Check the last estimated model as Jenkins and Alavi (1981, §5.2) do, and show it as art's diagnosis: the report, then the figures. The report: 1 · TABLE — (1) the large residuals, judged on the UNCORRELATED transformed residuals (the a_it correlate at lag 0, so one by one they cannot be judged), with their dates — a known cause goes to intervention analysis, in art, before anything else is read; (2) the residual correlation matrices R_k(a), with what is beyond the band; (3) the portmanteau matrix Q_ij, as a summary. 2 · WHAT IT SHOWS, 3 · CONCLUSIONS, 4 · DECISION. If the matrices show structure, a model for the residuals is entertained and combined with the fitted one, as at identification. The figures, as drvus drew the diagnosis and their figure 7: fue's panel
for each residual series (the residuals with +-2 bands, the acf with its
Q, the pacf), and the residual ccf of each pair (GraphMaker's, with
Hosking's P). |
| study_estimationA | N4b — Study the current fit when the estimation may be ill-defined. For a fit that stopped on the MA invertibility wall (estimate says so), or any fit whose optimum you doubt. Evidence, then a menu; no verdict:
|
| evaluateB | N5 — The yardstick: does the candidate forecast better than the univariates? Estimates the candidate AND the diagonal system (the univariate models) on
the first
ON A VEC (the current model is one, estimate_vec): the VEC's rolling-origin forecasts (drvec's -estwin/-f: the fit on the first rows, parameters held, errors in each series' own units) against the univariates on the same origins, and against the VARMA in differences when one was estimated. THE RULE depends on the purpose recorded at N1c: a VETO when it is "forecast", a CAVEAT (always reported) for a "long run" claim. p, q and the VARMA arguments are then ignored.
|
| forecastB | N6 — Forecast every series in its level with the last estimated model. Each series goes back to its level with its own univariate model: deterministic terms (known in the future), its differencing, its Box-Cox. The 95% band is built on the transformed scale and mapped back. On a VEC (the current model is one): the VEC written in levels (drvec.to_levels_varma) and forecast by drvarma's forecaster — one forecaster for every system — with each file's deterministic path and Box-Cox; drvec's band multiplier. |
| forecast_uncertaintyA | N5/N6 — Jenkins and Alavi's comparison of forecast uncertainty (their
Table VIII): the standard deviation of the forecast errors by lead time,
V(l) = SUM psi_j Sigma psi_j', of the last estimated model against the
univariate models, per cent for series in logs. In sample, parameters
taken as known: a quick reading of where the multivariate model could
help;
|
| impulse_responseB | N6 — Orthogonalised impulse responses of the last estimated model. Cholesky in the ORDER OF THE FILES: an identifying assumption, stated in the
output. With a strong contemporaneous correlation, reload the files in
another order and compare before reading a response as a finding.
With |
| reorderA | N6 — The impulse responses under ANOTHER Cholesky order, against the files'. The reduced-form model (Phi, Theta, Sigma) does not depend on the order of
the series; only the orthogonalisation does. So nothing is re-estimated:
the model is permuted, the responses recomputed, and put back in the
files' order to compare cell by cell. A response that changes sign or
size with the order is an assumption, not a finding. With a diagonal
covariance the order does not matter at all, and the tool says so.
|
| variance_decompositionA | N6 — Forecast-error variance decomposition of the last estimated model. For each series and horizon, the share of its forecast-error variance that
comes from each series' innovation: how much of what is not predictable in
one series is really the other's surprise. Same Cholesky order as
impulse_response, and the same caveat: with correlated innovations the
shares of the first series in the order are inflated by construction.
With |
| plot_impulse_responseA | FIGURE — The orthogonalised impulse responses of the last estimated model. Drawn as what an impulse response is, a function of the lag like an ACF: one panel per (response, shock), thick impulses at h = 0..H, the seasonal grid, and the 95 % Monte-Carlo band dashed (it follows h). Cholesky in the order of the files, as impulse_response. The numbers are impulse_response's. On a VEC: the level responses (drvec), with the bootstrap's 90 % band from irf_bands when it has run. |
| plot_variance_decompositionB | FIGURE — The forecast-error variance decomposition, in the IRF's layout. Panel (i, j): the % of the h-step forecast-error variance of i due to the shock of j, h = 1..H, as impulses on a 0-100 axis with the 95 % band dashed. A row reads the same as in plot_impulse_response. On a VEC: the levels' decomposition (drvec), the bootstrap's band from irf_bands. |
| plot_residual_ccfB | FIGURE — The residual cross-correlations of the last estimated model,
pair by pair: GraphMaker's two-sided CCF (Treadway's, the suite's
reference), titled "A - B" with A leading at k > 0, and Hosking's
portmanteau below as GraphMaker labels it, P (not Ljung-Box's Q). What is
left beyond the band is what the model does not carry.
|
| plot_identificationA | FIGURE — Jenkins and Alavi's (1981) identification, pair by pair: the figure of identify_matrices. For each pair of series, in GraphMaker's CCF panel (Treadway's, the one drtran reads), the correlation function R_k above the partial S_k, both two-sided, same lag axis and scale — as art's ACF over PACF. method=2 (default): the residuals of the univariate models (prewhitened,
each series by ITS OWN model — Haugh's CCF, not a transfer function's).
Band 2/sqrt(n); between the panels Haugh's S* (1976), the test that the
two are independent, in total and by side (k > 0, k < 0: who leads).
The CCF's cut-off after q suggests an MA(q) residual model.
method=1: the stationary series w_t, not prewhitened. The CCF band is
Bartlett's (3.13) for unrelated series, lag by lag: the series are not
white, and a 2/sqrt(n) band would show their common cycles as cross terms.
Here the partial is the decisive one: a cut-off after p suggests an AR(p).
Each panel is titled "A - B", GraphMaker's order: A leads at k > 0. With three or more
series the partial of a pair comes from the VAR of all of them — given the
others — and |
| plot_forecastB | FIGURE — The forecasts of the last estimated model in the format of FUF
and art: on top the annual rate of change (%) of the last One figure PER SERIES, as FUF draws one page per series, so that the
forecast report can go series by series: |
| record_decisionA | Record a decision, WHY, on WHAT evidence, and what was set aside. Every node that opens a decision (which files, which candidate, keep the VARMA or stay with the univariates, what to do with a fit on the MA wall, which Cholesky order) should leave one. Example: node "N5", decision "stay with the univariates", reason "the VARMA gains in no cell at h >= 6", evidence "RMSE ratio 1.02-1.11 over 36 origins", alternatives "VARMA(1,0) full: better in sample (LR p 0.01), worse out of sample". In the AUTONOMOUS lane this is where your reasoning is written down, with decided_by="LLM"; a decision without its reason is not documented. |
| export_guionB | The path of the analysis, node by node, with its evidence and decisions. This is what makes the analysis reviewable and repeatable: every tool call
and every recorded decision, in order. Saved next to the first file as
.sima.json when |
| split_inpB | Convert a multivariate drvarma .inp (deprecated) into one fue .inp per series. Each file is a SPECIFICATION with the old file's transformation (and, if asked, an estimated mean, seasonal harmonics, a free regular AR/MA). Take each one through art to build its univariate model, then come back with the .pre files: the univariate models are the seed and the yardstick. |
| prepare_vecA | N1c/C0 — The cointegration question, and the VEC's specification with its checks (docs/STUDY-vec.md §2.3-2.4, §3.1-3.2). Offered after canonical_analysis when TWO OR MORE series have d = 1, whatever its count: the question is the analyst's (in the autonomous lane, yours, with the reason written down). Feedback is not a precondition: it is tested inside the VEC (weak exogeneity).
The checks, each a refusal with its reason or a warning: d >= 2 (drvec
models I(1) systems; back to art), D > 0 (drvec refuses a seasonal
difference: deterministic seasonality in art, objective "multivariante"),
a deterministic variable drvec refuses (its message), d = 0 series (the
MIXED case: an option,
|
| rank_testA | C1 — The cointegration rank, by PARAMETRIC BOOTSTRAP (drvec's sequential exact-LR test r -> r + 1, r = 0..M-2): THE ONLY WAY TO A RANK in sima. The bootstrap decides; the asymptotic table (cases 1 and 2 only) is shown as orientation and is never the verdict. Reads the critical values, not the p-value; proposes r-hat and never adopts it. A JOB (sima.jobs): it runs detached, at most cores - 1 at once, on drvec C
when its binary is there (drvec's engine="auto"; the engine is in the
result's provenance), cached by content: the same files, spec, B, engine
and versions return the stored result at once. It waits up to Uses prepare_vec's specification. |
| job_statusA | A job's state — queued, running, done, failed or cancelled — its progress ("replication k of B, comparison r -> r + 1, ok/simfail/fitfail so far" for a rank test; the replications for the IRF bands; the cells for a sweep), the elapsed time and the rate. Never a provisional number: a finished comparison is said finished, an unfinished one shows its counts only. The result itself comes from job_result once the job is done. Jobs survive the server: an id from an earlier conversation still answers here. |
| job_resultB | The FINAL result of a finished job, with its report: a rank test's table and proposed rank (recorded at C1), the IRF bands (then used by impulse_response and the plots), a sweep cell. A job that is not finished has no result: this tool says so and returns nothing partial — a decision waits for it (the autonomous lane does not decide a node before). |
| job_cancelA | Cancel a job: a queued one leaves the queue; a running one has its whole process tree killed (the runner, drvec C or the Python pool) and its folder marked cancelled, with no result written. A finished job is not touched. The same call later starts it again from the beginning (a cancelled run leaves nothing to resume). |
| jobsA | Every job sima knows on this machine (the registry, ~/.sima/jobs or
SIMA_JOBS_HOME): id, tool, status, label and progress, the running and
queued first. |
| estimate_vecA | C2 — The adopted VEC at rank r (drvec.fit with -fdhess: the standard
errors from the Hessian at the optimum). REFUSES without a FINISHED
rank_test for the same specification (p, q, case, drifts, files), unless
the analyst adopts r on THEORY: THE ROLES are asked for: Reports drvec's .out blocks verbatim (parameters, the VEC's matrices, the
normalisation share, the residual diagnostics), alpha read from the matrix
(Johansen's sign), the canonical weights beside beta-hat, and the
optimiser's stopping criterion: a fit that stopped on a ridge (E1's
2 1 1 -case 2) is declared NOT A DEMONSTRATED MAXIMUM, with |
| test_restrictionA | C3 — A restriction on alpha, beta or Gamma of the current VEC, tested by LIKELIHOOD RATIO (never by the .out's Wald, which depends on the normalisation): LR, its degrees of freedom and chi2 p-value, both logLs.
drvec fits the free model of these LRs as the C does (one est() from a
cold start for alpha and weakex; no ladder for fixb2row), so its free logL
can be below the adopted VEC's and the LR understated: sima takes the BEST
FREE FIT it knows, says which, and shows both when they differ. |
| add_exogenousA | C4 — Exogenous inputs to the current VEC, dispatched by their order of integration, as in drtran. The VEC without inputs is the base, and the LR against it is the test. An input of the SAME order (I(1), a series of the system): An input of ANOTHER order (an I(0) input on I(1) outputs): |
| long_runB | C5 — The long run of the current VEC, read: theta (beta normalised, with
its sign: Y1 = theta' Y2 + a stationary error), and two half-lives, both
computed by sima because drvec computes neither — the TEXTBOOK one,
ln 0.5 / ln(1 - |alpha|) on the variable the relation is solved for
(orientation: exact only for one relation with no short-run dynamics),
and the MODEL's, the half-life of the equilibrium error beta'Y in the
fitted model's own response (the same weights as the level IRF; its norm
over the shocks, which does not depend on the Cholesky order). Then
Gonzalo and Ng's permanent/transitory decomposition: alpha_perp (the
common trends), the share of each level's forecast-error variance due to
the permanent shocks, and the self-check that a transitory shock has no
long-run effect. Point values: bands only through the bootstrap
(irf_bands). |
| irf_bandsA | C6 — Bands for the level responses and the FEVD of the current VEC, by PARAMETRIC BOOTSTRAP (drvec -irfboot N): N simulations of the fitted model, each REFITTED as the data were — same r, same restrictions, same ladder — and Efron's percentiles (90 % and 95 %). No delta method and no covariance Monte Carlo: the level responses are a long non-linear chain to the permanent effect, and a linearisation is what not to trust here. A JOB, like rank_test: detached, cached by content, on drvec C when its
binary is there (the engine in the provenance); a short wait ( |
| sweepC | C7 — Robustness: a grid of fits over the same files, one CACHED JOB per
cell, around the current VEC (its r, restrictions and normalisation).
At C1, before any VEC (prepare_vec's specification, |
| plot_rank_bootstrapB | FIGURE — The rank test's bootstrap: for each comparison r -> r + 1, the
histogram of the B bootstrap statistics LR*, the OBSERVED LR (solid), the
bootstrap's 90/95/99 % critical values (dashed) and, for cases 1 and 2,
the asymptotic 5 % value (dotted: orientation only). From the finished
rank test of the current specification (the one with the largest B), or
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| _r_protocol | The whole protocol and its doctrine: the server's instructions, to reread them in the middle of an analysis. |
| _r_defects | The defect registers: sima's and the engine's (drvarma), with what is still open. Read before proposing a simplification that looks obvious. |
| _r_docs | The index of sima's documents (design, tool reference). |
| _r_examples | The worked examples this installation carries: what each teaches and its plan. Run one node by node with load_example. |
TDQS
Scored across 44 tools
The staged workflow gives most tools distinct roles, but several near-parallel tools are easy to confuse: load_data/load_pre/split_inp for entry, estimate/estimate_vec for model class, identify_cross/matrices/echelon for identification, and evaluate/forecast_uncertainty for comparison. The long, high-context descriptions help, but selection still depends on knowing the analyst's current route and model state.
Names are consistently snake_case with recognizable prefixes such as load_, plot_, identify_, and job_. The grammar varies between verb-only, noun-only, and verb_noun forms, but the convention remains readable and predictable overall.
Forty-four tools is very heavy for a single MCP server, even one modeling a full econometric workflow. Many tools map to legitimate stages, but the surface is large enough to overwhelm selection and orchestration without a higher-level workflow wrapper.
The surface covers the major lifecycle: raw/univariate entry, gating, identification, estimation, VEC analysis, forecasting, diagnostics, plotting, jobs, decisions, and export. Minor gaps remain around explicit session/model-state inspection and standalone handling of some implicitly parameterized actions such as set/adopt.