Read-only offline analysis of personal stock/ETF transaction logs with drawdown risk stats and deterministic buy/sell suggestions.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag โ we're steadily working through the catalog.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Asset Management.
TL;DR: uvx --from git+https://github.com/disin7c9/asset-management asset-management --demo โ a drawdown-first portfolio brief on a bundled example book, one command, no setup. USD-only, long-only stock/ETF; you keep your own transaction log.
Track a personal stock/ETF portfolio and get suggestions you can audit. Python computes every number; the optional AI narrates โ it never receives the figures, and every value it quotes is substituted from the computed result.
Many AI finance tools let the model produce the numbers. Here the model may only place {{token}} placeholders: a deterministic renderer substitutes figures from the validated core and refuses the entire narration if the model typed any numeral itself โ in any Unicode numeric category, so ยฝ fails closed alongside 3.2:
Run both sides yourself โ it drives the real production fence, no API key needed: uv run python scripts/demo_fence.py
Holdings are derived from an append-only transaction log (date, ticker, action, quantity, price, fee per row) โ never stored โ so the same input always produces the same output. Prices are fetched with a provider fallback (Yahoo Finance primary; Tiingo secondary, via a free API key) and an on-disk cache; every displayed number is traceable to its source, and figures that can't be computed honestly (too short a window, no real solution) print n/a rather than a fabricated number. Stock splits are adjusted automatically (share counts are reconciled with the split-adjusted price history), so a split during your holding period doesn't distort the returns. When the split feed is unavailable, the mismatch detector catches ratios of 2:1 or larger.
or from a clone: uv sync && uv run python -m app --demo (needs Python 3.12 and uv).
The full tour (still the bundled book, ~a minute online) โ the two commands below show the tool's characteristic features end to end: a preset target is proposed, then validated against a known 60-40 reference with a held-out recent-window verdict, and threshold-band rebalance suggestions are laid out with the named rule behind every line, plus per-fund facts:
Note what it doesn't say: the verdict reads like "no clear drawdown difference from 60-40; the paired bootstrap does not confirm the gap" when the evidence is thin โ never "beats the benchmark". When the output earns your trust, the four steps below point it at your own money.
Everything is derived from one transaction log. The CSV format is Ghostfolio's own CSV-import schema (so a book you keep here imports straight into Ghostfolio too) โ columns Date, Code, DataSource, Currency, Price, Quantity, Action, Fee, Note. Action is one of buy, sell, dividend, fee, interest, deposit, withdraw. Cash flows (deposit/withdraw) use a CASH code and put the amount in the Price column. This tool is USD-only (long-only stock/ETF): Currency must be USD โ a non-USD row is refused with an error naming the row, never silently booked as dollars 1:1. Empty cells in numeric columns are treated as zero. Non-ISO dates are rejected with a clear error. UTF-8 BOM is tolerated. The bundled example (data/sample_data/transactions.csv) shows every row type.
Already use Ghostfolio? Point the input straight at a Ghostfolio JSON export (Portfolio โ Activities โ โฏ โ Export) โ the loader detects it and reads it directly, no conversion step. It reads the activities (a dividend's cash = quantity ร unitPrice; Ghostfolio's UTC timestamps are rounded back to your local date) and skips non-USD, crypto, and non-security (ITEM/LIABILITY) rows with a warning (USD-only, long-only equity/ETF for now). Brokers without a native Ghostfolio account can run a community converter such as Export-To-Ghostfolio (26 brokers โ a Ghostfolio JSON) first.
Set your default once in a gitignored .env at the repo root โ ASSET_BOOK=path/to/your.csv (and optionally ASSET_TARGET=path/to/target.csv) โ and a bare python -m app becomes your brief. Explicit flags always win. There is no silent built-in default: without --book or ASSET_BOOK, a book-dependent action errors out and a bare run prints a hint โ the bundled example is opt-in (--demo), never assumed.
The core is offline-first: prices come from an on-disk cache, refreshed when you run online. After a fresh clone, fill it once:
After that, --offline runs and the Claude Desktop addon serve entirely from this cache (--cache-dir / ASSET_CACHE_DIR override the location).
Optional but recommended: add a free Tiingo API key to .env โ TIINGO_API_KEY=... โ to enable the second price source. Yahoo Finance throttles bursts of requests now and then; with a key the fetch falls back to Tiingo instead of reporting tickers missing. Without one, the tool fetches from Yahoo only.
Most of the decision features (--rebalance, --backtest, the held-out checks) work toward a target allocation โ a small CSV (Ticker,Weight) that you own and edit. Three ways to get one, by where you're starting from:
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/disin7c9-asset-management)<a href="https://allmcps.com/mcp/disin7c9-asset-management"><img src="https://allmcps.com/api/badge/disin7c9-asset-management?style=directory" alt="Asset Management on AllMCPs" /></a>