Skip to main content
Machine interface

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. 1. In ChatGPT Settings, open Security and login and enable Developer mode.
  2. 2. Open Settings → Plugins, choose the plus button and register https://decisionsmadeeasier.com/mcp with no authentication.
  3. 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 document

MCP

Connect a server or native MCP-compatible host directly. It discovers the read-only calculation tool and methodology resources.

MCP endpoint

Browser

Agents with browser control can use the accessible form, while the calculation remains entirely on the user’s device.

Open calculator

REQUEST / 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"
  }
}
Essential calculation inputs
FieldMeaningUnitSupported value
propertyPriceProperty purchase priceGBP0–5,000,000
monthlyRentComparable initial monthly rentGBP/month0–50,000
stayYearsExpected stayyears1–50
depositPercentBuyer depositpercent0–100
mortgageRateAnnualRepayment-mortgage product ratepercent/year0–25
mortgageTermYearsRepayment-mortgage termyears1–50
stampDutyModeResidential SDLT treatmentenumnone, 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.5

Illustrative nominal annual property-growth assumption.

rentGrowthAnnual

Example default · 3

Illustrative nominal annual rent-growth assumption.

investmentReturnAnnual

Example default · 5

Illustrative nominal annual return on invested cash before personal tax.

buyingCostsFixed

Example default · 3500

Fixed buyer-side legal, survey, mortgage and moving costs.

buyingCostsPercent

Example default · 0

Additional buyer-side costs expressed as a share of the property price.

sellingCostsPercent

Example default · 1.5

Estimated selling costs expressed as a share of the future property value.

maintenanceAnnualPercent

Example default · 1

Annual maintenance allowance expressed as a share of the current property value.

homeInsuranceMonthly

Example default · 35

Monthly home-insurance cost for the buying path.

serviceChargeMonthly

Example default · 0

Monthly leasehold or estate service charge.

groundRentMonthly

Example default · 0

Monthly ground rent.

renterDepositMonths

Example default · 1

Refundable renter deposit expressed as months of the initial rent.

renterInsuranceMonthly

Example default · 15

Monthly renter-insurance cost.

renterOtherMonthlyCosts

Example default · 0

Other unrecoverable monthly renter costs.

renterUpfrontCosts

Example default · 300

One-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