Skip to main content
Glama

MacroStress

English | Русский | 中文

CI MIT Python 3.12+

MacroStress answers one question: how much does a portfolio lose under a given macroeconomic scenario? An analyst or an agent names paths for a few macro variables (say, the policy rate at 21 % for the next year) and the shocks behind them. A BVAR estimated on history completes consistent paths for the other variables, satellite models turn those paths into drivers (equity prices, bond spreads, industry overdue shares, housing prices), and every position is repriced along the same draws. The output is a loss distribution with $P_5$, $P_{50}$, $P_{95}$, ES95 and the scenario severity $\delta$. The method is described in docs/scenario-formalization.md (Russian).

The server speaks MCP, so any client can drive it: Claude Desktop, Cursor, Claude Code. A DeepSeek Harness plugin in dsh/ adds three skills and a workspace snapshot for the agent prompt. All state lives in one workspace/ directory; there is no web app, no database, and no scheduler.

What it does

Part

What it does

Series

Monthly series from MOEX, the Bank of Russia, Rosstat, and FRED, with the release date of every value

Macro model

BVAR with stochastic volatility, sign restrictions, conditional forecasts, scenario severity, and checks on historical episodes

Drivers

Object catalogs, hierarchical satellite models, out-of-sample checks, driver paths on the macro draws

Scenario

A $(N, C, D, O)$ file with validation and paths: conditional forecast and drivers on the same draws

Positions

Equity, bond, credit or deposit, housing

Run and report

Positions along scenario paths, with $P_5$, $P_{50}$, $P_{95}$, ES95, and $\delta$

Extensions

A new asset type is a plugin: python -m mst.plugin new, contract checks, a demo run

DSH plugin

Scenario from the corpus, report, drivers; the prompt section built from workspace.json

MCP tools: jobs, series, corpus, scenario, run, portfolio, model. The reference is in docs/tools.md (Russian).

Related MCP server: PA MCP Server

Install

Python 3.12 or newer and uv are enough.

git clone https://github.com/LeoLourson/MacroStress-DSH
cd MacroStress-DSH
uv sync
uv run macrostress --workspace C:/data/macrostress

The server speaks over stdio and prints only errors; it waits for a client. Configuration for Claude Desktop, Cursor, and any other MCP client is in docs/mcp.md. The DeepSeek Harness plugin is covered in docs/install.md.

First session

Once a client is connected, it sees seven tools. Long operations start jobs: a tool returns a job at once, and jobs shows the progress.

  1. jobs(action="state") — what is in the workspace: model versions, corpus index, jobs.

  2. series(action="update") — download the macro series. FRED needs a key in FRED_API_KEY.

  3. jobs(action="status", id=...) and jobs(action="log", id=...) — wait for the job.

  4. model(kind="macro", action="estimate", as_of="2026-10-29") — estimate the macro model on the data known at that date. The version is a hash.

  5. series(action="update", quantity="share_price") — find the objects of a quantity and download their series; the same for bond_spread, overdue_share, housing_price_primary, housing_price_secondary.

  6. model(kind="satellites", action="estimate", version=<macro hash>) — estimate the satellites on that macro version.

  7. model(kind="satellites", action="describe", version=<hash>) — which drivers passed the out-of-sample check and why the rest were rejected.

  8. corpus(action="search", query=..., as_of=...) — fragments known at the date; corpus(action="index") rebuilds the index as a job.

  9. scenario(action="save", id=..., spec={...}) — save a scenario; scenario(action="validate", id=...) — list everything that blocks the calculation.

  10. portfolio(action="save", id=..., spec={...}) — save a portfolio; portfolio(action="check", id=..., scenario=...) — check it against the scenario.

  11. run(action="start", scenario=..., portfolio=..., draws=..., seed=...) — start a run; run(action="result", id=...) — read $P_5$/$P_{50}$/$P_{95}$, $\delta$, and coverage.

Documentation

The documentation is in Russian, except docs/mcp.md, which is in English.

Every package folder has its own README that names its files.

Development

uv sync
uv run pytest -q -m "not slow"
uv run ruff check .

The slow tests estimate the BVAR and take minutes; the night workflow runs the full suite. CI runs the fast suite on Linux and Windows with Python 3.12 and 3.13.

Status

0.1.0, beta. Interfaces may change before 1.0. The data sources are the Russian market (MOEX, the Bank of Russia, Rosstat) plus FRED for global series.

Contributing and license

Contributing rules and the release process are in CONTRIBUTING.md; vulnerabilities go through SECURITY.md. The code is MIT-licensed, see LICENSE. Series from MOEX, the Bank of Russia, Rosstat, FRED, and BIS are not part of this repository: you load them under the terms of each source, and the license does not cover that data. Citations are described in CITATION.cff.

Available Tools

7 tools
corpusC

The scenario corpus. Actions: search, get, list, add, index, fetch.

search and get read the index as it was on as_of; list shows what the manifest holds; add registers a file downloaded by hand under its key. index and fetch are tasks on the corpus resource.

NameRequiredDescriptionDefault
kNo
idNo
idsNo
keyNo
urlNo
fileNo
kindNo
as_ofNo
queryNo
actionYes
regionNo
factorsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses one genuinely useful behavior (search/get read the index as of `as_of`) and that `add` registers a hand-downloaded file, but `index` and `fetch` are dismissed as "tasks on the corpus resource" with no mutation, async, or permission details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the action list, but the final sentence ("`index` and `fetch` are tasks on the corpus resource") consumes space without conveying meaning. Some structure exists, but the economy comes partly from under-specification rather than precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 12-parameter multi-action tool with mutating actions and no annotations needs substantial behavioral context. The presence of an output schema excuses return-value documentation, but action-to-parameter mapping and mutation semantics are largely missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 12 parameters, so the description must compensate. It touches only `action`, `as_of`, and (implicitly) `key`; the meaning and per-action relevance of `k`, `id`, `ids`, `url`, `file`, `kind`, `query`, `region`, and `factors` is left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names the resource ("scenario corpus") and enumerates the six actions, which is more than a tautology, but it never says what a scenario corpus is or how it differs from the sibling `scenario` or `series` tools. An agent still has to infer the tool's domain role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Per-action hints exist (search/get read the index, list shows the manifest, add registers a file), so action selection is partially implied. But there is no explicit when-to-use versus the `scenario`, `series`, or `run` siblings, and no statement of preconditions or when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jobsC

Workspace and task state. Actions: state, status, log, cancel.

NameRequiredDescriptionDefault
idNo
tailNo
actionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. The action names hint that 'cancel' may mutate state and 'log'/'status' are reads, but it does not disclose side effects, permissions, async behavior, or whether cancellation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short, front-loaded with the domain ('Workspace and task state'), and free of filler. It is concise, though the extreme brevity leaves much unsaid.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a multiplexed action tool with three parameters, no annotations, and 0% schema description coverage. The description lists action names but omits parameter meanings and action-specific behavior; the presence of an output schema only relieves the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially helps by listing possible action values ('state, status, log, cancel'), but it does not explain the 'id' or 'tail' parameters at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'Workspace and task state' and lists four action names, giving a rough idea that this is a multiplexed jobs/task tool. However, it does not state a specific verb-resource pair for each action or distinguish the tool from siblings like run or scenario.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as run, scenario, or series. The action list names operations but provides no context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modelC

Model versions. kind: macro, satellites. Actions: list, describe, estimate, backtest.

version is the macro version for macro describe and backtest and for satellites estimate; for satellites describe it is the satellite version. list takes no version.

NameRequiredDescriptionDefault
kindYes
onlyNo
as_ofNo
actionYes
versionNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, yet it never says whether estimate and backtest are heavy compute jobs, whether they are read-only or produce persisted state, how long they take, or whether they require credentials. The version-mapping sentence is structural, not behavioral.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with resource, kind values, and action list, then a single sentence tying version to action. It is tight and free of filler, though the terse 'kind: macro, satellites' phrasing reads as shorthand rather than a sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description is proportionate for a compact multi-action dispatcher. The only genuine gap is documentation of 'only' and 'as_of', which is already penalized under parameter semantics rather than counted again here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all five parameters. It clarifies the accepted values for 'kind' (macro, satellites), 'action' (list, describe, estimate, backtest) and the per-action meaning of 'version', but 'only' and 'as_of' are never mentioned at all, leaving two parameters completely undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('Model versions') and enumerates two kinds and four actions, so an agent can tell this is a dispatcher tool over model artifacts. However, no verb phrase explains what 'describe', 'estimate' or 'backtest' actually do or return, leaving the purpose only partly resolved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only routing guidance is the negative rule that 'list takes no version.' There is no statement of when to choose estimate versus backtest, no prerequisites, and no differentiation from siblings such as series, scenario, or run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portfolioB

Stored portfolios. Actions: list, get, save, delete, check, exposure.

save checks the contract and writes portfolios/<id>.json; check names every position the scenario's macro and satellite versions cannot serve, with the reason of a driver the out-of-sample check rejected; exposure values the positions at the calculation month of the scenario's macro version.

NameRequiredDescriptionDefault
idNo
specNo
actionYes
scenarioNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose useful traits: `save` validates a contract and writes to `portfolios/<id>.json`, `check` reports unservable positions with rejection reasons, `exposure` values at the scenario's macro calculation month. However, `delete`'s destructiveness/irreversibility and permission requirements are never addressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action list, which is the right structure, and it is short. But the compression goes too far — telegraphic clauses and inconsistent backtick markup make it denser than it needs to be, and half the actions get no sentence at all.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A six-action dispatcher with no annotations and 0% parameter coverage explains only three actions, says nothing about `delete` semantics, and never clarifies which parameters apply to which action. The presence of an output schema covers return values, but the call-shape gaps remain significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must compensate and largely doesn't. The `<id>.json` path hints that `id` is a filename component and `save`'s contract check hints at `spec`, but `scenario` and `action` values are only implicitly defined, and usage per action (which params each action needs) is never stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (stored portfolios) and enumerates all six valid actions, which is essential because the `action` parameter has no enum. It distinguishes itself from siblings like `scenario` and `run`, but leaves the domain meaning of a 'portfolio' and the shape of a 'spec' unstated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The text describes what `save`, `check`, and `exposure` do, implying when to reach for them (writing, validating coverage, valuing), but never states when to use `list`/`get`/`delete` or how to choose between them. It gives no exclusions and no pointer to a sibling tool that might be a better fit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runA

Runs on the paths of a scenario. Actions: start, status, result, list.

start draws the scenario's paths and calculates a portfolio's positions — or the positions given in the call — on them, as a job on the runs resource; status reports that job and what the run has written, result the per-position results and the report of a portfolio run, list every run of the workspace. base_currency is the base of positions; a portfolio brings its own.

NameRequiredDescriptionDefault
idNo
seedNo
drawsNo
actionYes
scenarioNo
portfolioNo
positionsNo
base_currencyNoRUB

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It does add one genuinely useful behavioral fact: `start` is asynchronous and materializes 'a job on the ``runs`` resource', so the agent knows to poll `status` rather than expect synchronous results. Beyond that it is silent on cost, permissions, side effects, and whether repeated starts are idempotent — notable gaps for a tool whose `start` action triggers computation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action enumeration, then a dense explanatory paragraph — good ordering for an agent scanning for the entry point. The final sentence about `base_currency` and portfolios is slightly elliptical ('a portfolio brings its own'), but overall there is little wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is an 8-parameter, four-action tool with zero schema descriptions, and the description leaves the parameter-to-action mapping implicit and four parameters entirely undocumented. The output schema existing means return values need no explanation, which helps. But an agent still has to guess which fields `status`/`result` need versus `start`, so the definition is only adequate, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only partially does. It usefully defines `base_currency` as the base of `positions` and clarifies that a portfolio supplies its own base currency, and it enumerates the legal values of `action` (critical, since the schema types `action` as an unconstrained string with no enum). It says nothing about `id`, `seed`, `draws`, or `scenario`, nor which parameters apply to which action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete verb-plus-resource framing ('Runs on the paths of a scenario') and then enumerates the four actions with a one-line explanation of each (start draws paths and computes positions, status reports the job, result returns per-position results, list enumerates workspace runs). An agent can tell it is the execution/read-back surface for scenarios, distinct from siblings like `scenario` or `portfolio`. It stops short of explicitly naming how it differs from the `jobs` sibling, which holds it at 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The action-level breakdown effectively functions as when-to-use guidance: use `start` to launch a run, `status` to poll the resulting job, `result` to pull outputs, `list` to enumerate. That covers the main decision points an agent faces with a multi-action tool. There is no exclusion guidance (e.g., when a run should be done via a sibling tool, or that `status`/`result` require an `id` from `start`), so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scenarioB

Stored scenarios. Actions: list, get, save, validate.

save checks the contract and writes scenarios/<id>.json; validate loads the macro and satellite versions the file names and names every problem that keeps the scenario from being computed, including corpus fragments not visible on the calculation day when the index exists.

NameRequiredDescriptionDefault
idNo
specNo
actionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add real signal: save has a filesystem side effect at scenarios/<id>.json and performs contract checking, while validate reports every blocking problem including corpus fragments not visible on the calculation day. However, list and get are completely undocumented, and there is no mention of overwrite semantics, permissions, or whether save is destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action list is front-loaded in the first sentence, which is the right structure for a multiplexed tool. The second sentence is long and clause-heavy ('including corpus fragments not visible on the calculation day when the index exists') but the content is substantive rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. Still, for a four-action tool with zero schema description coverage, the description omits the per-action parameter mapping and never says what list or get do, leaving meaningful gaps an agent must guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and 'action' is a bare string, so enumerating the four valid action values is genuinely necessary and the description supplies it. But 'spec' is never explained anywhere and 'id' is only implied through the file path pattern; which parameters apply to which action is left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (stored scenarios) and enumerates the four concrete actions (list, get, save, validate), so an agent knows what the tool manipulates. It does not differentiate itself from siblings like 'series', 'portfolio' or 'model', which likely also deal with persisted objects, so an agent cannot route purely on purpose text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implicitly distinguishes save (writes a file after checking the contract) from validate (diagnoses why a scenario cannot be computed), which is a useful internal alternative. But there is no statement of when to use this tool instead of 'series', 'run' or 'portfolio', and no prerequisites or when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seriesC

Stored series. Actions: search, get, add, update.

update fetches the named ids; with quantity it instead discovers the objects of that driver quantity and fetches their series.

NameRequiredDescriptionDefault
idNo
idsNo
textNo
as_ofNo
entryNo
actionYes
quantityNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains a non-obvious update mode (fetch by ids versus discover by quantity), but it says nothing about whether add/update mutate data, permission requirements, validation, or what search/get return.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the resource and action list, with no filler. Its terseness is a completeness issue rather than a conciseness issue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter, four-action tool with no annotations and no schema parameter descriptions, the description covers only one branch of one action. The output schema may cover return values, but input semantics and most action behavior remain largely undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for seven undocumented parameters. It only gives meaning to ids and quantity in the update-specific note, leaving id, text, as_of, entry, and the action values unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('Stored series') and enumerates the four actions, so an agent can identify this as the series-management tool rather than corpus, scenario, run, model, portfolio, or jobs. It is clear at the resource/action level, though it does not explain what search, get, or add actually do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not say when to use search versus get versus add versus update, nor when to prefer this tool over its siblings. The only conditional guidance is the internal update behavior involving ids and quantity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcorpus
    • First observedjobs
    • First observedmodel
    • First observedportfolio
    • First observedrun
    • First observedscenario
    • First observedseries

TDQS

B3/5.0

Scored across 7 tools

Disambiguation3/5

The seven tools map to distinct resources (series, corpus, scenario, run, model, portfolio, jobs), which helps at the top level. However, `run` and `jobs` overlap heavily: `run.status` reports a job while `jobs.status`/`jobs.state` also report job state, and `corpus.index`/`corpus.fetch` are described as tasks that intersect with the `jobs` tool. An agent can still pick correctly with care, but the boundaries require reading the descriptions closely.

Naming Consistency4/5

All seven tool names are consistent singular resource nouns, and the action parameter follows a predictable verb vocabulary (search, get, list, add, save, validate, start, describe...). Minor deviations exist where actions are nouns rather than verbs (`status`, `result`, `exposure`), but the overall pattern is readable and predictable.

Tool Count4/5

Seven top-level tools is a well-scoped count for a scenario/stress-testing platform. The catch is that each tool hides 4-6 actions (roughly 30 operations total), so the effective surface is much larger than the tool count suggests, requiring per-action knowledge.

Completeness4/5

Coverage is broad: series read/write, corpus indexing, scenario save/validate, run start/status/result, model estimation and backtesting, portfolio CRUD with check and exposure, and job control. Gaps are modest — no delete for series, scenarios, or corpus entries — which agents can generally work around but would eventually hit.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides AI agents with quantitative risk tools such as VaR, expected shortfall, GARCH volatility, backtesting, stress testing, tail risk analysis, and credit scoring using synthetic or user-supplied data.
    7
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to run probabilistic portfolio analysis workflows, including input validation, instrument verification, simulation preparation, and approved interactive reporting.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables quantitative portfolio tail-risk analysis, option Greeks, Monte Carlo stochastic simulations, fixed-income duration/convexity, and Nelson-Siegel yield-curve interpolation through MCP tools.
    7
    MIT