dunning

Write payment chasers at three levels from the invoices that are actually overdue.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
89%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'statements_report' description lacks action verbin statements_report

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,901Tokens (tool definitions)
~1.8 KBTypical response size
Moderate attention impact (1.49% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

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

Runnable packages

mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/statement-of-account.mcpb0.21.0stdio
mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/statement-of-account.mcpb0.22.5stdio

Remote endpoints

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

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪statement_build(client, from, to, currency)

Build one client's statement for a period: opening, invoices, payments with deposits applied broken out, credit notes and closing, formatted and in minor units. Free: 5 a month; a rebuild is free.

Input Schema

{
  "type": "object",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD. Everything dated before it becomes the opening balance"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
    }
  },
  "required": [
    "client",
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪statement_aging(client, currency, as_of, limit)

Age open invoices into 0-30, 31-60, 61-90 and over 90 days past DUE date at a date, per client and currency, with the invoices themselves. Free. statements_report rolls up the whole book instead.

Input Schema

{
  "type": "object",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "description": "One client id or name. Omit to age every client in the books"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only this currency. Omit for every currency, each aged separately"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2000,
      "description": "Maximum invoice rows returned, default and ceiling 2000"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢statement_text(client, from, to, currency, as_of, ...)

Turn one client's statement into a plain-text letter for an email: movements in date order, opening and closing balances, deposit held, a sign-off. It is also a .txt download link valid one hour and counts toward the 5 a month; statement_pdf writes the A4 page.

Input Schema

{
  "type": "object",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
    },
    "greeting": {
      "type": "string",
      "maxLength": 4000,
      "description": "Opening line, default \"Hello\" and the client name"
    },
    "sign_off": {
      "type": "string",
      "maxLength": 4000,
      "description": "Closing line, default your business name from the shared profile"
    }
  },
  "required": [
    "client",
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢statement_pdf(client, from, to, currency, as_of, ...)

Call this tool to render one client's A4 statement of account and return a download link valid for one hour. Titled STATEMENT OF ACCOUNT, movements in date order, BALANCE OUTSTANDING at the foot. Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the downloaded file, e.g. acme-statement. Defaults to the client, currency and period; the statement comes back as a download link valid for one hour"
    }
  },
  "required": [
    "client",
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢dunning_text(client, level, currency, as_of, greeting, ...)

Write a payment chaser at level 1 friendly, 2 firm or 3 final demand: every OVERDUE invoice with its age, the total and your bank details. Refused if nothing is overdue. No interest is stated. The letter is also a .txt download link valid one hour. Level 3 is Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "level": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3,
      "description": "1 friendly reminder, 2 firm reminder, 3 final demand. Level 3 is Pro"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "greeting": {
      "type": "string",
      "maxLength": 4000,
      "description": "Opening line, default \"Hello\" and the client name"
    },
    "sign_off": {
      "type": "string",
      "maxLength": 4000,
      "description": "Closing line, default your business name from the shared profile"
    }
  },
  "required": [
    "client",
    "level"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢statements_report(as_of, limit)

Receivables across every client at a date: totals and aging per currency, clients ranked by how much is OVERDUE, and the oldest overdue invoice. Pro. statement_aging is the free per-client view.

Input Schema

{
  "type": "object",
  "properties": {
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "description": "How many clients to list, worst first. Default 20"
    }
  },
  "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.

Input Schema

{
  "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.

Input Schema

{
  "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#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools