purchase-order
Purchase orders for suppliers: VAT line items, a delivery date, an A4 PDF, mark received.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"purchase-order": {
"command": "uvx",
"args": [
"https://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/billing-docs.mcpb"
]
}
}
}실행 가능한 패키지
0.21.0stdio0.22.0stdio원격 엔드포인트
https://mcp.zovo.one/mcp/purchase-orderstreamable-http할 수 있는 일
도구 목록
도구 (16)
🟡credit_note_create(invoice, reason, amount_minor, lines, issue_date, ...)
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",
"properties": {
"invoice": {
"type": "string",
"minLength": 1,
"description": "The invoice number to credit, e.g. INV-2026-0001"
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Why the money is being given back, e.g. \"returned goods\" or \"billed twice\". Printed on the document"
},
"amount_minor": {
"type": "integer",
"exclusiveMinimum": 0,
"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"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "1-based position of the line on the invoice, as shown by invoice_get"
},
"quantity": {
"type": "number",
"minimum": -1000000000000,
"maximum": 1000000000000,
"exclusiveMinimum": 0,
"description": "Credit only this many units. Defaults to the whole line"
}
},
"required": [
"line"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 200,
"description": "Credit only these invoice lines. Leave out with amount_minor for a full credit note"
},
"issue_date": {
"type": "string",
"description": "YYYY-MM-DD, defaults to today in your business profile's timezone"
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Free text printed under the totals"
}
},
"required": [
"invoice",
"reason"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_list(invoice, client, from, to)
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",
"properties": {
"invoice": {
"type": "string",
"description": "Only credit notes issued against this invoice number"
},
"client": {
"type": "string",
"description": "Only credit notes for clients whose name contains this text"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest issue date"
},
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest issue date"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_get(id)
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",
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001, or an exact client name"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_pdf(id, out_path)
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",
"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"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢credit_note_text(id, greeting, sign_off)
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",
"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"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴credit_note_delete(id)
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",
"properties": {
"id": {
"type": "string",
"description": "Credit note id such as CN-2026-0001, or an exact client name"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡purchase_order_create(supplier, items, currency, expected_delivery_date, issue_date, ...)
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",
"properties": {
"supplier": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Supplier name or client id. A name the invoice server already knows brings its address, email and VAT id onto the order"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "every line needs a description, 500 characters or fewer"
},
"quantity": {
"type": "number",
"minimum": -1000000000000,
"maximum": 1000000000000,
"exclusiveMinimum": 0,
"description": "Units ordered, must be greater than zero"
},
"unit_price_minor": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000,
"description": "Price per unit in MINOR units: 9000 = 90.00 EUR, 90 = JPY 90. Never a decimal"
},
"tax_rate": {
"type": "number",
"minimum": 0,
"maximum": 1000,
"description": "VAT percent for this line, overrides the business default"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only to state the line's currency; every line on one document must agree"
}
},
"required": [
"description",
"quantity",
"unit_price_minor"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 200,
"description": "What is being ordered"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to your business default currency"
},
"expected_delivery_date": {
"type": "string",
"description": "YYYY-MM-DD, when the goods or work are due"
},
"issue_date": {
"type": "string",
"description": "YYYY-MM-DD, defaults to today in your business profile's timezone"
},
"discount_percent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Discount applied to every line, in percent"
},
"tax_rate": {
"type": "number",
"minimum": 0,
"maximum": 1000,
"description": "VAT percent for lines with no rate of their own. Defaults to the business default"
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Free text printed under the totals, e.g. delivery address or terms"
},
"supplier_email": {
"type": "string",
"maxLength": 320,
"description": "Only if the user gave it; otherwise the stored client's email is used"
},
"supplier_address": {
"type": "string",
"maxLength": 2000,
"description": "Postal address for the SUPPLIER block, newlines allowed"
},
"supplier_vat_id": {
"type": "string",
"maxLength": 64,
"description": "Supplier VAT / tax registration id"
}
},
"required": [
"supplier",
"items"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢purchase_order_list(status, supplier, from, to)
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",
"properties": {
"status": {
"type": "string",
"enum": [
"open",
"partially_received",
"received",
"all"
],
"description": "Default \"all\""
},
"supplier": {
"type": "string",
"description": "Only orders to suppliers whose name contains this text"
},
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest order date"
},
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest order date"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢purchase_order_get(id)
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",
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001, or an exact supplier name"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢purchase_order_pdf(id, out_path)
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",
"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"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢purchase_order_text(id, greeting, sign_off)
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",
"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"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪purchase_order_receive(id, partial, date, note)
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",
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001"
},
"partial": {
"type": "boolean",
"description": "True when only some of the order arrived. The order stays open and can be received again. Default false"
},
"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\""
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴purchase_order_delete(id)
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",
"properties": {
"id": {
"type": "string",
"description": "Purchase order id such as PO-2026-0001, or an exact supplier name"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢billing_docs_report(from, to)
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",
"properties": {
"from": {
"type": "string",
"description": "YYYY-MM-DD, earliest document date to count"
},
"to": {
"type": "string",
"description": "YYYY-MM-DD, latest document date to count"
}
},
"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.
입력 스키마
{
"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.
입력 스키마
{
"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#"
}커뮤니티
증거