Service Report

io.github.theluckystrikePublished by GitHub account theluckystrikev0.22.6Updated Oct 24, 2026

Field service reports: hours, materials, sign-off, and the invoice the visit turns into.

Overview

AI-generated overview

A local MCP server for field service work orders: raise jobs, log labour and parts, move status, and produce completion reports and invoice payloads.

What you can do
Create, list, view and delete work orders with client, site address, requested date, description and priority, and move them through draft, scheduled, in progress, done and invoiced with dated notes. Add parts lines (quantity, unit cost, optional markup) and labour lines (hours at a rate). Generate a completion report as plain text or A4 PDF with a sign-off block. Produce an invoice_create-ready payload with VAT at the shared profile rate. Report the board: work orders per status, hours logged this month and unbilled value per currency. Check or activate a licence.
When to use it
For trades and field-service work tracked as job cards, where the assistant should record hours and materials as a job progresses and turn the finished visit into a customer sign-off report and an invoice payload without retyping figures.
Requirements
Runs as a local process on the desktop, installed from the .mcpb bundle or a clone and build; the npm package is not yet published, so npx currently fails. No account or API key. An optional Pro licence key is supplied in MCP_LICENSE_KEY and verified offline. Data is stored locally in the user's data directory.
Before you install
Free tier is capped at 5 open work orders; PDF completion reports, invoice payloads and the board report require the paid Pro licence (one-time purchase). Deleting a work order is limited to drafts with no lines. The server reads the invoice server's clients.json and takes VAT rate, currency and business name from the shared business profile, so figures depend on that other server's settings. Data stays local.

Installation

In SourceWeft

  1. Open Service Report in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-work-order

In the official MCP Registry (io.github.theluckystrike/work-order). Job orders for trades and field work, kept the way a job card is kept. Raise a work order against a client (the same client record your invoices use), give it a site address, the date it was asked for, what the job is and how urgent. Log what the job actually used as it goes: 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 a completion report with the hours, the materials, the totals and a sign-off block, and take the 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 and the VAT are derived from the lines on every call, and the invoice payload's unit prices are already the billed units, so the invoice reproduces the work order to the minor unit.

npm publish for @theluckystrike/mcp-work-order is pending, so npx -y @theluckystrike/mcp-work-order returns 404 today. Until then, the .mcpb one-click bundle or a clone+build is the working path.

Install

Claude Desktop

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

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

Claude Code

sh
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

ToolWhat it does
work_order_createRaise a job order and return its WO-YYYY-NNNN number: client, site address, requested date, description, priority
work_order_add_lineAdd 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_statusMove it one step: draft, scheduled, in_progress, done, invoiced, stamping the date and a note
work_order_getOne work order in full: every line with its billed unit, the hours, the materials, net and VAT, and the status history
work_order_listList work orders by status, by client and by requested-date range
work_order_deleteDelete a work order raised by mistake. Draft with no lines only. Free on every tier
completion_report_textThe completion report as plain text, ready to paste into an email
completion_report_pdfThe completion report as an A4 PDF, with the sign-off block
work_order_invoice_payloadAn invoice_create-ready payload from the lines, with VAT at the shared profile rate
work_orders_reportThe whole board: work orders per status, hours logged this month, unbilled value per currency
license_status / license_activateFree or Pro, and where to upgrade

Free vs Pro

FreePro
Open work orders5unlimited
Lines per work order200200
Raise, log, move, list, deleteyesyes
Completion report (text)yesyes
Completion report (PDF)noyes
Invoice payloadnoyes
Board reportnoyes

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

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 A4 renderer from @theluckystrike/mcp-billing-docs/lib, the corrupt-store quarantine from @theluckystrike/mcp-timezone/lib. The VAT rate, the currency and the business name come from the shared business profile that business_set in the invoice server writes; the client comes from that server's client records. Nothing is written outside this server's own directory.

The measured insight

A markup belongs on the unit cost, not on the line total, and one minor unit is what says so. Seven parts at EUR 12.99 with 15 percent on top is EUR 14.94 a unit and EUR 104.58 on the line. Marking up the line total instead is round(9093 * 1.15) = 10,457 minor units, a cent less. Both look like the same sum, and only one of them is the figure the customer will be 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 own invoice cannot reproduce. The gap appears on every line whose marked-up unit does not land on a whole cent, it never nets out across lines because it is a rounding direction and not an error, and it is invisible in a spreadsheet check because both bases add up correctly. The unit suite asserts the 1-unit gap explicitly, so a change of basis fails the build instead of quietly 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 verified offline. This server reads one sibling file, the invoice server's clients.json, and writes into no store but its own.

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:

Source: servers/work-order/README.md at commit 6535b33

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

3
  1. v0.22.6LatestOct 14, 2026
  2. v0.22.2Sep 23, 2026
  3. v0.21.0Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts