theluckystrike

mcp-work-order

Community theluckystrike
Updated

Practical MCP servers: time tracker, price tracker, spreadsheet, invoice. Local, offline-licensed, one-time Pro.

mcp-work-order

Job orders for trades and field work, kept the way a job card is kept. Raise a work orderagainst a client (the same client record your invoices use), give it a site address, thedate it was asked for, what the job is and how urgent. Log what the job actually used as itgoes: labour as hours at a rate, parts as a quantity at a unit cost with an optional markup.Move it along one step at a time, draft to scheduled to in progress to done to invoiced,each step stamped with its date and a note. When it is finished, hand the customer acompletion report with the hours, the materials, the totals and a sign-off block, and takethe invoice payload straight to invoice_create without retyping a single figure.

Nothing is invented and nothing is stored twice: the value, the hours, the materials andthe VAT are derived from the lines on every call, and the invoice payload's unit prices arealready the billed units, so the invoice reproduces the work order to the minor unit.

Install

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or%APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "work-order": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-work-order"]
    }
  }
}

Claude Code

claude mcp add work-order -- npx -y @theluckystrike/mcp-work-order

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.

Tools

Tool What it does
work_order_create Raise a job order and return its WO-YYYY-NNNN number: client, site address, requested date, description, priority
work_order_add_line Add one line: parts with a quantity and a unit cost in minor units and an optional markup percent, or labour with hours and an hourly rate
work_order_status Move it one step: draft, scheduled, in_progress, done, invoiced, stamping the date and a note
work_order_get One work order in full: every line with its billed unit, the hours, the materials, net and VAT, and the status history
work_order_list List work orders by status, by client and by requested-date range
work_order_delete Delete a work order raised by mistake. Draft with no lines only. Free on every tier
completion_report_text The completion report as plain text, ready to paste into an email
completion_report_pdf The completion report as an A4 PDF, with the sign-off block
work_order_invoice_payload An invoice_create-ready payload from the lines, with VAT at the shared profile rate
work_orders_report The whole board: work orders per status, hours logged this month, unbilled value per currency
license_status / license_activate Free or Pro, and where to upgrade

Free vs Pro

Free Pro
Open work orders 5 unlimited
Lines per work order 200 200
Raise, log, move, list, delete yes yes
Completion report (text) yes yes
Completion report (PDF) no yes
Invoice payload no yes
Board report no yes

The cap counts OPEN work orders (draft, scheduled, in progress), not the ones you have everraised, so finishing a job frees its slot. So does work_order_delete on a draft that hasno lines, which is free on every tier: a way back that only a Pro key can reach is not a wayback.

Get Pro: https://mcp.zovo.one/buy/work-order (one-time $19, lifetime), or all servers for$39: https://mcp.zovo.one/buy/bundle

Where the money comes from

This server keeps no arithmetic of its own. computeTotals, currencyDecimals,formatMoney and roundHalfUp are imported from @theluckystrike/mcp-invoice/lib, the A4renderer from @theluckystrike/mcp-billing-docs/lib, the corrupt-store quarantine from@theluckystrike/mcp-timezone/lib. The VAT rate, the currency and the business name comefrom the shared business profile that business_set in the invoice server writes; theclient comes from that server's client records. Nothing is written outside this server's owndirectory.

The measured insight

A markup belongs on the unit cost, not on the line total, and one minor unit is what saysso. Seven parts at EUR 12.99 with 15 percent on top is EUR 14.94 a unit and EUR 104.58 onthe line. Marking up the line total instead is round(9093 * 1.15) = 10,457 minor units, acent less. Both look like the same sum, and only one of them is the figure the customer willbe billed: the invoice server rounds the unit price to the minor unit first and multiplies(its D-R24 basis), so a work order that quotes the line-total figure quotes a number its owninvoice cannot reproduce. The gap appears on every line whose marked-up unit does not land ona whole cent, it never nets out across lines because it is a rounding direction and not anerror, and it is invisible in a spreadsheet check because both bases add up correctly. Theunit suite asserts the 1-unit gap explicitly, so a change of basis fails the build instead ofquietly re-pricing every job on the board.

Privacy

All data stays on your machine, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/work-order/.Nothing is sent anywhere. There is no account and no API key. License keys are verifiedoffline. This server reads one sibling file, the invoice server's clients.json, and writesinto no store but its own.

Built by theluckystrike. https://github.com/theluckystrike

MCP Server ยท Populars

MCP Server ยท New

    esperanza-volkov

    confdiff

    Semantic, format-aware diff for config & structured-data files (JSON, YAML, TOML, INI, .env, .properties, CSV, XML). See what actually changed โ€” keys and values, not text noise.

    Community esperanza-volkov
    butterbase-ai

    @butterbase/mcp

    Open-source backend-as-a-service. Postgres, auth, storage, functions, AI gateway, MCP.

    Community butterbase-ai
    adamsiwiec1

    Host MCP SSE Server on Google Cloud Run

    Host an Model Context Protocol SSE deployment on Cloud Run, Authenticating with IAM.

    Community adamsiwiec1
    Mitek99

    DeepView MCP

    DeepView MCP is a Model Context Protocol server that enables IDEs like Cursor and Windsurf to analyze large codebases using Gemini 2.5 Pro's extensive context window.

    Community Mitek99
    prisma

    orm

    Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB

    Community prisma