Koskamo

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.

theluckystrike McpStamp Recurring Invoices MCP logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by theluckystrike
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/recurring
Vendor documentation

What its tools do

14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

14 of 14 have a description · 14 of 14 declare behavior hints · 8 of 13 with parameters document them all

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

Community listingRegistry 0.23.0
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
Server-advertised capabilities
{
  "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.

Recurring invoicing for clients billed on a repeating cadence. It covers repeating invoice schedules with a client, line items, cadence and start and end dates, pausing, resuming or skipping periods, what falls due soon, creating the due invoices and their PDFs in the invoice server, a per-schedule audit log and expected revenue per month. Schedules are stored per user account on McpStamp's hosted service. The free tier allows 3 active schedules and a 3-month revenue outlook; the audit log needs Pro, and Pro extends the outlook to 120 months. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.recurring

Tools

14 advertised

schedule_create — Create a recurring invoice schedule
Advertised by the server during the last successful anonymous check.

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.

schedule_create input schema
{
  "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"
    }
  }
}
schedule_create annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_list — List schedules
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

schedule_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "status": {
      "enum": [
        "active",
        "paused"
      ],
      "type": "string"
    }
  }
}
schedule_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
schedule_get — Get one schedule
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

schedule_get input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Schedule id, or a client name"
    }
  }
}
schedule_get annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
schedule_update — Update a schedule
Advertised by the server during the last successful anonymous check.

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.

schedule_update input schema
{
  "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"
    }
  }
}
schedule_update annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_pause — Pause a schedule
Advertised by the server during the last successful anonymous check.

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.

schedule_pause input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  }
}
schedule_pause annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_resume — Resume a schedule
Advertised by the server during the last successful anonymous check.

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.

schedule_resume input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  }
}
schedule_resume annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_delete — Delete a schedule
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

schedule_delete input schema
{
  "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"
    }
  }
}
schedule_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
schedule_skip — Skip one period
Advertised by the server during the last successful anonymous check.

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.

schedule_skip input schema
{
  "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"
    }
  }
}
schedule_skip annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_upcoming — What falls due soon
Advertised by the server during the last successful anonymous check.

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.

schedule_upcoming input schema
{
  "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"
    }
  }
}
schedule_upcoming annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
invoice_generate_due — Generate the invoices that are due
Advertised by the server during the last successful anonymous check.

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.

invoice_generate_due input schema
{
  "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"
    }
  }
}
invoice_generate_due annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
schedule_history — Schedule history
Advertised by the server during the last successful anonymous check.

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.

schedule_history input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  }
}
schedule_history annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
forecast — Revenue forecast
Advertised by the server during the last successful anonymous check.

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.

forecast input schema
{
  "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"
    }
  }
}
forecast annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
license_status — License status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

license_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_activate — Activate license
Advertised by the server during the last successful anonymous check.

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.

license_activate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  }
}
license_activate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

2 advertised

monthly_billing_run — Monthly billing run

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Every schedule occurrence falling due in the next 30 days as JSON, with amounts per currency.

upcoming URI
recurring://upcoming

MIME type: application/json

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

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 URI
pricing://recurring

MIME type: application/json

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

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 mcpstamp-recurring-invoices-mcp https://mcp.zovo.one/mcp/recurring

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 mcpstamp-recurring-invoices-mcp --url https://mcp.zovo.one/mcp/recurring

Cursor

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

Cline

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

VS Code

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

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 mcpstamp-recurring-invoices-mcp https://mcp.zovo.one/mcp/recurring

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.zovo.one/mcp/recurring

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.