credit-note
Credit notes against an invoice or standalone: drafts, finalization, rendering, totals.
Should I use this
Quality & Safety
Findings (1)
- LOWin credit_note_update
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"credit-note": {
"command": "uvx",
"args": [
"https://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/billing-docs.mcpb"
]
}
}
}Runnable packages
0.21.0stdio0.22.0stdioRemote endpoints
https://mcp.zovo.one/mcp/credit-note-icsstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟡credit_note_create(recipient, reason, currency, lines, invoice_ref, ...)
Issue a credit note against an invoice, or standalone: the recipient, the reason (returned goods, overcharge, discount correction, service issue, other), line items with quantity, unit price and tax rate, and the currency. Returns a draft you can still revise; credit_note_finalize burns the final CN number.
Input Schema
{
"type": "object",
"properties": {
"recipient": {
"type": "string",
"maxLength": 200,
"description": "Who the credit is for, e.g. Acme GmbH"
},
"reason": {
"type": "string",
"enum": [
"returned_goods",
"overcharge",
"discount_correction",
"service_issue",
"other"
],
"description": "Why the credit is issued: returned_goods, overcharge, discount_correction, service_issue or other"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code the credit is in"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"maxLength": 500,
"description": "What is being credited, e.g. Returned: 3 x USB-C cable"
},
"quantity": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000,
"description": "How many, e.g. 3 or 2.5 hours"
},
"unit_price_minor": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000,
"description": "Unit price in whole minor units (integer cents). 10420 is EUR 104.20"
},
"tax_rate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Tax rate in percent, e.g. 23 for 23%. Default 0"
}
},
"required": [
"description",
"quantity",
"unit_price_minor"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 100,
"description": "What is being credited, line by line"
},
"invoice_ref": {
"type": "string",
"maxLength": 200,
"description": "The invoice this credits, e.g. INV-2026-0042. Omit for a standalone credit"
},
"reason_detail": {
"type": "string",
"maxLength": 200,
"description": "One line of specifics, e.g. Client was billed 10 seats, used 7"
},
"issue_date": {
"type": "string",
"maxLength": 10,
"description": "The date the credit is issued, YYYY-MM-DD. Default today; a future date is refused"
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Text printed at the foot of the document, e.g. how the credit will be settled"
},
"duplicate_ok": {
"type": "boolean",
"description": "Create it even though an identical draft or note exists, for a genuinely repeated credit. Default false"
}
},
"required": [
"recipient",
"reason",
"currency",
"lines"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡credit_note_update(id, recipient, reason, currency, lines, ...)
Change a draft credit note while it is still a draft: recipient, reason, lines, currency, invoice reference, issue date or notes. Pass only what changes; new lines replace all old ones. A finalized note is immutable and is refused by name.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"description": "The draft id, e.g. CN-DRAFT-2026-0001"
},
"recipient": {
"type": "string",
"maxLength": 200
},
"reason": {
"type": "string",
"enum": [
"returned_goods",
"overcharge",
"discount_correction",
"service_issue",
"other"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code. Changing it reprices nothing: the stored minor units carry over, so only change it to fix a wrong currency"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"maxLength": 500,
"description": "What is being credited, e.g. Returned: 3 x USB-C cable"
},
"quantity": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000,
"description": "How many, e.g. 3 or 2.5 hours"
},
"unit_price_minor": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000,
"description": "Unit price in whole minor units (integer cents). 10420 is EUR 104.20"
},
"tax_rate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Tax rate in percent, e.g. 23 for 23%. Default 0"
}
},
"required": [
"description",
"quantity",
"unit_price_minor"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 100,
"description": "The full new line set, replacing every existing line"
},
"invoice_ref": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "New invoice reference, or null to detach the note from its invoice"
},
"reason_detail": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
]
},
"issue_date": {
"type": "string",
"maxLength": 10
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
],
"description": "New notes text, or null to remove the notes"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪credit_note_finalize(id)
Finalize a draft: burn the final CN-YYYY-NNNN number and freeze the note. From here it cannot be edited or deleted, only rendered and listed, because it is now the document the client sees. Free tier: 10 finalized credit notes; Pro removes the limit.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"description": "The draft id, e.g. CN-DRAFT-2026-0001"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_list(recipient, reason, status, from, to, ...)
List credit notes: number or draft id, recipient, reason, status, issue date and total. Filter by recipient (a part of the name is enough), by reason, by status draft or final, and by issue-date period with from and to.
Input Schema
{
"type": "object",
"properties": {
"recipient": {
"type": "string",
"maxLength": 200,
"description": "Match the recipient, case-insensitive, a part of the name is enough"
},
"reason": {
"type": "string",
"enum": [
"returned_goods",
"overcharge",
"discount_correction",
"service_issue",
"other"
],
"description": "Only notes with this reason"
},
"status": {
"type": "string",
"enum": [
"draft",
"final"
],
"description": "Only drafts or only finalized notes"
},
"from": {
"type": "string",
"maxLength": 10,
"description": "First issue date to include, YYYY-MM-DD"
},
"to": {
"type": "string",
"maxLength": 10,
"description": "Last issue date to include, YYYY-MM-DD"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 2000,
"description": "Maximum notes listed, default and ceiling 2000"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_get(id)
Return one credit note by its CN number or draft id: every line with quantity, unit price and tax, the totals per tax rate, the reason, the invoice it credits, and the notes. Reads only; use credit_note_list for the ids.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"description": "The credit note number CN-2026-0001 or draft id CN-DRAFT-2026-0001"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴credit_note_delete(id)
Delete a draft credit note entered wrongly, by its draft id. A finalized note is refused by name: it is a document the client may have seen, and deleting it would leave their copy pointing at nothing.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"description": "The draft id, e.g. CN-DRAFT-2026-0001"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪credit_note_render(id, format)
Turn a credit note into the document: Markdown to paste into an email or ticket, or a self-contained printable HTML page with every style inline. Drafts render with a DRAFT banner so a half-finished credit cannot be sent by mistake. Writes nothing. Free; the free tier stamps a one-line footer.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"description": "The credit note number CN-2026-0001 or draft id CN-DRAFT-2026-0001"
},
"format": {
"type": "string",
"enum": [
"markdown",
"html"
],
"description": "markdown (default) or html, a self-contained printable page"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_summary(from, to)
How much you have credited: totals per currency over finalized credit notes, broken down by reason and by month, in an optional issue-date period. Drafts count for nothing until they are finalized. Currencies are never added together.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"maxLength": 10,
"description": "First issue date to include, YYYY-MM-DD. Default: the beginning"
},
"to": {
"type": "string",
"maxLength": 10,
"description": "Last issue date to include, YYYY-MM-DD. Default: today"
}
},
"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
Evidence