About bill-of-sale
A local MCP server for creating bills of sale for equipment, vehicles, and other goods. It guides sellers through drafts and finalized signing copies, then renders Markdown or standalone HTML for printing; records stay on the machine.
Key features
- 01Create and edit sale drafts
- 02Finalize signing copies
- 03Render Markdown or print-ready HTML
- 04List, inspect, and summarize records
- 05Keep sales data stored locally
Use cases
- 01Prepare a vehicle sale document with VIN
- 02Draft equipment or stock sale records
- 03Print a finalized bill for signatures
- 04Review sale records and totals
MCP support
Exposes bill-of-sale creation, editing, finalization, and record management as tools for MCP clients. All records are stored locally, with no network calls.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.zovo.one/mcp/bill-of-saleclaude mcp add --transport http theluckystrike-bill-of-sale https://mcp.zovo.one/mcp/bill-of-sale{"mcpServers":{"theluckystrike-bill-of-sale":{"type":"http","url":"https://mcp.zovo.one/mcp/bill-of-sale"}}}Open in Cursor{"servers":{"theluckystrike-bill-of-sale":{"type":"http","url":"https://mcp.zovo.one/mcp/bill-of-sale"}}}Open in VS Code{"mcpServers":{"theluckystrike-bill-of-sale":{"type":"http","url":"https://mcp.zovo.one/mcp/bill-of-sale"}}}{"mcpServers":{"theluckystrike-bill-of-sale":{"serverUrl":"https://mcp.zovo.one/mcp/bill-of-sale"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://mcp.zovo.one/mcp/bill-of-saleAuth requiredTools
10| Parameter | Type | Required | Description |
|---|---|---|---|
| vin | string | No | Vehicle Identification Number, 17 characters, for a vehicle sale |
| date | string | No | The date of the sale, YYYY-MM-DD. Default today |
| imei | string | No | IMEI, 15 digits, for a phone or tablet |
| as_is | boolean | No | Include the as-is clause: sold with all faults, no warranties except any written here. Default true, the norm for second-hand sales; pass false to leave it out |
| notes | string | No | Anything else the document should say, e.g. payment method or what is included in the sale |
| serial | string | No | Serial number, for equipment and electronics |
| currency | string | Yes | ISO code the price is in |
| quantity | integer | No | How many units this document covers. Default 1 |
| warranty | string | No | A warranty the seller does give, in their own words, e.g. The seller warrants the engine for 30 days from the sale date |
| condition | string | No | The condition at handover, e.g. used, good working order, or new, sealed |
| buyer_name | string | Yes | Who is buying, e.g. Jane Kowalska or Northwind Sp. z o.o. |
| buyer_email | string | No | The buyer's email |
| buyer_phone | string | No | The buyer's phone number |
| price_minor | integer | Yes | The sale price in whole minor units (integer cents). 120000 is USD 1,200.00 |
| seller_name | string | No | Who is selling. Defaults to the shared business profile's name when the profile has one |
| duplicate_ok | boolean | No | Record it even though an identical sale to the same buyer exists, for a genuinely repeated sale. Default false |
| seller_email | string | No | The seller's email |
| seller_phone | string | No | The seller's phone number |
| buyer_address | string | No | The buyer's postal address, one string |
| item_category | string | No | What kind of item, e.g. vehicle, equipment, electronics, stock |
| seller_address | string | No | The seller's postal address, one string |
| identifier_other | string | No | Any other identifying number, e.g. a hull number or an asset tag |
| item_description | string | Yes | What was sold, specific enough to identify it, e.g. 2019 Honda Civic 1.5 petrol, grey, or MacBook Pro 14-inch 2021 |
Details
From the project READMEmcp-bill-of-sale
In the official MCP Registry (io.github.theluckystrike/bill-of-sale).
Record a sale and get a signed-paper-ready bill of sale. Tell your assistant who sold, who bought, what the item is, with the VIN, serial number or IMEI where it has one, the price and the date, and the server writes the document: parties, item, price, an as-is clause for second-hand sales, any warranty in your own words, and signature lines for both sides. Work on it as a draft, finalize it into the frozen signing copy, and print it as Markdown or as a single self-contained HTML file that prints to PDF from any browser with no assets beside it. Everything stays on your machine; there is no account and no network call in this server at all.
Built by theluckystrike.
npm publish for @theluckystrike/mcp-bill-of-sale is pending, so npx -y @theluckystrike/mcp-bill-of-sale returns 404 today. Until then, a clone+build is the working path.
Install
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"bill-of-sale": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-bill-of-sale"]
}
}
}
Claude Code
claude mcp add bill-of-sale -- npx -y @theluckystrike/mcp-bill-of-sale
Cursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.
Tools
| tool | what it does |
|---|---|
sale_create | Record a sale and generate the bill of sale: seller, buyer, item with VIN/serial/IMEI where it has one, price in minor units, date. Returns BOS-YYYY-NNNN. An identical repeat sale is refused unless you confirm it |
sale_update | Change anything on a draft before signing: price, parties, item details, identifiers, the as-is clause, warranty, notes. Empty string clears an optional field |
sale_finalize | Freeze the draft into the signing copy. From here sale_update refuses it and every render prints without the DRAFT watermark |
sale_list | Every bill of sale, newest first: id, status, date, item, buyer, seller, price. Filter to drafts or finalized |
sale_get | One bill of sale in full by its BOS number |
sale_delete | Delete a draft outright; a finalized document needs confirm_finalized: true. The number is never reissued, so a gap in the series is the record of the deletion |
sale_render | Print the document: Markdown, a self-contained HTML file for print-to-PDF, or both, with signature lines. Drafts carry a DRAFT watermark so a review copy cannot be signed by mistake |
sale_summary | The book at a glance: draft and finalized counts, total value per currency. Currencies are never added together |
license_status / license_activate | Free or Pro, and the key |
Free vs Pro
| Free | Pro | |
|---|---|---|
| Open drafts | 10 | Unlimited |
| Finalized documents | 5 | Unlimited |
Render to Markdown and HTML (sale_render) | Unlimited | Unlimited |
Read, list and summarize (sale_get, sale_list, sale_summary) | Unlimited | Unlimited |
Delete (sale_delete) | Yes | Yes |
The document itself is never metered. Whether you hold a signed record of the sale is the question this server exists to answer, and a free tier that withholds the document is a demo. What is metered is the volume of records held: ten open drafts and five finalized documents is a real year of side-business sales, not a trial. sale_delete is free for the same reason the cap is on records held: a draft typed in twice would otherwise cost a slot with no way back but a key.
Get Pro: https://mcp.zovo.one/buy/bill-of-sale, $19 one-time for this server, or $39 for the bundle.
How a sale flows
sale_createwith the facts. The seller defaults to the shared business profile's name when the profile has one, so the seller block is typed once for the whole suite.sale_renderprints the review copy, watermarked DRAFT.sale_updatefixes anything the buyer or seller spots.sale_finalizefreezes it.sale_rendernow prints the signing copy: sign the printed page or print the HTML to PDF, and both parties keep a copy.
Every amount is an integer number of minor units, a price is never a float, and dates are checked as real calendar dates. A VIN that is not 17 characters or an IMEI that is not 15 digits is stored as given but flagged in the response, because those are the two identifiers a buyer most often misreads.
Privacy
All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/bill-of-sale/. Two files: sales.json, counter.json, plus rendered documents under documents/. Nothing is sent anywhere, there is no account, no API key and no network call in this server at all. License keys are verified offline.
The rendered document is a generic template, not legal advice. Bills of sale for vehicles, boats and regulated goods may have statutory form or filing requirements where the sale happens.
Built by theluckystrike. https://github.com/theluckystrike
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:
- Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-bill-of-sale
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.