Skip to content

Folionomiq

by folionomiq.com · remote · no sign-in to list tools · v1.5.0 · published by com.folionomiq

Measures a portfolio from price history: real bets, look-through, past crises in money. No advice.

Changes · 19

22 tools: 19 change things and 3 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http folionomiq https://folionomiq.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "reverse_stress" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "start": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

22 tools

Changes things 19Claude Code: ask
  • asset_infoOne fund or share on its own, without a portfolio: name, type, exchange, yearly cost when the issuer publishes it, measured return, volatility and worst fall, and for a fund its la…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    One fund or share on its own, without a portfolio: name, type, exchange, yearly cost when the issuer publishes it, measured return, volatility and worst fall, and for a fund its largest holdings and sectors. Use it before deciding whether a ticker belongs in a measurement; for only today's price use last_price, for what a whole portfolio owns through its funds use look_through. The ticker takes the exchange suffix for non-US listings (VWCE.DE, IWDA.AS); when a ticker is not found, search_symbols finds the right one.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: One fund or share: what it is and holds
  • check_before_you_buyBefore adding one new holding to an existing portfolio: how much of it is already owned through the current funds (from the fund's SEC filing when there is one), whether it adds an…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Before adding one new holding to an existing portfolio: how much of it is already owned through the current funds (from the fund's SEC filing when there is one), whether it adds an independent bet, and what past crises would have done with it included. Use it for one addition; for removing, reweighting or several changes at once, test_a_change. add is the ticker considered, amount how much of it in the same units as holdings, holdings what is owned now, base the currency (default USD). Counterfactual; never says whether to buy.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Check before you buy
  • currency_effectFor a portfolio held in one currency but priced partly in others: how much of it is outside the base currency, and what exchange-rate moves added to its growth, volatility and wors…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    For a portfolio held in one currency but priced partly in others: how much of it is outside the base currency, and what exchange-rate moves added to its growth, volatility and worst fall compared with the same holdings currency-hedged. Use it only when some holdings are priced in another currency than the holder's; for a portfolio entirely in one currency it has nothing to show. Needs base set to the holder's currency to mean anything.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: What exchange rates did to it
  • factor_exposureHow one portfolio's daily moves line up with four common patterns (the market, small versus large companies, value versus growth, momentum): each sensitivity, whether it is disting…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How one portfolio's daily moves line up with four common patterns (the market, small versus large companies, value versus growth, momentum): each sensitivity, whether it is distinguishable from zero, and how much of the movement the four explain together. Use it for 'what style am I really exposed to?'; for how many independent bets there are, portfolio_structure. Holdings as weights or amounts; base sets the currency the returns are measured in (default USD). A sensitivity that cannot be told from zero is reported as such, not as a number to act on.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Sensitivity to common return patterns
  • health_axesOne portfolio read along three separate questions: what its risk is built from (concentration), how it behaved when markets broke (resilience), and what it returned for the risk ta…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    One portfolio read along three separate questions: what its risk is built from (concentration), how it behaved when markets broke (resilience), and what it returned for the risk taken (efficiency), each with its own figures. Use it when the reader asks whether something is off in how the portfolio is built; for the full measurement use measure_portfolio. Holdings as weights or amounts; base sets the currency (default USD). No overall score is returned, and an axis with too little history, such as no crisis in the window, comes back without a reading instead of a guessed one.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: The portfolio along separate axes
  • last_priceThe latest daily close for each ticker, in the base currency and in its own, with the date.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The latest daily close for each ticker, in the base currency and in its own, with the date. Use it to turn a number of shares into an amount before a measurement; for the history and figures of one asset use asset_info. base sets the currency of the converted price (default USD). One figure per ticker; no price history is returned.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Latest close
  • living_off_itReplays a yearly withdrawal, raised with real inflation, from every start month the portfolio's history allows: how many starts lasted the full span, how many ran out and when, the…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Replays a yearly withdrawal, raised with real inflation, from every start month the portfolio's history allows: how many starts lasted the full span, how many ran out and when, the lowest point from the worst start, and the highest yearly rate that ran out from no start. Use it for 'can I live off this?'; for money put in every month instead, monthly_plan. amount is the portfolio's value (defaults to the sum of the holdings), withdrawal the yearly amount in today's money, years the span (5 to 50, default 30). A count of starts, never a probability; a span the record is too short for is said, not invented.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Living off it: withdrawals replayed
  • look_throughThe companies a portfolio owns through its funds, added up across funds: the largest names with their share of the whole portfolio, names reached through more than one fund, and se…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The companies a portfolio owns through its funds, added up across funds: the largest names with their share of the whole portfolio, names reached through more than one fund, and sectors. Use it for 'what do I really own?'; for the full measurement use measure_portfolio, for one fund alone asset_info. Give holdings as money amounts to get each company in money; base sets that currency (default USD). Figures are minimums: they count only the companies the measurement can name, and the answer says how much of the money that is.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: What the funds hold underneath
  • measure_portfolioThe complete measurement of one portfolio in a single call: how many independent bets it holds, which holding carries risk out of line with its money, the companies owned through i…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The complete measurement of one portfolio in a single call: how many independent bets it holds, which holding carries risk out of line with its money, the companies owned through its funds, what past crises did to it and how long it took to come back, and the numbered report. Use it when the reader asks broadly about a portfolio; for one question the narrower tools answer faster: portfolio_structure, look_through, past_crises, portfolio_report. Give amounts to get losses in money; base sets that currency (default USD). Descriptive: no forecast, no advice.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Measure a portfolio
  • monthly_planReplays the same amount bought on the first trading day of every month, on one portfolio's own daily history with dividends reinvested: what it became against what was put in, the …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Replays the same amount bought on the first trading day of every month, on one portfolio's own daily history with dividends reinvested: what it became against what was put in, the day it stood furthest below the money put in so far, and the longest stretch below it; then the same plan from every January the record allows, because the start year is luck. Use it for 'if I put X a month into these, what would it have become?'; for withdrawals living_off_it, for the record itself return_history. Holdings are weights here; monthly is the amount, start the first year. In the money of each year, before taxes and trading fees. What happened, never a forecast or a probability; years before the record are not invented.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Money in every month, replayed
  • past_crisesOnly past crises for one portfolio: 2008, 2020, 2022 and others inside its price history, with the fall, the worst day and the days it took to come back.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Only past crises for one portfolio: 2008, 2020, 2022 and others inside its price history, with the fall, the worst day and the days it took to come back. Use it for 'what did crashes do to this?'; for the whole record use return_history. Give amounts to get each fall in money, in the base currency (default USD). Crises before a holding existed are named as not tested, not estimated.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: What past crises did to this mix
  • plain_findingsThree or four plain-language sentences about one portfolio (what its risk is built from and its worst historical fall), each with the window it rests on.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Three or four plain-language sentences about one portfolio (what its risk is built from and its worst historical fall), each with the window it rests on. Use it for the shortest answer, or for a reader new to investing; every figure is in measure_portfolio. Amounts make the fall come out in money, in the base currency (default USD). No tables and no numbered report.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: The findings in plain words
  • portfolio_reportThe written report on one portfolio, with every figure numbered F1, F2...No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The written report on one portfolio, with every figure numbered F1, F2... beside the method and the window behind it. For a reader who wants something to quote or keep; measure_portfolio returns this same report together with structure, look-through and crises. Amounts make the report speak in money, in the base currency (default USD). The window starts when the youngest holding starts, and the report says so.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: The numbered report
  • portfolio_structureHow many independent bets a portfolio's holdings add up to, from how their prices moved together rather than how many tickers there are, and each holding's share of the risk beside…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How many independent bets a portfolio's holdings add up to, from how their prices moved together rather than how many tickers there are, and each holding's share of the risk beside its share of the money, over the full record and over recent years. Use it for 'am I diversified?' or 'which holding carries the risk?'; measure_portfolio includes this with look-through and crises. Weights or amounts give the same answer here; base sets the currency the prices are compared in (default USD). The window is set by the youngest holding.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: How many real bets, and who carries the risk
  • return_historyWhat one portfolio returned over its record: growth per year, before and after inflation, best and worst months and years, the range of any 12 months in a row, returns by month and…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What one portfolio returned over its record: growth per year, before and after inflation, best and worst months and years, the range of any 12 months in a row, returns by month and year, and how far the weights drift between rebalances. Use it for 'how did this do?'; for crises only use past_crises, for money put in every month monthly_plan. Base sets the currency the growth is measured in (default USD), which changes the result for holdings priced in other currencies. Past record only, not a forecast.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: The record, month by month
  • reverse_stressStarts from a loss the reader names and finds the least extreme combination of market moves that would produce it on this portfolio, beside the worst each of those moves actually d…1 finding

    Why it is in this group

    • The description's first verb is "start": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "reverse_stress" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "start": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Starts from a loss the reader names and finds the least extreme combination of market moves that would produce it on this portfolio, beside the worst each of those moves actually did in the record. Use it for 'what would it take to lose that much?'; for what past crises actually did use past_crises. loss is a fraction (0.25 is a quarter); base sets the currency (default USD). No probability is computed: the answer says how large the moves would be, not how likely.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: What it would take to lose that much
  • sweep_holdingOne holding already in the portfolio, measured at every weight from none to all, with the rest of the money shared out in proportion: volatility, the holding's share of the risk an…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    One holding already in the portfolio, measured at every weight from none to all, with the rest of the money shared out in proportion: volatility, the holding's share of the risk and the number of independent bets at each point. Use it for 'how much of this is enough to change anything?'; for one specific change use test_a_change, for a holding not yet owned check_before_you_buy. ticker must be one of the holdings; base sets the currency (default USD). It never says which weight to hold.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: One holding across its whole range
  • test_a_changeAny change to one portfolio, measured before it is made: the current and the proposed holdings side by side on the same price history (structure, risk, worst falls, and what the ch…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Any change to one portfolio, measured before it is made: the current and the proposed holdings side by side on the same price history (structure, risk, worst falls, and what the change adds or removes). For a single new holding, check_before_you_buy says more; for one holding at every weight, sweep_holding. current and proposed are the two sets of holdings; start and end, when given, fix the window instead of the longest shared one. The 'after' figures are counterfactual. Never says whether to make the change.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Before and after a proposed change
  • walk_forwardWhether re-optimising an allocation would have helped: fit on the years before each date, hold on prices it had not seen, repeat, and compare that record with the portfolio actuall…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Whether re-optimising an allocation would have helped: fit on the years before each date, hold on prices it had not seen, repeat, and compare that record with the portfolio actually held and with equal weights. Use it only when the reader asks whether an optimiser would have beaten what they hold; it is not for choosing weights. tickers are the candidates (2 to 30); holdings, if given, is the portfolio compared against; objective picks what each fit maximises (default max_sharpe); train_years and step_months set how much history each fit uses and how often it refits. Returns the record, never an allocation to hold.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Would refitting have helped? (out of sample)
Only reads 3Claude Code: allow
  • compare_portfoliosTwo to eight separate portfolios measured over one shared window of price history: growth, volatility, worst fall, and how each moved against the others.No findings

    Why it is in this group

    • The name "compare_portfolios" says "compare": a word for reading.
    Description, as the server wrote it
    Two to eight separate portfolios measured over one shared window of price history: growth, volatility, worst fall, and how each moved against the others. Use it for separate portfolios; for a before-and-after of one portfolio, test_a_change. Give each portfolio a short label so the answer can refer to it; base sets the one currency all are measured in (default USD). Says what each was; does not say which to hold.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Compare portfolios side by side
  • search_symbolsFinds the ticker when the reader gives a name, part of a ticker or an ISIN (for example 'Vanguard total world' gives VT), with the exchange each listing trades on.No findings

    Why it is in this group

    • The name "search_symbols" says "search": a word for reading.
    Description, as the server wrote it
    Finds the ticker when the reader gives a name, part of a ticker or an ISIN (for example 'Vanguard total world' gives VT), with the exchange each listing trades on. Use it first when a ticker is uncertain; for a list of tickers already written down, validate_symbols. base, when given, puts the listings in that currency first. Listings nobody here has checked are marked unchecked.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Find a ticker by name
  • validate_symbolsChecks a list of tickers before a measurement: which have usable price history, which do not, and the closest listing where a symbol is ambiguous.No findings

    Why it is in this group

    • The name "validate_symbols" says "validate": a word for reading.
    Description, as the server wrote it
    Checks a list of tickers before a measurement: which have usable price history, which do not, and the closest listing where a symbol is ambiguous. Use it when the tickers are already written down; when only a name is known, search_symbols. base puts the listing in that currency first where a symbol trades in several (default USD). It measures nothing.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Check symbols before measuring

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.5.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http folionomiq https://folionomiq.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__folionomiq__compare_portfolios",
      "mcp__folionomiq__search_symbols",
      "mcp__folionomiq__validate_symbols"
    ],
    "ask": [
      "mcp__folionomiq__measure_portfolio",
      "mcp__folionomiq__test_a_change",
      "mcp__folionomiq__portfolio_structure",
      "mcp__folionomiq__look_through",
      "mcp__folionomiq__past_crises",
      "mcp__folionomiq__portfolio_report",
      "mcp__folionomiq__factor_exposure",
      "mcp__folionomiq__currency_effect",
      "mcp__folionomiq__health_axes",
      "mcp__folionomiq__sweep_holding",
      "mcp__folionomiq__reverse_stress",
      "mcp__folionomiq__return_history",
      "mcp__folionomiq__plain_findings",
      "mcp__folionomiq__last_price",
      "mcp__folionomiq__asset_info",
      "mcp__folionomiq__monthly_plan",
      "mcp__folionomiq__walk_forward",
      "mcp__folionomiq__check_before_you_buy",
      "mcp__folionomiq__living_off_it"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as folionomiq. Review it before you use it.