Servidor MCP

recurring-invoice-scheduler-subscription-billing-due-reminders

io.github.theluckystrike/recurring-invoice-scheduler-subscription-billing-due-reminders
Negocio y operaciones Finanzas e inversión Público y accesible MCP 2026-07-28

Qué hace este MCP

Creates and manages recurring invoice schedules, generates due invoices and PDFs, and forecasts invoiced revenue.

forecast
Revenue forecast
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'months': {'type': 'integer', 'maximum': 120, 'minimum': 1, 'description': 'Months ahead including this one, default 12'}}, 'additionalProperties': False}
invoice_generate_due
Generate the invoices that are due
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'as_of': {'type': 'string', 'description': 'YYYY-MM-DD, defaults to today. Every occurrence on or before this date that has not been invoiced is billed. Idempotent: one invoice per schedule per period, keyed by the occurrence date, so running it twice creates nothing the second time'}, 'dry_run': {'type': 'boolean', 'description': 'List what would be created without creating anything. Default false. One run creates at most 60 invoices, oldest period first'}, 'schedule_id': {'type': 'string', 'description': 'Only this schedule. Free and unlimited on every tier'}}, 'additionalProperties': False}
license_activate
Activate license
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'License key from checkout, MCPL1.<payload>.<signature>'}}, 'additionalProperties': False}
license_status
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
schedule_create
Create a recurring invoice schedule
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['client', 'items', 'every', 'start_date'], 'properties': {'every': {'anyOf': [{'enum': ['weekly', 'monthly', 'quarterly', 'yearly'], 'type': 'string'}, {'type': 'object', 'required': ['days'], 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1}}, 'additionalProperties': False}], 'description': 'How often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date\'s day of month and clamp it to shorter months, so a schedule starting on the 31st bills on the 28th/29th in February and back on the 31st in March'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'quantity', 'unit_price'], 'properties': {'quantity': {'type': 'number', 'maximum': 1000000000000, 'minimum': -1000000000000, 'description': 'Hours, units or 1 for a flat fee'}, 'tax_rate': {'type': 'number', 'maximum': 1000, 'minimum': -100, 'description': 'VAT percent for this line, overrides the business default'}, 'unit_price': {'type': 'number', 'maximum': 1000000000000, 'minimum': -1000000000000, 'description': 'Price per unit in major units, e.g. 90 for 90 EUR'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 200, 'minItems': 1, 'description': 'The line items billed every period'}, 'notes': {'type': 'string', 'description': 'Free text printed under the totals of every generated invoice'}, 'client': {'type': 'string', 'description': 'Client name or id, as in the invoice server. Unknown names are created on the first generated invoice'}, 'currency': {'type': 'string', 'pattern': '^[A-Za-z]{3}$', 'description': 'Defaults to your business default currency'}, 'due_days': {'type': 'integer', 'description': 'Days until each invoice is due, defaults to your payment terms'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD, INCLUSIVE: an occurrence landing exactly on it is still generated'}, 'tax_note': {'type': 'string', 'description': "Why this schedule bills the tax it bills, e.g. 'Reverse charge: VAT accounted for by the recipient, art. 196 Directive 2006/112/EC'. It is printed under the totals of EVERY invoice this schedule generates, so a 0% retainer carries its reason on the document instead of only in the chat"}, 'anchor_day': {'type': 'integer', 'maximum': 31, 'minimum': 1, 'description': "Pro: bill on this day of month instead of the start date's day. 31 means the last day of every month"}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD. The first invoice falls on this date, and for weekly/monthly/quarterly/yearly steps its day of month is the billing day for every later period'}, 'end_of_month': {'type': 'boolean', 'description': 'Pro: always bill on the last day of the month'}, 'auto_generate': {'type': 'boolean', 'description': 'Marks the schedule for the monthly_billing_run prompt. Default false. Nothing runs in the background either way: invoices are created only when invoice_generate_due is called'}}, 'additionalProperties': False}
schedule_delete
Delete a schedule
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.
Destructivo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Schedule id, or a client name. Deletion is permanent; re-creating the same schedule afterwards gives it a NEW id, so its old periods count as unbilled again'}}, 'additionalProperties': False}
schedule_get
Get one schedule
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Schedule id, or a client name'}}, 'additionalProperties': False}
schedule_history
Schedule history
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}
schedule_list
List schedules
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'status': {'enum': ['active', 'paused'], 'type': 'string'}}, 'additionalProperties': False}
schedule_pause
Pause a schedule
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}
schedule_resume
Resume a schedule
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}
schedule_skip
Skip one period
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'period'], 'properties': {'id': {'type': 'string', 'description': 'Schedule id, or a client name'}, 'undo': {'type': 'boolean', 'description': 'Remove a previous skip so the period becomes due again. Works only on a period that has not been invoiced. Default false'}, 'period': {'type': 'string', 'description': 'The occurrence date to skip, YYYY-MM-DD, exactly as it appears in schedule_upcoming or forecast. This is the answer to "pause this client for October": schedule_pause stops the whole schedule and a resumed schedule still back-bills the periods it missed, whereas a skipped period is closed for good'}}, 'additionalProperties': False}
schedule_upcoming
What falls due soon
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Days ahead, default 30. The free tier honours the horizon you ask for and lists the first 3 occurrences in it; Pro lists them all'}}, 'additionalProperties': False}
schedule_update
Update a schedule
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.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'every': {'anyOf': [{'enum': ['weekly', 'monthly', 'quarterly', 'yearly'], 'type': 'string'}, {'type': 'object', 'required': ['days'], 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1}}, 'additionalProperties': False}], 'description': 'How often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date\'s day of month and clamp it to shorter months, so a schedule starting on the 31st bills on the 28th/29th in February and back on the 31st in March'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'quantity', 'unit_price'], 'properties': {'quantity': {'type': 'number', 'maximum': 1000000000000, 'minimum': -1000000000000, 'description': 'Hours, units or 1 for a flat fee'}, 'tax_rate': {'type': 'number', 'maximum': 1000, 'minimum': -100, 'description': 'VAT percent for this line, overrides the business default'}, 'unit_price': {'type': 'number', 'maximum': 1000000000000, 'minimum': -1000000000000, 'description': 'Price per unit in major units, e.g. 90 for 90 EUR'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 200, 'minItems': 1}, 'notes': {'type': 'string'}, 'client': {'type': 'string'}, 'currency': {'type': 'string', 'pattern': '^[A-Za-z]{3}$'}, 'due_days': {'type': 'integer'}, 'end_date': {'type': ['string', 'null'], 'description': 'null clears the end date'}, 'tax_note': {'type': 'string', 'description': 'Replace the tax reason carried onto every future generated invoice. Pass an empty string to clear it'}, 'anchor_day': {'anyOf': [{'type': 'integer', 'maximum': 31, 'minimum': 1}, {'type': 'null'}], 'description': 'Pro'}, 'start_date': {'type': 'string'}, 'end_of_month': {'type': 'boolean', 'description': 'Pro'}, 'auto_generate': {'type': 'boolean'}}, 'additionalProperties': False}
Modificado
license_activate
21 de September de 2026 a las 02:56
Modificado
license_status
21 de September de 2026 a las 02:56
Modificado
forecast
21 de September de 2026 a las 02:56
Modificado
schedule_history
21 de September de 2026 a las 02:56
Modificado
invoice_generate_due
21 de September de 2026 a las 02:56
Modificado
schedule_upcoming
21 de September de 2026 a las 02:56
Modificado
schedule_skip
21 de September de 2026 a las 02:56
Modificado
schedule_delete
21 de September de 2026 a las 02:56
Modificado
schedule_resume
21 de September de 2026 a las 02:56
Modificado
schedule_pause
21 de September de 2026 a las 02:56
Modificado
schedule_update
21 de September de 2026 a las 02:56
Modificado
schedule_get
21 de September de 2026 a las 02:56
Modificado
schedule_list
21 de September de 2026 a las 02:56
Modificado
schedule_create
21 de September de 2026 a las 02:56
Añadido
license_activate
17 de September de 2026 a las 12:52
Añadido
license_status
17 de September de 2026 a las 12:52
Añadido
forecast
17 de September de 2026 a las 12:52
Añadido
schedule_history
17 de September de 2026 a las 12:52
Añadido
invoice_generate_due
17 de September de 2026 a las 12:52
Añadido
schedule_upcoming
17 de September de 2026 a las 12:52
Añadido
schedule_skip
17 de September de 2026 a las 12:52
Añadido
schedule_delete
17 de September de 2026 a las 12:52
Añadido
schedule_resume
17 de September de 2026 a las 12:52
Añadido
schedule_pause
17 de September de 2026 a las 12:52
Añadido
schedule_update
17 de September de 2026 a las 12:52
Añadido
schedule_get
17 de September de 2026 a las 12:52
Añadido
schedule_list
17 de September de 2026 a las 12:52
Añadido
schedule_create
17 de September de 2026 a las 12:52