MCP Credit Note
A community MCP server for freelancers and small businesses to manage credit notes. It supports creating drafts against invoices or standalone, finalizing them with sequential numbering, rendering to Markdown or HTML, and summarizing totals by currency, reason, and month.
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/credit-noteWhat you can do with it
- Issue a credit note against an invoice for returned goods
- Finalize a draft credit note to generate a sequential number
- Render a credit note as a printable HTML page
- Summarize credit totals by reason and month
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- mcp-billing-docs 0.22.6
- MCP protocol
- 2025-06-18
- Tools
- 16 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
16 advertised
credit_note_create — Credit an invoice
Credit one invoice: the whole invoice, a GROSS amount_minor split over its VAT rates, or named lines. Amounts store negative, reusing the invoice's own rates. Free: 5 a month. Send it with credit_note_text.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"invoice",
"reason"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"line"
],
"properties": {
"line": {
"type": "integer",
"description": "1-based position of the line on the invoice, as shown by invoice_get",
"exclusiveMinimum": 0
},
"quantity": {
"type": "number",
"maximum": 1000000000000,
"minimum": -1000000000000,
"description": "Credit only this many units. Defaults to the whole line",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "Credit only these invoice lines. Leave out with amount_minor for a full credit note"
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Free text printed under the totals"
},
"reason": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Why the money is being given back, e.g. \"returned goods\" or \"billed twice\". Printed on the document"
},
"invoice": {
"type": "string",
"minLength": 1,
"description": "The invoice number to credit, e.g. INV-2026-0001"
},
"issue_date": {
"type": "string",
"description": "YYYY-MM-DD, defaults to today in your business profile's timezone"
},
"amount_minor": {
"type": "integer",
"maximum": 1000000000000,
"description": "Credit this GROSS amount, VAT included, in minor units. Split across the invoice's VAT rates in proportion to each rate's share of the total",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}credit_note_list — List credit notes
List credit notes newest first: id, invoice, client, basis, reason, currency and the NEGATIVE total, with the amount credited per currency. Filter by invoice, client or issue date range.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest issue date"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest issue date"
},
"client": {
"type": "string",
"description": "Only credit notes for clients whose name contains this text"
},
"invoice": {
"type": "string",
"description": "Only credit notes issued against this invoice number"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}credit_note_get — Show one credit note
Return one credit note in full by id or exact client name: every negated line, VAT lines, totals, the reason, and the invoice number and date it reverses. Reads only. Use credit_note_list for the ids.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001, or an exact client name"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}credit_note_pdf — Render the credit note as a PDF
Call this tool to render one credit note as an A4 print-ready document and return a download link valid for one hour: the invoice layout titled CREDIT NOTE, with the invoice it reverses. Pro.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001"
},
"out_path": {
"type": "string",
"description": "Name for the downloaded file, e.g. acme-credit. Defaults to the document id; the document comes back as a download link valid for one hour"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}credit_note_text — Plain-text credit note to paste into email
Turn a credit note into a plain-text summary to paste into an email: the negated line table, VAT lines, total, reason, and what now comes off the invoice. Also a .txt download link valid one hour. Free; credit_note_pdf writes the A4 document.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001"
},
"greeting": {
"type": "string",
"description": "Opening line, default \"Hello\" plus the client name"
},
"sign_off": {
"type": "string",
"description": "Closing line, default your business name from the shared profile"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}credit_note_delete — Delete a credit note
Remove one credit note never posted to its invoice and never rendered, freeing that month's slot; the invoice becomes creditable again. One with a dependent is refused: issue a fresh note to reverse a sent one.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001, or an exact client name"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}purchase_order_create — Raise a purchase order
Raise a purchase order to a supplier from items and return its PO number and totals. unit_price is in MAJOR units; currency, VAT and the buyer block come from the shared profile. Free: 5 documents a calendar month.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"supplier",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"quantity",
"unit_price_minor"
],
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only to state the line's currency; every line on one document must agree"
},
"quantity": {
"type": "number",
"maximum": 1000000000000,
"minimum": -1000000000000,
"description": "Units ordered, must be greater than zero",
"exclusiveMinimum": 0
},
"tax_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for this line, overrides the business default"
},
"description": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "every line needs a description, 500 characters or fewer"
},
"unit_price_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "Price per unit in MINOR units: 9000 = 90.00 EUR, 90 = JPY 90. Never a decimal"
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "What is being ordered"
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Free text printed under the totals, e.g. delivery address or terms"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to your business default currency"
},
"supplier": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Supplier name or client id. A name the invoice server already knows brings its address, email and VAT id onto the order"
},
"tax_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for lines with no rate of their own. Defaults to the business default"
},
"issue_date": {
"type": "string",
"description": "YYYY-MM-DD, defaults to today in your business profile's timezone"
},
"supplier_email": {
"type": "string",
"maxLength": 320,
"description": "Only if the user gave it; otherwise the stored client's email is used"
},
"supplier_vat_id": {
"type": "string",
"maxLength": 64,
"description": "Supplier VAT / tax registration id"
},
"discount_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Discount applied to every line, in percent"
},
"supplier_address": {
"type": "string",
"maxLength": 2000,
"description": "Postal address for the SUPPLIER block, newlines allowed"
},
"expected_delivery_date": {
"type": "string",
"description": "YYYY-MM-DD, when the goods or work are due"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_list — List purchase orders
List purchase orders newest first: id, supplier, order and expected delivery dates, status open, partially_received or received, currency, total and received date. Filter by status, supplier or date range.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest order date"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest order date"
},
"status": {
"enum": [
"open",
"partially_received",
"received",
"all"
],
"type": "string",
"description": "Default \"all\""
},
"supplier": {
"type": "string",
"description": "Only orders to suppliers whose name contains this text"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_get — Show one purchase order
Return one purchase order in full by id or exact supplier name: buyer and supplier blocks, every line with unit price and VAT, totals, the delivery date, status and every receipt with its date and note.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001, or an exact supplier name"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_pdf — Render the purchase order as a PDF
Call this tool to render one purchase order as an A4 print-ready document and return a download link valid for one hour: the invoice layout titled PURCHASE ORDER, with the buyer and supplier. Pro.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001"
},
"out_path": {
"type": "string",
"description": "Name for the downloaded file, e.g. acme-credit. Defaults to the document id; the document comes back as a download link valid for one hour"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_text — Plain-text purchase order to paste into email
Turn a purchase order into a plain-text order to paste into an email: the line table, VAT lines, total, and a line asking the supplier to deliver by the date and quote the PO number. Also a .txt download link valid one hour. Free on every tier.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001"
},
"greeting": {
"type": "string",
"description": "Opening line, default \"Hello\" plus the supplier name"
},
"sign_off": {
"type": "string",
"description": "Closing line, default your business name from the shared profile"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_receive — Mark a purchase order received
Record that an order arrived. partial keeps it open and can be repeated, each receipt kept with its date and note; a full receipt closes it. An order already received, or a date before the order date, is refused.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD, defaults to today"
},
"note": {
"type": "string",
"maxLength": 10000,
"description": "What arrived, e.g. \"8 of 10 units, 2 back-ordered\""
},
"partial": {
"type": "boolean",
"description": "True when only some of the order arrived. The order stays open and can be received again. Default false"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}purchase_order_delete — Delete a purchase order
Remove one purchase order with nothing received and never rendered, freeing that month's slot. One with a receipt is refused, naming it. The PO number is never reissued. purchase_order_receive logs arrivals.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001, or an exact supplier name"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}billing_docs_report — Credited money and open orders
Over a date range: what was credited back per currency and against how many invoices, what is still on order per currency, and every open order past its delivery date with days late. Pro; the list tools are free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest document date to count"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest document date to count"
}
},
"additionalProperties": false
}{
"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>"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
2 advertised
upgrade_to_pro — Explain the upgrade
Explain what Pro on the billing-docs 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_deliveries — Chase the late deliveries
Review which purchase orders are late, then draft the chaser to each supplier.
Resources
2 advertised
pricing — Pricing and upgrade
What billing-docs 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://billing-docsopen-purchase-orders — Open purchase orders
Every purchase order that has not been received in full, as JSON.
billing-docs://open-orders30-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
- 1227 ms
- 95th percentile latency
- 1227 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1227 ms · metadata changed · 16 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 mcp-credit-note https://mcp.zovo.one/mcp/credit-noteCodex
codex mcp add mcp-credit-note --url https://mcp.zovo.one/mcp/credit-noteCursor
{
"mcpServers": {
"mcp-credit-note": {
"url": "https://mcp.zovo.one/mcp/credit-note"
}
}
}Cline
{
"mcpServers": {
"mcp-credit-note": {
"type": "streamableHttp",
"url": "https://mcp.zovo.one/mcp/credit-note",
"disabled": false
}
}
}VS Code
{
"servers": {
"mcp-credit-note": {
"type": "http",
"url": "https://mcp.zovo.one/mcp/credit-note"
}
}
}Gemini CLI
gemini mcp add --transport http mcp-credit-note https://mcp.zovo.one/mcp/credit-noteClaude Desktop
{
"mcpServers": {
"mcp-credit-note": {
"url": "https://mcp.zovo.one/mcp/credit-note"
}
}
}Windsurf
{
"mcpServers": {
"mcp-credit-note": {
"serverUrl": "https://mcp.zovo.one/mcp/credit-note"
}
}
}Let your agent find its tools
Find servers like MCP Credit Note from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.