compoundsim MCP
An official MCP server for compoundsim that allows AI assistants to run financial simulators including Monte Carlo paths, portfolio comparisons, withdrawal analysis, and fixed-rate compound interest calculations using public index data without requiring authentication.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://compoundsim.app/mcpWhat you can do with it
- Run Monte Carlo simulations for monthly investing outcomes
- Compare multiple portfolios side by side
- Simulate retirement withdrawal success rates
- Retrieve historical asset returns and volatility
Source and maintenance
Protocol and capabilities
- Server
- compoundsim 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 5 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
simulate_portfolio — Simulate monthly investing in a portfolio
Monte Carlo simulation of investing monthly (plus an optional starting sum) in one asset or a mix rebalanced monthly. Returns the range of outcomes by year (10th to 90th percentile), the deepest fall along the way, the mix's own past return and volatility, and a compoundsim.app url that shows the same scenario.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"portfolio",
"monthly"
],
"properties": {
"years": {
"type": "integer",
"default": 20,
"maximum": 60,
"minimum": 1,
"description": "Years of investing."
},
"history": {
"enum": [
"5",
"10",
"20",
"all"
],
"type": "string",
"default": "all",
"description": "The span of past monthly returns the model is fitted to: the last 5, 10 or 20 years, or all the data. An asset with less data than the span asked for uses all of its own."
},
"initial": {
"type": "number",
"default": 0,
"maximum": 1000000000000,
"minimum": 0,
"description": "Starting sum invested at once."
},
"monthly": {
"type": "number",
"maximum": 10000000000,
"minimum": 0,
"description": "Amount invested at the end of every month."
},
"currency": {
"enum": [
"USD",
"EUR",
"JPY",
"GBP",
"CNY",
"CHF",
"AUD",
"CAD",
"HKD",
"SGD",
"KRW",
"INR",
"TWD",
"BRL",
"THB",
"IDR",
"PHP",
"MYR",
"VND"
],
"type": "string",
"description": "Currency of every amount, in and out. In a currency other than USD the paths carry its exchange-rate swings against the dollar (trend removed). Defaults to the language's currency."
},
"language": {
"enum": [
"de",
"en",
"es",
"fr",
"id",
"ja",
"ko",
"pt-BR",
"th",
"vi",
"zh-Hans",
"zh-Hant"
],
"type": "string",
"default": "en",
"description": "Language of the page the returned url opens; match the user's language."
},
"portfolio": {
"anyOf": [
{
"enum": [
"sixtyForty",
"allCountry",
"allWeather"
],
"type": "string"
},
{
"type": "object",
"properties": {
"agg": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"btc": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"eem": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"efa": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"gld": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"shy": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sox": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"tlt": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"vnq": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"acwi": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"schd": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sp500": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"ndx100": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
}
],
"description": "A preset name or weights in percent by asset (any total; they are scaled to 100). Assets: sp500 = S&P 500, ndx100 = Nasdaq 100, sox = SOX (Semiconductors), schd = US dividend stocks (SCHD), acwi = MSCI ACWI, efa = Developed ex-US stocks, eem = Emerging market stocks, vnq = US REITs, gld = Gold, shy = US 1–3 year Treasuries, agg = US aggregate bonds, tlt = US long-term Treasuries, btc = Bitcoin. Presets: sixtyForty = sp500 60% + agg 40%; allCountry = acwi 100%; allWeather = sp500 30% + tlt 40% + shy 15% + gld 15%."
},
"history_to": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "Last calendar year of a custom span."
},
"history_from": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "First calendar year of a custom span (with history_to); replaces history."
},
"inflation_percent": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Annual inflation. When given, every amount out is in today's money at this rate; omitted, amounts are nominal."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}compare_portfolios — Compare portfolios side by side
Runs the same monthly-investing plan through 2 to 4 portfolios (the same simulation as simulate_portfolio) and returns each one's final outcome range, deepest fall, past return and volatility, and url, for questions like 'S&P 500 or all-country stocks?'.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"portfolios",
"monthly"
],
"properties": {
"years": {
"type": "integer",
"default": 20,
"maximum": 40,
"minimum": 1,
"description": "Years of investing."
},
"history": {
"enum": [
"5",
"10",
"20",
"all"
],
"type": "string",
"default": "all",
"description": "The span of past monthly returns the model is fitted to: the last 5, 10 or 20 years, or all the data. An asset with less data than the span asked for uses all of its own."
},
"initial": {
"type": "number",
"default": 0,
"maximum": 1000000000000,
"minimum": 0,
"description": "Starting sum invested at once."
},
"monthly": {
"type": "number",
"maximum": 10000000000,
"minimum": 0,
"description": "Amount invested at the end of every month."
},
"currency": {
"enum": [
"USD",
"EUR",
"JPY",
"GBP",
"CNY",
"CHF",
"AUD",
"CAD",
"HKD",
"SGD",
"KRW",
"INR",
"TWD",
"BRL",
"THB",
"IDR",
"PHP",
"MYR",
"VND"
],
"type": "string",
"description": "Currency of every amount, in and out. In a currency other than USD the paths carry its exchange-rate swings against the dollar (trend removed). Defaults to the language's currency."
},
"language": {
"enum": [
"de",
"en",
"es",
"fr",
"id",
"ja",
"ko",
"pt-BR",
"th",
"vi",
"zh-Hans",
"zh-Hant"
],
"type": "string",
"default": "en",
"description": "Language of the page the returned url opens; match the user's language."
},
"history_to": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "Last calendar year of a custom span."
},
"portfolios": {
"type": "array",
"items": {
"type": "object",
"required": [
"portfolio"
],
"properties": {
"label": {
"type": "string",
"description": "Name to show for this portfolio."
},
"portfolio": {
"anyOf": [
{
"enum": [
"sixtyForty",
"allCountry",
"allWeather"
],
"type": "string"
},
{
"type": "object",
"properties": {
"agg": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"btc": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"eem": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"efa": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"gld": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"shy": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sox": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"tlt": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"vnq": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"acwi": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"schd": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sp500": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"ndx100": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
}
],
"description": "A preset name or weights in percent by asset (any total; they are scaled to 100). Assets: sp500 = S&P 500, ndx100 = Nasdaq 100, sox = SOX (Semiconductors), schd = US dividend stocks (SCHD), acwi = MSCI ACWI, efa = Developed ex-US stocks, eem = Emerging market stocks, vnq = US REITs, gld = Gold, shy = US 1–3 year Treasuries, agg = US aggregate bonds, tlt = US long-term Treasuries, btc = Bitcoin. Presets: sixtyForty = sp500 60% + agg 40%; allCountry = acwi 100%; allWeather = sp500 30% + tlt 40% + shy 15% + gld 15%."
}
}
},
"maxItems": 4,
"minItems": 2,
"description": "The portfolios to compare."
},
"history_from": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "First calendar year of a custom span (with history_to); replaces history."
},
"inflation_percent": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Annual inflation. When given, every amount out is in today's money at this rate; omitted, amounts are nominal."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}simulate_withdrawal — Simulate spending down a portfolio in retirement
Monte Carlo simulation of withdrawing a yearly percentage of a starting balance, raised with inflation every month, from a portfolio (the 4% rule and its variants). Returns the share of paths that still had money at the end, when the others ran out, the remaining balance range in today's money, the success rate at withdrawal rates from 2% to 8%, and a compoundsim.app url.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"portfolio",
"balance"
],
"properties": {
"years": {
"type": "integer",
"default": 30,
"maximum": 60,
"minimum": 1,
"description": "Years the money has to last."
},
"balance": {
"type": "number",
"maximum": 1000000000000,
"minimum": 0,
"description": "Starting balance."
},
"history": {
"enum": [
"5",
"10",
"20",
"all"
],
"type": "string",
"default": "all",
"description": "The span of past monthly returns the model is fitted to: the last 5, 10 or 20 years, or all the data. An asset with less data than the span asked for uses all of its own."
},
"currency": {
"enum": [
"USD",
"EUR",
"JPY",
"GBP",
"CNY",
"CHF",
"AUD",
"CAD",
"HKD",
"SGD",
"KRW",
"INR",
"TWD",
"BRL",
"THB",
"IDR",
"PHP",
"MYR",
"VND"
],
"type": "string",
"description": "Currency of every amount, in and out. In a currency other than USD the paths carry its exchange-rate swings against the dollar (trend removed). Defaults to the language's currency."
},
"language": {
"enum": [
"de",
"en",
"es",
"fr",
"id",
"ja",
"ko",
"pt-BR",
"th",
"vi",
"zh-Hans",
"zh-Hant"
],
"type": "string",
"default": "en",
"description": "Language of the page the returned url opens; match the user's language."
},
"portfolio": {
"anyOf": [
{
"enum": [
"sixtyForty",
"allCountry",
"allWeather"
],
"type": "string"
},
{
"type": "object",
"properties": {
"agg": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"btc": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"eem": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"efa": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"gld": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"shy": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sox": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"tlt": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"vnq": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"acwi": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"schd": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"sp500": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"ndx100": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
}
],
"description": "A preset name or weights in percent by asset (any total; they are scaled to 100). Assets: sp500 = S&P 500, ndx100 = Nasdaq 100, sox = SOX (Semiconductors), schd = US dividend stocks (SCHD), acwi = MSCI ACWI, efa = Developed ex-US stocks, eem = Emerging market stocks, vnq = US REITs, gld = Gold, shy = US 1–3 year Treasuries, agg = US aggregate bonds, tlt = US long-term Treasuries, btc = Bitcoin. Presets: sixtyForty = sp500 60% + agg 40%; allCountry = acwi 100%; allWeather = sp500 30% + tlt 40% + shy 15% + gld 15%."
},
"history_to": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "Last calendar year of a custom span."
},
"history_from": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "First calendar year of a custom span (with history_to); replaces history."
},
"inflation_percent": {
"type": "number",
"default": 2,
"maximum": 20,
"minimum": 0,
"description": "Annual inflation the withdrawals rise with; balances are in today's money."
},
"withdrawal_rate_pct": {
"type": "number",
"default": 4,
"maximum": 20,
"minimum": 0,
"description": "First year's withdrawal as a percentage of the starting balance."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}simulate_fixed_rate — Compound interest at a fixed rate
Deterministic compound growth of monthly contributions (plus an optional starting sum) at a fixed annual return. Returns contributions, gains and total by year, and a compoundsim.app url. Use simulate_portfolio for the range of outcomes of real assets.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"monthly"
],
"properties": {
"years": {
"type": "integer",
"default": 20,
"maximum": 60,
"minimum": 1,
"description": "Years of investing."
},
"initial": {
"type": "number",
"default": 0,
"maximum": 1000000000000,
"minimum": 0,
"description": "Starting sum invested at once."
},
"monthly": {
"type": "number",
"maximum": 10000000000,
"minimum": 0,
"description": "Amount invested at the end of every month."
},
"currency": {
"enum": [
"USD",
"EUR",
"JPY",
"GBP",
"CNY",
"CHF",
"AUD",
"CAD",
"HKD",
"SGD",
"KRW",
"INR",
"TWD",
"BRL",
"THB",
"IDR",
"PHP",
"MYR",
"VND"
],
"type": "string",
"description": "Currency of every amount, in and out. In a currency other than USD the paths carry its exchange-rate swings against the dollar (trend removed). Defaults to the language's currency."
},
"language": {
"enum": [
"de",
"en",
"es",
"fr",
"id",
"ja",
"ko",
"pt-BR",
"th",
"vi",
"zh-Hans",
"zh-Hant"
],
"type": "string",
"default": "en",
"description": "Language of the page the returned url opens; match the user's language."
},
"annual_return_pct": {
"type": "number",
"default": 5,
"maximum": 50,
"minimum": 0,
"description": "Effective annual return (CAGR), applied as the equivalent monthly rate."
},
"inflation_percent": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Annual inflation. When given, every amount out is in today's money at this rate; omitted, amounts are nominal."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_asset_returns — Past annualised returns of assets
Annualised past returns of the assets compoundsim simulates, over the last 5, 10 or 20 years, all the data, or a calendar span: total return with dividends reinvested, price return, the dividends' share, volatility, and the return after US inflation (in USD) or the exchange rate's share of the return (in another currency).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assets": {
"type": "array",
"items": {
"enum": [
"sp500",
"ndx100",
"sox",
"schd",
"acwi",
"efa",
"eem",
"vnq",
"gld",
"shy",
"agg",
"tlt",
"btc"
],
"type": "string"
},
"minItems": 1,
"description": "Assets to include; all of them when omitted."
},
"period": {
"enum": [
"5",
"10",
"20",
"all"
],
"type": "string",
"default": "10",
"description": "The span measured: the last 5, 10 or 20 years, or all the data. An asset with less data than the span asked for uses all of its own."
},
"currency": {
"enum": [
"USD",
"EUR",
"JPY",
"GBP",
"CNY",
"CHF",
"AUD",
"CAD",
"HKD",
"SGD",
"KRW",
"INR",
"TWD",
"BRL",
"THB",
"IDR",
"PHP",
"MYR",
"VND"
],
"type": "string",
"description": "Currency of every amount, in and out. In a currency other than USD the paths carry its exchange-rate swings against the dollar (trend removed). Defaults to the language's currency."
},
"language": {
"enum": [
"de",
"en",
"es",
"fr",
"id",
"ja",
"ko",
"pt-BR",
"th",
"vi",
"zh-Hans",
"zh-Hant"
],
"type": "string",
"default": "en",
"description": "Language of the page the returned url opens; match the user's language."
},
"period_to": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "Last calendar year of a custom span."
},
"period_from": {
"type": "integer",
"maximum": 2026,
"minimum": 1994,
"description": "First calendar year of a custom span (with period_to); replaces period."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 519 ms
- 95th percentile latency
- 519 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 519 ms · metadata changed · 5 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http compoundsim-mcp https://compoundsim.app/mcpCodex
codex mcp add compoundsim-mcp --url https://compoundsim.app/mcpCursor
{
"mcpServers": {
"compoundsim-mcp": {
"url": "https://compoundsim.app/mcp"
}
}
}Cline
{
"mcpServers": {
"compoundsim-mcp": {
"type": "streamableHttp",
"url": "https://compoundsim.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"compoundsim-mcp": {
"type": "http",
"url": "https://compoundsim.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http compoundsim-mcp https://compoundsim.app/mcpClaude Desktop
{
"mcpServers": {
"compoundsim-mcp": {
"url": "https://compoundsim.app/mcp"
}
}
}Windsurf
{
"mcpServers": {
"compoundsim-mcp": {
"serverUrl": "https://compoundsim.app/mcp"
}
}
}Let your agent find its tools
Find servers like compoundsim MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run compoundsim MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.