Koskamo

theluckystrike Statement of Account MCP

Generates client statements of account, aging reports, and payment chasers from existing invoice and payment data. It calculates opening balances, movements, and closing balances, aging overdue items into buckets (0-30, 31-60, 61-90, 90+ days) and drafts reminder letters without modifying the source books.

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 Statement of Account MCP logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by theluckystrike
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/statement-of-account
Vendor documentation

What its tools do

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

8 of 8 have a description · 8 of 8 declare behavior hints · 7 of 7 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

  • Aging open invoices by days past due date into four buckets
  • Building a client statement for a specific period with opening and closing balances
  • Writing firm or final payment reminder letters for overdue invoices
  • Generating a receivables report across all clients ranked by overdue amount

Source and maintenance

Community listingRegistry 0.23.0
Maintenance checked

Protocol and capabilities

Server
mcp-statement-of-account 0.22.6
MCP protocol negotiated in check
2025-11-25
Tools
8 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.

Statements of account and receivables follow-up for clients. It covers a client's statement for a period with opening and closing balances, invoices, payments, applied deposits and credit notes, ageing of open invoices, statements as plain text or A4 PDF, payment chasers at friendly, firm or final level, and receivables across all clients. Figures come from the invoices, credit notes and deposits in the user's account on McpStamp's hosted service. The free tier allows 5 statements a month; PDFs, final demands and the all-client view need Pro. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.statement-of-account

Tools

8 advertised

statement_build — Build a statement of account
Advertised by the server during the last successful anonymous check.

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.

statement_build input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "client",
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD. Everything dated before it becomes the opening balance"
    },
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "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"
    }
  }
}
statement_build annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
statement_aging — Age the open invoices
Advertised by the server during the last successful anonymous check.

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.

statement_aging input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "limit": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 1,
      "description": "Maximum invoice rows returned, default and ceiling 2000"
    },
    "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"
    }
  }
}
statement_aging annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
statement_text — Plain-text statement of account
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

statement_text input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "client",
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
    },
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "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"
    },
    "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"
    }
  }
}
statement_text annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
statement_pdf — Render the statement of account as a PDF
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

statement_pdf input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "client",
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
    },
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "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"
    },
    "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"
    }
  }
}
statement_pdf annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
dunning_text — Write a dunning letter
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

dunning_text input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "client",
    "level"
  ],
  "properties": {
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "level": {
      "type": "integer",
      "maximum": 3,
      "minimum": 1,
      "description": "1 friendly reminder, 2 firm reminder, 3 final demand. Level 3 is Pro"
    },
    "client": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Client id from the invoice server, an exact client name, or a name containing this text"
    },
    "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"
    },
    "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"
    }
  }
}
dunning_text annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
statements_report — What every client owes
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

statements_report input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "as_of": {
      "type": "string",
      "maxLength": 10,
      "description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "How many clients to list, worst first. Default 20"
    }
  }
}
statements_report annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "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

upgrade_to_pro — Explain the upgrade

Advertised by the server during the last successful anonymous check.

Explain what Pro on the statement-of-account 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
chase_overdue — Chase what is overdue

Advertised by the server during the last successful anonymous check.

Age the receivables, decide who to chase and at what level, then write the letters.

No arguments advertised.

Resources

2 advertised

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

What statement-of-account 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://statement-of-account

MIME type: application/json

sources — Where the statement figures come from

Advertised by the server during the last successful anonymous check.

The three sibling stores this server reads, whether each could be read, and how many rows each holds.

sources URI
statement://sources

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
635 ms
95th percentile latency
635 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 635 ms · metadata changed · 8 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 statement-of-account-mcp-zovo https://mcp.zovo.one/mcp/statement-of-account

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 statement-of-account-mcp-zovo --url https://mcp.zovo.one/mcp/statement-of-account

Cursor

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

Cline

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

VS Code

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

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 statement-of-account-mcp-zovo https://mcp.zovo.one/mcp/statement-of-account

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/statement-of-account

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "statement-of-account-mcp-zovo": {
      "serverUrl": "https://mcp.zovo.one/mcp/statement-of-account"
    }
  }
}

Let your agent find its tools

Find servers like theluckystrike Statement of Account MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.