theluckystrike McpStamp Recurring Invoices MCP
Generates recurring invoices on weekly, monthly, quarterly, or yearly schedules. It creates PDF invoices for due periods, provides revenue forecasts, and manages billing schedules for freelancers and agencies without requiring a separate billing SaaS.
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.
https://mcp.zovo.one/mcp/recurringWhat its tools do
14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (3)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Define a repeating invoice schedule with client, line items, and cadence
- Generate due invoices and render PDFs for active schedules
- Forecast expected invoiced revenue per month from active schedules
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- mcp-recurring 0.22.6
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 14 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"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.
Tools
14 advertised
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.
{
"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
}
}
}
],
"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"
}
}
},
"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",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"active",
"paused"
],
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Schedule id, or a client name"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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.
{
"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
}
}
}
],
"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"
}
}
},
"maxItems": 200,
"minItems": 1
},
"notes": {
"type": "string"
},
"client": {
"type": "string"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"due_days": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}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.
{
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}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.
{
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
2 advertised
monthly_billing_run — Monthly billing run
Generate every invoice that is due, list what was created, and report what is still unpaid so reminders can go out.
- as_of
- YYYY-MM-DD, defaults to today
upgrade_to_pro — Explain the upgrade
Explain what Pro on the recurring server costs and exactly what the user has to do, without leaving the conversation.
- feature
- The capped feature that prompted this, if there was one
Resources
2 advertised
upcoming — Upcoming invoices
Every schedule occurrence falling due in the next 30 days as JSON, with amounts per currency.
recurring://upcomingpricing — Pricing and upgrade
What recurring costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.
pricing://recurring90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
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
- 2574 ms
- 95th percentile latency
- 2574 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2574 ms · metadata changed · 14 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http mcpstamp-recurring-invoices-mcp https://mcp.zovo.one/mcp/recurringCodex
codex mcp add mcpstamp-recurring-invoices-mcp --url https://mcp.zovo.one/mcp/recurringCursor
{
"mcpServers": {
"mcpstamp-recurring-invoices-mcp": {
"url": "https://mcp.zovo.one/mcp/recurring"
}
}
}Cline
{
"mcpServers": {
"mcpstamp-recurring-invoices-mcp": {
"type": "streamableHttp",
"url": "https://mcp.zovo.one/mcp/recurring",
"disabled": false
}
}
}VS Code
{
"servers": {
"mcpstamp-recurring-invoices-mcp": {
"type": "http",
"url": "https://mcp.zovo.one/mcp/recurring"
}
}
}Gemini CLI
gemini mcp add --transport http mcpstamp-recurring-invoices-mcp https://mcp.zovo.one/mcp/recurringClaude Desktop
https://mcp.zovo.one/mcp/recurringWindsurf
{
"mcpServers": {
"mcpstamp-recurring-invoices-mcp": {
"serverUrl": "https://mcp.zovo.one/mcp/recurring"
}
}
}Let your agent find its tools
Find servers like theluckystrike McpStamp Recurring Invoices MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.