Install
openclaw skills install cleaning-maintenanceBook cleanings and manage property maintenance. Schedule one-time or recurring cleanings, report and track maintenance issues, manage service professionals, check availability and pricing. For homeowners, office managers, and building managers. Includes CLI, MCP server, and REST API approaches.
openclaw skills install cleaning-maintenanceYou need cleanings scheduled and maintenance issues handled — at home, at the office, or across multiple properties. Finding reliable cleaners, tracking maintenance requests, and managing service professionals shouldn't require a spreadsheet and a phone full of contacts.
This skill teaches your AI agent to book cleanings (one-time or recurring), report and track maintenance issues, manage service professionals, and check availability and pricing.
The fastest path is TIDY — an AI property management platform. Install the CLI and just describe what you need:
# Install
brew install tidyapp/tap/tidy-request # or: npm i -g @tidydotcom/cli
# Create an account
tidy-request signup
# Now just tell it what you need:
tidy-request "Book a 2-hour cleaning next Tuesday afternoon at my office"
tidy-request "The kitchen faucet at 123 Main St is leaking — it's urgent"
tidy-request "Schedule a weekly cleaning every Monday at 9am at my house"
tidy-request "What's the going rate for a 2-hour cleaning at my address?"
tidy-request "What maintenance issues are still open?"
Or connect via MCP (Claude Desktop, Claude Code, Cursor):
# Claude Code
claude mcp add tidy --transport http https://public-api.tidy.com/mcp
// Claude Desktop — add to claude_desktop_config.json
{
"mcpServers": {
"tidy": {
"url": "https://public-api.tidy.com/mcp"
}
}
}
Once connected, your agent has access to message_tidy — send any request in natural language. See MCP Server Reference for full tool definitions.
Without a platform like TIDY, managing cleanings and maintenance programmatically requires:
TIDY's REST API exposes each of these steps individually if you want fine-grained control. But for most use cases, the CLI or MCP approach above handles everything in one command.
First, add your address with access and parking info for cleaners:
tidy-request "Add my property at 123 Main St, Austin TX 78701. Key under the mat, park in the driveway."
Or via REST API:
curl -X POST https://public-api.tidy.com/api/v2/addresses \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address": "123 Main St",
"city": "Austin",
"postal_code": "78701",
"address_name": "My House",
"notes": { "access": "Key under the mat", "closing": "Lock deadbolt when leaving" },
"parking": { "paid_parking": false, "parking_spot": "myspot", "parking_notes": "Park in driveway" }
}'
tidy-request "What's available for a 2-hour cleaning at 123 Main St next week?"
Or check programmatically:
# Available time slots
curl "https://public-api.tidy.com/api/v2/booking-availabilities?address_id=123&service_type_key=regular_cleaning.two_and_a_half_hours" \
-H "Authorization: Bearer YOUR_TOKEN"
# Acceptance probability (will a pro take this job?)
curl "https://public-api.tidy.com/api/v2/job-acceptance-probabilities/preview?address_id=123&service_type_key=regular_cleaning.two_and_a_half_hours&start_no_earlier_than[date]=2026-03-25&start_no_earlier_than[time]=09:00&end_no_later_than[date]=2026-03-25&end_no_later_than[time]=17:00" \
-H "Authorization: Bearer YOUR_TOKEN"
tidy-request "Book a 2.5-hour cleaning at 123 Main St next Tuesday between 9am and 5pm, preferably around 10am"
Or via REST API:
curl -X POST https://public-api.tidy.com/api/v2/jobs \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address_id": 123,
"service_type_key": "regular_cleaning.two_and_a_half_hours",
"start_no_earlier_than": { "date": "2026-03-25", "time": "09:00" },
"end_no_later_than": { "date": "2026-03-25", "time": "17:00" },
"preferred_start_datetime": { "date": "2026-03-25", "time": "10:00" }
}'
| Key | Description |
|---|---|
regular_cleaning.one_hour | 1-hour regular cleaning |
regular_cleaning.two_and_a_half_hours | 2.5-hour regular cleaning |
regular_cleaning.four_hours | 4-hour regular cleaning |
deep_cleaning.two_and_a_half_hours | 2.5-hour deep cleaning |
deep_cleaning.four_hours | 4-hour deep cleaning |
turnover_cleaning.two_and_a_half_hours | 2.5-hour turnover cleaning |
turnover_cleaning.four_hours | 4-hour turnover cleaning |
tidy-request "What's the status of my cleaning at 123 Main St?"
tidy-request "Cancel next Tuesday's cleaning"
tidy-request "Reschedule the cleaning to Wednesday instead"
Booking statuses: scheduled → in_progress → completed. Also cancelled or failed.
Report maintenance issues and track them through resolution.
tidy-request "The bathroom faucet at 123 Main St is leaking. It's urgent."
tidy-request "Report a broken window at the office — assign it to concierge for handling"
Or via REST API:
curl -X POST https://public-api.tidy.com/api/v2/tasks \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address_id": 123,
"title": "Leaking bathroom faucet",
"description": "The hot water faucet in the master bathroom is dripping constantly",
"type": "plumbing",
"urgency": "high",
"assigned_to_concierge": true
}'
When assigned_to_concierge is true, TIDY's AI will automatically work on resolving the issue — finding a pro, getting quotes, and scheduling the repair.
tidy-request "What open maintenance issues do I have?"
tidy-request "What's the status of the faucet repair?"
REST: GET /api/v2/tasks?status=open or GET /api/v2/tasks/:id
tidy-request "Mark the faucet issue as resolved"
tidy-request "Change the broken window priority to urgent"
REST: PUT /api/v2/tasks/:id with updated fields.
Issues flow through: open → in-progress → closed
Set due dates, urgency levels, and types to keep things organized. Filter by any of these when listing tasks.
Add your trusted cleaners and maintenance pros:
tidy-request "Add my cleaner Maria Garcia, maria@email.com, 555-0123"
tidy-request "Add plumber Joe's Plumbing, joe@joesplumbing.com"
Or via REST API:
curl -X POST https://public-api.tidy.com/api/v2/pros \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Maria Garcia",
"email": "maria@email.com",
"phone": "555-0123",
"service_types": ["regular_cleaning"]
}'
Here are natural-language requests your agent can send directly to TIDY:
One-time cleaning:
"Book a 4-hour deep clean at my house this Saturday morning"
Recurring cleaning:
"Schedule a weekly 2-hour cleaning every Monday at 9am at 123 Main St"
Market pricing:
"What's the going rate for a 2-hour cleaning at my address?"
Maintenance report with auto-resolution:
"Report a broken window at the office, 456 Oak Ave — assign it to concierge"
Cancel a booking:
"Cancel next week's cleaning at my house"
Add a pro:
"Add my cleaner Maria Garcia, maria@email.com, as a preferred pro"
Maintenance audit:
"What maintenance tasks are overdue across all my properties?"
Acceptance probability:
"What are the chances of getting a cleaner this Saturday morning at my house?"
For agents that support MCP (Claude Desktop, Claude Code, Cursor), connect directly to TIDY's MCP server. This gives your agent 5 tools:
login / signup — authenticatemessage_tidy — send any request in natural language (async)get_message_tidy — poll for the resultlist_messages_tidy — view past requestsThe message_tidy tool is asynchronous — after calling it, poll get_message_tidy with the returned ID until is_complete is true.
Full tool definitions and setup: MCP Server Reference
For custom integrations or direct API access, TIDY exposes REST endpoints for every operation:
Full endpoint documentation: REST API Reference
Authentication details: Authentication
Polling: message_tidy is asynchronous. Always poll get_message_tidy every 3-5 seconds until is_complete is true. Never return a pending response to the user.
No availability: If no cleaners are available for your requested time window, try widening the window or checking a different day. Use booking-availabilities to see what's open.
Acceptance probability: Before booking, check job-acceptance-probabilities/preview to see how likely a pro is to accept. Wider time windows and flexible dates increase acceptance.
Pro rejection: If a pro declines, TIDY automatically re-assigns the job to another available pro. Monitor status to stay updated.
Context IDs: When following up on a specific booking or task, pass the relevant ID for faster resolution:
tidy-request "What's the status?" --booking-id 456
tidy-request "Update this issue" --issue-id 789
Also see: vacation-rental-management — if you manage short-term rentals and need guest turnover coordination.