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, loan_list, loan_repay_early, loan_journal and loans_report are derivations that write nothing and touch no meter, so they are safe to auto-approve. Keep loan_create behind a click: it is the only tool that writes to the register and the only one that spends one of the three free agreements. Nothing here ever writes into another server's store.
| 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 mcp.json, and the key inside it is mcpServers.
| Scope | Path |
|---|---|
| Cline CLI | ~/.cline/mcp.json |
| The editor extension | opened from the Cline panel, not by path; the documentation deliberately calls it the MCP settings JSON used by the extension |
{
"mcpServers": {
"amortization": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-amortization"],
"disabled": false,
"autoApprove": []
}
}
}
No full-app restart. The MCP settings actions include restarting an unresponsive server if its tools do not appear.
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.
Write the transport in. Omitting type falls back to the legacy sse transport, which will not talk to this endpoint:
{
"mcpServers": {
"amortization": {
"type": "streamableHttp",
"url": "https://mcp.zovo.one/mcp/https://mcp.zovo.one/mcp/amortization",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Cline is the one client here with an unsafe transport default. `type` selects it, and omitting `type` falls back to the legacy sse transport, so a streamable HTTP endpoint needs it written in or you will debug a server that is fine. Local entries carry "disabled" and an "autoApprove" array.
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.
The CLI reads ~/.cline/mcp.json. For the extension, do not hunt for a path: MCP Servers icon, Configure tab, Configure MCP Servers. cline mcp opens a wizard, and cline config mcp --json is the non-interactive form.
Set the transport explicitly. Omitting type falls back to the legacy sse transport, so streamable HTTP needs "type": "streamableHttp" written in. It is the one default here that sends you debugging a server that works.
Approve the read-only ones and leave the writing ones behind a click: each entry carries an autoApprove array and a disabled flag.
MCP Amortization in detail · The same server in Windsurf and Claude.ai and Claude Desktop connectors · Every server in Cline · Guides · Cline docs · Buy Pro