Skip to content

io.github.theluckystrike/recurring-invoice-scheduler-subscription-billing-due-reminders

by theluckystrike · remote · local (mcpb) · no sign-in to list tools · v0.22.6 · published by GitHub user theluckystrike

Recurring invoices on a schedule: define once, generate the due PDFs, forecast revenue.

Deletes · 1Changes · 12

14 tools: 1 can delete or cancel things, 12 change things and 1 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http recurring-invoice-scheduler-subscription-billing-due-reminders https://mcp.zovo.one/mcp/recurring --header 'Authorization: <your-authorization>'

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "schedule_list" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "schedule_list" says "schedule": a word for a change.

    What this check looks for
  • The server marks "schedule_get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "schedule_get" says "schedule": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

14 tools

Deletes or cancels 1Claude Code: deny
  • schedule_deleteDelete one schedule permanently.No findings

    Why it is in this group

    • The name "schedule_delete" says "schedule": a word for a change.
    • The description's first verb is "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete one schedule permanently. Invoices already generated stay in the invoice server and the history is kept. Re-creating it gives a NEW id, so its old periods count as unbilled. schedule_pause is reversible.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Changes things 12Claude Code: ask
  • forecastExpected invoiced revenue per calendar month per currency from active schedules.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Expected invoiced revenue per calendar month per currency from active schedules. Invoiced and skipped periods are excluded and paused schedules listed apart. Free: 3 months; Pro: up to 120.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • invoice_generate_dueCreate a real invoice in the invoice server for every schedule occurrence on or before as_of that has not been invoiced yet, and render each PDF.No findings

    Why it is in this group

    • The name "invoice_generate_due" says "generate": a word for a change.
    Description, as the server wrote it
    Create a real invoice in the invoice server for every schedule occurrence on or before as_of that has not been invoiced yet, and render each PDF. Returns what was created, what was skipped and what is still due.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • license_activateTurn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_createDefine a repeating invoice: a client, the line items, how often to bill, and when it starts and ends.No findings

    Why it is in this group

    • The name "schedule_create" says "schedule": a word for a change.
    Description, as the server wrote it
    Define a repeating invoice: a client, the line items, how often to bill, and when it starts and ends. Returns the schedule id, a summary and its next dates. Nothing is invoiced until invoice_generate_due runs.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_getReturn one schedule in full by id or client: items, cadence, dates, due days, anchor rules, notes, per-period amount, next due date and how many invoices it generated.1 finding

    Why it is in this group

    • The name "schedule_get" says "schedule": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "schedule_get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "schedule_get" says "schedule": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Return one schedule in full by id or client: items, cadence, dates, due days, anchor rules, notes, per-period amount, next due date and how many invoices it generated. schedule_history is the log.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • schedule_historyThe audit log for one schedule id, oldest first: period, invoice number, issue and due dates, amount, PDF path, and whether that invoice is unpaid, paid, skipped or since deleted.No findings

    Why it is in this group

    • The name "schedule_history" says "schedule": a word for a change.
    Description, as the server wrote it
    The audit log for one schedule id, oldest first: period, invoice number, issue and due dates, amount, PDF path, and whether that invoice is unpaid, paid, skipped or since deleted. schedule_list finds the id. Pro.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_listList schedules: id, client, cadence, per-period amount and currency, start and end dates, status, next due date and auto_generate.1 finding

    Why it is in this group

    • The name "schedule_list" says "schedule": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "schedule_list" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "schedule_list" says "schedule": a word for a change.

      What this check looks for
    Description, as the server wrote it
    List schedules: id, client, cadence, per-period amount and currency, start and end dates, status, next due date and auto_generate. Filter by status; a paused schedule reports no next due date.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • schedule_pauseStop one schedule generating invoices without deleting it; invoice_generate_due and forecast skip it.No findings

    Why it is in this group

    • The name "schedule_pause" says "schedule": a word for a change.
    Description, as the server wrote it
    Stop one schedule generating invoices without deleting it; invoice_generate_due and forecast skip it. Its periods keep falling due and resuming back-bills them, so use schedule_skip to drop just one.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_resumeMake a paused schedule active again.No findings

    Why it is in this group

    • The name "schedule_resume" says "schedule": a word for a change.
    Description, as the server wrote it
    Make a paused schedule active again. Every period missed while it was paused is still due and the next invoice_generate_due creates them all. Refused when it would pass the free tier's 3 active.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_skipClose ONE occurrence for good without pausing the schedule, reporting what will not be billed.No findings

    Why it is in this group

    • The name "schedule_skip" says "schedule": a word for a change.
    Description, as the server wrote it
    Close ONE occurrence for good without pausing the schedule, reporting what will not be billed. period must be a real occurrence of it. An invoiced period is refused; undo reopens a skip.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_upcomingTable every occurrence of every ACTIVE schedule due in the next N days (30 default), with its amount and the invoice due date, plus a total per currency.No findings

    Why it is in this group

    • The name "schedule_upcoming" says "schedule": a word for a change.
    Description, as the server wrote it
    Table every occurrence of every ACTIVE schedule due in the next N days (30 default), with its amount and the invoice due date, plus a total per currency. Free lists the first 3 in your horizon.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_updateChange one schedule by id: client, items, currency, cadence, dates, due_days, notes or auto_generate.No findings

    Why it is in this group

    • The name "schedule_update" says "schedule": a word for a change.
    Description, as the server wrote it
    Change one schedule by id: client, items, currency, cadence, dates, due_days, notes or auto_generate. Only the fields you pass change. Periods already invoiced are never re-issued, so a new amount applies to future ones.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 1Claude Code: allow
  • license_statusReport 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.No findings

    Why it is in this group

    • The name "license_status" says "status": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.22.6. Values in angle brackets are yours to fill in.

claude mcp add --transport http recurring-invoice-scheduler-subscription-billing-due-reminders https://mcp.zovo.one/mcp/recurring --header 'Authorization: <your-authorization>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__license_status"
    ],
    "ask": [
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_create",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_list",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_get",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_update",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_pause",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_resume",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_skip",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_upcoming",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__invoice_generate_due",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_history",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__forecast",
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__license_activate"
    ],
    "deny": [
      "mcp__recurring-invoice-scheduler-subscription-billing-due-reminders__schedule_delete"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as recurring-invoice-scheduler-subscription-billing-due-reminders. Review it before you use it.