Skip to main content

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).

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.

Metadata

Release files for macrostress 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for macrostress 0.1.0
File Size Uploaded Provenance Actions
macrostress-0.1.0.tar.gz 175.8 kB With provenance Details for macrostress-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for macrostress 0.1.0
File Interpreter ABI Platform Actions
macrostress-0.1.0-py3-none-any.whl Python 3 none any Details for macrostress-0.1.0-py3-none-any.whl

Total release size: 391.9 kB

Release files / macrostress-0.1.0.tar.gz

Download URL macrostress-0.1.0.tar.gz
Size 175.8 kB
Tags Source
SHA-256 checksum
How to use checksums
aa1744292936debf2810c7ebb1911ee256ba4723b5ef6dfb984455962c7eca69
BLAKE2b-256 checksum
How to use checksums
432b1f04bf3afec1e6ac62f26171731fd1a74bab36d4148d6c8c56fe0ed54a5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

Release files / macrostress-0.1.0-py3-none-any.whl

Download URL macrostress-0.1.0-py3-none-any.whl
Size 216.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
360db93f2ba8a1a1419cdbb05d08f7729c4db21b87f570567b28a27251cf0c23
BLAKE2b-256 checksum
How to use checksums
f59ebbbbc09188ad7eb369f914a7f16fe95d1bb1622288bb17a0c07714572529
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

Security for macrostress 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for macrostress-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page