_ registry / mcp streamable-http · checked 3h ago

Folionomiq

https://folionomiq.com

Registry code: 17e91b669ca7c054

api record

Measures an investment portfolio from its price history: how many independent bets it really holds, which holding carries the risk, what it owns through its funds, and what past crises did to that money. Descriptive only: no forecast, no buy/sell/hold advice, no score of how good a portfolio is. It fits any question that names tickers, a fund or a portfolio: its risk, what past crises did to it, overlap between funds, withdrawals in retirement, a monthly investing plan, or one ETF or stock on its own; the figures are measured on those exact holdings rather than recalled. `measure_portfolio`…

endpoint
https://folionomiq.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Folionomiq live?
Yes — it answered the hub's last check (checked 3h ago). It answered 100% of checks over the last 30 days.
Is Folionomiq free to use?
Yes — the hub reached it with no key and no payment.
What tools does Folionomiq have?
22 tools: search_symbols, compare_portfolios, validate_symbols, look_through, sweep_holding, reverse_stress, last_price, asset_info, ….
Is Folionomiq safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.5%

90 days 99.2%· all time 99.2%

latency
781ms

last good check

priced tools
0

of 22 tools

_ answered our checks, 90 days 376 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • measure an investment portfolio risk
  • check a holding before buying
  • replay a portfolio through past crises
  • compare portfolios
  • see what a portfolio owns through funds
takes → gives
text, data → data, text
tools
22 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 22 tools
22 never probed 0 of 22 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • search_symbols reads unknown 21h ago

    Finds tickers from a name, part of a ticker or an ISIN, with the exchange of each listing. In: one search phrase. Out: up to ten listings, those not yet checked marked as such. Typical questions: 'What's the ticker for Vanguard FTSE All-World?'; 'Find IE00BK5BQT80.'; 'Is there a euro listing of the Nasdaq 100 ETF?'. Instead: when the tickers are already written down, validate_symbols. A bare US-style symbol can name a different fund than a European one with the same letters (EQQQ is a US ProShares fund; the Invesco UCITS fund is EQQQ.DE / EQQQ.L): give the exchange suffix. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "search_symbolsArguments",
      "required": [
        "query"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "query": {
          "type": "string",
          "title": "Query",
          "maxLength": 40,
          "description": "A fund or company name, a ticker, or an ISIN."
        }
      }
    }
    arguments 28 lines
  • compare_portfolios reads unknown 14h ago

    Two to eight separate portfolios on one shared window of prices. In: {label: {ticker: weight}}. Out: growth, volatility, worst fall, and how each moved against the others. Typical questions: 'Compare 60/40 with an all-world fund.'; 'Which of these three mixes fell less in 2022?'; 'Put my portfolio next to the S&P 500.'. Instead: for one portfolio before and after a change, test_a_change or check_before_you_buy. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "compare_portfoliosArguments",
      "required": [
        "portfolios"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "portfolios": {
          "type": "object",
          "title": "Portfolios",
          "description": "Two to eight portfolios, {label: {ticker: weight}}. Labels are shortened to letters and digits.",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        }
      }
    }
    arguments 33 lines
  • validate_symbols reads unknown 18h ago

    Checks tickers before a measurement. In: up to 150 tickers. Out: which have usable price history, their trading currency, and the closest listings for those that do not. Typical questions: 'Check these tickers before you measure: VWCE, EQQQ, CSPX.'; 'Are VTI and BND valid?'; 'Which of these symbols can you price?'. Instead: when only a name is known, search_symbols. It measures nothing. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "validate_symbolsArguments",
      "required": [
        "tickers"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "tickers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Tickers",
          "maxItems": 150,
          "description": "Tickers to check, up to 150."
        }
      }
    }
    arguments 31 lines
  • look_through reads unknown 14h ago

    The companies a portfolio owns through its funds, added up across funds. In: holdings. Out: the largest companies with their share of the whole portfolio, companies reached through more than one fund, the part of the money that buys a company a second time, sectors, and how much of the money could be named. Typical questions: 'How much do my ETFs overlap?'; 'What companies do I really own through VTI, QQQ and VXUS?'; 'How much NVIDIA do I hold through my funds?'. Instead: for one fund on its own, asset_info. Figures are minimums where a fund shows only its largest holdings; the answer says how much of the money is named. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "look_throughArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • sweep_holding reads unknown 21h ago

    One holding already in the portfolio, measured at every weight from none to all, the rest of the money shared out in proportion: volatility, its share of the risk and the number of independent bets at each point. Typical questions: 'How much BND does it take to change anything?'; 'Show me my portfolio with 0% to 100% QQQ.'; 'At what weight does gold start to matter here?'. Instead: for one specific change, test_a_change. For a holding not yet owned, check_before_you_buy. It never says which weight to hold. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "sweep_holdingArguments",
      "required": [
        "holdings",
        "ticker"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "ticker": {
          "type": "string",
          "title": "Ticker",
          "maxLength": 20,
          "description": "The holding to sweep; must be one of `holdings`."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 37 lines
  • reverse_stress reads unknown 25h ago

    Starts from a loss the reader names and finds the least extreme combination of market moves that would cause it on this portfolio, beside the worst each move actually did in the record; also each single company on its own. Typical questions: 'What would it take to lose 30%?'; 'A third of my portfolio is my employer's stock: what would a crash in it take from me?'; 'How bad would markets have to get for me to lose a quarter?'. Instead: for what past crises actually did, past_crises. No probability is computed: it says how large the moves would be, not how likely. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "reverse_stressArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "loss": {
          "type": "number",
          "title": "Loss",
          "default": 0.2,
          "maximum": 0.95,
          "description": "The loss to explain, as a fraction: 0.25 = lose a quarter.",
          "exclusiveMinimum": 0.005
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 38 lines
  • last_price reads unknown 21h ago

    The latest daily close for each ticker, in its own currency and in the base currency, with the date. Typical questions: 'What's the last price of VWCE?'; 'Turn 120 shares of VTI into dollars.'; 'Latest close for these tickers.'. Instead: for history and figures of one asset, asset_info. One price per ticker, no history. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "last_priceArguments",
      "required": [
        "tickers"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "tickers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Tickers",
          "maxItems": 50,
          "description": "Tickers, up to 50."
        }
      }
    }
    arguments 31 lines
  • asset_info reads unknown never probed

    One fund or share on its own: name, type, exchange, yearly cost when published, measured return, volatility and worst fall, and for a fund its largest holdings and sectors. Typical questions: 'What is EQQQ.DE?'; 'Tell me about this ETF before I add it.'; 'What's inside VXUS?'. Instead: for a whole portfolio's companies, look_through. Non-US listings need the exchange suffix (VWCE.DE, IWDA.AS); search_symbols finds it. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "asset_infoArguments",
      "required": [
        "ticker"
      ],
      "properties": {
        "ticker": {
          "type": "string",
          "title": "Ticker",
          "maxLength": 20,
          "description": "One ticker, as the exchange lists it."
        }
      }
    }
    arguments 15 lines
  • monthly_plan reads unknown 10h ago

    The same amount bought on the first trading day of each month, replayed on a portfolio's own history with dividends reinvested: what it became against what was put in, the deepest point below the money put in, and the same plan from every possible starting January. Typical questions: 'If I put $500 a month into these, what would it have become?'; 'Dollar-cost averaging into VTI since 2007?'; 'Monthly investing: what was the hardest stretch?'. Instead: for withdrawals, living_off_it. For the record itself, return_history. Before taxes and fees. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "monthly_planArguments",
      "required": [
        "holdings",
        "monthly"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "start": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 2100,
              "minimum": 1900
            },
            {
              "type": "null"
            }
          ],
          "title": "Start",
          "default": null,
          "description": "The year whose January the plan starts in; the record's first whole January when absent."
        },
        "monthly": {
          "type": "number",
          "title": "Monthly",
          "maximum": 1000000000,
          "description": "Amount bought every month, in the base currency.",
          "exclusiveMinimum": 0
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 53 lines
  • check_before_you_buy reads unknown never probed

    Before adding one new holding to a portfolio: how much of it is already owned through the current funds, whether it adds an independent bet, what past crises would have done with it, and a decision sheet with three columns: now, the same money kept as cash, the money in the new holding. Typical questions: 'I'm thinking of adding $10,000 of QQQ with new cash: what changes versus keeping it in cash?'; 'Check before I buy SCHD.'; 'Test adding an ETF to my portfolio.'. Instead: for selling, reweighting or several changes at once, test_a_change. The 'after' portfolio was never held; it never says whether to buy. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "check_before_you_buyArguments",
      "required": [
        "holdings",
        "add",
        "amount"
      ],
      "properties": {
        "add": {
          "type": "string",
          "title": "Add",
          "maxLength": 20,
          "description": "The one ticker being considered."
        },
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "amount": {
          "type": "number",
          "title": "Amount",
          "description": "How much of it, in the same units as `holdings` (money when holdings are amounts).",
          "exclusiveMinimum": 0
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 61 lines
  • health_axes reads unknown 3h ago

    One portfolio read along three separate questions: what its risk is built from, how it behaved when markets broke, and what it returned for the risk taken, each with its own figures and no overall score. Typical questions: 'Is anything off in how my portfolio is built?'; 'How did this hold up in bad markets, and was the return worth the swings?'; 'Check the construction of this portfolio.'. Instead: for the full measurement, measure_portfolio. An axis without enough history comes back without a reading. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "health_axesArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • portfolio_report reads unknown 3h ago

    The written report on one portfolio, every figure numbered F1, F2… beside its method and window. In: holdings. Out: a text to quote or keep. Typical questions: 'Write me a report on this portfolio I can keep.'; 'Give me the numbers with their sources.'; 'A citable summary of my portfolio, please.'. Instead: for the full structured measurement, measure_portfolio (which includes this report). For a few plain sentences, plain_findings. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "portfolio_reportArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • portfolio_structure reads unknown 3h ago

    How many independent bets a portfolio's holdings make, 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 recent years. Shares of the risk are Euler contributions and add up to 100%. Typical questions: 'Am I really diversified?'; 'Which of my holdings is behind most of the risk?'; 'Do my four funds move as one?'. Instead: for the companies inside the funds, look_through. For everything at once, measure_portfolio. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "portfolio_structureArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • currency_effect reads unknown 10h ago

    For a portfolio held in one currency but priced partly in others: how much is outside the base currency, and what exchange rates added to growth, volatility and the worst fall, against the same holdings currency-hedged. Typical questions: 'I'm in euros but hold US funds: what did the dollar do to me?'; 'How much currency risk is in this?'; 'Hedged or not, what was the difference?'. Limits: Only when some holdings are priced in another currency than the holder's. base must be set to the holder's currency. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "currency_effectArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • factor_exposure reads unknown 7h ago

    How a portfolio's daily moves line up with four common patterns: the market, small versus large, value versus growth, momentum. Out: each sensitivity, whether it can be told from zero, and how much of the movement the four explain. Typical questions: 'Am I a growth investor without knowing it?'; 'What style is my portfolio really exposed to?'; 'Is this tilted to small caps?'. Instead: for the number of independent bets, portfolio_structure. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "factor_exposureArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • measure_portfolio reads unknown 10h ago

    The full measurement of one portfolio in one call. In: holdings as weights or money amounts. Out: how many independent bets they make, each holding's share of the risk beside its share of the money, the companies owned through the funds, what past crises did and how long recovery took, and the numbered report. Typical questions: 'Analyze my portfolio: 60% VTI, 30% VXUS, 10% BND.'; 'What should I know about what I hold?'; 'Give me the full picture of this portfolio.'. Instead: for one narrow question use the narrower tool: portfolio_structure (spread of risk), look_through (companies), past_crises (crashes). For a quotable text with numbered figures, portfolio_report. For the shortest answer, plain_findings. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "measure_portfolioArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • plain_findings reads unknown 7h ago

    Three or four plain sentences about one portfolio, how its risk is built and its worst historical fall, each with its window. Typical questions: 'Explain my portfolio simply.'; 'In plain words, what should I know?'; 'I'm new to investing: what does this portfolio look like?'. Instead: for the figures in full, measure_portfolio. For a quotable numbered report, portfolio_report. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "plain_findingsArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • test_a_change reads unknown 18h ago

    Any change to one portfolio, measured before it is made: current and proposed holdings side by side on the same prices. In: two sets of holdings. Out: structure, share of the risk, falls in past crises, and what the change adds or removes; the figures are in the structured result. Typical questions: 'What happens if I sell half my QQQ and buy BND?'; 'Compare my portfolio now with this rebalanced version.'; 'I want to swap VXUS for VWO: before and after?'. Instead: for adding ONE new holding (how much of it is already owned, and a 'kept as cash' column) use check_before_you_buy. For one holding at every weight, sweep_holding. For separate unrelated portfolios, compare_portfolios. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "test_a_changeArguments",
      "required": [
        "current",
        "proposed"
      ],
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "End",
          "default": null,
          "description": "Optional window end, YYYY-MM-DD."
        },
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start",
          "default": null,
          "description": "Optional window start, YYYY-MM-DD."
        },
        "current": {
          "type": "object",
          "title": "Current",
          "description": "What is held now, {ticker: weight}.",
          "additionalProperties": {
            "type": "number"
          }
        },
        "proposed": {
          "type": "object",
          "title": "Proposed",
          "description": "What would be held after the change, {ticker: weight}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 65 lines
  • past_crises reads unknown 7h ago

    What past crises did to one portfolio held as it is today: 2008, 2020, 2022 and the others inside its price history. In: holdings. Out: for each crisis the deepest fall, the worst day and the days until the previous high came back; crises before a holding existed are named as not tested. Typical questions: 'How much would 2008 have cost me with 60% VTI, 20% VXUS, 20% BND?'; 'What did the 2020 crash do to this mix?'; 'Simulate a market crash on my portfolio.'. Instead: for a loss chosen by the reader ('what would it take to lose 30%?'), reverse_stress. For the whole record, return_history. Holdings in money give each fall in money; in percentages the falls are percentages. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "past_crisesArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • return_history reads unknown 25h ago

    What one portfolio returned over its record: growth per year before and after inflation, best and worst months and years, every 12-month stretch, returns by month and year, and weight drift between rebalances. Typical questions: 'How did this portfolio do over the years?'; 'What was its worst year?'; 'Returns after inflation, please.'. Instead: for crises only, past_crises. For money put in every month, monthly_plan. Past record, not a forecast. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "return_historyArguments",
      "required": [
        "holdings"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    }
    arguments 47 lines
  • living_off_it reads unknown 18h ago

    A yearly withdrawal, raised with real inflation, replayed from every start month the 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 in the record. Typical questions: 'Can I live off $1M taking $40,000 a year for 30 years?'; 'Would a 4% withdrawal have lasted on this portfolio?'; 'How long would this money have lasted in retirement?'. Instead: for money put in every month instead, monthly_plan. A count of past starts, never a probability. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "living_off_itArguments",
      "required": [
        "holdings",
        "withdrawal"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "units": {
          "anyOf": [
            {
              "enum": [
                "money",
                "weights"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Units",
          "default": null,
          "description": "What the holdings' numbers are: 'money' (amounts in the base currency) or 'weights' (percentages or fractions). Omitted: holdings adding up to 1 or 100 are read as percentages, anything else as money, and the answer says so."
        },
        "years": {
          "type": "integer",
          "title": "Years",
          "default": 30,
          "maximum": 50,
          "minimum": 5,
          "description": "How many years, 5 to 50."
        },
        "amount": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "title": "Amount",
          "default": null,
          "description": "How much is in the portfolio, when `holdings` are weights rather than money."
        },
        "holdings": {
          "type": "object",
          "title": "Holdings",
          "description": "What is held: {ticker: number}, 1 to 100 holdings. Weights in any scale (60/20/20 or 0.6/0.2/0.2) or money amounts in the base currency (60000/20000/20000): `units` says which; without it, holdings adding up to 1 or 100 are read as percentages, anything else as money, which makes the falls come out in money. Tickers as the exchange lists them (VOO, VWCE.DE, EQQQ.DE, XAW.TO; 'CASH.USD' for cash). Example: {\"VTI\": 60, \"VXUS\": 20, \"BND\": 20}.",
          "additionalProperties": {
            "type": "number"
          }
        },
        "withdrawal": {
          "type": "number",
          "title": "Withdrawal",
          "description": "Taken each year, in today's money; raised with the real price index of the base currency.",
          "exclusiveMinimum": 0
        }
      }
    }
    arguments 76 lines
  • walk_forward reads unknown 14h ago

    Whether re-optimising an allocation would have helped: fit on the years before each date, hold on prices not yet seen, repeat, and compare with the portfolio held and with equal weights. Typical questions: 'Would an optimiser have beaten my portfolio?'; 'Test max-Sharpe out of sample on these funds.'; 'Does rebalancing to an optimised mix help?'. Limits: Only for that question; it is not for choosing weights and returns no allocation to hold. It does not recommend, predict or calculate tax.

    mcp-tool

    {
      "type": "object",
      "title": "walk_forwardArguments",
      "required": [
        "tickers"
      ],
      "properties": {
        "base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base",
          "default": null,
          "description": "Currency code every figure is expressed in: USD, EUR, GBP, CAD… Default USD."
        },
        "tickers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Tickers",
          "maxItems": 30,
          "minItems": 2,
          "description": "The candidate holdings, 2 to 30."
        },
        "holdings": {
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "type": "number"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "Holdings",
          "default": null,
          "description": "Optional: the portfolio actually held, {ticker: weight}, measured on the same span for comparison."
        },
        "objective": {
          "type": "string",
          "title": "Objective",
          "default": "max_sharpe",
          "description": "What each refit maximises or minimises: max_sharpe, min_variance, min_drawdown, min_cvar or max_quadratic_utility."
        },
        "step_months": {
          "type": "integer",
          "title": "Step Months",
          "default": 12,
          "maximum": 36,
          "minimum": 1,
          "description": "Months each fitted mix is held."
        },
        "train_years": {
          "type": "number",
          "title": "Train Years",
          "default": 3,
          "maximum": 15,
          "minimum": 1,
          "description": "Years of history each refit sees."
        }
      }
    }
    arguments 70 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 17e91b669ca7c054.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/17e91b669ca7c054/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/17e91b669ca7c054/badge.svg)](https://brick.blue/agent/17e91b669ca7c054?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.