Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Cashew MCP

REMOTE · WWW.CASHEW.SG

Live Singapore mortgage rates, package recommendations and home-loan calculators.

Available components

+3 this week 72 Trust /100

Last scanned (2 hours ago)

Scores higher than 58% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security74
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8087 tokens (~351/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 23 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “analyze_decoupling” rewrote its description, which is the text the model reads security
    • Tool “calculate_affordability” rewrote its description, which is the text the model reads security
    • Tool “calculate_mortgage_repayment” rewrote its description, which is the text the model reads security
    • Tool “calculate_mortgage_stamp_duty” rewrote its description, which is the text the model reads security
    • Tool “calculate_package_schedule” rewrote its description, which is the text the model reads security
    • Tool “calculate_refinance_savings” rewrote its description, which is the text the model reads security
    • Tool “calculate_rental_stamp_duty” rewrote its description, which is the text the model reads security
    • Tool “calculate_required_income” rewrote its description, which is the text the model reads security
    • Tool “calculate_residential_stamp_duty” rewrote its description, which is the text the model reads security
    • Tool “calculate_seller_stamp_duty” rewrote its description, which is the text the model reads security
    • Tool “compare_packages” rewrote its description, which is the text the model reads security
    • Tool “get_index_quotes” rewrote its description, which is the text the model reads security
    • Tool “get_property_valuation” rewrote its description, which is the text the model reads security
    • Tool “list_banks” rewrote its description, which is the text the model reads security
    • Tool “recommend_packages” rewrote its description, which is the text the model reads security
    • Server version: 1.1.0 → 1.2.0 functional
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1
    • The server changed its declared name: cashew-rate-engine → sg.cashew/mcp security
    • Tool “analyze_sell_one_buy_two” rewrote its description, which is the text the model reads security
    • Tool “calculate_hdb_resale_timeline” rewrote its description, which is the text the model reads security
    • Tool “calculate_required_income” rewrote its description, which is the text the model reads security
    • Tool “check_eligibility” rewrote its description, which is the text the model reads security
    • Tool “get_index_quotes” rewrote its description, which is the text the model reads security
    • Tool “recommend_packages” rewrote its description, which is the text the model reads security
    • Schema quality: 306 → 353 ▼ functional
    • Stability: unverified → 0.03 ▲ functional
    • Server version: 1.0.0 → 1.1.0 functional
    • “analyze_decoupling” reworded the description of “outstandingLoan” cosmetic
    • “analyze_decoupling” reworded the description of “valuation” cosmetic
    • “analyze_sell_one_buy_two” reworded the description of “buyer1Shares” cosmetic
    • “analyze_sell_one_buy_two” reworded the description of “buyer2Shares” cosmetic
    • “analyze_sell_one_buy_two” reworded the description of “outstandingLoan” cosmetic
    • “analyze_sell_one_buy_two” reworded the description of “sellingLegalFees” cosmetic
    • “analyze_sell_one_buy_two” reworded the description of “valuation” cosmetic
    • “calculate_affordability” reworded the description of “loanTenureYears” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “buyerType” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “cpfUsage” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “exerciseFee” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “existingPropertiesOwned” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “interestRate” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “legalFee” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “loanAmount” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “optionDate” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “optionFee” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “purchasePrice” cosmetic
    • “calculate_hdb_resale_timeline” reworded the description of “tenureYears” cosmetic
    • “calculate_mortgage_repayment” reworded the description of “interestRate” cosmetic
    • “calculate_mortgage_repayment” reworded the description of “loanAmount” cosmetic
    • “calculate_package_schedule” reworded the description of “loanAmount” cosmetic
    • “calculate_package_schedule” reworded the description of “tenureYears” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “buyerType” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “cpfUsage” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “existingPropertiesOwned” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “interestRate” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “legalFee” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “loanAmount” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “purchasePrice” cosmetic
    • “calculate_private_resale_timeline” reworded the description of “tenureYears” cosmetic
    • “calculate_progressive_payment” reworded the description of “loanAmount” cosmetic
    • “calculate_progressive_payment” reworded the description of “loanQuantum” cosmetic
    • “calculate_progressive_payment” reworded the description of “minimumCashPercent” cosmetic
    • “calculate_progressive_payment” reworded the description of “purchasePrice” cosmetic
    • “calculate_progressive_payment” reworded the description of “rateMode” cosmetic
    • “calculate_progressive_payment” reworded the description of “referenceRate” cosmetic
    • “calculate_progressive_payment” reworded the description of “tenureYears” cosmetic
    • “calculate_purchase_cost” reworded the description of “availableCash” cosmetic
    • “calculate_purchase_cost” reworded the description of “availableCpfOA” cosmetic
    • “calculate_purchase_cost” reworded the description of “buyerType” cosmetic
    • “calculate_purchase_cost” reworded the description of “existingPropertiesOwned” cosmetic
    • “calculate_purchase_cost” reworded the description of “legalFeeFunding” cosmetic
    • “calculate_purchase_cost” reworded the description of “legalFeeOverride” cosmetic
    • “calculate_purchase_cost” reworded the description of “loanAmount” cosmetic
    • “calculate_purchase_cost” reworded the description of “ltv” cosmetic
    • “calculate_purchase_cost” reworded the description of “propertyType” cosmetic
    • “calculate_purchase_cost” reworded the description of “purchasePrice” cosmetic
    • “calculate_purchase_cost” reworded the description of “stampDutyFunding” cosmetic
    • “calculate_refinance_savings” reworded the description of “currentRate” cosmetic
    • “calculate_refinance_savings” reworded the description of “earlyRedemptionPenalty” cosmetic
    • “calculate_refinance_savings” reworded the description of “loanStartMonth” cosmetic
    • “calculate_refinance_savings” reworded the description of “loanStartYear” cosmetic
    • “calculate_refinance_savings” reworded the description of “newRate” cosmetic
    • “calculate_refinance_savings” reworded the description of “newTenureYears” cosmetic
    • “calculate_refinance_savings” reworded the description of “originalLoanAmount” cosmetic
    • “calculate_refinance_savings” reworded the description of “originalTenureYears” cosmetic
    • “calculate_refinance_savings” reworded the description of “refinancingCosts” cosmetic
    • “calculate_refinance_savings” reworded the description of “remainingAmount” cosmetic
    • “calculate_refinance_savings” reworded the description of “remainingTenureYears” cosmetic
    • “calculate_rental_stamp_duty” reworded the description of “premiumAmount” cosmetic
    • “calculate_required_income” reworded the description of “citizenship” cosmetic
    • “calculate_required_income” reworded the description of “propertyType” cosmetic
    • “calculate_residential_stamp_duty” reworded the description of “buyerType” cosmetic
    • “calculate_residential_stamp_duty” reworded the description of “propertyType” cosmetic
    • “calculate_residential_stamp_duty” reworded the description of “purchaseType” cosmetic
    • “calculate_sales_proceeds” reworded the description of “agentFeePercent” cosmetic
    • “calculate_sales_proceeds” reworded the description of “legalFees” cosmetic
    • “calculate_sales_proceeds” reworded the description of “outstandingLoanAmount” cosmetic
    • “calculate_sales_proceeds” reworded the description of “sellingPrice” cosmetic
    • “check_eligibility” reworded the description of “borrowers” cosmetic
    • “check_eligibility” reworded the description of “loanTenureYears” cosmetic
    • “compare_packages” reworded the description of “dealKind” cosmetic
    • “compare_packages” reworded the description of “propertyStatus” cosmetic
    • “compare_packages” reworded the description of “propertyType” cosmetic
    • “compare_packages” reworded the description of “recommendedId” cosmetic
    • “compare_packages” reworded the description of “tenureYears” cosmetic
    • “compare_packages” reworded the description of “verdicts” cosmetic
    • “get_index_quotes” reworded the description of “endDate” cosmetic
    • “get_index_quotes” reworded the description of “limit” cosmetic
    • “get_index_quotes” reworded the description of “page” cosmetic
    • “get_index_quotes” reworded the description of “startDate” cosmetic
    • “get_property_valuation” reworded the description of “postalCode” cosmetic
    • “get_property_valuation” reworded the description of “propertyType” cosmetic
    • “get_property_valuation” reworded the description of “unitNumber” cosmetic
    • “recommend_packages” reworded the description of “candidateLimit” cosmetic
    • “recommend_packages” reworded the description of “currentBankId” cosmetic
    • “recommend_packages” reworded the description of “fixedDurationYrs” cosmetic
    • “recommend_packages” reworded the description of “loanAmount” cosmetic
    • “recommend_packages” reworded the description of “lockInPeriodYrs” cosmetic
    • “recommend_packages” reworded the description of “propertyStatus” cosmetic
    • “recommend_packages” reworded the description of “propertyType” cosmetic
    • “recommend_packages” reworded the description of “tenureYears” cosmetic
    • “calculate_sales_proceeds” dropped the optional parameter “bridgingRatePercent” cosmetic
    • Tool “calculate_required_income” changed its title: Required-income calculator (reverse affordability) → Required-income calculator cosmetic
  • 28 Oct 26 68

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://www.cashew.sg/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=cashew.sg CN=WE1,O=Google Trust Services,C=US 2 Oct 2026 1 Jan 2027 ECDSA 256 ECDSA-SHA256 ac6e8e06ff497716138f9832491eaa3e
SANs: cashew.sg, *.cashew.sg
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of www.cashew.sg. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
sg. present 26329 8 Verified
cashew.sg. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.cashew.sg/mcp Verified 200
http (plaintext) http://www.cashew.sg/mcp HTTPS enforced 301 https://www.cashew.sg/mcp
MCP tools · 23 exposed · ~7,754 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_decoupling ~181

Analyse decoupling, where one co-owner of a Singapore property transfers their share to the other: the seller's cash proceeds (after loan, CPF refund, SSD and legal fees), the buyer's financing of the share, BSD and ABSD, and the cost of each option for a planned next purchase. All amounts in SGD.

NameTypeReqDescription
buyerobjectyesThe co-owner buying out the share and refinancing.
newPropertyPricenumber–Price of a subsequent property purchase the freed-up buyer plans, in SGD.
outstandingLoannumber–Loan still owed on the whole property, in SGD; split between the parties by share.
sellerobjectyesThe co-owner transferring out their share.
valuationnumberyesCurrent market value of the whole property, in SGD; each party's share is valued pro rata.
NameTypeReqDescription
buyerobjectyesThe buyer's financing of the share.
initialPaymentobjectyesUpfront payments by the buyer.
optionsarrayyesStamp-duty comparison for the next purchase when newPropertyPrice is given, else empty. Options 1-3 buy without decoupling (jointly, seller alone, buyer alone); options 4-5 decouple first, either way…
sellerobjectyesThe seller's side of the transfer.
stagesobjectyesHow the transfer is paid out.
summaryobjectyesHeadline figures.

No examples provided.

analyze_sell_one_buy_two ~436

Analyse a 'sell one, buy two' plan where two co-owners sell their joint home. Returns the sale proceeds (cash after loan, CPF refunds, SSD and legal fees) and each buyer's resulting cash and CPF. With `buy1`, it compares buying one replacement jointly or under either buyer alone; with `buy2Property1` and `buy2Property2`, each buyer buying one property (both pairings). Every option is given at 30- and 35-year tenures with max loan, LTV, instalment, downpayment, stamp duties, cash/CPF shortfalls, TDSR used and an affordability verdict.

NameTypeReqDescription
buy1object–The single property in the "buy one" scenario.
buy2Property1object–First property in the "buy two" scenario.
buy2Property2object–Second property in the "buy two" scenario.
buyer1objectyesIncome/CPF profile of buyer 1.
buyer1CpfUsagenumber–CPF (with accrued interest) buyer 1 must refund on sale, in SGD.
buyer1Sharesnumber–Buyer 1's ownership share of the sold property, in percent; splits the cash proceeds.
buyer2objectyesIncome/CPF profile of buyer 2.
buyer2CpfUsagenumber–CPF (with accrued interest) buyer 2 must refund on sale, in SGD.
buyer2Sharesnumber–Buyer 2's ownership share of the sold property, in percent; splits the cash proceeds. Omit to use 100 minus buyer1Shares.
outstandingLoannumber–Loan still owed on the property being sold, repaid from the sale, in SGD.
sellerStampDutynumber–Seller's Stamp Duty payable on the sale, in SGD.
sellingLegalFeesnumber–Conveyancing fees for the sale, deducted from the proceeds, in SGD.
valuationnumberyesExpected sale price of the jointly owned property being sold, in SGD.
NameTypeReqDescription
buy1Optionsarray–Present when `buy1` was given: buying it jointly, under buyer 1 alone, or under buyer 2 alone.
buy2Optionsarray–Present when both `buy2Property1` and `buy2Property2` were given: each buyer buys one property, in both pairings.
buyer1FundsobjectyesBuyer 1's cash and CPF after the sale.
buyer2FundsobjectyesBuyer 2's cash and CPF after the sale.
saleobjectyesProceeds from selling the current property.

No examples provided.

calculate_affordability ~401

Estimate the maximum loan and property price (SGD) a borrower can afford from monthly income, existing debt commitments and tenure, applying Singapore TDSR/MSR limits. Use this when you know the income and want the budget; for the income a target price needs, use `calculate_required_income`. For joint borrowers with assets and liabilities in detail, use `check_eligibility`.

NameTypeReqDescription
ageinteger–Age of the (oldest) borrower.
cashSavingsnumber–Cash available for downpayment, in SGD.
citizenshipstring–Buyer citizenship: singaporean, pr or foreigner. Drives ABSD rate.
cpfOAnumber–CPF Ordinary Account balance usable, in SGD.
existingPropertiesOwnedinteger–Count of residential properties already owned; sets the ABSD tier (0, 1 or 2+). Takes precedence over existingProperty when provided.
existingPropertyboolean–True if the borrower already owns ≥1 property (affects ABSD and LTV).
interestRatenumber–Assumed annual interest rate, as a percentage (e.g. 4.0 = 4%, not 0.04).
loanTenureYearsinteger–Repayment period, in years, over which the maximum loan is sized.
monthlyDebtnumber–Total existing monthly debt commitments (other loans, cards), in SGD.
monthlyFixedIncomenumberyesGross fixed monthly income (salary), in SGD.
monthlyVariableIncomenumber–Gross variable monthly income (bonus/commission), in SGD; haircut 30% under TDSR.
propertyTypestring–Property type: hdb, ec (Executive Condominium) or private. Sets MSR/LTV rules.
stressTestRatenumber–Override the TDSR/MSR stress-test rate (percentage); defaults to the MAS floor.
NameTypeReqDescription
absdnumberyesAdditional Buyer’s Stamp Duty, in SGD.
absdRatenumberyesABSD rate applied, as a decimal fraction (0.2 = 20%).
bsdnumberyesBuyer's Stamp Duty, in SGD.
cpfUsageAllowednumberyesCPF allowed toward downpayment, in SGD.
downpaymentTotalnumberyesTotal downpayment (cash + CPF), in SGD.
limitingFactor–yesWhich limit bound the loan: "msr" or "tdsr" (null if neither binds).
ltvnumberyesLoan-to-value ratio applied, as a decimal fraction (0.75 = 75%).
maxLoannumberyesMaximum loan the borrower qualifies for, in SGD.
maxPropertyPricenumberyesMaximum affordable property price, in SGD.
minCashDownpaymentnumberyesMinimum cash downpayment required, in SGD.
minCashPercentnumberyesMinimum cash portion of price, as a decimal fraction.
monthlyInstalmentnumberyesEstimated monthly instalment at that loan, in SGD.
msrLimitnumber|nullyesMonthly MSR cap (HDB/EC only), in SGD; null otherwise.
tdsrLimitnumberyesMonthly TDSR cap, in SGD.
totalCashRequirednumberyesTotal upfront cash needed (downpayment + duties + fees), in SGD.

No examples provided.

calculate_hdb_resale_timeline ~574

Generate a step-by-step dated timeline for an HDB resale purchase, from securing the Option to Purchase through to completion and key collection. Returns the ordered steps (what happens, the date, any payment due and its CPF/cash split), a summary (total payments, CPF and cash totals, completion date, duration in days), BSD and ABSD, the funding split (LTV, downpayment, minimum cash, cash-or-CPF remainder, monthly instalment when a rate and tenure are given), the completion date used, and self-checks.

NameTypeReqDescription
buyerTypestring–Residency or legal status of the buyer; sets the ABSD rate.
completionDatestring–Completion date (ISO 8601). Defaults to exerciseDate + 70 calendar days if not provided.
cpfUsagenumber–CPF OA savings the buyer will put towards the purchase, in SGD. Drawn down in step order against the legal fee, stamp duty and completion payment, the only payments CPF may make here; each payment re…
exerciseDatestringyesDate the option is exercised (ISO 8601).
exerciseFeenumber–Fee paid to the seller when the option is exercised, in SGD.
existingPropertiesOwnedinteger–Residential properties the buyer already owns; sets the ABSD tier.
interestRatenumber–Annual loan interest rate, as a percentage (e.g. 3.5 = 3.5%). Supply with tenureYears to get `funding.monthlyInstalment`; otherwise it is null.
legalFeenumber–Conveyancing fee for the purchase, in SGD; part of the total outlay.
loanAmountnumber–Housing loan amount, in SGD; 0 for a cash purchase. Sets the LTV band, the minimum cash and the completion payment.
optionDatestringyesDate the Option to Purchase is granted, e.g. 2026-08-01; the timeline starts here.
optionExpiryDatestringyesLast day to exercise the option (ISO 8601).
optionFeenumber–Fee paid to the seller when the Option to Purchase is granted, in SGD; HDB caps it at $1,000.
otherFeesnumber–Other costs (valuation, repairs, admin), in SGD. Reported alongside legal fees and stamp duty as part of the total outlay.
purchasePricenumberyesAgreed resale price of the HDB flat, in SGD; sets the stamp duties and downpayment.
tenureYearsinteger–Loan tenure in years. Supply with interestRate to get `funding.monthlyInstalment`.
NameTypeReqDescription
completionDateIsDefaultbooleanyesTrue if the completion date was defaulted (not entered).
completionDateUsedstringyesThe completion date used (entered or defaulted).
fundingobjectyesLoan, downpayment split and instalment.
otherFeesnumberyesOther costs supplied by the caller, in SGD.
stampDutyobjectyes–
stepsarrayyesOrdered list of timeline steps.
summaryobjectyesTimeline summary.
validationarrayyesSelf-check results.

No examples provided.

calculate_mortgage_repayment ~138

Compute the monthly repayment, total interest and total cost (SGD) for a hypothetical loan from a loan amount, tenure and an interest rate you supply (standard amortisation). Use this for what-if rates; for the real rates of a specific package, use `calculate_package_schedule` instead.

NameTypeReqDescription
interestRatenumberyesHypothetical annual interest rate held for the whole tenure, as a percentage (e.g. 3.5 = 3.5%, not 0.035).
loanAmountnumberyesAmount borrowed, in SGD.
tenureYearsintegeryesLoan tenure in years.
NameTypeReqDescription
firstYearInterestnumberyesInterest paid in year 1, in SGD.
firstYearPrincipalnumberyesPrincipal repaid in year 1, in SGD.
halfPaidOffMonthintegeryesMonth at which half the principal is repaid.
interestPercentagenumberyesInterest as a fraction of total paid (0.3 = 30%).
monthlyPaymentnumberyesMonthly instalment, in SGD.
principalPercentagenumberyesPrincipal as a fraction of total paid (0.7 = 70%).
totalInterestnumberyesTotal interest over the tenure, in SGD.
totalPaidnumberyesTotal of all payments (principal + interest), in SGD.

No examples provided.

calculate_mortgage_stamp_duty ~69

Compute the Singapore stamp duty (SGD) payable on a mortgage or loan facility from the loan amount. Not for purchases: use `calculate_residential_stamp_duty` for BSD and ABSD.

NameTypeReqDescription
loanAmountnumberyesMortgage/loan facility amount, in SGD.
NameTypeReqDescription
stampDutynumberyesMortgage stamp duty payable, in SGD (capped at $500).

No examples provided.

calculate_package_schedule ~350

Compute the amortisation schedule for a specific mortgage package using that package's real effective rates. Returns loan facts (`context`), the per-tier breakdown (`periods`), rate structure, totals and the per-year schedule (`annual`). Required: `packageId` from `recommend_packages`, `loanAmount` (SGD) and `tenureYears`. Optional: `includeMonthly: true` fills `monthly`; `formats` (`["pdf"]`, `["xlsx"]` or both) adds download URLs under `documents`; `firstPaymentDate` (YYYY-MM-DD, defaults to next month). Not for hypothetical rates: use `calculate_mortgage_repayment` for a what-if rate the borrower holds no package for.

NameTypeReqDescription
firstPaymentDatestring–First repayment month as an ISO date (YYYY-MM-DD). Defaults to next month.
formatsarray–Document formats to generate and upload (pdf, xlsx); the resulting download URLs are returned under `documents`. Omit/empty for data only.
includeMonthlyboolean–Include the full month-by-month schedule (`monthly[]`) in the response. Omitted/false returns an empty `monthly[]` to keep the payload small.
loanAmountintegeryesAmount borrowed under this package, in SGD.
maskBankIdentityboolean–When true and the bank has maskIdentity set, replace the bank name with "Confidential Rate" and hide the logo in generated documents.
packageIdstringyesPackage id, as returned by `recommend_packages`.
tenureYearsintegeryesRepayment period of the loan, in years; the schedule amortises over it.
NameTypeReqDescription
annualarrayyesPer-year rollup across the full tenure.
contextobjectyesLoan facts and presentation labels.
documentsobjectyesGenerated PDF/XLSX download URLs.
monthlyarrayyesFull month-by-month schedule; empty unless `includeMonthly`/`formats` requested.
monthlyPaymentsarrayyesMonthly instalment per tier.
periodsarrayyesCompact per-rate-tier breakdown (monthly payment, principal/interest, balance).
rateStructurearrayyesRate per tier, for display.
referenceIndex–yesBenchmark the first floating tier is priced off, or null for fully fixed packages.
totalsobjectyesTotals over the full tenure.

No examples provided.

calculate_private_resale_timeline ~464

Generate a step-by-step dated timeline for a private (non-HDB) resale purchase, with the 1% option fee, 4% exercise payment, stamp duties and completion payment at the right steps. Exercise date defaults to 14 calendar days inclusive of the option date if not entered.

NameTypeReqDescription
buyerTypestring–Residency or legal status of the buyer; sets the ABSD rate.
completionDatestring–Completion date (ISO 8601). Defaults to exerciseDate + 70 calendar days if not provided.
cpfUsagenumber–CPF OA savings the buyer will put towards the purchase, in SGD. Drawn down in step order against the legal fee and completion payment, the only payments CPF may make; each payment reports its `cpf` a…
exerciseDatestring–Exercise date (ISO 8601). Defaults to optionDate + 13 calendar days if not provided.
existingPropertiesOwnedinteger–Residential properties the buyer already owns; sets the ABSD tier.
interestRatenumber–Annual loan interest rate, as a percentage (e.g. 3.5 = 3.5%). Supply with tenureYears to get `funding.monthlyInstalment`; otherwise it is null.
legalFeenumber–Conveyancing fee for the purchase, in SGD; part of the total outlay.
loanAmountnumber–Housing loan amount, in SGD; 0 for a cash purchase. Sets the LTV band, the minimum cash and the completion payment.
optionDatestringyesOption to Purchase date (ISO 8601).
optionExpiryDatestringyesLast day to exercise the option (ISO 8601).
otherFeesnumber–Other costs (valuation, repairs, admin), in SGD. Reported alongside legal fees and stamp duty as part of the total outlay.
purchasePricenumberyesAgreed purchase price of the private property, in SGD; sets the option fee, exercise payment, stamp duties and downpayment.
tenureYearsinteger–Loan tenure in years. Supply with interestRate to get `funding.monthlyInstalment`.
NameTypeReqDescription
completionDateIsDefaultbooleanyesTrue if the completion date was defaulted (not entered).
completionDateUsedstringyesThe completion date used (entered or defaulted).
exerciseDateIsDefaultbooleanyesTrue if the exercise date was defaulted (not entered).
exerciseDateUsedstringyesThe exercise date used (entered or defaulted).
fundingobjectyesLoan, downpayment split and instalment.
otherFeesnumberyesOther costs supplied by the caller, in SGD.
stampDutyobjectyes–
stepsarrayyesOrdered list of timeline steps.
summaryobjectyesTimeline summary.
validationarrayyesSelf-check results.

No examples provided.

calculate_progressive_payment ~674

Model the monthly instalment profile of a Singapore Building Under Construction (BUC) property loan across progressive payment stages. Handles fixed and floating rate packages, per-stage cash/CPF/loan funding split, drawdown timing, rate stepping by year, and optional prepayments. Set includeSchedule to true for the full month-by-month amortisation schedule (summary is always included).

NameTypeReqDescription
availableCpfOAnumber–Available CPF Ordinary Account balance, in SGD. When set, each stage’s equity CPF portion is capped at the remaining OA balance and the rest is funded by cash. When omitted, CPF covers all equity abo…
cscOffsetMonthsinteger–Months from TOP to CSC (default 12).
includeScheduleboolean–If true, include the full month-by-month amortisation schedule in output.
loanAmountnumber–Loan amount in SGD. Takes precedence over loanQuantum.
loanQuantumnumber–Loan as a fraction of the price (e.g. 0.75 = 75%). Used only when loanAmount is omitted; with neither, 75% is assumed.
lockInMonthsinteger–Lock-in period in months from first drawdown.
minimumCashPercentnumber–Minimum cash downpayment as a percentage of the purchase price (e.g. 5 = 5%); CPF or cash covers the rest of the equity.
otpDatestringyesOption to Purchase date (ISO 8601).
prepaymentOutcomestring–What happens after a prepayment: lower instalment or shorter tenure.
prepaymentPenaltyPercentnumber–Penalty as a percentage of prepaid amount if within lock-in period.
prepaymentsarray–Optional list of prepayments.
purchasePricenumberyesPurchase price of the BUC property, in SGD; each stage's payment is a share of it.
rateModestring–How each year's rate is set: 'fixed' takes it from ratePerYear; 'floating' uses referenceRate plus that year's spreadPerYear and ignores ratePerYear.
ratePerYeararrayyesAnnual interest rates by year as percentages (e.g. [2.5, 2.5, 3.0, 3.5, 3.5, 3.5] for years 1-5 and thereafter). Last value applies to all subsequent years.
referenceRatenumber–Floating mode only: the benchmark rate such as 3M SORA, as a percentage (e.g. 3.5 = 3.5%), to which each year's spread is added. Omitted, it is taken as 0, so the rate is the spread alone. Ignored in…
spreadPerYeararray–Spread per year for floating mode, as percentages. Last value applies to all subsequent years.
stagesarray–Custom stage schedule. Defaults to the standard 10-stage BUC schedule. Percentages must sum to 100.
tenureYearsintegeryesLoan tenure in years, counted from the first drawdown.
topDatestringyesExpected Temporary Occupation Permit date (ISO 8601).
NameTypeReqDescription
cumulativeInterestByYeararrayyesCumulative interest at the end of each year, in SGD.
derivedobjectyes–
prepaymentSummary–yesPrepayment impact summary, or null if no prepayments.
schedulearray–Full month-by-month schedule (only when includeSchedule is true).
stagesarrayyesPer-stage funding breakdown.
summaryobjectyes–
validationarrayyesSelf-check results.

No examples provided.

calculate_purchase_cost ~522

Calculate the full upfront cost of purchasing a Singapore residential property (HDB or private resale), with each cost line attributed to its funding source (cash, CPF or bank loan). Returns option fee, exercise fee, stamp duties (BSD and ABSD), downpayment breakdown, and a sufficiency check against available funds.

NameTypeReqDescription
availableCashnumber–Cash the buyer can put towards the purchase, in SGD; checked in `cashSufficiency`.
availableCpfOAnumber–CPF Ordinary Account balance the buyer can put towards the purchase, in SGD; checked in `cpfSufficiency`.
buyerTypestring–Residency or legal status of the buyer; sets the ABSD rate.
cpfFirstboolean–When true, fund CPF-eligible costs from a single CPF pool capped at availableCpfOA (CPF first, remainder cash), overriding the per-item cash/cpf funding sources. ABSD stays cash.
existingPropertiesOwnedinteger–Residential properties the buyer already owns; sets the ABSD tier.
legalFeeFundingstring–Pay the legal/conveyancing fee from cash or from CPF.
legalFeeOverridenumber–Legal/conveyancing fee to use instead of the standard estimate ($2,000 HDB, $3,000 private), in SGD.
loanAmountnumber–Bank loan amount, in SGD. Takes precedence over `ltv`; with neither, a 75% loan is assumed.
ltvnumber–Loan as a fraction of the purchase price (e.g. 0.75 = 75%). Used only when loanAmount is omitted.
minimumCashPercentnumber–Minimum cash component as a percentage of price: 5 or 10 on a first housing loan, 25 with one already outstanding.
propertyTypestringyesWhether this is an HDB resale flat or a private property; sets the option and exercise fees, default legal and valuation fees, and stamp-duty funding.
purchasePricenumberyesAgreed purchase price, in SGD; fees, stamp duties and downpayment follow from it.
stampDutyFundingstring–Pay the stamp duties (BSD and ABSD) from cash or from CPF. Omit for the usual convention: HDB pays BSD from CPF, private from cash, and ABSD is paid in cash.
valuationFeeOverridenumber–Override for valuation fee, in SGD. Defaults to $120 (HDB) or $350 (private).
NameTypeReqDescription
absdnumberyesAdditional Buyer's Stamp Duty, in SGD.
absdRatenumberyesABSD rate applied as a decimal (e.g. 0.2 = 20%).
bsdnumberyesBuyer's Stamp Duty, in SGD.
bsdBreakdownarrayyesBSD per bracket.
cashRequirednumberyesTotal cash required across all cash-funded items, in SGD.
cashSufficiencyobjectyesCash surplus or shortfall.
costLinesarrayyesLine-by-line breakdown of all costs.
cpfRequirednumberyesTotal CPF required across all CPF-funded items, in SGD.
cpfSufficiencyobjectyesCPF surplus or shortfall.
downpaymentobjectyesDownpayment split.
exerciseFeenumberyesExercise fee, in SGD.
legalFeenumberyesLegal/conveyancing fee, in SGD.
loanAmountnumberyesBank loan amount, in SGD.
ltvnumberyesLoan-to-value ratio as a decimal.
optionFeenumberyesOption fee, in SGD.
totalCostnumberyesTotal cost: price + all fees + stamp duties, in SGD.
validationarrayyesSelf-check results.
valuationFeenumberyesValuation fee, in SGD.

No examples provided.

calculate_refinance_savings ~430

Compare a borrower's existing mortgage against a new rate and report monthly savings, total savings (SGD) and break-even months. Set `mode` to 'original' (supply the original loan amount, tenure and start date) or 'remaining' (supply the current outstanding balance and remaining tenure). Not for finding the new package: use `recommend_packages` for that.

NameTypeReqDescription
currentRatenumberyesAnnual rate on the existing loan, as a percentage (e.g. 4.0 = 4%).
earlyRedemptionPenaltynumber–Penalty the current bank charges for repaying within its lock-in, in SGD; treated as a switching cost like refinancingCosts.
loanStartMonthinteger–Mode 'original': month the loan started, as a number (1 = January).
loanStartYearinteger–Mode 'original': calendar year the loan started, e.g. 2021.
modestringyesUse 'original' when supplying the loan's original terms and start date, 'remaining' when supplying the current outstanding balance and tenure left.
newRatenumberyesAnnual rate offered on the new loan, as a percentage (e.g. 3.2 = 3.2%).
newTenureYearsinteger–Tenure of the new loan, in years. Omit to keep the current loan’s remaining tenure.
originalLoanAmountnumber–Mode 'original': the amount first borrowed, in SGD. Today's balance is worked out from it.
originalTenureYearsinteger–Mode 'original': the tenure the loan was first taken over, in years.
refinancingCostsnumber–One-off cost of switching (legal and valuation fees), in SGD; deducted from the savings and recouped in the break-even.
remainingAmountnumber–Mode 'remaining': the balance still owed today, in SGD.
remainingTenureYearsinteger–Mode 'remaining': years left to repay on the current loan.
NameTypeReqDescription
breakEvenMonthsnumber|nullyesMonths to recoup switching costs, or null if it never breaks even.
currentMonthlynumberyesCurrent monthly instalment, in SGD.
isBeneficialbooleanyesTrue if refinancing saves money overall.
monthlySavingsnumberyesMonthly saving (current − new), in SGD.
newMonthlynumberyesMonthly instalment after refinancing, in SGD.
remainingBalancenumberyesOutstanding balance being refinanced, in SGD.
remainingTenureMonthsintegeryesRemaining tenure, in months.
totalCurrentCostnumberyesTotal remaining cost on the current loan, in SGD.
totalNewCostnumberyesTotal cost on the new loan incl. switching costs, in SGD.
totalSavingsnumberyesNet saving over the remaining tenure, in SGD.
warningstring–Set when the loan start/tenure was clamped (e.g. loan already fully repaid).

No examples provided.

calculate_rental_stamp_duty ~131

Compute the Singapore stamp duty (SGD) payable on a property lease or tenancy from the rent and lease term. Not for purchases: use `calculate_residential_stamp_duty` for BSD and ABSD.

NameTypeReqDescription
hasPremiumboolean–True if the lease carries a lump-sum premium.
leasePeriodMonthsinteger–Lease term in months.
monthlyRentnumberyesMonthly rent under the lease, in SGD.
premiumAmountnumber–One-off premium paid on top of the rent, in SGD; only counted when `hasPremium` is true.
NameTypeReqDescription
stampDutynumberyesLease stamp duty payable, in SGD.
totalRentalnumberyesTotal rent over the lease (incl. premium), in SGD.

No examples provided.

calculate_required_income ~344

Reverse affordability: work out the gross monthly income (SGD) needed to support a target property price under Singapore TDSR/MSR limits. Use this when you know the target price; for the budget a known income supports, use `calculate_affordability`.

NameTypeReqDescription
ageinteger–Age of the (oldest) borrower.
cashSavingsnumber–Cash available for downpayment, in SGD.
citizenshipstring–Buyer's residency status (Singapore citizen, permanent resident or foreigner); sets the ABSD rate.
cpfOAnumber–CPF Ordinary Account balance usable, in SGD.
existingPropertiesOwnedinteger–Count of residential properties already owned; sets the ABSD tier (0, 1 or 2+). Takes precedence over existingProperty when provided.
existingPropertyboolean–True if the borrower already owns ≥1 property (affects ABSD and LTV).
interestRatenumber–Assumed annual interest rate, as a percentage (e.g. 4.0 = 4%, not 0.04).
loanTenureYearsinteger–Loan tenure in years.
monthlyDebtnumber–Total existing monthly debt commitments, in SGD.
propertyPricenumberyesTarget property purchase price, in SGD.
propertyTypestring–Type of property: an HDB flat, an Executive Condominium (ec) or private. HDB and EC purchases are also held to the MSR limit.
stressTestRatenumber–Override the TDSR/MSR stress-test rate (percentage); defaults to the MAS floor.
NameTypeReqDescription
absdnumberyesAdditional Buyer’s Stamp Duty, in SGD.
absdRatenumberyesABSD rate applied, as a decimal fraction (0.2 = 20%).
bsdnumberyesBuyer's Stamp Duty, in SGD.
cashShortfallnumberyesCash shortfall vs available savings, in SGD (0 if none).
cpfDownpaymentnumberyesCPF applied to downpayment, in SGD.
cpfShortfallnumberyesCPF shortfall vs available OA, in SGD (0 if none).
downpaymentTotalnumberyesTotal downpayment (cash + CPF), in SGD.
isAffordablebooleanyesTrue if the borrower can fund the purchase with stated means.
ltvnumberyesLoan-to-value ratio, as a decimal fraction (0.75 = 75%).
maxLoannumberyesLoan needed to buy at the target price, in SGD.
minCashDownpaymentnumberyesMinimum cash downpayment, in SGD.
minCashPercentnumberyesMinimum cash portion of price, as a decimal fraction.
monthlyPaymentnumberyesMonthly instalment at that loan, in SGD.
msrRequirednumber|nullyesMonthly MSR needed (HDB/EC), in SGD; null otherwise.
requiredIncomenumberyesGross monthly income required to support it, in SGD.
tdsrRequirednumberyesMonthly TDSR needed, in SGD.

No examples provided.

calculate_residential_stamp_duty ~243

Compute Buyer's Stamp Duty (BSD) and Additional Buyer's Stamp Duty (ABSD) in SGD for a Singapore residential purchase, given the price or value, buyer type (singaporean | pr | foreigner | entity | trust) and the number of residential properties already owned. For the full upfront cost of a purchase, use `calculate_purchase_cost`.

NameTypeReqDescription
buyerTypestring–Residency or legal status of the buyer (citizen, permanent resident, foreigner, company or trust); sets the ABSD rate.
existingPropertiesOwnedinteger–Count of residential properties the buyer already owns (sets the ABSD tier).
pricenumberyesPurchase price or market value (whichever higher), in SGD.
propertyTypestring–Type of residential property being bought. It does not change the result: BSD and ABSD depend on price, buyer and properties already owned.
purchaseTypestring–How the property will be held. `entity` (a company) or `trust` applies that ABSD rate whatever `buyerType` says; for the individual options the rate follows `buyerType`.
NameTypeReqDescription
absdnumberyesAdditional Buyer’s Stamp Duty, in SGD.
absdRatenumberyesABSD rate applied, as a decimal fraction (0.2 = 20%).
bsdnumberyesBuyer's Stamp Duty, in SGD.
bsdBreakdownarrayyesBSD amount per price bracket.
totalBuyerStampDutynumberyesTotal stamp duty (BSD + ABSD), in SGD.

No examples provided.

calculate_sales_proceeds ~251

Work out what a seller walks away with when selling a property: cash proceeds after redeeming the outstanding loan, refunding each owner’s CPF (principal plus accrued interest, 1 to 4 owners), and paying agent commission (with 9% GST), legal and miscellaneous fees. Flags a negative sale when the deductions exceed the selling price.

NameTypeReqDescription
agentFeePercentnumber–Agent commission as a share of the selling price, as a percentage (e.g. 1.5 = 1.5%, not 0.015), before the 9% GST added on top.
legalFeesnumber–Conveyancing fees for the sale, deducted from the proceeds, in SGD.
miscellaneousFeesnumber–Other selling costs (repairs, valuation, admin), in SGD.
outstandingLoanAmountnumber–Home loan still owed, repaid from the sale on completion, in SGD.
ownersarrayyesCPF usage per owner (1 to 4 owners). Include every owner; use zeros for an owner who used no CPF.
sellingPricenumberyesPrice the property sells for, in SGD; every deduction comes out of it.
NameTypeReqDescription
agentFeesnumberyesAgent commission including 9% GST, in SGD.
cashProceedsnumberyesCash left for the sellers after all deductions, in SGD. Negative means a negative sale: the sellers must top up cash to complete.
isNegativeSalebooleanyesTrue when cash proceeds are negative.
ownersarrayyesPer-owner CPF refunds, in input order.
perBankProceedsarray–Per-bank bridging headroom from the sale, when bank rules are supplied. Omitted otherwise.
totalCpfRefundnumberyesTotal refunded to all owners' CPF accounts (not cash in hand), in SGD.
totalDeductionsnumberyesEverything deducted from the selling price: loan redemption, CPF refunds, agent fees, legal fees and miscellaneous costs, in SGD.

No examples provided.

calculate_seller_stamp_duty ~115

Compute Singapore Seller's Stamp Duty (SSD, in SGD) from the sale price or value and how long the residential property has been held. For net cash from a sale, use `calculate_sales_proceeds`.

NameTypeReqDescription
pricenumberyesSale price or market value (whichever higher), in SGD.
purchaseDatestringyesDate the property was acquired (ISO date, YYYY-MM-DD).
saleDatestringyesDate the property is/was sold (ISO date, YYYY-MM-DD).
NameTypeReqDescription
holdingPeriodYearsnumberyesYears the property was held (fractional).
ssdnumberyesSeller's Stamp Duty payable, in SGD (0 past the holding period).
ssdRatenumberyesSeller's Stamp Duty rate applied, as a decimal fraction (0.12 = 12%).

No examples provided.

check_eligibility ~588

Run the regulatory affordability gate for one main borrower and up to three joint borrowers. Given each borrower's income, rental, pledged/unpledged assets and liabilities plus a proposed loan, returns the qualifying income (after MAS haircuts), the TDSR and MSR for the proposed loan, the income-weighted average age (IWAA), and the maximum loan under both HDB/EC and private property rules. Use this upstream of `recommend_packages` to confirm what a borrower can qualify for.

NameTypeReqDescription
ageConventionstring–How borrower age is computed; defaults to birth-date. The tRPC router resolves it per bank from the bank slug.
asOfDatestring–Reference date (ISO YYYY-MM-DD) for age and IWAA; defaults to today.
benchmarkRatenumber–MAS medium-term stress rate, as a percentage (e.g. 4.0 = 4%, not 0.04).
borrowersarrayyesThe main borrower followed by any joint borrowers; their qualifying incomes and liabilities are pooled.
combinationSplitnumber–For the pledge/show combination: fraction of the income gap covered by pledged funds; the remainder is covered by show funds. Defaults to 0.5.
existingHousingLoansinteger–Number of outstanding housing loans held. Selects the LTV tier (0 -> full, 1 -> second, 2+ -> third). Defaults to 0 when omitted.
loanTenureYearsinteger–Loan tenure being tested, in years; checked against the longest tenure these borrowers can get.
propertyTypestring–Property type: hdb, ec or private. Sets the maximum loan tenure (35y private and EC, 30y HDB) and the lower-LTV-tier triggers. EC also carries MSR, like HDB.
proposedLoanAmountnumberyesThe loan amount being tested, in SGD.
targetLoanAmountnumber–Optional target loan amount, in SGD. With targetPurchasePrice it sets the LTV (loan / price, capped at the applicable LTV) and takes precedence over targetLtvCap. Without a price, the price is derive…
targetLtvCapnumber–Optional manual LTV cap for the target loan, as a decimal (e.g. 0.6 = 60%). When set and below the applicable LTV, toReachTarget is sized at this lower LTV so the loan and unlock figures reflect a sm…
targetPurchasePricenumber–Optional target purchase price, in SGD. When set, the result includes toReachTarget: the loan needed at the first-loan LTV and the eligible funds to reach it.
NameTypeReqDescription
applicableLtvnumberyesThe LTV that applies for the entered number of existing housing loans, as a decimal (0.75 = 75%).
applicableMinCashPercentnumberyesMandatory cash downpayment for the applicable LTV tier, as a decimal (0.05 = 5%): 5% at the full tier, 10% at the reduced tier, 25% with an outstanding housing loan.
benchmarkRatenumberyesThe benchmark stress rate applied, as a percentage.
bindingConstraintstringyesWhich rule produces the lower maximum loan.
borrowersarrayyesPer-borrower breakdown.
fundsToQualifyobjectyesWhen the loan does not qualify, the extra eligible funds that would make it qualify.
householdobjectyes–
insufficientIncomebooleanyesTrue if total household income is zero, so ratios cannot be assessed.
ltvobjectyesLower-LTV-tier flags, informational only; LTV is out of scope for this checker.
maxLoanHdbEcnumberyesMaximum loan under HDB/EC rules: the lower of the MSR and TDSR caps, in SGD.
maxLoanPrivatenumberyesMaximum loan under private property rules (TDSR-bound), in SGD.
maxPricenumberyesMax property price at the applicable LTV for the entered housing-loan count, using the max loan for the property type (MSR-bound for HDB/EC), in SGD.
monthlyInstalmentnumberyesMonthly instalment on the proposed loan at the benchmark stress rate, in SGD.
msrobjectyesMortgage Servicing Ratio (HDB/EC), capped at 30%.
priceIfarrayyesMax purchase price by number of existing housing loans; the LTV tier (full / reduced / none) follows whether the loan extends past age 65 / 75.
propertyTypestringyesProperty type the tenure and LTV-tier rules were applied for.
proposedLoanAmountnumberyesThe proposed loan amount that was tested, in SGD.
qualifiesHdbEcbooleanyesTrue if the proposed loan passes both MSR and TDSR (HDB/EC).
qualifiesPrivatebooleanyesTrue if the proposed loan passes TDSR (private property).
tdsrobjectyesTotal Debt Servicing Ratio (all property), capped at 55%.
tenureobjectyes–
toReachTarget–yesPresent only when targetPurchasePrice is supplied: the funds needed to reach that price.
warningsarrayyesWarning messages (insufficient income, tenure over the maximum).

No examples provided.

compare_packages ~523

Compare 2–3 specific mortgage packages side by side: average rate over the lock-in, benchmark index, effective rate and monthly instalment per year, interest paid per year, and flexibility terms (prepayment, free conversion, sale waiver, penalties, minimum loan). Required: `packageIds` from `recommend_packages` and `loanAmount` (SGD). Optional: `tenureYears` (default 25); `dealKind`/`propertyType`/`propertyStatus` only label the report header; `formats: ["pdf"]` adds a one-page document (URL under `documents.pdfUrl`). Not for finding packages: it has no borrower context, so use `recommend_packages` for a personalised ranking. `verdicts`/`recommendedId` only carry over reasoning from a prior `recommend_packages` call; never author them.

NameTypeReqDescription
dealKindstring–Whether the loan is a new PURCHASE or a REFINANCE from another lender. Only labels the report header; the comparison is unchanged.
formatsarray–Document formats to generate and upload (currently only "pdf"); the download URL is returned under `documents`. Omit/empty for data only.
loanAmountintegeryesLoan principal in SGD (whole dollars).
maskBankIdentityboolean–When true and a bank has maskIdentity set, replace the bank name with "Confidential Rate" and hide the logo in the comparison report.
packageIdsarrayyes2–3 package ids to compare, e.g. from `recommend_packages`.
propertyStatusstring–Stage or use of the property, e.g. COMPLETED (resale or ready-built), BTO or BUC (new, under construction). Only labels the report header; the comparison is unchanged.
propertyTypestring–The kind of property securing the loan (HDB flat, private home or commercial). Only labels the report header; the comparison is unchanged.
recommendedIdstring–The rank-1 package from the prior `recommend_packages` call; its column is highlighted as "Recommended". Only meaningful together with `verdicts`.
tenureYearsinteger–Repayment period, in years, used for each package’s instalment and interest.
verdictsarray–Per-package verdict texts carried over from a prior `recommend_packages` call (the LLM reasoning). Adds the verdict row to the comparison; omit for a verdict-free report. Do not author these by hand.
NameTypeReqDescription
dataobjectyesThe assembled side-by-side comparison.
documentsobjectyes–

No examples provided.

get_index_quotes ~203

Return historical quotes (rate by date) for a market benchmark index such as SORA. Requires `marketIndexId` from `list_market_indices`. Optional `startDate`/`endDate` (YYYY-MM-DD) narrow the range; results are paginated, newest first. Quote `rate` values are decimal fractions (0.0356 = 3.56% p.a.). Not a package rate: use `recommend_packages` for those.

NameTypeReqDescription
endDatestring–Latest quote date to include. Omit for no upper bound.
limitinteger–Number of quotes per page.
marketIndexIdstringyesMarket index UUID. Resolve a benchmark name/slug via `list_market_indices`.
pageinteger–Page of results to return, counting from 1; `totalPages` gives the last.
startDatestring–Earliest quote date to include. Omit for no lower bound.
NameTypeReqDescription
itemsarrayyesQuotes for the page, newest first.
pageintegeryes1-based page number returned.
pageSizeintegeryesPage size used.
totalintegeryesTotal matching quotes across all pages.
totalPagesintegeryesTotal number of pages.

No examples provided.

get_property_valuation ~254

Indicative valuation (SGD) for a Singapore residential unit from an external valuation source. Requires `postalCode` and `unitNumber` in FF-SS format (e.g. "04-02"). `propertyType` ("Condo" or "HDB") and `areaSqft` are optional; without `propertyType` both are tried and `propertyTypeUsed` says which valued the unit. `valued: false` means the unit could not be valued: a valid answer, not an error. An estimate, not a formal bank valuation.

NameTypeReqDescription
areaSqftnumber–Optional built-in/strata area in sqft; can rescue a "$0" valuation.
postalCodestringyesPostal code of the building the unit is in, e.g. "248973".
propertyTypestring–Whether the unit is a private condominium or an HDB flat. Omit to auto-detect: both are probed and the one that values the unit is used (`propertyTypeUsed` reports which).
unitNumberstringyesFloor and stack of the unit, e.g. "04-02" for floor 4, stack 02.
NameTypeReqDescription
capitalGainnumber|nullyesEstimated capital gain since last transaction (SGD), or null.
pricePerSqftnumber|nullyesIndicative price per square foot (SGD), or null.
pricePerSqmnumber|nullyesIndicative price per square metre (SGD), or null.
propertyTypeUsed–yesThe property type that produced the valuation, or null if unvalued.
rawobjectyesRaw SPML response strings, for display/debugging.
requestedPropertyType–yesThe property type the caller requested, or null if auto-detection was used.
valuationnumber|nullyesIndicative market value in SGD, or null if unvalued.
valuedbooleanyesTrue if SPML returned a valuation; false means the unit could not be valued.

No examples provided.

list_banks ~54

List active banks and lenders (id and name), sorted by name. Use it to resolve a borrower's current lender to the `currentBankId` that `recommend_packages` requires for refinance deals. Not a rate source.

Input schema present but exposes no named parameters.

NameTypeReqDescription
banksarrayyesActive banks, sorted by name.

No examples provided.

list_market_indices ~52

List market benchmark indices (id, slug, name, currency), sorted by slug. Use this to resolve a benchmark name like 'SORA' into the `marketIndexId` required by `get_index_quotes`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
indicesarrayyesBenchmark indices, sorted by slug.

No examples provided.

recommend_packages ~757

Rank live Singapore mortgage packages for one borrower and loan. Returns `recommended` (up to 3 picks with `reasoning`), `lowestRateIds` (cheapest eligible first), `isPersonalised` and `packages` (full details by id). Required: `dealKind` (PURCHASE | REFINANCE), `propertyType` (HDB | PRIVATE | COMMERCIAL), `propertyStatus`, `loanAmount` (SGD); for REFINANCE also `currentBankId` from `list_banks`. Ask for missing facts; do not guess. Valid statuses: HDB: COMPLETED or BTO; PRIVATE: COMPLETED or BUC; COMMERCIAL: OWNEROCCUPIED, INVESTMENT or PERSONAL. Optional: `ratesType` (FIXED | FLOATING), `userContext` (free-text priorities), `formats: ["pdf"]` for a comparison document (URL under `documents`), `tenureYears` (default 25). Call again with the full input set whenever anything changes. Not for what-if rates (use `calculate_mortgage_repayment`).

NameTypeReqDescription
candidateLimitinteger–How many candidate packages the ranker weighs for each of its slots (floating, 2-year fixed, longest fixed); values above 8 have no further effect. Leave unset unless deliberately narrowing the choic…
currentBankIdstring–The borrower's current lender, as the bank `id` returned by `list_banks`. Needed for REFINANCE deals, where that bank's packages are left out; ignored for PURCHASE.
dealKindstringyesPURCHASE (new loan) or REFINANCE (switching lender).
fixedDurationYrs––Optional filter: keep only packages whose fixed-rate period lasts this many years. Pass an array to accept any of several. Only applied when `ratesType` is FIXED.
formatsarray–Document formats to generate for the recommended set (currently only "pdf"); the download URL is returned under `documents`. Omit/empty for data only.
loanAmountintegeryesAmount the borrower wants to borrow, in SGD. Packages whose loan-size range does not cover it are excluded.
lockInPeriodYrsinteger–Optional filter: the longest lock-in, in years, the borrower will accept. Packages with a longer lock-in are excluded; packages without one always qualify.
propertyStatusstringyesStage or use of the property, which must suit `propertyType`. For HDB: COMPLETED for a resale flat, BTO for a new Build-To-Order flat. For PRIVATE: COMPLETED for a ready-built home, BUC for one still…
propertyTypestringyesThe kind of property securing the loan: an HDB flat, a private home or a commercial property. Only packages offered for it are considered, and it decides which `propertyStatus` values are valid.
ratesTypestring–Optional rate type: FIXED or FLOATING. This is a hard filter on the candidate pool, not a ranking hint. Omit it when the borrower stated no preference, so a mix of rate types stays eligible.
tenureYearsinteger–Repayment period, in years, for the instalments shown in the comparison document; only used with `formats`. 25 when omitted.
userContext––Optional free-text summary of the borrower's priorities, timeline, bank relationships, citizenship, employment, family changes, etc. Only refines the LLM ranking; omit if there are no stated prioriti…
NameTypeReqDescription
documentsobject–Comparison document for the recommended set; only present when `formats` was requested.
isPersonalisedbooleanyesTrue when `userContext` was supplied and the ranking reflects it.
lowestRateIdsarrayyesUp to 3 package ids, cheapest first by effective average rate. A fixed package whose lock-in outlives its fixed period is ranked behind eligible ones and only included to fill the list.
packagesobjectyesLookup of full package details keyed by package id. Every id referenced in `recommended` and `lowestRateIds` has an entry here.
recommendedarrayyesUp to 3 picks. Ranked by the LLM when `userContext` is given and ranking succeeds, otherwise the cheapest package of each structure; fewer when fewer candidates exist after filtering.

No examples provided.

Install

How do I install the Cashew MCP server?

Cashew MCP is a hosted endpoint at https://www.cashew.sg/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · www.cashew.sg

# add to Claude Code
claude mcp add --transport http sg-cashew-mcp 'https://www.cashew.sg/mcp'
Common questions

What is the Cashew MCP server?

Cashew MCP is listed in the public MCP registry as sg.cashew/mcp. Live Singapore mortgage rates, package recommendations and home-loan calculators. This page covers its hosted endpoint (https://www.cashew.sg/mcp).

Is the Cashew MCP server safe to use?

Cashew MCP scores 72 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Cashew MCP server expose?

Cashew MCP exposes 23 tools: recommend_packages, compare_packages, list_banks, get_property_valuation, calculate_package_schedule, and 18 more. Their descriptions and schemas cost roughly 7,754 tokens of context every time the server is loaded.

Does the Cashew MCP server require authentication?

No. We connected to Cashew MCP without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Cashew MCP server still maintained?

Cashew MCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.