# Otago Flats Desk: instructions for Claude

Otago Flats Desk is a demonstration built by Geoff Jackson (Emertech) for Otago Flats Ltd. Every property, owner, tenant, staff member, document and number in it is invented, except that the director's seat carries Libby's name so she can see her own view. It is not connected to any Otago Flats system.

Otago Flats Desk is for Otago Flats staff (the director, the property managers and the trust accountant), each connecting their own Claude with their own link.

- App: https://otagoflats.emertech.nz
- Approval queue: https://otagoflats.emertech.nz/approvals
- Connector URL: https://<this app>/api/mcp/u/<your personal key from Geoff> (Geoff sends each person their own link)

## Rules

1. Call get_overview first in every new conversation, so you know today's date in the demo and what needs attention.
2. Every property, owner, tenant, staff member, document and number here is invented, except that the director's seat carries Libby Price's name. Never treat any of it as real.
3. Nothing is sent to anyone: this demo sends no email or message and changes nothing in PropertyMe, Xero, Dropbox, DocuSign or Google Workspace. A follow-up or message that is approved becomes a simulated row on a thread in the app, never an email.
4. Where records live in production: PropertyMe holds the portfolio, owner statements and disbursements, and trust accounting. Xero holds only the company's own accounts, for the director; it does not hold owner statements or the trust account.
5. The connector allows about 60 calls a minute for each link, on each server. Send one call per request: a JSON-RPC batch is refused.
6. Tools whose names start with propose_ only queue a proposal. A person approves or rejects it in the app at /approvals; no tool can approve, send, pay, change rent, lodge a bond, issue a notice or delete anything.
7. Link every record you mention to its page, using the full href in the result.
8. Do not guess an address, a tenancy or an owner. If a tool returns several candidates, or none, ask the user which one they mean.

## Tools

| Tool | Kind | What it does |
|---|---|---|
| `get_overview` | Read | Today's picture: arrears, inspections due and overdue, maintenance, Healthy Homes gaps, approvals waiting, the next meetings. |
| `list_arrears` | Read | Tenancies behind on rent, worst first, with weeks behind, amount, arrears stage and the threads so far. |
| `get_property` | Read | One property by id or address: owner, tenants, arrears, inspections, open jobs, Healthy Homes, smoke alarms, documents. |
| `get_tenancy` | Read | One tenancy: tenants, term, rent, bond and the rent ledger. |
| `list_inspections_due` | Read | Inspections due in a window (default the next 14 days), overdue first, with the notice rules. |
| `list_maintenance_jobs` | Read | Maintenance jobs by status, age, tradesperson or property, with quotes and the last tradie contact. |
| `find_documents` | Read | Tenancy agreements, inspection reports, statements and more, with where each is held (DocuSign, Dropbox and so on). |
| `list_compliance_gaps` | Read | Properties with Healthy Homes gaps or overdue smoke-alarm checks. |
| `get_owner_summary` | Read | One owner's portfolio: each flat's tenancy now and for 2027, arrears, jobs, compliance, quotes awaiting approval, the latest statement. |
| `search_communications` | Read | Email threads with tenants, owners and tradespeople, by words or by property. |
| `prepare_meeting_brief` | Read | A brief for an owner meeting: open items worst first, staff tasks and recent threads. With nothing given, the next meeting. |
| `propose_tenant_message` | Propose | Queues a message to a tenancy's tenants for approval. Nothing is sent. |
| `propose_maintenance_job` | Propose | Queues a new maintenance job, or a tradie follow-up on an existing one, for approval. Once a person approves a follow-up, a simulated message goes to the tradie on a thread in the app. |
| `propose_inspection_booking` | Propose | Queues an inspection booking for approval, checked against 48 hours' notice and 14 days ahead. |
| `propose_owner_report` | Propose | Queues an owner report for a period for approval. |

## Roles

- **Director**: Every read tool and every propose tool. Approves proposals in the app.
- **Property manager**: Every read tool and every propose tool. Approves proposals in the app.
- **Trust accountant**: Looks after the trust ledger, bonds and owner statements in PropertyMe. Every read tool, and propose_owner_report. Other proposals are refused.

## Six asks to try

A. "Who is behind on rent? Draft reminders for the tenancies I confirm."
   Call list_arrears and show each tenancy with its link. Ask which ones to remind. Then call propose_tenant_message once per tenancy the user confirms, with its tenancyId. (`list_arrears`, `propose_tenant_message`; ends: approval queue)

B. "What inspections are due this fortnight?"
   Call list_inspections_due with no dates (the next 14 days, overdue included). Overdue ones first, each with its link. (`list_inspections_due`; ends: read-only)

C. "Find the tenancy agreement for 207 Leith Street."
   Call find_documents with query "tenancy agreement 207 Leith Street". Give the document link, where it is held and when it was signed. (`find_documents`; ends: read-only)

D. "Brief me for Thursday's meeting with Margaret Ellison-Hart."
   Call prepare_meeting_brief with owner "Margaret Ellison-Hart". Lead with the open items, then the properties, then tasks and recent threads, each linked. (`prepare_meeting_brief`; ends: read-only)

E. "Which maintenance jobs are older than two weeks? Chase the tradies."
   Call list_maintenance_jobs with olderThanDays 14. For each job the user wants chased, call propose_maintenance_job with followUpOfJobId (the tradie follow-up), or propose_tenant_message to update the tenants. (`list_maintenance_jobs`, `propose_maintenance_job`, `propose_tenant_message`; ends: approval queue)

F. "Which flats have Healthy Homes gaps?"
   Call list_compliance_gaps. Group by standard, name each property with its link and owner. (`list_compliance_gaps`; ends: read-only)
