← WebMCP Directory

Tool tree

counterfactual-phi.vercel.app

Finance & CryptoTools verified
Website
WebMCP-powered decision simulator
Explore capabilities
    get_financial_stateAnswer

    Read the user's current financial assumptions, the decision they're weighing, and the goals they've asked to protect. Use this first when you need the baseline cash, income, expenses, decision cost, or protected-goal targets. This is read-only and makes no changes.

    View tool JSON
    {
      "name": "get_financial_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the user's current financial assumptions, the decision they're weighing, and the goals they've asked to protect. Use this first when you need the baseline cash, income, expenses, decision cost, or protected-goal targets. This is read-only and makes no changes.",
      "inputSchema": {
        "type": "object",
        "description": "No input required. Returns the current assumptions, the active decision, and protected goals.",
        "properties": {},
        "additionalProperties": false
      }
    }
    update_assumptionAction

    Update exactly one user-editable financial assumption (cash, income, expenses, or savings rate), then refresh all calculated futures. Use this only when the user asks to change a number or correct an assumption. This is reversible because the user can change the value again.

    View tool JSON
    {
      "name": "update_assumption",
      "kind": "act",
      "impl": "imperative",
      "description": "Update exactly one user-editable financial assumption (cash, income, expenses, or savings rate), then refresh all calculated futures. Use this only when the user asks to change a number or correct an assumption. This is reversible because the user can change the value again.",
      "inputSchema": {
        "type": "object",
        "description": "Change one financial assumption. Use only fields from the enum and provide a non-negative numeric value.",
        "properties": {
          "field": {
            "type": "string",
            "enum": [
              "cashSavings",
              "monthlyTakeHome",
              "monthlyLivingExpenses",
              "monthlySavingsContribution"
            ],
            "description": "The financial assumption to update. Choose one exact field name."
          },
          "value": {
            "type": "number",
            "minimum": 0,
            "description": "The new non-negative dollar amount for the selected assumption."
          }
        },
        "required": [
          "field",
          "value"
        ],
        "additionalProperties": false
      }
    }
    define_decisionAction

    Define or replace the decision the user is actually weighing — this is the whole point of the app, and it's the user's decision, not a fixed scenario. Give it a short name, an optional one-line description, and its all-in base cost. This resets the three canonical futures (Do It Now, Wait, Cheaper Alternative) around the new cost, but does not remove protected goals. Use this whenever the user describes a real decision they're facing, before forking any futures for it.

    View tool JSON
    {
      "name": "define_decision",
      "kind": "act",
      "impl": "imperative",
      "description": "Define or replace the decision the user is actually weighing — this is the whole point of the app, and it's the user's decision, not a fixed scenario. Give it a short name, an optional one-line description, and its all-in base cost. This resets the three canonical futures (Do It Now, Wait, Cheaper Alternative) around the new cost, but does not remove protected goals. Use this whenever the user describes a real decision they're facing, before forking any futures for it.",
      "inputSchema": {
        "type": "object",
        "description": "Define or replace the decision being weighed. This does not execute anything — it just sets what the rest of the app compares futures against.",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Short human-readable name for the decision, e.g. 'Buy a Tesla Model 3 in cash', 'Take 3 months unpaid leave', 'Put a deposit on a house'."
          },
          "description": {
            "type": "string",
            "description": "Optional one-line context for the decision."
          },
          "baseCost": {
            "type": "number",
            "minimum": 0,
            "description": "All-in cost of doing this right now, in dollars. Used as the price for the 'Do It Now' and 'Wait' futures."
          }
        },
        "required": [
          "name",
          "baseCost"
        ],
        "additionalProperties": false
      }
    }
    set_protected_goalAction

    Add a new protected financial goal, or update the target amount of an existing one (matched by name, case-insensitive). Goals are protected in priority order — the first one added is checked first. Use this when the user names something they don't want this decision to jeopardize, e.g. an emergency fund, a deposit, a degree, a trip.

    View tool JSON
    {
      "name": "set_protected_goal",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a new protected financial goal, or update the target amount of an existing one (matched by name, case-insensitive). Goals are protected in priority order — the first one added is checked first. Use this when the user names something they don't want this decision to jeopardize, e.g. an emergency fund, a deposit, a degree, a trip.",
      "inputSchema": {
        "type": "object",
        "description": "Add a protected goal, or update its target amount if a goal with this name (case-insensitive) already exists.",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Short name for the goal, e.g. 'Emergency fund', 'Wedding fund', 'Grad school reserve'."
          },
          "targetAmount": {
            "type": "number",
            "minimum": 0,
            "description": "The non-negative dollar amount to protect for this goal."
          }
        },
        "required": [
          "name",
          "targetAmount"
        ],
        "additionalProperties": false
      }
    }
    remove_protected_goalAction

    Remove a protected goal by name (case-insensitive). Use this when the user says a goal no longer applies. Every existing future is recalculated without it.

    View tool JSON
    {
      "name": "remove_protected_goal",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a protected goal by name (case-insensitive). Use this when the user says a goal no longer applies. Every existing future is recalculated without it.",
      "inputSchema": {
        "type": "object",
        "description": "Remove a protected goal by name (case-insensitive).",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The exact name of the goal to remove."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      }
    }
    fork_scenarioAction

    Create or update a named possible future for the active decision. Provide a human-readable name, purchase price, and wait time in months — any price and wait period, not just the three defaults, so the user can explore a future that's actually theirs. The result predicts cash remaining, protected-goal status, risk level, and an explanation. This is simulation only and does not commit the user to anything.

    View tool JSON
    {
      "name": "fork_scenario",
      "kind": "act",
      "impl": "imperative",
      "description": "Create or update a named possible future for the active decision. Provide a human-readable name, purchase price, and wait time in months — any price and wait period, not just the three defaults, so the user can explore a future that's actually theirs. The result predicts cash remaining, protected-goal status, risk level, and an explanation. This is simulation only and does not commit the user to anything.",
      "inputSchema": {
        "type": "object",
        "description": "Create or replace a simulated future for the active decision. This does not execute anything.",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Short human-readable scenario name, such as 'Do It Now', 'Wait 8 Months', or a custom name of your own."
          },
          "purchasePrice": {
            "type": "number",
            "minimum": 0,
            "description": "All-in cost for this future, in dollars."
          },
          "waitMonths": {
            "type": "number",
            "minimum": 0,
            "description": "Number of months the user waits before acting. Use 0 for doing it now."
          }
        },
        "required": [
          "name",
          "purchasePrice",
          "waitMonths"
        ],
        "additionalProperties": false
      }
    }
    compare_scenariosAction

    Compare all currently forked futures and identify the strongest option based on protected goals and risk. Use this after creating or updating scenarios. This is read-only and does not take action on the recommendation.

    View tool JSON
    {
      "name": "compare_scenarios",
      "kind": "act",
      "impl": "imperative",
      "description": "Compare all currently forked futures and identify the strongest option based on protected goals and risk. Use this after creating or updating scenarios. This is read-only and does not take action on the recommendation.",
      "inputSchema": {
        "type": "object",
        "description": "No input required. Compares all current futures and returns the recommended scenario.",
        "properties": {},
        "additionalProperties": false
      }
    }
    simulate_purchaseSensitive Action

    Preview the concrete financial outcome of one existing scenario by scenarioId. Use this when the user or agent wants to inspect a specific future in detail before deciding. This is simulation only and does not execute anything.

    View tool JSON
    {
      "name": "simulate_purchase",
      "kind": "transact",
      "impl": "imperative",
      "description": "Preview the concrete financial outcome of one existing scenario by scenarioId. Use this when the user or agent wants to inspect a specific future in detail before deciding. This is simulation only and does not execute anything.",
      "inputSchema": {
        "type": "object",
        "description": "Inspect one already-created scenario without committing to it.",
        "properties": {
          "scenarioId": {
            "type": "string",
            "minLength": 1,
            "description": "The id of the scenario to simulate. Use a scenario id returned by fork_scenario or compare_scenarios."
          }
        },
        "required": [
          "scenarioId"
        ],
        "additionalProperties": false
      }
    }
    commit_scenarioAction

    Request human approval to move a selected simulated future toward commitment. This represents a consequential external action and must be used only after the user has reviewed the scenario. Calling this tool should pause at an approval step; no real transaction occurs in this hackathon demo.

    View tool JSON
    {
      "name": "commit_scenario",
      "kind": "act",
      "impl": "imperative",
      "description": "Request human approval to move a selected simulated future toward commitment. This represents a consequential external action and must be used only after the user has reviewed the scenario. Calling this tool should pause at an approval step; no real transaction occurs in this hackathon demo.",
      "inputSchema": {
        "type": "object",
        "description": "Ask the user to approve a selected scenario before any consequential commitment. No real transaction occurs in this demo.",
        "properties": {
          "scenarioId": {
            "type": "string",
            "minLength": 1,
            "description": "The id of the scenario the user has chosen to commit to. Use only after simulation/review."
          }
        },
        "required": [
          "scenarioId"
        ],
        "additionalProperties": false
      }
    }