HOA Maintenance Calendar Builder
Build a practical year of maintenance planning, then adjust it to your community.
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
| Operation | Engine | Cost |
|---|---|---|
maintenance_calendar.buildMCP tool name: maintenance_calendar_build | deterministic | No key needed No credential needed. Deterministic arithmetic, so it costs no allowance and is rate limited by address. |
maintenance_calendar.suggestMCP tool name: maintenance_calendar_suggest | ai | API 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/maintenance_calendar/runs \
-H "Content-Type: application/json" \
-d '{"operation": "maintenance_calendar.build", "input": { … }}'Input schema: maintenance_calendar.build
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"communityName": {
"type": "string",
"maxLength": 120
},
"planStartDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"timeZone": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"assets": {
"default": [],
"maxItems": 8,
"type": "array",
"items": {
"type": "string",
"enum": [
"roofs_drainage",
"grounds_irrigation",
"lighting",
"gates_access",
"shared_hvac",
"pool_amenities",
"elevators",
"fire_life_safety"
]
}
},
"seasonalMonths": {
"maxItems": 12,
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 12
}
},
"climateNote": {
"type": "string",
"maxLength": 400
},
"tasks": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64
},
"assetId": {
"type": "string",
"enum": [
"roofs_drainage",
"grounds_irrigation",
"lighting",
"gates_access",
"shared_hvac",
"pool_amenities",
"elevators",
"fire_life_safety",
"custom"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"description": {
"type": "string",
"maxLength": 400
},
"responsibleLabel": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
]
},
"origin": {
"type": "string",
"enum": [
"user",
"template",
"source",
"ai_suggestion"
]
},
"scheduleBasis": {
"type": "string",
"enum": [
"user_supplied",
"source_supported",
"suggested"
]
},
"firstDueDate": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "string",
"const": ""
}
]
},
{
"type": "null"
}
]
},
"recurrence": {
"anyOf": [
{
"type": "object",
"properties": {
"unit": {
"type": "string",
"enum": [
"week",
"month"
]
},
"interval": {
"type": "integer",
"minimum": 1,
"maximum": 52
},
"monthDayPolicy": {
"type": "string",
"enum": [
"anchor_day_clamped",
"last_day"
]
}
},
"required": [
"unit",
"interval"
]
},
{
"type": "null"
}
]
},
"reviewItems": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"maxLength": 200
}
},
"specialistRequired": {
"type": "boolean"
},
"sourceCitationIds": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"maxLength": 64
}
}
},
"required": [
"assetId",
"title"
]
}
},
"includeTemplates": {
"default": true,
"type": "boolean"
},
"overrides": {
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"taskId": {
"type": "string",
"maxLength": 64
},
"originalDueDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"currentDueDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"excluded": {
"type": "boolean"
}
},
"required": [
"taskId",
"originalDueDate"
]
}
},
"locale": {
"default": "en",
"type": "string",
"enum": [
"en",
"es"
]
}
},
"required": [
"planStartDate",
"timeZone"
]
}Input schema: maintenance_calendar.suggest
{
"$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)$"
},
"notes": {
"type": "string",
"maxLength": 20000
},
"sourceSetId": {
"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)$"
},
"sourceSetVersion": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"locale": {
"default": "en",
"type": "string",
"enum": [
"en",
"es"
]
}
},
"required": [
"runId"
]
}