Skip to content
HOA Power Tools

Dues Increase Calculator and Explainer

Work out how a proposed budget changes monthly dues, and explain it in language residents understand.

Using this tool from an agent

The same operations this page runs, over HTTP or MCP. Schemas are the ones the server enforces, so what is written here is what will actually be accepted.

Operations

OperationEngineCost
dues_increase.calculate
MCP tool name: dues_increase_calculate
deterministicNo key needed
No credential needed. Deterministic arithmetic, so it costs no allowance and is rate limited by address.
dues_increase.polish
MCP tool name: dues_increase_polish
aiAPI key
Needs an API key. Spends 1 AI credit from the key owner's monthly allowance.

Calling it

curl -X POST https://tools.rodri.ai/api/agent/tools/dues_increase/runs \
  -H "Content-Type: application/json" \
  -d '{"operation": "dues_increase.calculate", "input": { … }}'
Input schema: dues_increase.calculate
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "communityName": {
      "type": "string",
      "maxLength": 120
    },
    "currency": {
      "default": "USD",
      "type": "string",
      "enum": [
        "USD",
        "EUR",
        "GBP",
        "CAD",
        "MXN"
      ]
    },
    "currentYearLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 24
    },
    "proposedYearLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 24
    },
    "unitCount": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "allocationMode": {
      "default": "equal",
      "type": "string",
      "enum": [
        "equal",
        "classes"
      ]
    },
    "current": {
      "type": "object",
      "properties": {
        "operatingExpenses": {
          "minItems": 1,
          "maxItems": 40,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 80
              },
              "amount": {
                "type": "string",
                "minLength": 1,
                "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        },
        "reserveContributions": {
          "type": "string",
          "minLength": 1,
          "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
        },
        "nonDuesIncome": {
          "type": "string",
          "minLength": 1,
          "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
        }
      },
      "required": [
        "operatingExpenses",
        "reserveContributions",
        "nonDuesIncome"
      ]
    },
    "proposed": {
      "type": "object",
      "properties": {
        "operatingExpenses": {
          "minItems": 1,
          "maxItems": 40,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 80
              },
              "amount": {
                "type": "string",
                "minLength": 1,
                "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        },
        "reserveContributions": {
          "type": "string",
          "minLength": 1,
          "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
        },
        "nonDuesIncome": {
          "type": "string",
          "minLength": 1,
          "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
        }
      },
      "required": [
        "operatingExpenses",
        "reserveContributions",
        "nonDuesIncome"
      ]
    },
    "unitClasses": {
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "unitCount": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 100000
          },
          "weightPerUnit": {
            "type": "string",
            "pattern": "^\\d{1,4}(\\.\\d{1,6})?$"
          }
        },
        "required": [
          "name",
          "unitCount",
          "weightPerUnit"
        ]
      }
    },
    "changeReasons": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "maxLength": 80
          },
          "reason": {
            "type": "string",
            "maxLength": 400
          }
        },
        "required": [
          "label",
          "reason"
        ]
      }
    },
    "locale": {
      "default": "en",
      "type": "string",
      "enum": [
        "en",
        "es"
      ]
    }
  },
  "required": [
    "currentYearLabel",
    "proposedYearLabel",
    "unitCount",
    "current",
    "proposed"
  ]
}
Input schema: dues_increase.polish
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "runId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "locale": {
      "default": "en",
      "type": "string",
      "enum": [
        "en",
        "es"
      ]
    }
  },
  "required": [
    "runId"
  ]
}