← WebMCP Directory

Tool tree

peira.netlify.app

Health & EducationTools verified
Website
Peira — see what a raise really does. A shared lab bench where you and an AI agent probe the benefits system together.
Explore capabilities
    set_householdAction

    Define the household under study — the specimen every probe runs against. Fill it from what the human tells you about their family; the human can correct it directly on the household card, so treat the returned state as ground truth. Set receiving_childcare_subsidy=true for a family already enrolled in childcare assistance (their subsidy exit rules differ from a new applicant's entry rules — this moves cliffs).

    View tool JSON
    {
      "name": "set_household",
      "kind": "act",
      "impl": "imperative",
      "description": "Define the household under study — the specimen every probe runs against. Fill it from what the human tells you about their family; the human can correct it directly on the household card, so treat the returned state as ground truth. Set receiving_childcare_subsidy=true for a family already enrolled in childcare assistance (their subsidy exit rules differ from a new applicant's entry rules — this moves cliffs).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "enum": [
              "CO"
            ],
            "description": "US state (Colorado only for now)"
          },
          "adults": {
            "type": "array",
            "minItems": 1,
            "maxItems": 2,
            "items": {
              "type": "object",
              "properties": {
                "age": {
                  "type": "integer",
                  "minimum": 18,
                  "maximum": 100
                },
                "employment_income": {
                  "type": "number",
                  "description": "yearly earnings in $"
                },
                "weekly_work_hours": {
                  "type": "number",
                  "description": "default 40"
                }
              },
              "required": [
                "age"
              ]
            }
          },
          "children": {
            "type": "array",
            "maxItems": 6,
            "items": {
              "type": "object",
              "properties": {
                "age": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 17
                },
                "yearly_childcare_expenses": {
                  "type": "number",
                  "description": "yearly paid childcare in $"
                }
              },
              "required": [
                "age"
              ]
            }
          },
          "receiving_childcare_subsidy": {
            "type": "boolean"
          }
        },
        "required": [
          "adults"
        ],
        "additionalProperties": false
      }
    }
    sweepAction

    Run the benefits mechanism across a range of yearly earnings for the current household and draw the result on the shared canvas as a per-program decomposition. Returns the landscape: every cliff (income points where earning $1,000 more makes net resources DROP, attributed to the program that collapses, with the earnings level that finally recovers the loss), dead zones (wide stretches where extra earnings buy almost nothing net), the curve's shape at checkpoints, and where this family currently sits. Pass a narrower min/max to zoom into a region at finer resolution. This is the opening probe of almost every investigation; read exact values afterwards with query_point, explain cliffs with trace_binding_constraint.

    View tool JSON
    {
      "name": "sweep",
      "kind": "act",
      "impl": "imperative",
      "description": "Run the benefits mechanism across a range of yearly earnings for the current household and draw the result on the shared canvas as a per-program decomposition. Returns the landscape: every cliff (income points where earning $1,000 more makes net resources DROP, attributed to the program that collapses, with the earnings level that finally recovers the loss), dead zones (wide stretches where extra earnings buy almost nothing net), the curve's shape at checkpoints, and where this family currently sits. Pass a narrower min/max to zoom into a region at finer resolution. This is the opening probe of almost every investigation; read exact values afterwards with query_point, explain cliffs with trace_binding_constraint.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "min": {
            "type": "number",
            "description": "sweep start, yearly earnings in $ (default 0)"
          },
          "max": {
            "type": "number",
            "description": "sweep end, yearly earnings in $ (default 100000)"
          }
        },
        "additionalProperties": false
      }
    }
    query_pointAnswer

    Read exact values off the curves currently on the canvas at up to 12 earnings points: net resources and each active program's contribution. The cheap precision probe — use it to answer 'what do we keep at $X', to compare candidate incomes, or to quantify a raise, without re-running the mechanism. When an ablated or reformed mechanism is displayed, values come from THAT curve and a current-law comparison is included. Needs a sweep first. Complements trace_binding_constraint: query reads the curve, trace explains it.

    View tool JSON
    {
      "name": "query_point",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read exact values off the curves currently on the canvas at up to 12 earnings points: net resources and each active program's contribution. The cheap precision probe — use it to answer 'what do we keep at $X', to compare candidate incomes, or to quantify a raise, without re-running the mechanism. When an ablated or reformed mechanism is displayed, values come from THAT curve and a current-law comparison is included. Needs a sweep first. Complements trace_binding_constraint: query reads the curve, trace explains it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "points": {
            "type": "array",
            "minItems": 1,
            "maxItems": 12,
            "items": {
              "type": "number"
            },
            "description": "yearly earnings points to read, in $"
          }
        },
        "required": [
          "points"
        ],
        "additionalProperties": false
      }
    }
    trace_binding_constraintAction

    At one earnings point, identify WHICH program's rule is the binding constraint driving the local behavior — the mechanism's intermediate state, not just its input-output curve. Defaults to the cliff currently selected on the canvas (the human may have clicked one). Lights up the responsible layer on the shared canvas. Use after a sweep, when the human asks WHY a cliff happens.

    View tool JSON
    {
      "name": "trace_binding_constraint",
      "kind": "act",
      "impl": "imperative",
      "description": "At one earnings point, identify WHICH program's rule is the binding constraint driving the local behavior — the mechanism's intermediate state, not just its input-output curve. Defaults to the cliff currently selected on the canvas (the human may have clicked one). Lights up the responsible layer on the shared canvas. Use after a sweep, when the human asks WHY a cliff happens.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "at": {
            "type": "number",
            "description": "yearly earnings point to interrogate, in $. Omit to use the cliff selected on the canvas."
          }
        },
        "additionalProperties": false
      }
    }
    ablate_programAction

    Knock one program out of the mechanism entirely and re-run the current sweep — the layer collapses on the shared canvas. Reveals hidden interactions: programs whose eligibility silently depends on the ablated one also move (e.g. TANF carries SNAP's categorical eligibility). The returned `interactions` lists every OTHER program whose totals changed. The human can restore the baseline from the canvas banner.

    View tool JSON
    {
      "name": "ablate_program",
      "kind": "act",
      "impl": "imperative",
      "description": "Knock one program out of the mechanism entirely and re-run the current sweep — the layer collapses on the shared canvas. Reveals hidden interactions: programs whose eligibility silently depends on the ablated one also move (e.g. TANF carries SNAP's categorical eligibility). The returned `interactions` lists every OTHER program whose totals changed. The human can restore the baseline from the canvas banner.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "program": {
            "type": "string",
            "enum": [
              "snap",
              "tanf",
              "medicaid",
              "chip",
              "childcare",
              "eitc",
              "ctc",
              "aca"
            ]
          }
        },
        "required": [
          "program"
        ],
        "additionalProperties": false
      }
    }
    diff_scenariosAction

    Counterfactual probe: compare the current household against a variant along the same earnings sweep — marriage or a second earner (add an adult), a kid aging past a threshold, different childcare costs, or losing subsidy enrollment. Pass ONLY the fields that change; everything else carries over. Renders both net-resource curves overlaid on the shared canvas with the gap shaded. Use for 'what if' questions a single sweep can't answer.

    View tool JSON
    {
      "name": "diff_scenarios",
      "kind": "act",
      "impl": "imperative",
      "description": "Counterfactual probe: compare the current household against a variant along the same earnings sweep — marriage or a second earner (add an adult), a kid aging past a threshold, different childcare costs, or losing subsidy enrollment. Pass ONLY the fields that change; everything else carries over. Renders both net-resource curves overlaid on the shared canvas with the gap shaded. Use for 'what if' questions a single sweep can't answer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "description": "short human-readable name for the variant, e.g. 'married' or 'kid turns 6'"
          },
          "changes": {
            "type": "object",
            "description": "fields of the household to replace in the variant",
            "properties": {
              "adults": {
                "type": "array",
                "minItems": 1,
                "maxItems": 2,
                "items": {
                  "type": "object",
                  "properties": {
                    "age": {
                      "type": "integer"
                    },
                    "employment_income": {
                      "type": "number"
                    },
                    "weekly_work_hours": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "age"
                  ]
                }
              },
              "children": {
                "type": "array",
                "maxItems": 6,
                "items": {
                  "type": "object",
                  "properties": {
                    "age": {
                      "type": "integer"
                    },
                    "yearly_childcare_expenses": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "age"
                  ]
                }
              },
              "receiving_childcare_subsidy": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "label",
          "changes"
        ],
        "additionalProperties": false
      }
    }
    sweep_2dAction

    Probe TWO inputs at once: yearly earnings × yearly childcare cost, rendered as a net-resources heatmap on the shared canvas. Cliffs appear as ridges. This is the probe a human with a slider cannot do by hand — use it to find safe income regions or to show how a cliff's position depends on childcare costs.

    View tool JSON
    {
      "name": "sweep_2d",
      "kind": "act",
      "impl": "imperative",
      "description": "Probe TWO inputs at once: yearly earnings × yearly childcare cost, rendered as a net-resources heatmap on the shared canvas. Cliffs appear as ridges. This is the probe a human with a slider cannot do by hand — use it to find safe income regions or to show how a cliff's position depends on childcare costs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "max_earnings": {
            "type": "number",
            "description": "x-axis top, $ (default 100000)"
          },
          "max_childcare_cost": {
            "type": "number",
            "description": "y-axis top, $ (default 30000)"
          }
        },
        "additionalProperties": false
      }
    }
    annotateAction

    Pin a finding to the shared canvas at an earnings point, under your own identity as the agent. Use it to mark what a probe established ('CCAP exit test binds here — a $1k raise costs $10.6k') so the investigation accumulates on screen. Keep notes short and factual.

    View tool JSON
    {
      "name": "annotate",
      "kind": "act",
      "impl": "imperative",
      "description": "Pin a finding to the shared canvas at an earnings point, under your own identity as the agent. Use it to mark what a probe established ('CCAP exit test binds here — a $1k raise costs $10.6k') so the investigation accumulates on screen. Keep notes short and factual.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "yearly earnings point to pin at, in $"
          },
          "note": {
            "type": "string",
            "description": "the finding, max 120 chars"
          }
        },
        "required": [
          "x",
          "note"
        ],
        "additionalProperties": false
      }
    }
    edit_policyAction

    Modify the mechanism itself: change one whitelisted policy parameter and re-run the sweep. The canvas morphs from current law to the reformed mechanism — cliffs move, shrink, or heal on screen. trace_binding_constraint names which parameter moves a given rule. This edits the simulation only, never real policy; the human can restore current law from the canvas banner.

    View tool JSON
    {
      "name": "edit_policy",
      "kind": "act",
      "impl": "imperative",
      "description": "Modify the mechanism itself: change one whitelisted policy parameter and re-run the sweep. The canvas morphs from current law to the reformed mechanism — cliffs move, shrink, or heal on screen. trace_binding_constraint names which parameter moves a given rule. This edits the simulation only, never real policy; the human can restore current law from the canvas banner.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "parameter": {
            "type": "string",
            "enum": [
              "ccap_exit_smi_rate",
              "ccap_entry_smi_rate",
              "snap_gross_income_limit",
              "ctc_fully_refundable"
            ],
            "description": "ccap_exit_smi_rate: CCAP exit limit, fraction of state median income (current 0.85, up to 2.0). ccap_entry_smi_rate: CCAP entry limit, same units. snap_gross_income_limit: SNAP gross test, multiple of poverty line (current 1.3, up to 3.0). ctc_fully_refundable: boolean."
          },
          "value": {
            "type": [
              "number",
              "boolean"
            ],
            "description": "the new value, within the parameter's bounds"
          }
        },
        "required": [
          "parameter",
          "value"
        ],
        "additionalProperties": false
      }
    }
    find_minimal_fixAnswer

    Search policy-space for the SMALLEST whitelisted parameter change that removes a cliff entirely (not merely moves it). Traces the cliff to its binding rule, walks that rule's editable dial outward, and bisects back for minimality — several reformed mechanisms are built, so this probe takes up to a minute. Defaults to the cliff selected on the canvas. The finale probe: run it when the human asks 'could this be fixed?'

    View tool JSON
    {
      "name": "find_minimal_fix",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search policy-space for the SMALLEST whitelisted parameter change that removes a cliff entirely (not merely moves it). Traces the cliff to its binding rule, walks that rule's editable dial outward, and bisects back for minimality — several reformed mechanisms are built, so this probe takes up to a minute. Defaults to the cliff selected on the canvas. The finale probe: run it when the human asks 'could this be fixed?'",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cliff_at": {
            "type": "number",
            "description": "earnings point of the cliff to heal, in $. Omit to use the cliff selected on the canvas."
          }
        },
        "additionalProperties": false
      }
    }
    get_workbenchAnswer

    Read the shared bench without changing anything: the household card as it stands NOW (the human may have hand-edited it — that is ground truth), what the canvas is showing, which cliff is selected, where the scrub cursor sits, every pinned note, and the human's recent actions. Call it when the human refers to something they did or see on screen ('that cliff I clicked', 'I changed the daycare cost'), or to re-sync after a pause. Never guess at bench state — read it.

    View tool JSON
    {
      "name": "get_workbench",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the shared bench without changing anything: the household card as it stands NOW (the human may have hand-edited it — that is ground truth), what the canvas is showing, which cliff is selected, where the scrub cursor sits, every pinned note, and the human's recent actions. Call it when the human refers to something they did or see on screen ('that cliff I clicked', 'I changed the daycare cost'), or to re-sync after a pause. Never guess at bench state — read it.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }