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.0stdio

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