amortization

Loan and lease schedules: payment, interest, early settlement and the journal, to the minor unit.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
90%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,212Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (1.73% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "amortization": {
      "command": "uvx",
      "args": [
        "https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/amortization.mcpb"
      ]
    }
  }
}

Runnable packages

mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/amortization.mcpb0.22.5stdio

Remote endpoints

https://mcp.zovo.one/mcp/amortizationstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡loan_create(name, principal_minor, currency, rate_bps, compounding, ...)

Record a loan or lease and return its id, level payment and effective annual rate. principal_minor, fees and balloon are whole MINOR units; rate_bps is the nominal annual rate in basis points. Free: 3 agreements.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 200,
      "description": "What this agreement is, e.g. Van finance or Office lease"
    },
    "principal_minor": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000000000000,
      "description": "Amount borrowed, in whole minor units (integer cents). 1,000,000 is EUR 10,000.00"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO code the agreement is denominated in"
    },
    "rate_bps": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Nominal annual interest rate in basis points. 1200 is 12 percent. Zero is allowed"
    },
    "compounding": {
      "type": "string",
      "enum": [
        "weekly",
        "fortnightly",
        "monthly",
        "quarterly",
        "semiannual",
        "annual"
      ],
      "description": "How often interest compounds"
    },
    "payment_frequency": {
      "type": "string",
      "enum": [
        "weekly",
        "fortnightly",
        "monthly",
        "quarterly",
        "semiannual",
        "annual"
      ],
      "description": "How often a payment falls due"
    },
    "term_periods": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "Number of payment periods, not years"
    },
    "method": {
      "type": "string",
      "enum": [
        "annuity",
        "straight-principal"
      ],
      "description": "annuity for a level payment, straight-principal for equal principal and a falling payment"
    },
    "start_date": {
      "type": "string",
      "maxLength": 10,
      "description": "Drawdown date, YYYY-MM-DD. The first payment falls one period after it"
    },
    "fees_minor": {
      "type": "integer",
      "minimum": 0,
      "description": "Arrangement fees in whole minor units, paid at drawdown. Default 0"
    },
    "balloon_minor": {
      "type": "integer",
      "minimum": 0,
      "description": "Final balloon or residual value in whole minor units, due with the last payment and not inside it. Default 0"
    },
    "kind": {
      "type": "string",
      "enum": [
        "loan",
        "lease"
      ],
      "description": "Default \"loan\""
    },
    "lender": {
      "type": "string",
      "maxLength": 200,
      "description": "Who the money is owed to"
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "name",
    "principal_minor",
    "currency",
    "rate_bps",
    "compounding",
    "payment_frequency",
    "term_periods",
    "method",
    "start_date"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪loan_schedule(loan, from_period, limit, year)

Build one loan's schedule: opening balance, payment, interest, principal and closing per period, with total interest. The last period absorbs rounding, landing exactly on the balloon or zero. loans_report totals it.

Input Schema

{
  "type": "object",
  "properties": {
    "loan": {
      "type": "string",
      "maxLength": 200,
      "description": "The loan id, e.g. LOAN-2026-0001, or its exact name"
    },
    "from_period": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "First period to return. Default 1"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "Maximum rows, default and ceiling 600"
    },
    "year": {
      "type": "string",
      "maxLength": 4,
      "description": "Only the periods falling in this calendar year, YYYY"
    }
  },
  "required": [
    "loan"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪loan_repay_early(loan, as_of_period, extra_minor, penalty_minor, keep_payment, ...)

Work out what settling or overpaying costs as of a period: the outstanding balance, the penalty if one is given, the recalculated remaining schedule and the interest saved, stated gross and net of the penalty. Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "loan": {
      "type": "string",
      "maxLength": 200,
      "description": "The loan id, e.g. LOAN-2026-0001, or its exact name"
    },
    "as_of_period": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "The period the extra money is paid at the end of. Period 1 is the first payment"
    },
    "extra_minor": {
      "type": "integer",
      "minimum": 1,
      "description": "A partial overpayment in whole minor units. Omit to settle the loan in full"
    },
    "penalty_minor": {
      "type": "integer",
      "minimum": 0,
      "description": "Early repayment charge in whole minor units. Default 0"
    },
    "keep_payment": {
      "type": "boolean",
      "description": "On a partial overpayment, keep the same payment and shorten the term. Default false, which keeps the term and lowers the payment"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "Maximum remaining rows to return, ceiling 600"
    }
  },
  "required": [
    "loan",
    "as_of_period"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡loan_journal(loan, period, month, interest_account, liability_account, ...)

Return the double entry for one payment period or month: debit interest expense and loan liability, credit cash, in the cash book's account names, with an expense_add-ready payload. Give period or month, not both. Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "loan": {
      "type": "string",
      "maxLength": 200,
      "description": "The loan id, e.g. LOAN-2026-0001, or its exact name"
    },
    "period": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "The payment period to journal. Give this or month"
    },
    "month": {
      "type": "string",
      "maxLength": 7,
      "description": "Journal every payment falling in this month, YYYY-MM. Give this or period"
    },
    "interest_account": {
      "type": "string",
      "maxLength": 200,
      "description": "Debit account for the interest. Default \"interest_expense\""
    },
    "liability_account": {
      "type": "string",
      "maxLength": 200,
      "description": "Debit account for the principal. Default \"loan_liability\""
    },
    "cash_account": {
      "type": "string",
      "maxLength": 200,
      "description": "Credit account for the payment. Default \"cash\""
    },
    "category": {
      "type": "string",
      "maxLength": 200,
      "description": "Expense category for the expense_add payload. Default \"interest\""
    }
  },
  "required": [
    "loan"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢loan_list(currency, kind, as_of, limit)

List the register with terms, level payment, effective annual rate and, at as_of, periods paid, balance outstanding, interest to date and the next payment, totalled per currency. Free; loans_report is the Pro roll-up.

Input Schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only agreements in this currency"
    },
    "kind": {
      "type": "string",
      "enum": [
        "loan",
        "lease"
      ],
      "description": "Only loans, or only leases"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Value the register at this date, YYYY-MM-DD. Default today"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600,
      "description": "Maximum rows, default and ceiling 600"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴loan_delete(loan)

Remove one loan or lease from the register and give its free-tier slot back. Refused, with the entry named, if a journal has already been taken from it. Free.

Input Schema

{
  "type": "object",
  "properties": {
    "loan": {
      "type": "string",
      "maxLength": 200,
      "description": "The loan id, e.g. LOAN-2026-0001, or its exact name"
    }
  },
  "required": [
    "loan"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢loans_report(as_of, year, currency)

The debt at as_of: per loan what is outstanding, whether it is settled, the next payment, and the interest and principal charged in a year, then totals per currency. Contractual balance, not cash paid. Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Value the debt at this date, YYYY-MM-DD. Default today"
    },
    "year": {
      "type": "string",
      "maxLength": 4,
      "description": "The calendar year to total the interest for, YYYY. Default the year of as_of"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only agreements in this currency"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢license_status

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪license_activate(key)

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools