Koskamo

LeaseLine Rent Ledger MCP

A rent ledger and prorated rent calculator for small landlords and property managers. It builds tenant ledgers with monthly charges, prorated move-in/out rent, late fees, payments, and running balances. Users can input lease terms and payments via chat or CSV/Excel to generate PDF statements, Excel workbooks, and CSV files.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

LeaseLine Rent Ledger MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://rent-ledger.zovo.one/mcp
Vendor documentation

What you can do with it

  • Calculate prorated rent for move-in and move-out dates
  • Generate tenant rent ledgers with late fees and running balances
  • Apply payments to oldest charges first and track overpayment credits
  • Download PDF tenant ledger statements and Excel workbooks

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
rent-ledger 1.0.0
MCP protocol
2025-06-18
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

LeaseLine Rent Ledger does landlord rent math to the cent. calculate_prorated_rent prorates move-in or move-out rent with all three common methods. generate_rent_ledger builds a tenant ledger from the lease terms and payments (typed or a CSV/Excel file): monthly rent charges, prorated first and last months, late fees by the lease rule, payments applied oldest first, running balance, and a PDF statement plus Excel and CSV files. It does not give legal advice about late-fee limits.

Tools

2 advertised

calculate_prorated_rent — Calculate prorated rent
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants prorated rent for a move-in or move-out (prorated rent calculator, 'tenant moved in on the 17th, how much rent do they owe', partial month rent). Returns the amount, computed to the cent, by three methods side by side (actual days in the month, 30-day month, 365-day year), the daily rate, and the formula, counting the move-in and move-out days inclusively; leap-year February is handled. Assumes rent covers calendar months (due on the 1st). Does not build a full ledger (use generate_rent_ledger for payments and balances) and does not give legal advice.

calculate_prorated_rent input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "monthly_rent"
  ],
  "properties": {
    "method": {
      "enum": [
        "actual_days",
        "thirty_day",
        "annual_365"
      ],
      "type": "string",
      "description": "The proration method the lease uses; the result shows all three. actual_days (default): rent / days in that month. thirty_day: rent / 30. annual_365: rent x 12 / 365."
    },
    "rounding": {
      "enum": [
        "round_total",
        "daily_rate_first"
      ],
      "type": "string",
      "description": "round_total (default): round only the final amount to the cent. daily_rate_first: round the daily rate to the cent first, then multiply by the days."
    },
    "monthly_rent": {
      "type": "number",
      "description": "Full monthly rent in USD, e.g. 1450."
    },
    "move_in_date": {
      "type": "string",
      "maxLength": 40,
      "description": "Move-in date (first day the tenant has the unit), YYYY-MM-DD, e.g. 2026-10-17. Give this, move_out_date, or both."
    },
    "move_out_date": {
      "type": "string",
      "maxLength": 40,
      "description": "Move-out date (last day the tenant pays for), YYYY-MM-DD, e.g. 2026-11-10."
    }
  }
}
calculate_prorated_rent output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "monthly_rent",
    "method",
    "method_label",
    "rounding",
    "periods",
    "full_months_between",
    "total_prorated",
    "display",
    "notes"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "method": {
      "type": "string"
    },
    "display": {
      "type": "object",
      "required": [
        "total",
        "monthly_rent"
      ],
      "properties": {
        "total": {
          "type": "string"
        },
        "monthly_rent": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "periods": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "month",
          "label",
          "from",
          "to",
          "days_occupied",
          "days_in_month",
          "full_month",
          "amount",
          "methods"
        ],
        "properties": {
          "to": {
            "type": "string"
          },
          "from": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "month": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "methods": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "method",
                "label",
                "daily_rate",
                "amount",
                "formula"
              ],
              "properties": {
                "label": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "method": {
                  "type": "string"
                },
                "formula": {
                  "type": "string"
                },
                "daily_rate": {
                  "type": "number"
                }
              },
              "additionalProperties": false
            }
          },
          "full_month": {
            "type": "boolean"
          },
          "days_in_month": {
            "type": "number"
          },
          "days_occupied": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "rounding": {
      "type": "string"
    },
    "method_label": {
      "type": "string"
    },
    "monthly_rent": {
      "type": "number"
    },
    "total_prorated": {
      "type": "number"
    },
    "full_months_between": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
calculate_prorated_rent annotations
{
  "title": "Calculate prorated rent",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_rent_ledger — Generate rent ledger
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a rent ledger, tenant ledger, rent ledger template filled in, or proof of rent payments for a tenant: 'make a ledger of my tenant payments this year', 'tenant paid 800 of 1200 rent, what is the balance', amount due as of a date. Takes lease terms (rent, start, due day, late fee rule with grace period) and payments typed or from an attached CSV/Excel file; charges rent monthly with prorated first/last months, applies payments oldest first, adds late fees (flat, percent, daily with cap), carries overpayments forward as credit, and returns a running balance plus PDF statement, Excel and CSV downloads. Does not check state late-fee limits, give legal advice, collect rent, or make rent receipts for proof of address.

generate_rent_ledger input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "monthly_rent",
    "lease_start",
    "as_of_date"
  ],
  "properties": {
    "late_fee": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "enum": [
            "none",
            "flat",
            "percent",
            "daily",
            "flat_plus_daily"
          ],
          "type": "string",
          "description": "Late fee rule from the lease: none, flat (e.g. $75 once per month), percent (e.g. 5% of the month's rent), daily (e.g. $10 per day late), flat_plus_daily (e.g. $50 then $10 per day)."
        },
        "amount": {
          "type": "number",
          "description": "Flat late fee in USD for type flat or flat_plus_daily, e.g. 75."
        },
        "percent": {
          "type": "number",
          "description": "Percent for type percent, e.g. 5 for 5%."
        },
        "max_total": {
          "type": "number",
          "description": "Optional cap on all late fees for one month's rent, in USD, e.g. 150."
        },
        "grace_days": {
          "type": "integer",
          "maximum": 31,
          "minimum": 0,
          "description": "Days after the due date that rent is still on time, e.g. 5: due the 1st, paid by the 6th is on time, fee on the 7th. If the lease says 'late after the 5th', use 4. Default 0."
        },
        "percent_of": {
          "enum": [
            "rent",
            "unpaid_rent"
          ],
          "type": "string",
          "description": "For type percent: the month's rent charge (default) or only the unpaid part of it."
        },
        "daily_amount": {
          "type": "number",
          "description": "Daily late fee in USD for type daily or flat_plus_daily, e.g. 10."
        },
        "max_percent_of_rent": {
          "type": "number",
          "description": "Optional cap as a percent of that month's rent, e.g. 10. With max_total, the lower cap applies."
        }
      },
      "description": "Late fee rule from the lease, e.g. {\"type\": \"flat\", \"amount\": 75, \"grace_days\": 5}. Omit for no late fees."
    },
    "payments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "amount"
        ],
        "properties": {
          "date": {
            "type": "string",
            "maxLength": 40,
            "description": "Date the payment was received, YYYY-MM-DD, e.g. 2026-02-03."
          },
          "memo": {
            "type": "string",
            "maxLength": 60,
            "description": "Optional short note, e.g. Check 1042, Zelle, Cash. No bank account numbers."
          },
          "amount": {
            "type": "number",
            "description": "Amount received in USD, e.g. 800. A returned or bounced payment is negative, e.g. -1450 with memo 'Returned check 1042'."
          }
        }
      },
      "maxItems": 5000,
      "description": "Payments received from the tenant, e.g. [{\"date\": \"2026-02-03\", \"amount\": 1450}]. Payments before a due date become a credit."
    },
    "property": {
      "type": "string",
      "maxLength": 120,
      "description": "Property or unit, e.g. 412 Oak St, Unit 2B, Austin, TX."
    },
    "lease_end": {
      "type": "string",
      "maxLength": 40,
      "description": "Move-out date (last day charged), YYYY-MM-DD, e.g. 2026-08-10. Omit for an ongoing tenancy."
    },
    "as_of_date": {
      "type": "string",
      "maxLength": 40,
      "description": "Statement date: charges and payments up to and including this day, YYYY-MM-DD, e.g. 2026-10-03. Use the date the user names, otherwise today's date from the conversation (the user's local date)."
    },
    "lease_start": {
      "type": "string",
      "maxLength": 40,
      "description": "Lease start or move-in date, YYYY-MM-DD, e.g. 2026-01-17. A mid-month start is prorated when rent is due on the 1st."
    },
    "tenant_name": {
      "type": "string",
      "maxLength": 80,
      "description": "Tenant name shown on the statement, e.g. Maria Lopez. Do not include a Social Security number."
    },
    "monthly_rent": {
      "type": "number",
      "description": "Monthly rent in USD from the lease, e.g. 1450."
    },
    "rent_changes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "effective_date",
          "monthly_rent"
        ],
        "properties": {
          "monthly_rent": {
            "type": "number",
            "description": "New monthly rent in USD, e.g. 1525."
          },
          "effective_date": {
            "type": "string",
            "maxLength": 40,
            "description": "First rent due date at the new amount, YYYY-MM-DD, e.g. 2026-07-01."
          }
        }
      },
      "maxItems": 24,
      "description": "Rent increases or decreases during the period, e.g. [{\"effective_date\": \"2026-07-01\", \"monthly_rent\": 1525}]."
    },
    "rent_due_day": {
      "type": "integer",
      "maximum": 28,
      "minimum": 1,
      "description": "Day of the month rent is due, 1-28, e.g. 1 (default)."
    },
    "landlord_name": {
      "type": "string",
      "maxLength": 80,
      "description": "Landlord or property manager name for the statement header, e.g. Oak Street Rentals LLC."
    },
    "other_charges": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "description",
          "amount"
        ],
        "properties": {
          "date": {
            "type": "string",
            "maxLength": 40,
            "description": "Date of the charge or credit, YYYY-MM-DD, e.g. 2026-03-05."
          },
          "amount": {
            "type": "number",
            "description": "Amount in USD; positive = charge (e.g. 45.20), negative = credit to the tenant (e.g. -100)."
          },
          "description": {
            "type": "string",
            "maxLength": 80,
            "description": "What it is, e.g. Water bill, Pet rent, Returned check fee, Rent concession."
          }
        }
      },
      "maxItems": 500,
      "description": "Charges other than rent (utilities, pet rent, repair, returned check fee) and credits (concessions). Do not include the security deposit unless the user asks."
    },
    "payment_order": {
      "enum": [
        "oldest_first",
        "rent_first"
      ],
      "type": "string",
      "description": "How payments are applied: oldest_first (default, oldest unpaid charge first, including late fees) or rent_first (rent and other charges before late fees)."
    },
    "payments_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "Optional CSV or Excel (.xlsx) list of payments with a date column and an amount column, e.g. payments-2026.csv."
    },
    "proration_method": {
      "enum": [
        "actual_days",
        "thirty_day",
        "annual_365"
      ],
      "type": "string",
      "description": "How a partial first or last month is prorated: actual_days (default, rent / days in month), thirty_day (rent / 30), annual_365 (rent x 12 / 365)."
    },
    "proration_rounding": {
      "enum": [
        "round_total",
        "daily_rate_first"
      ],
      "type": "string",
      "description": "round_total (default, round only the final amount to the cent) or daily_rate_first (round the daily rate to the cent before multiplying)."
    }
  }
}
generate_rent_ledger output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "tenant",
    "property",
    "as_of",
    "lease",
    "summary",
    "display",
    "aging",
    "months",
    "months_total",
    "rows_total",
    "recent_rows",
    "open_items",
    "prorations",
    "payments_file",
    "warnings",
    "downloads"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "aging": {
      "type": "object",
      "required": [
        "current",
        "days_31_60",
        "days_61_90",
        "over_90"
      ],
      "properties": {
        "current": {
          "type": "number"
        },
        "over_90": {
          "type": "number"
        },
        "days_31_60": {
          "type": "number"
        },
        "days_61_90": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "as_of": {
      "type": "string"
    },
    "lease": {
      "type": "object",
      "required": [
        "monthly_rent",
        "start",
        "end",
        "rent_due_day",
        "proration_method",
        "late_fee_rule",
        "payment_order"
      ],
      "properties": {
        "end": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": "string"
        },
        "monthly_rent": {
          "type": "number"
        },
        "rent_due_day": {
          "type": "number"
        },
        "late_fee_rule": {
          "type": "string"
        },
        "payment_order": {
          "type": "string"
        },
        "proration_method": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "months": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "month",
          "rent",
          "paid_on",
          "late_fees",
          "unpaid",
          "status"
        ],
        "properties": {
          "rent": {
            "type": "number"
          },
          "month": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "unpaid": {
            "type": "number"
          },
          "paid_on": {
            "type": [
              "string",
              "null"
            ]
          },
          "late_fees": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "tenant": {
      "type": [
        "string",
        "null"
      ]
    },
    "display": {
      "type": "object",
      "required": [
        "total_charged",
        "total_paid",
        "late_fees",
        "balance",
        "balance_label",
        "as_of"
      ],
      "properties": {
        "as_of": {
          "type": "string"
        },
        "balance": {
          "type": "string"
        },
        "late_fees": {
          "type": "string"
        },
        "total_paid": {
          "type": "string"
        },
        "balance_label": {
          "type": "string"
        },
        "total_charged": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "summary": {
      "type": "object",
      "required": [
        "total_charged",
        "rent_charged",
        "other_charges",
        "late_fees",
        "total_paid",
        "returned_payments",
        "credits",
        "balance_due",
        "credit_balance",
        "payments_count",
        "status"
      ],
      "properties": {
        "status": {
          "type": "string"
        },
        "credits": {
          "type": "number"
        },
        "late_fees": {
          "type": "number"
        },
        "total_paid": {
          "type": "number"
        },
        "balance_due": {
          "type": "number"
        },
        "rent_charged": {
          "type": "number"
        },
        "other_charges": {
          "type": "number"
        },
        "total_charged": {
          "type": "number"
        },
        "credit_balance": {
          "type": "number"
        },
        "payments_count": {
          "type": "number"
        },
        "returned_payments": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "property": {
      "type": [
        "string",
        "null"
      ]
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "csv": {
          "type": "string"
        },
        "pdf": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "open_items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "description",
          "unpaid",
          "days_old"
        ],
        "properties": {
          "date": {
            "type": "string"
          },
          "unpaid": {
            "type": "number"
          },
          "days_old": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "prorations": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "month",
          "days",
          "days_in_month",
          "chosen",
          "actual_days",
          "thirty_day",
          "annual_365"
        ],
        "properties": {
          "days": {
            "type": "number"
          },
          "month": {
            "type": "string"
          },
          "chosen": {
            "type": "string"
          },
          "annual_365": {
            "type": "number"
          },
          "thirty_day": {
            "type": "number"
          },
          "actual_days": {
            "type": "number"
          },
          "days_in_month": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "rows_total": {
      "type": "number"
    },
    "recent_rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "description",
          "charge",
          "payment",
          "balance"
        ],
        "properties": {
          "date": {
            "type": "string"
          },
          "charge": {
            "type": "number"
          },
          "balance": {
            "type": "number"
          },
          "payment": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "months_total": {
      "type": "number"
    },
    "payments_file": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "name",
            "rows_read",
            "payments_used",
            "skipped",
            "skipped_reasons"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "skipped": {
              "type": "number"
            },
            "rows_read": {
              "type": "number"
            },
            "payments_used": {
              "type": "number"
            },
            "skipped_reasons": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": false
}
generate_rent_ledger annotations
{
  "title": "Generate rent ledger",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

rent-ledger-widget — LeaseLine Rent Ledger view

Advertised by the server during the last successful anonymous check.

Interactive view for LeaseLine Rent Ledger.

rent-ledger-widget URI
ui://widget/rent-ledger-v1-1.0.0-6daf55180bb66b911398c93948bac82dac079240b0cc7871b173323d67d4009b.html

MIME type: text/html;profile=mcp-app

rent-ledger-widget-legacy — LeaseLine Rent Ledger view (previous versions)

Advertised by the server during the last successful anonymous check.

rent-ledger-widget-legacy URI template
ui://widget/rent-ledger-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
889 ms
95th percentile latency
889 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 889 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http leaseline-rent-ledger-mcp https://rent-ledger.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add leaseline-rent-ledger-mcp --url https://rent-ledger.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable leaseline-rent-ledger-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "leaseline-rent-ledger-mcp": {
      "url": "https://rent-ledger.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "leaseline-rent-ledger-mcp": {
      "type": "streamableHttp",
      "url": "https://rent-ledger.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start leaseline-rent-ledger-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "leaseline-rent-ledger-mcp": {
      "type": "http",
      "url": "https://rent-ledger.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http leaseline-rent-ledger-mcp https://rent-ledger.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "leaseline-rent-ledger-mcp": {
      "url": "https://rent-ledger.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "leaseline-rent-ledger-mcp": {
      "serverUrl": "https://rent-ledger.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like LeaseLine Rent Ledger MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.