Koskamo

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.

MCP Credit Note logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-02Published by theluckystrike
You need:Free tokens allow 600 calls an houra Pro key 6000a token lasts 30 days from last use
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/credit-note
Vendor documentation

What 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

Community listingRegistry 0.23.0
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
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.

Credit notes and purchase orders. It covers crediting all or part of an issued invoice with VAT reversed at the invoice's own rates, raising purchase orders to suppliers with delivery dates, recording full or partial deliveries, plain-text and A4 PDF versions, and totals of credited money and late orders. Currency, VAT and buyer details come from the shared business profile. Records are stored per user account on McpStamp's hosted service. The free tier allows 5 credit notes and 5 purchase orders a month; PDFs and the totals need Pro.

Tools

16 advertised

credit_note_create — Credit an invoice
Advertised by the server during the last successful anonymous check.

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.

credit_note_create input schema
{
  "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
}
credit_note_create annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
credit_note_list — List credit notes
Advertised by the server during the last successful anonymous check.

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.

credit_note_list input schema
{
  "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
}
credit_note_list annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
credit_note_get — Show one credit note
Advertised by the server during the last successful anonymous check.

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.

credit_note_get input schema
{
  "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
}
credit_note_get annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
credit_note_pdf — Render the credit note as a PDF
Advertised by the server during the last successful anonymous check.

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.

credit_note_pdf input schema
{
  "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
}
credit_note_pdf annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
credit_note_text — Plain-text credit note to paste into email
Advertised by the server during the last successful anonymous check.

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.

credit_note_text input schema
{
  "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
}
credit_note_text annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
credit_note_delete — Delete a credit note
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

credit_note_delete input schema
{
  "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
}
credit_note_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
purchase_order_create — Raise a purchase order
Advertised by the server during the last successful anonymous check.

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.

purchase_order_create input schema
{
  "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
}
purchase_order_create annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_list — List purchase orders
Advertised by the server during the last successful anonymous check.

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.

purchase_order_list input schema
{
  "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
}
purchase_order_list annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_get — Show one purchase order
Advertised by the server during the last successful anonymous check.

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.

purchase_order_get input schema
{
  "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
}
purchase_order_get annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_pdf — Render the purchase order as a PDF
Advertised by the server during the last successful anonymous check.

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.

purchase_order_pdf input schema
{
  "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
}
purchase_order_pdf annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_text — Plain-text purchase order to paste into email
Advertised by the server during the last successful anonymous check.

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.

purchase_order_text input schema
{
  "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
}
purchase_order_text annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_receive — Mark a purchase order received
Advertised by the server during the last successful anonymous check.

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.

purchase_order_receive input schema
{
  "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
}
purchase_order_receive annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
purchase_order_delete — Delete a purchase order
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

purchase_order_delete input schema
{
  "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
}
purchase_order_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
billing_docs_report — Credited money and open orders
Advertised by the server during the last successful anonymous check.

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.

billing_docs_report input schema
{
  "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
}
billing_docs_report annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "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>"
    }
  },
  "additionalProperties": false
}
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 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

Advertised by the server during the last successful anonymous check.

Review which purchase orders are late, then draft the chaser to each supplier.

No arguments advertised.

Resources

2 advertised

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

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 URI
pricing://billing-docs

MIME type: application/json

open-purchase-orders — Open purchase orders

Advertised by the server during the last successful anonymous check.

Every purchase order that has not been received in full, as JSON.

open-purchase-orders URI
billing-docs://open-orders

MIME type: application/json

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

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 mcp-credit-note https://mcp.zovo.one/mcp/credit-note

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 mcp-credit-note --url https://mcp.zovo.one/mcp/credit-note

Cursor

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

Cline

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

VS Code

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

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 mcp-credit-note https://mcp.zovo.one/mcp/credit-note

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "mcp-credit-note": {
      "url": "https://mcp.zovo.one/mcp/credit-note"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.