Invoice by Ouroboros Apps
by LAHutchins91 · remote · no sign-in to list tools · v1.0.3 · published by GitHub user LAHutchins91
Freelance invoice line items, rates, due dates, and late terms for AI assistants
13 tools: 9 can delete or cancel things, 2 change things and 2 only read.
Scanned Oct 21, 2026
- Deletes or cancels9Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads2Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http invoice https://invoice-continuity2.vercel.app/mcpFindings
Matches of fixed checks, with the text they matched.
- Warndescribe_line
The server marks "describe_line" destructive (destructiveHint: true), and its name says "describe", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}; The name "describe_line" says "describe": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
13 tools
Deletes or cancels 9Claude Code: deny
accept_invoice_changeApply one suggested invoice change after the freelancer explicitly approves that change.No findings
Why it is in this group
- The description's first verb is "apply": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Apply one suggested invoice change after the freelancer explicitly approves that change. Pass confirmed true only then. This is the path that may add a line, change a rate, apply a discount, or move the due date. Calling it is not a substitute for the freelancer's approval.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
describe_lineCorrect a line description while the invoice is still a draft.1 finding
Why it is in this group
- The name "describe_line" says "describe": a word for reading.
- The server marks it destructive (destructiveHint: true).
Findings
- Warn
The server marks "describe_line" destructive (destructiveHint: true), and its name says "describe", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}; The name "describe_line" says "describe": a word for reading.
Description, as the server wrote it Correct a line description while the invoice is still a draft. After approval, a different description is refused. Use suggest_invoice_change with add_line for a different line.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
offer_discountRecord a discount the freelancer is putting on the invoice.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Record a discount the freelancer is putting on the invoice. kind none uses value 0. kind percent takes a whole number from 1 to 100. kind fixed takes a whole number of minor units. After the invoice is sealed, a different discount is refused until accept_invoice_change applies an apply_discount suggestion. Do not invent a discount.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
place_lineAdd one line: description, quantity, rate in whole minor units, and unit hour, each, or day.No findings
Why it is in this group
- The description's first verb is "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Add one line: description, quantity, rate in whole minor units, and unit hour, each, or day. After the invoice is sealed, a new line is refused until accept_invoice_change applies an add_line suggestion.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
quote_line_rateSet the rate already chosen for one line, as a whole number of minor units in the invoice currency.No findings
Why it is in this group
- The description's first verb is "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set the rate already chosen for one line, as a whole number of minor units in the invoice currency. After the invoice is sealed, a different rate is refused until accept_invoice_change applies a change_rate suggestion.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
seal_invoiceMark the current draft as the approved invoice.No findings
Why it is in this group
- The description's first verb is "mark": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Mark the current draft as the approved invoice. Pass confirmed true only after the freelancer explicitly approves the lines, quantities, rates, due date, late terms, and any discount already on the draft.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_invoice_dueSet the due date as a calendar day in YYYY-MM-DD form.No findings
Why it is in this group
- The name "set_invoice_due" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set the due date as a calendar day in YYYY-MM-DD form. After the invoice is sealed, a different date is refused until accept_invoice_change applies a move_due_date suggestion.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
set_line_quantitySet the quantity on one line.No findings
Why it is in this group
- The name "set_line_quantity" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set the quantity on one line. After the invoice is sealed, a different quantity is refused until accept_invoice_change applies an adjust_quantity suggestion.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
write_late_termsRecord late terms: grace days, and a basis of none, flat_fee, or percent_per_period.No findings
Why it is in this group
- The name "write_late_terms" says "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Record late terms: grace days, and a basis of none, flat_fee, or percent_per_period. flat_fee uses feeMinor and a percent of 0. percent_per_period uses percent and a fee of 0. After approval, a different basis, grace, fee, or percent is refused until an accepted revise_late_terms suggestion.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Changes things 2Claude Code: ask
begin_invoiceStart a draft invoice.No findings
Why it is in this group
- The description's first verb is "start": a word for a change.
Description, as the server wrote it Start a draft invoice. Draft figures are not an approved commitment until seal_invoice. Currency is a three-letter code. Amounts later are minor units of that currency and are the freelancer's figures.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
suggest_invoice_changeRecord a suggested change.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Record a suggested change. This does not change the invoice. kind add_line requires description, quantity, rateMinor, and unit. kind change_rate requires lineId and rateMinor. kind apply_discount requires discountKind, discountValue, and discountNote. kind move_due_date requires dueOn. kind adjust_quantity requires lineId and quantity. kind revise_late_terms requires graceDays, lateBasis, feeMinor, latePercent, and lateNote.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 2Claude Code: allow
list_invoicesList the signed-in freelancer's invoices.No findings
Why it is in this group
- The name "list_invoices" says "list": a word for reading.
Description, as the server wrote it List the signed-in freelancer's invoices. Use a returned id with read_invoice. Do not guess an invoice.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
read_invoiceRead the invoice before answering.No findings
Why it is in this group
- The name "read_invoice" says "read": a word for reading.
Description, as the server wrote it Read the invoice before answering. Quote only this record. Draft status is not an approved commitment. Proposed changes do not authorize a new line, a different rate, a discount, or a new due date.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http invoice https://invoice-continuity2.vercel.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__invoice__list_invoices",
"mcp__invoice__read_invoice"
],
"ask": [
"mcp__invoice__begin_invoice",
"mcp__invoice__suggest_invoice_change"
],
"deny": [
"mcp__invoice__place_line",
"mcp__invoice__describe_line",
"mcp__invoice__quote_line_rate",
"mcp__invoice__set_line_quantity",
"mcp__invoice__set_invoice_due",
"mcp__invoice__write_late_terms",
"mcp__invoice__offer_discount",
"mcp__invoice__seal_invoice",
"mcp__invoice__accept_invoice_change"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as invoice. Review it before you use it.
