Loan-cost math: payments, payoff time, offers with fees, payday loans, Rule of 78s, Fed rates.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The latest Federal Reserve (G.19) average interest rates at commercial banks for a 24-month personal loan, 60- and 72-month new car loans, and credit cards, with the change from the previous quarter and from a year earlier. Optionally compares a rate someone was offered with the average and gives the gap in dollars. Averages across banks, never any one lender; quarterly figures bundled with the server, not live quotes. Use for "what is the average car loan rate", "have personal loan rates gone up" and "is 9% high for a car loan".
Optional with offered_rate_pct: amount borrowed or card balance, in dollars
Optional with offered_rate_pct: number of monthly payments
One kind of loan; leave out for all four
Optional: a rate the person was offered, to compare with the average (needs loan_type)
The latest Federal Reserve (G.19) average interest rates at commercial banks for a 24-month personal loan, 60- and 72-month new car loans, and credit cards, with the change from the previous quarter and from a year earlier. Optionally compares a rate someone was offered with the average and gives the gap in dollars. Averages across banks, never any one lender; quarterly figures bundled with the server, not live quotes. Use for "what is the average car loan rate", "have personal loan rates gone up" and "is 9% high for a car loan".
| Argument | Type | Description |
|---|---|---|
| amount | number | Optional with offered_rate_pct: amount borrowed or card balance, in dollars |
| months | integer | Optional with offered_rate_pct: number of monthly payments |
| loan_type | string | One kind of loan; leave out for all four |
| offered_rate_pct | number | Optional: a rate the person was offered, to compare with the average (needs loan_type) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"amount": {
"type": "number",
"maximum": 10000000,
"description": "Optional with offered_rate_pct: amount borrowed or card balance, in dollars",
"exclusiveMinimum": 0
},
"months": {
"type": "integer",
"maximum": 600,
"minimum": 1,
"description": "Optional with offered_rate_pct: number of monthly payments"
},
"loan_type": {
"enum": [
"personal_loan_24_months",
"new_car_loan_60_months",
"new_car_loan_72_months",
"credit_card"
],
"type": "string",
"description": "One kind of loan; leave out for all four"
},
"offered_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Optional: a rate the person was offered, to compare with the average (needs loan_type)"
}
},
"additionalProperties": false
}Compare two to four loan offers with different rates and fees fairly: each offer is sized so the borrower receives the same cash, then compared on payment, total cost of borrowing (interest plus fees) and estimated APR. Use for "is a lower rate with an origination fee cheaper than a higher rate with none".
| Argument | Type | Description |
|---|---|---|
| offers* | array | |
| cash_needed* | number | Cash the borrower needs to receive, in dollars |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"cash_needed",
"offers"
],
"properties": {
"offers": {
"type": "array",
"items": {
"type": "object",
"required": [
"annual_rate_pct",
"months"
],
"properties": {
"label": {
"type": "string",
"maxLength": 60,
"description": "A short name for the offer"
},
"months": {
"type": "integer",
"maximum": 600,
"minimum": 1
},
"fee_pct": {
"type": "number",
"maximum": 50,
"minimum": 0,
"description": "Origination fee as a percent of the loan, if any"
},
"fee_deducted": {
"type": "boolean",
"description": "True (default) if the fee is taken out of the loan before the money is paid out; false if it is added to the balance"
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 4,
"minItems": 2
},
"cash_needed": {
"type": "number",
"maximum": 10000000,
"description": "Cash the borrower needs to receive, in dollars",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Simulate paying off several debts with minimum payments plus an optional extra each month, highest rate first (avalanche) and smallest balance first (snowball), against minimums only. Returns months to debt-free and total interest for each. Use for "avalanche or snowball on my debts" and "what does $200 extra a month do".
| Argument | Type | Description |
|---|---|---|
| debts* | array | |
| extra_per_month | number | Extra paid each month on top of all minimums, in dollars |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"debts"
],
"properties": {
"debts": {
"type": "array",
"items": {
"type": "object",
"required": [
"balance",
"annual_rate_pct",
"min_payment"
],
"properties": {
"name": {
"type": "string",
"maxLength": 40
},
"balance": {
"type": "number",
"maximum": 10000000,
"exclusiveMinimum": 0
},
"min_payment": {
"type": "number",
"maximum": 10000000,
"description": "Minimum monthly payment, held fixed",
"exclusiveMinimum": 0
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 12,
"minItems": 1
},
"extra_per_month": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Extra paid each month on top of all minimums, in dollars"
}
},
"additionalProperties": false
}For a fixed-rate installment loan (personal, auto, any level-payment loan): the monthly payment, total interest, total repaid, how the first payment splits between interest and principal, and optionally how much has been paid and is still owed after a number of payments. Use for "what will this loan cost" and "where did my payments go".
| Argument | Type | Description |
|---|---|---|
| amount* | number | Amount borrowed, in dollars |
| months* | integer | Number of monthly payments |
| payments_made | integer | Optional: payments already made, to see progress so far |
| annual_rate_pct* | number | Annual interest rate in percent, e.g. 6.97 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"annual_rate_pct",
"months"
],
"properties": {
"amount": {
"type": "number",
"maximum": 10000000,
"description": "Amount borrowed, in dollars",
"exclusiveMinimum": 0
},
"months": {
"type": "integer",
"maximum": 600,
"minimum": 1,
"description": "Number of monthly payments"
},
"payments_made": {
"type": "integer",
"maximum": 600,
"minimum": 0,
"description": "Optional: payments already made, to see progress so far"
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Annual interest rate in percent, e.g. 6.97"
}
},
"additionalProperties": false
}For a payday loan, title loan, pawn loan, cash-advance app or any loan priced by a fee for a number of days: the fee in dollars, the APR, and what renewing (rolling over) costs. Use for "what is the APR on a $500 payday loan at $15 per $100" and "what does rolling it over cost".
| Argument | Type | Description |
|---|---|---|
| amount* | number | Amount borrowed, in dollars |
| flat_fee | number | Any flat fee, tip or instant-transfer fee for one term, in dollars |
| renewals | integer | Times the loan is renewed or rolled over by paying only the fee |
| term_days* | integer | Days until the loan is due |
| fee_per_100 | number | Fee per $100 borrowed for one term, in dollars (e.g. 15) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"term_days"
],
"properties": {
"amount": {
"type": "number",
"maximum": 10000000,
"description": "Amount borrowed, in dollars",
"exclusiveMinimum": 0
},
"flat_fee": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "Any flat fee, tip or instant-transfer fee for one term, in dollars"
},
"renewals": {
"type": "integer",
"maximum": 52,
"minimum": 0,
"description": "Times the loan is renewed or rolled over by paying only the fee"
},
"term_days": {
"type": "integer",
"maximum": 366,
"minimum": 1,
"description": "Days until the loan is due"
},
"fee_per_100": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Fee per $100 borrowed for one term, in dollars (e.g. 15)"
}
},
"additionalProperties": false
}How long a balance (credit card or loan) takes to pay off at a fixed monthly payment, and the interest paid. Use for "how long to pay off my card at $X a month" and for comparing a bigger payment by calling it twice.
| Argument | Type | Description |
|---|---|---|
| balance* | number | Balance owed today, in dollars |
| annual_rate_pct* | number | Annual interest rate in percent |
| monthly_payment* | number | Fixed amount paid each month, in dollars |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"balance",
"annual_rate_pct",
"monthly_payment"
],
"properties": {
"balance": {
"type": "number",
"maximum": 10000000,
"description": "Balance owed today, in dollars",
"exclusiveMinimum": 0
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Annual interest rate in percent"
},
"monthly_payment": {
"type": "number",
"maximum": 10000000,
"description": "Fixed amount paid each month, in dollars",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}The interest a simple-interest loan adds each day, and over a number of days. Use for reading a payoff letter, for "how much more is my payoff than my statement balance", and for the cost of a skipped or deferred payment.
| Argument | Type | Description |
|---|---|---|
| days* | integer | Days of interest |
| balance* | number | Principal balance, in dollars |
| annual_rate_pct* | number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"balance",
"annual_rate_pct",
"days"
],
"properties": {
"days": {
"type": "integer",
"maximum": 3660,
"minimum": 0,
"description": "Days of interest"
},
"balance": {
"type": "number",
"maximum": 10000000,
"description": "Principal balance, in dollars",
"exclusiveMinimum": 0
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
}For a precomputed or add-on interest loan (common from dealers, finance companies and furniture stores): the payoff after a number of payments under the Rule of 78s and under the actuarial method, and how much more the Rule of 78s keeps. Use for "why is my payoff different from my balance".
| Argument | Type | Description |
|---|---|---|
| amount* | number | Amount financed, in dollars |
| months* | integer | |
| payments_made* | integer | Payments made so far |
| annual_rate_pct* | number | Contract rate in percent |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"annual_rate_pct",
"months",
"payments_made"
],
"properties": {
"amount": {
"type": "number",
"maximum": 10000000,
"description": "Amount financed, in dollars",
"exclusiveMinimum": 0
},
"months": {
"type": "integer",
"maximum": 600,
"minimum": 1
},
"payments_made": {
"type": "integer",
"maximum": 600,
"minimum": 0,
"description": "Payments made so far"
},
"annual_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Contract rate in percent"
}
},
"additionalProperties": false
}Compare keeping a loan against a refinance offer, from today forward: interest remaining on the current loan, interest on the new loan, and what happens if the borrower takes the new rate but keeps paying the old payment. Use for "the new loan has a lower payment, does it actually save money".
| Argument | Type | Description |
|---|---|---|
| balance* | number | Balance owed today, in dollars |
| new_months* | integer | Term of the new loan in months |
| new_loan_fee | number | Any fee added to the new loan, in dollars |
| new_rate_pct* | any | |
| current_payment* | number | Current monthly payment, in dollars |
| current_rate_pct* | number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"balance",
"current_rate_pct",
"current_payment",
"new_rate_pct",
"new_months"
],
"properties": {
"balance": {
"type": "number",
"maximum": 10000000,
"description": "Balance owed today, in dollars",
"exclusiveMinimum": 0
},
"new_months": {
"type": "integer",
"maximum": 600,
"minimum": 1,
"description": "Term of the new loan in months"
},
"new_loan_fee": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Any fee added to the new loan, in dollars"
},
"new_rate_pct": {
"$ref": "#/properties/current_rate_pct"
},
"current_payment": {
"type": "number",
"maximum": 10000000,
"description": "Current monthly payment, in dollars",
"exclusiveMinimum": 0
},
"current_rate_pct": {
"type": "number",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
}