subscriptions

Recurring subscriptions billing: schedule once, auto-generate due invoice PDFs.

我该使用它吗

质量与安全性

A
描述质量
99%
模式完整度
85%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,101token 数(工具定义)
~1.7 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 2.42%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "subscriptions": {
      "command": "uvx",
      "args": [
        "https://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/recurring.mcpb"
      ]
    }
  }
}

可运行的软件包

mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/recurring.mcpb0.21.0stdio
mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/recurring.mcpb0.22.0stdio

远程端点

https://mcp.zovo.one/mcp/subscriptionsstreamable-http

它能做什么

工具清单

工具(14)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟡schedule_create(client, items, currency, every, start_date, ...)

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",
  "properties": {
    "client": {
      "type": "string",
      "description": "Client name or id, as in the invoice server. Unknown names are created on the first generated invoice"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "quantity": {
            "type": "number",
            "minimum": -1000000000000,
            "maximum": 1000000000000,
            "description": "Hours, units or 1 for a flat fee"
          },
          "unit_price": {
            "type": "number",
            "minimum": -1000000000000,
            "maximum": 1000000000000,
            "description": "Price per unit in major units, e.g. 90 for 90 EUR"
          },
          "tax_rate": {
            "type": "number",
            "minimum": -100,
            "maximum": 1000,
            "description": "VAT percent for this line, overrides the business default"
          }
        },
        "required": [
          "description",
          "quantity",
          "unit_price"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 200,
      "description": "The line items billed every period"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Defaults to your business default currency"
    },
    "every": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "weekly",
            "monthly",
            "quarterly",
            "yearly"
          ]
        },
        {
          "type": "object",
          "properties": {
            "days": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          "required": [
            "days"
          ],
          "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"
    },
    "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_date": {
      "type": "string",
      "description": "YYYY-MM-DD, INCLUSIVE: an occurrence landing exactly on it is still generated"
    },
    "due_days": {
      "type": "integer",
      "description": "Days until each invoice is due, defaults to your payment terms"
    },
    "notes": {
      "type": "string",
      "description": "Free text printed under the totals of every generated invoice"
    },
    "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"
    },
    "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"
    },
    "anchor_day": {
      "type": "integer",
      "minimum": 1,
      "maximum": 31,
      "description": "Pro: bill on this day of month instead of the start date's day. 31 means the last day of every month"
    },
    "end_of_month": {
      "type": "boolean",
      "description": "Pro: always bill on the last day of the month"
    }
  },
  "required": [
    "client",
    "items",
    "every",
    "start_date"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢schedule_list(status)

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",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢schedule_get(id)

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",
  "properties": {
    "id": {
      "type": "string",
      "description": "Schedule id, or a client name"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡schedule_update(id, client, items, currency, every, ...)

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",
  "properties": {
    "id": {
      "type": "string"
    },
    "client": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "quantity": {
            "type": "number",
            "minimum": -1000000000000,
            "maximum": 1000000000000,
            "description": "Hours, units or 1 for a flat fee"
          },
          "unit_price": {
            "type": "number",
            "minimum": -1000000000000,
            "maximum": 1000000000000,
            "description": "Price per unit in major units, e.g. 90 for 90 EUR"
          },
          "tax_rate": {
            "type": "number",
            "minimum": -100,
            "maximum": 1000,
            "description": "VAT percent for this line, overrides the business default"
          }
        },
        "required": [
          "description",
          "quantity",
          "unit_price"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 200
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$"
    },
    "every": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "weekly",
            "monthly",
            "quarterly",
            "yearly"
          ]
        },
        {
          "type": "object",
          "properties": {
            "days": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          "required": [
            "days"
          ],
          "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"
    },
    "start_date": {
      "type": "string"
    },
    "end_date": {
      "type": [
        "string",
        "null"
      ],
      "description": "null clears the end date"
    },
    "due_days": {
      "type": "integer"
    },
    "notes": {
      "type": "string"
    },
    "tax_note": {
      "type": "string",
      "description": "Replace the tax reason carried onto every future generated invoice. Pass an empty string to clear it"
    },
    "auto_generate": {
      "type": "boolean"
    },
    "anchor_day": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 31
        },
        {
          "type": "null"
        }
      ],
      "description": "Pro"
    },
    "end_of_month": {
      "type": "boolean",
      "description": "Pro"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴schedule_pause(id)

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",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪schedule_resume(id)

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",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴schedule_delete(id)

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",
  "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"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪schedule_skip(id, period, undo)

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",
  "properties": {
    "id": {
      "type": "string",
      "description": "Schedule id, or a client name"
    },
    "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"
    },
    "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"
    }
  },
  "required": [
    "id",
    "period"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪schedule_upcoming(days)

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",
  "properties": {
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3650,
      "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,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡invoice_generate_due(as_of, schedule_id, dry_run)

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",
  "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"
    },
    "schedule_id": {
      "type": "string",
      "description": "Only this schedule. Free and unlimited on every tier"
    },
    "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"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢schedule_history(id)

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",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪forecast(months)

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",
  "properties": {
    "months": {
      "type": "integer",
      "minimum": 1,
      "maximum": 120,
      "description": "Months ahead including this one, default 12"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢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",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪license_activate(key)

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",
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本14 个工具
已验证未记录版本14 个工具