The same calculation,shaped for agents.
A strict JSON API, an OpenAPI contract and a stateless MCP server expose the public calculator without duplicating its financial model.
Contract 1.0 · Model 2026-07-26.1
CHATGPT CONNECTION
Reading this page does not install the calculator as a tool.
ChatGPT can understand this contract from the public page, but it can call the calculator only after the MCP server has been registered and enabled for that chat. Without that connection, an ordinary chat does not gain a generic HTTP POST capability.
- 1. In ChatGPT Settings, open Security and login and enable Developer mode.
- 2. Open Settings → Plugins, choose the plus button and register
https://decisionsmadeeasier.com/mcpwith no authentication. - 3. Enable the resulting plugin in a new chat, then ask ChatGPT to run the comparison.
See the official ChatGPT developer-mode instructions. Public directory availability requires a separate OpenAI plugin submission and review.
START / 01
Choose the interface your agent understands.
OpenAPI
Import the machine-readable HTTP contract into an agent builder or generate a conventional API client.
Open OpenAPI documentMCP
Connect a server or native MCP-compatible host directly. It discovers the read-only calculation tool and methodology resources.
MCP endpointBrowser
Agents with browser control can use the accessible form, while the calculation remains entirely on the user’s device.
Open calculatorREQUEST / 02
Seven facts start a comparison.
Jurisdiction and default policy are explicit. An agent must not guess Scotland or Wales into the England and Northern Ireland SDLT model, and must not silently decide whether refinements can use defaults.
- HTTP endpoint
- https://decisionsmadeeasier.com/api/v1/rent-vs-buy/calculate
- MCP tool
- calculate_rent_vs_buy
- Transport limits
- 32 KiB per request. MCP accepts one JSON-RPC message per POST, never a batch.
- Browser origins
- Cross-origin browser integrations should use the JSON API. MCP accepts native and server clients without an Origin header; browser MCP calls are limited to this site.
{
"schemaVersion": "1.0",
"jurisdiction": "england",
"defaultsPolicy": "use_documented_defaults",
"projection": "yearly",
"includeSensitivity": true,
"inputs": {
"propertyPrice": 450000,
"monthlyRent": 2100,
"stayYears": 10,
"depositPercent": 15,
"mortgageRateAnnual": 4.5,
"mortgageTermYears": 30,
"stampDutyMode": "home_mover"
}
}| Field | Meaning | Unit | Supported value |
|---|---|---|---|
| propertyPrice | Property purchase price | GBP | 0–5,000,000 |
| monthlyRent | Comparable initial monthly rent | GBP/month | 0–50,000 |
| stayYears | Expected stay | years | 1–50 |
| depositPercent | Buyer deposit | percent | 0–100 |
| mortgageRateAnnual | Repayment-mortgage product rate | percent/year | 0–25 |
| mortgageTermYears | Repayment-mortgage term | years | 1–50 |
| stampDutyMode | Residential SDLT treatment | enum | none, first_time_buyer, home_mover, additional_property |
DEFAULTS / 03
Missing refinements remain visible.
With use_documented_defaults, omitted refinements are returned in assumptionsUsed. With reject_missing, every calculator input is required.
propertyGrowthAnnual
Example default · 2.5Illustrative nominal annual property-growth assumption.
rentGrowthAnnual
Example default · 3Illustrative nominal annual rent-growth assumption.
investmentReturnAnnual
Example default · 5Illustrative nominal annual return on invested cash before personal tax.
buyingCostsFixed
Example default · 3500Fixed buyer-side legal, survey, mortgage and moving costs.
buyingCostsPercent
Example default · 0Additional buyer-side costs expressed as a share of the property price.
sellingCostsPercent
Example default · 1.5Estimated selling costs expressed as a share of the future property value.
maintenanceAnnualPercent
Example default · 1Annual maintenance allowance expressed as a share of the current property value.
homeInsuranceMonthly
Example default · 35Monthly home-insurance cost for the buying path.
serviceChargeMonthly
Example default · 0Monthly leasehold or estate service charge.
groundRentMonthly
Example default · 0Monthly ground rent.
renterDepositMonths
Example default · 1Refundable renter deposit expressed as months of the initial rent.
renterInsuranceMonthly
Example default · 15Monthly renter-insurance cost.
renterOtherMonthlyCosts
Example default · 0Other unrecoverable monthly renter costs.
renterUpfrontCosts
Example default · 300One-off unrecoverable renter costs.
RESULT / 04
Structured enough to verify, restrained enough to explain.
The response includes
Effective inputs, default provenance, transparent normalisations, terminal wealth, durable lead timing, upfront cash, first-month equal budget, unrecoverable costs, sensitivity summaries, optional projections, rule dates, warnings and a human share link.
The response does not claim
Probability, confidence, affordability, mortgage eligibility, suitability or a universal recommendation. “Leader” means only the larger modelled net wealth under the effective inputs.
PRIVACY / 05
Browser and hosted use have different boundaries.
The website calculates locally. The API and MCP server receive scenario inputs because the user or their agent deliberately sends a hosted request.
Hosted calculations are stateless, use no scenario database and do not intentionally write request bodies to application logs. The chosen agent provider and Vercel still process the request.
Read the hosted-agent privacy explanation before connecting an agent. Treat returned share links as public documents.
ERRORS / 06
Invalid values are rejected, not disguised.
JSON API validation errors use application/problem+json. Validation errors include JSON Pointers such as /inputs/mortgageRateAnnual. Percentage inputs accepted by the model are rounded to two decimal places and every adjustment is returned in normalizations.
MCP transport errors use JSON-RPC error objects. Both hosted calculation paths are rate limited at the Vercel edge before a Function invocation.
- 400 · malformed JSON
- 413 · request over 32 KiB
- 415 · unsupported content type
- 422 · missing, unknown or out-of-range input
- 429 · request rate limit exceeded