Documentation

How Cheapli works

Cheapli is a server, not an app. Your AI assistant connects to it once, discovers eight tools, and calls them whenever a question needs Australian lender numbers.

What MCP is, in sixty seconds

The Model Context Protocol is a standard way for an AI assistant to use outside tools. A server publishes a list of tools with typed inputs; the assistant reads that list, decides when a tool is relevant, calls it, and reads the result back into its answer.

You never call Cheapli yourself. You ask your assistant a question in English — "can these two service $850k across the panel?" — and it works out that run_serviceability is the tool for the job, fills in the scenario, and explains the result.

Cheapli is read-only and stateless. It stores nothing about the scenarios you send: no client records, no history, no accounts beyond the email you gave us for a token.

Connect your agent

Pick your client. Replace $CHEAPLI_URL with the endpoint from your access email and $CHEAPLI_TOKEN with your token.

terminal
claude mcp add --transport http cheapli $CHEAPLI_URL/mcp \
  --header "Authorization: Bearer $CHEAPLI_TOKEN"

# then just ask:
#   "run serviceability for a couple on 125k and 78k,
#    one dependant, buying at 1.1m in NSW"

Tokens and fair use

Access is a bearer token sent on every request. Request one here — we send the endpoint and the token by email, and we don't charge for it. If a token leaks, tell us and we'll roll it.

Browser demo

20 scenario runs every 10 minutes per visitor. Enough to kick the tyres, not enough to run a brokerage through.

Connected agents

Generous per-token limits sized for real assistant use. If you're planning something heavier, say so on the form and we'll sort it out.

Self-hosted

No limits, because it's your machine. Run it over stdio and nothing leaves your laptop.

Tool reference

Your assistant reads these definitions automatically. They're here so you know what it can do — and so you can check its homework.

run_serviceability the main event

Assesses one client scenario against every modelled lender at once. Returns per-lender borrowing capacity, monthly surplus, DTI, a pass / borderline / fail status, the full calculation breakdown, every policy applied, and the drivers of the differences between lenders.

FieldWhat it holds
applicants[]One or two. Each has incomes[] (type + gross annual), optional selfEmployed figures, hecsBalance, and occupation — some lenders treat essential-services overtime differently.
householddependants, maritalStatus, declaredMonthlyExpenses, and where they'll live after settlement.
liabilities[]Credit cards (by limit), existing mortgages, personal and car loans, buy-now-pay-later.
proposedLoanPurpose, term, repayment type, security value and state. Omit amount to solve each lender's maximum. Omit ratePct to use each lender's current carded rate.
lenders[]Optional filter. Omit for the whole panel.
response · one lender, trimmed
{
  "lenderId": "anz",
  "status": "pass",
  "maxBorrowing": 951044,
  "monthlySurplus": 0,        // solving max drives surplus to ~0
  "dti": 4.44, "dtiCap": 7.5, "lvrPct": 86.5,
  "productRatePct": 6.54, "assessedRatePct": 9.54,
  "bindingConstraint": "surplus",
  "breakdown": { "incomeLines": [ … ], "commitments": [ … ],
                  "expenseFloorUsed": "hem", "hemMonthly": 4350 },
  "appliedPolicies": [
    "Declared expenses below benchmark — HEM floor of $4350/mo applied",
    "HECS/HELP assessed at statutory marginal repayment rates", … ],
  "drivers": [ "assessment rate 9.54% is 0.40% above the median" ],
  "modelVersion": "2026.07.0",
  "verifiedAgainst": { "source": "public calculators, broker policy pages, APG 223",
                       "date": "2026-07-14" },
  "disclaimer": "Estimate only — modelled from public sources …"
}
get_policy what each lender does, citably

Structured policy entries for one topic across the panel. Topics: assessment-rate, income-shading, casual-income, self-employed, rental-income, credit-cards, hecs, notional-rent, dti, lvr, negative-gearing, living-expenses.

These entries are generated from the same configuration the engine runs, so a policy answer and a calculation can never disagree.

search_products carded rates

Current home-loan products and rates, filtered by lender, purpose, repayment type, variable or fixed, fixed term and LVR tier. Sourced daily from the banks' public Consumer Data Right product APIs.

Advertised rates only — negotiated or discretionary discounts are not in public product data.

list_lenders provenance and freshness

Every modelled lender with its model version, what that model was last verified against and when, and how recently its rate data refreshed. Use it before trusting anything else.

calc_stamp_duty all 8 states & territories

Transfer duty plus government registration fees, including first-home-buyer exemptions and concessions, from public revenue-office schedules. Takes state, purchase price, purpose, first-home-buyer and new-build flags.

calc_lmi above 80% LVR

Indicative mortgage insurance premium from a public premium grid, the duty payable on that premium, and the effect of capitalising it into the loan.

calc_repayments P&I or interest-only

Repayments weekly, fortnightly or monthly, interest-only period handling, and total interest over the term.

calc_funds_to_complete the settlement position

Duty, government fees, mortgage insurance (capitalised or upfront) and legals itemised against the deposit, ending in the cash shortfall or surplus.

Resources

Alongside tools, Cheapli publishes documents an agent can read directly:

URIContents
lender://{id}/policyThe written policy notes behind that lender's model — the human-readable companion to its configuration.
reference://stamp-duty/{state}The duty schedule, thresholds and concession rules used by the duty calculator.
reference://hemThe household living-expense benchmark table used as the expense floor.

Where the numbers come from

Each lender assessment runs the same seven steps. Nothing is hidden in a black box — every step appears in the response.

  1. Recognise income. Each income type is shaded to that lender's policy — overtime, bonus, commission, casual, rental and self-employed all get different treatment, and some occupations get different treatment again.
  2. Tax it. Individual income tax, Medicare levy and the low-income offset are applied per applicant on the recognised gross, not the declared gross.
  3. Floor the expenses. The greater of declared living expenses and the household benchmark for that family size and income band.
  4. Buffer the commitments. Existing mortgages re-amortised at a buffered rate, credit cards at a percentage of limit whether or not they're used, personal loans at actual or buffered repayments, HECS from assessed income.
  5. Assess the new loan. Repayment computed at the greater of the product rate plus the lender's buffer and the lender's floor rate.
  6. Take the surplus. Net income minus expenses, commitments and the assessed new repayment.
  7. Solve the maximum. A binary search for the largest loan that keeps the surplus non-negative, capped by that lender's LVR and debt-to-income ceilings — the response says which of the three actually bound.

Rates come from public open-banking product data, refreshed daily, with the last known good set kept if a refresh fails. Lender models are hand-built from public material, version controlled, and changed only by review — a detected policy change raises a flag for a human, it never edits itself.

What this is not

It is not a lender decision. Cheapli models published policy from the outside. It has no relationship with any lender, no access to their internal credit rules, and no ability to submit or approve anything.
  • Not advice. Cheapli does not provide financial product or credit advice, and is not a credit assistance service.
  • Not a system of record. Nothing you send is stored. If you need an audit trail, keep it in the system you already use for that.
  • Not exact. Real assessments include documents, credit history, valuations and judgement. Treat every figure as a starting point to verify.