
Historical dollar-cost-averaging simulator for Bitcoin and other assets.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run up to 5 plans over the same data and rank them by final value (2 without a signed-in Pro account or a Pro API key). Use to compare assets, cadences or start dates side by side. One share_url opens them all together.
The plans to compare: up to 2 anonymously or on a Free-account key, up to 5 with a signed-in Pro account or a Pro API key.
Chart overlays carried into share_url, and the figures they add to each summary. Flags marked "Pro only" need a signed-in Pro account or a Pro API key; without one, the call returns an error naming the setting.
Run up to 5 plans over the same data and rank them by final value (2 without a signed-in Pro account or a Pro API key). Use to compare assets, cadences or start dates side by side. One share_url opens them all together.
| Argument | Type | Description |
|---|---|---|
| as_of | string | |
| plans* | array | The plans to compare: up to 2 anonymously or on a Free-account key, up to 5 with a signed-in Pro account or a Pro API key. |
| include | object | |
| settings | object | Chart overlays carried into share_url, and the figures they add to each summary. Flags marked "Pro only" need a signed-in Pro account or a Pro API key; without one, the call returns an error naming the setting. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"plans"
],
"properties": {
"as_of": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"asset",
"amount",
"start_date"
],
"properties": {
"type": {
"enum": [
"dca",
"lump-sum"
],
"type": "string",
"description": "\"dca\" repeats on the schedule; \"lump-sum\" buys once at the start. Default \"dca\"."
},
"asset": {
"type": "string",
"description": "Asset key from list_assets, e.g. \"btc_daily\", \"Ethereum\", \"S&P 500\"."
},
"amount": {
"type": "number",
"description": "USD per contribution, or the single amount for lump-sum.",
"exclusiveMinimum": 0
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Window end. Defaults to the last loaded close, never a relative \"today\"."
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly",
"quarterly"
],
"type": "string",
"description": "Contribution cadence. Default \"monthly\". Quarterly is the coarsest offered: wider gaps behave like a few lump sums (see the knowledge base, \"The gap between buys\")."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First scheduled contribution."
},
"wait_periods": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Save this many scheduled contributions as cash before the first purchase."
},
"last_buy_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Stop buying here and hold to end_date."
}
},
"additionalProperties": false
},
"maxItems": 5,
"minItems": 1,
"description": "The plans to compare: up to 2 anonymously or on a Free-account key, up to 5 with a signed-in Pro account or a Pro API key."
},
"include": {
"type": "object",
"properties": {
"ledger": {
"enum": [
"none",
"head",
"all"
],
"type": "string",
"description": "Per-purchase rows: \"none\" (default), \"head\" (first 20), \"all\" (capped at 200)."
},
"checkpoints": {
"enum": [
"yearly",
"none"
],
"type": "string",
"description": "End-of-year value points. Default \"yearly\"."
}
},
"additionalProperties": false
},
"settings": {
"type": "object",
"properties": {
"cpi": {
"type": "boolean",
"description": "Pro only. Inflation arm: what the contributed cash is worth after CPI-U. Adds cash_after_cpi to the summary and the overlay to share_url."
},
"fng": {
"type": "boolean",
"description": "Draw the Fear & Greed overlay on the shared chart."
},
"log": {
"type": "boolean",
"description": "Log scale on the shared chart."
},
"lump": {
"type": "boolean",
"description": "Pro only. Lump-sum benchmark: the same total bought at once on day one. Adds lump_sum_equivalent_final_value to the summary and the overlay to share_url."
},
"risk": {
"type": "boolean",
"description": "Pro only. Adds annualized sharpe and sortino to the summary."
},
"mayer": {
"type": "boolean",
"description": "Pro only. Mayer Multiple overlay on the shared chart."
},
"smart": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"low": {
"type": "number",
"description": "Lower threshold, from the signal's own list — mayer 0.5/0.6/0.7/0.8/0.9/1/1.2/1.5/2/2.4/3; fng 10/20/25/30/40/45/55/60/70/75/80/90; dd 10/20/30/40/50/60/70/80. Defaults mayer 0.8, fng 25, dd 20."
},
"bank": {
"type": "boolean",
"description": "Hold and deploy: the cash a band below 1× withholds is kept and spent on the next purchase the rule does not scale down, and counts as invested from the day it was scheduled. With no band above 1× the rule then invests the same total as flat purchases, so final value is comparable too. Any pile still standing at the end is reported as cash_held. Default false."
},
"high": {
"type": "number",
"description": "Upper threshold, from the same list and above low. Defaults mayer 2.4, fng 75, dd 50."
},
"above": {
"type": "number",
"description": "Multiplier when the reading is over high, same list. Defaults: mayer 0 and fng 0 (skip the euphoric top), dd 2 (double in a deep drawdown)."
},
"below": {
"type": "number",
"description": "Multiplier on the scheduled amount when the reading is under low: one of 0, 0.25, 0.5, 1, 2, 3, 4, 6. 0 skips the purchase (that money is not invested)."
},
"signal": {
"enum": [
"mayer",
"fng",
"dd"
],
"type": "string",
"description": "Which reading decides each purchase. mayer (default): price vs its 200-day average, Bitcoin, Ethereum, Solana and XRP. fng: the alternative.me Fear & Greed index (0-100), the same four assets. dd: percent below the running high close, any market asset (not bonds or index levels)."
},
"between": {
"type": "number",
"description": "Multiplier when the reading is between the thresholds, same list. Default 1."
}
},
"additionalProperties": false
}
],
"description": "Pro only. Buy rule: a signal read on each purchase date, two thresholds, and a multiplier for each of the three bands they make. `true` is the Mayer default (0.8/2.4 — buy as usual, skip above 2.4); an object sets its own. Adds `rule` and `rule_finding` (cost per unit against flat purchases from fixed starts) to the summary and the rule to share_url."
}
},
"description": "Chart overlays carried into share_url, and the figures they add to each summary. Flags marked \"Pro only\" need a signed-in Pro account or a Pro API key; without one, the call returns an error naming the setting.",
"additionalProperties": false
}
},
"additionalProperties": false
}The vintage of the loaded price data and how often it refreshes.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Assets this endpoint can simulate, with the date each series starts and ends. Call before composing a plan so start dates fall inside coverage.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Simulate one dollar-cost-averaging plan against real historical closes. Returns totals, end-of-year checkpoints and a share_url that opens the same run in the app.
| Argument | Type | Description |
|---|---|---|
| type | string | "dca" repeats on the schedule; "lump-sum" buys once at the start. Default "dca". |
| as_of | string | Pin the answer to this data vintage so the share link keeps returning the same number. |
| asset* | string | Asset key from list_assets, e.g. "btc_daily", "Ethereum", "S&P 500". |
| amount* | number | USD per contribution, or the single amount for lump-sum. |
| include | object | |
| end_date | string | Window end. Defaults to the last loaded close, never a relative "today". |
| settings | object | Chart overlays carried into share_url, and the figures they add to each summary. Flags marked "Pro only" need a signed-in Pro account or a Pro API key; without one, the call returns an error naming the setting. |
| frequency | string |
| Contribution cadence. Default "monthly". Quarterly is the coarsest offered: wider gaps behave like a few lump sums (see the knowledge base, "The gap between buys"). |
| start_date* | string | First scheduled contribution. |
| wait_periods | integer | Save this many scheduled contributions as cash before the first purchase. |
| last_buy_date | string | Stop buying here and hold to end_date. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"asset",
"amount",
"start_date"
],
"properties": {
"type": {
"enum": [
"dca",
"lump-sum"
],
"type": "string",
"description": "\"dca\" repeats on the schedule; \"lump-sum\" buys once at the start. Default \"dca\"."
},
"as_of": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Pin the answer to this data vintage so the share link keeps returning the same number."
},
"asset": {
"type": "string",
"description": "Asset key from list_assets, e.g. \"btc_daily\", \"Ethereum\", \"S&P 500\"."
},
"amount": {
"type": "number",
"description": "USD per contribution, or the single amount for lump-sum.",
"exclusiveMinimum": 0
},
"include": {
"type": "object",
"properties": {
"ledger": {
"enum": [
"none",
"head",
"all"
],
"type": "string",
"description": "Per-purchase rows: \"none\" (default), \"head\" (first 20), \"all\" (capped at 200)."
},
"checkpoints": {
"enum": [
"yearly",
"none"
],
"type": "string",
"description": "End-of-year value points. Default \"yearly\"."
}
},
"additionalProperties": false
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Window end. Defaults to the last loaded close, never a relative \"today\"."
},
"settings": {
"type": "object",
"properties": {
"cpi": {
"type": "boolean",
"description": "Pro only. Inflation arm: what the contributed cash is worth after CPI-U. Adds cash_after_cpi to the summary and the overlay to share_url."
},
"fng": {
"type": "boolean",
"description": "Draw the Fear & Greed overlay on the shared chart."
},
"log": {
"type": "boolean",
"description": "Log scale on the shared chart."
},
"lump": {
"type": "boolean",
"description": "Pro only. Lump-sum benchmark: the same total bought at once on day one. Adds lump_sum_equivalent_final_value to the summary and the overlay to share_url."
},
"risk": {
"type": "boolean",
"description": "Pro only. Adds annualized sharpe and sortino to the summary."
},
"mayer": {
"type": "boolean",
"description": "Pro only. Mayer Multiple overlay on the shared chart."
},
"smart": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"low": {
"type": "number",
"description": "Lower threshold, from the signal's own list — mayer 0.5/0.6/0.7/0.8/0.9/1/1.2/1.5/2/2.4/3; fng 10/20/25/30/40/45/55/60/70/75/80/90; dd 10/20/30/40/50/60/70/80. Defaults mayer 0.8, fng 25, dd 20."
},
"bank": {
"type": "boolean",
"description": "Hold and deploy: the cash a band below 1× withholds is kept and spent on the next purchase the rule does not scale down, and counts as invested from the day it was scheduled. With no band above 1× the rule then invests the same total as flat purchases, so final value is comparable too. Any pile still standing at the end is reported as cash_held. Default false."
},
"high": {
"type": "number",
"description": "Upper threshold, from the same list and above low. Defaults mayer 2.4, fng 75, dd 50."
},
"above": {
"type": "number",
"description": "Multiplier when the reading is over high, same list. Defaults: mayer 0 and fng 0 (skip the euphoric top), dd 2 (double in a deep drawdown)."
},
"below": {
"type": "number",
"description": "Multiplier on the scheduled amount when the reading is under low: one of 0, 0.25, 0.5, 1, 2, 3, 4, 6. 0 skips the purchase (that money is not invested)."
},
"signal": {
"enum": [
"mayer",
"fng",
"dd"
],
"type": "string",
"description": "Which reading decides each purchase. mayer (default): price vs its 200-day average, Bitcoin, Ethereum, Solana and XRP. fng: the alternative.me Fear & Greed index (0-100), the same four assets. dd: percent below the running high close, any market asset (not bonds or index levels)."
},
"between": {
"type": "number",
"description": "Multiplier when the reading is between the thresholds, same list. Default 1."
}
},
"additionalProperties": false
}
],
"description": "Pro only. Buy rule: a signal read on each purchase date, two thresholds, and a multiplier for each of the three bands they make. `true` is the Mayer default (0.8/2.4 — buy as usual, skip above 2.4); an object sets its own. Adds `rule` and `rule_finding` (cost per unit against flat purchases from fixed starts) to the summary and the rule to share_url."
}
},
"description": "Chart overlays carried into share_url, and the figures they add to each summary. Flags marked \"Pro only\" need a signed-in Pro account or a Pro API key; without one, the call returns an error naming the setting.",
"additionalProperties": false
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly",
"quarterly"
],
"type": "string",
"description": "Contribution cadence. Default \"monthly\". Quarterly is the coarsest offered: wider gaps behave like a few lump sums (see the knowledge base, \"The gap between buys\")."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First scheduled contribution."
},
"wait_periods": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Save this many scheduled contributions as cash before the first purchase."
},
"last_buy_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Stop buying here and hold to end_date."
}
},
"additionalProperties": false
}