Loan and lease schedules derived from the terms of the agreement, in integer minor units, closing exactly on the balloon or on zero. You give it what the agreement says: the principal in minor units, the nominal annual rate in basis points, how often interest compounds, how often a payment falls due, the term in periods, annuity or straight principal, any arrangement fee, any balloon and the drawdown date. It derives the level payment, the effective annual rate beside the nominal one, and the schedule period by period, opening balance, payment, interest, principal, closing balance, every figure a whole minor unit. Compounding and payment frequency are two different clocks here, which is the decision most of the arithmetic rests on: the rate for one payment period is the equivalent rate taken through the compounding clock rather than the nominal rate divided by the number of payments, and on a quarterly-paid, monthly-compounded loan that difference is worth about 1.0 percent of the whole interest bill, in the lender's favour, and is invisible in the quote. The payment never varies: rounding the level payment once leaves the closing balance a few units from zero after a chain of subtractions, and that residual goes into the final period's interest and principal SPLIT rather than into the payment, because the payment is what the borrower is contractually due to pay and the split is not. A level payment rounded once can also clear the debt before the declared term ends, and the schedule stops where the debt does rather than filling out the term with periods that charge negative interest on a balance already gone. Early settlement and partial overpayment are costed gross and net of the penalty, and a penalty larger than the interest saved is reported as a COST rather than as a smaller saving. The journal debits interest expense and loan liability and credits cash in the cash book's own account ids, and the expense payload carries the interest ALONE. Nothing is posted from here, no schedule is stored, currencies are never added together, and month arithmetic clamps rather than rolling forward.
loan_schedule and loan_list are free, unlimited on every tier and write nothing, so leave them enabled permanently and ask repeatedly. Only loan_create moves the meter, and it moves it by holding an agreement rather than by answering a question, so re-deriving the schedule of a loan already recorded costs nothing however often you ask.
| You say | Tool |
|---|---|
| Record the van finance: 1,000,000 minor units at a nominal 12 percent compounded monthly, twelve monthly payments, drawn 2026-01-15. | loan_create |
| Show me the schedule, and tell me the effective annual rate beside the nominal one. | loan_schedule |
| What would settling at period 6 cost me, after the penalty? | loan_repay_early |
Rounding the level payment once is a term change, not a rounding detail. Measured on this server's own engine at 250 basis points over 360 annual periods on 1,000,000 minor units: the payment rounds to 25,292, that rounding is worth a fraction of a minor unit, it repeats, and the balance clears at period 356, FOUR PERIODS BEFORE the declared term ends, with a final payment of 4,165. A schedule that keeps subtracting to fill out the declared term does not fail or throw: it reports four more periods, each with a full payment on a balance that has gone negative, each charging negative interest, and the totals still reconcile against themselves. The chain arithmetic is self-consistent all the way down and the only thing wrong with it is that the borrower does not owe the last four rows. A second measured figure from the reference loan: the final period's interest is 882 rather than the 880 an unrounded balance carries, and putting that 2 unit difference into the payment instead would produce a final payment of 88,847, an amount that appears on no agreement.
The file is .cursor/mcp.json, and the key inside it is mcpServers.
| Scope | Path |
|---|---|
| This project only | <project>/.cursor/mcp.json |
| Every project | ~/.cursor/mcp.json |
{
"mcpServers": {
"amortization": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-amortization"]
}
}
}
The Customize page shows the server and its tools once it has started.
The npm publish of @theluckystrike/mcp-amortization is pending; until then use the .mcpb bundle or a clone and build from the latest release.
The same server runs at https://mcp.zovo.one/mcp/https://mcp.zovo.one/mcp/amortization over MCP streamable HTTP, no install. Mint a free token with curl https://mcp.zovo.one/mcp/token, or use a Pro key. It has no filesystem, so a file comes back as a one-hour download link.
{
"mcpServers": {
"amortization": {
"url": "https://mcp.zovo.one/mcp/https://mcp.zovo.one/mcp/amortization",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
The current field table marks `type` as required, with `stdio` for a locally launched server, so write it out rather than relying on command and args alone. The other documented restriction is that `envFile` is stdio-only: a remote HTTP or SSE server does not read it, and its headers belong in the config.
Free: loan_schedule is free and unlimited on every tier, and so is loan_list. The payment and the interest are the question this server exists to answer, and a free tier that hides the answer is a demo rather than a tool, so neither the schedule nor the balance outstanding is ever metered. The cap is on the number of agreements held instead: three loans or leases in the register, which is the unit of work. Rebuilding the schedule of a loan already recorded is free forever, on every tier, however many times you ask. Pro is $19 once, verified offline.
<project>/.cursor/mcp.json applies to that project and can be committed, which suits a server tied to one client. ~/.cursor/mcp.json applies everywhere. Both are managed from the Customize page.
The current field table marks type as required, with stdio for a locally launched server, so include it. Pointing at a remote endpoint, envFile is documented as stdio-only and is not read.
Servers in Cursor's marketplace get an Add to Cursor button. The deeplink reference currently documents prompt, command and rule links only, so for MCP Amortization pasting the config block above is the supported route.
MCP Amortization in detail · The same server in Claude Code and VS Code · Every server in Cursor · Guides · Cursor docs · Buy Pro