Real Estate Management System
Back-office system built for a real estate agency client, covering rentals, contracts, owner payouts and tax reports, and operable from Claude through MCP.
A management system I designed and built for a real estate agency in Uruguay. It keeps every rental, owner account and tax calculation in one place. The code is private because it belongs to the client.
What it does
- Properties, owners and tenants: properties with photos and shared ownership percentages, owners with their tax situation, tenants, prospects and guarantees.
- Contracts and monthly rent: creation, renewal, price adjustments and expiry tracking, with monthly installments generated from each contract.
- Owner accounts and payouts: an account statement per property and currency, the agency's commissions, income tax withholding and the monthly payout report for each owner.
- Tax reports: the data and PDF the agency needs for the owners' tax returns.
- Visits and deposits: scheduling visits and taking deposits that turn into contracts.
- Bulk import: an Excel template and an import script to load existing data in one go.
Architecture
- ASP.NET Core REST API on Azure App Service, with JWT authentication and Administrator and Employee roles.
- Avalonia desktop client (Windows and Linux) written with MVVM, as the client asked for a desktop app.
- Azure SQL with EF Core for data, Azure Blob Storage for property photos, and Application Insights for telemetry.
- Azure Functions run scheduled jobs such as payment reminders by email, authenticated against the API with Microsoft Entra ID.
- Exchange rates and the official BPC value come from the Central Bank of Uruguay and the national open data APIs.
- The same code runs fully local (SQL Server, files on disk, jobs inside the API) or on Azure, switching only configuration.
Operating it from Claude (MCP)
The API also exposes a Model Context Protocol server, so the whole system can be operated from Claude instead of the desktop app. About 80 tools cover every API endpoint, and each one calls the same controller action the desktop client uses, so validation, calculations and permissions are never duplicated. A test fails if an endpoint is added without its tool.
Access is protected with an API key, Claude acts as a specific system user and inherits that user's permissions, and a read-only mode is available. With Claude's Google Sheets connector, reports such as monthly owner payouts can also be written straight to a shared spreadsheet.