LeaveSheet: WH-347 payroll and PTO accrual

io.github.tresor4kPublished by GitHub account tresor4kv0.1.0Updated Oct 24, 2026

WH-347 certified payroll columns 5-9, fringe 6B reconciliation and PTO accrual balances.

VerifiedSTDIODesktop onlyProductivity & WorkflowFinance

Overview

AI-generated overview

Calculates U.S. WH-347 certified payroll lines and PTO accrual balances locally, with no network access or stored data.

What you can do
Runs three local calculators: wh347_payroll_lines returns per-worker ST/OT hours, 6A rates, 6B fringe credit, 6C cash in lieu, 7A/7B gross, deductions and net pay plus crew totals and a sanity flag; wh347_fringe_reconcile compares column 6B against fringe paid to four plans; pto_accrual returns accrued, carryover, taken, pending and remaining leave days with the workdays of each request. Output matches the open-source Go engines byte for byte on 28 golden cases.
When to use it
Useful when an assistant needs to prepare or check WH-347 certified payroll figures for a crew week, reconcile fringe amounts across plans, or estimate an employee's PTO balance under a monthly or annual policy with tenure tiers and carryover caps.
Requirements
Node.js 22 or later; runs as a local stdio process, typically via npx leavesheet-mcp. No accounts, API keys, environment variables or headers are declared, and the README states there is no network access and no data stored.
Before you install
Output is calculator-only, not legal or payroll advice, and not an official DOL tool. It does not look up prevailing wage rates, classify work, or compute taxes, and the ST/OT split is entered rather than derived. State paid-leave laws are not encoded; only U.S. federal holidays are built in. Inputs include worker names, rates, hours and deductions, so treat them as payroll data.

Installation

In SourceWeft

  1. Open LeaveSheet: WH-347 payroll and PTO accrual 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

leavesheet-mcp

MCP server (stdio) for two payroll calculations used by LeaveSheet / TableTemplates:

  • U.S. DOL WH-347 certified payroll form, revised version (Rev. January 2025): columns 2 and 5-9 for a crew week, fringe paid to each plan, column 6B reconciliation.
  • PTO accrual: leave balance at a date, with hire date, annual cap, tenure tiers, carryover cap, approved and pending requests, holidays and half days.

The calculations are a line-by-line JavaScript port of the open-source Go packages codeberg.org/tresor2k/tabletemplates-go/wh347, .../pto and the wh347 command (.../cmd/wh347). The test suite checks the output byte for byte against those Go engines on 28 golden cases. No network access, no data stored.

Install

Requires Node.js 22 or later.

json
{  "mcpServers": {    "leavesheet": { "command": "npx", "args": ["-y", "leavesheet-mcp"] }  }}

Tools

ToolWhat it returns
wh347_payroll_linesPer worker: ST/OT/total hours (col. 5), 6A rates (OT = base x 1.5), 6B fringe credit, 6C cash in lieu, 7A gross for the project, 7B gross for all work, 8 deductions, 9 net pay, sanity flag; crew totals per fringe plan and the 6B reconciliation. Same JSON as wh347 --json.
wh347_fringe_reconcileSum of column 6B vs. fringe paid to the four plans (health and welfare, pension, vacation/holiday, training); reconciles when the gap is under 0.005.
pto_accrualMonths worked this year, years of service, effective rate, accrued days (capped), carryover (capped), days taken, days pending, days left, plus the workdays of each request.

Inputs

wh347_payroll_lines and wh347_fringe_reconcile take { "workers": [...] }, one entry per worker-week on one project. Field names follow the CSV columns of the wh347 command: worker, type (J, RA or empty), base_rate, fringe_health_welfare, fringe_pension, fringe_vacation, fringe_training, st_hours and ot_hours (arrays of up to 7 daily values), cash_in_lieu_rate, gross_all_work (column 7B; omit it to use 7A), fica, federal_tax, state_tax, other_deductions. Omitted numbers are 0; negative numbers are rejected. csv_line in the output is the line the worker would have in the equivalent CSV (header = line 1).

pto_accrual takes policy (period: monthly or annual, rate, annual_cap, carryover_max, optional tier1_years/tier1_bonus, tier2_years/tier2_bonus), hire_date, as_of, carryover, requests (start, end, start_half, end_half, status: pending, approved, denied or cancelled), holidays (dates) and us_federal_holidays_years (adds the 11 U.S. federal holidays, observed dates, of the listed years). Dates are YYYY-MM-DD.

Example

wh347_payroll_lines input:

json
{ "workers": [{ "worker": "John Mason", "type": "J", "base_rate": 30,  "fringe_health_welfare": 4, "fringe_pension": 2,  "st_hours": [8, 8, 8, 8, 8], "ot_hours": [4], "other_deductions": 310 }] }

Output:

json
{  "form": "WH-347 (Rev. January 2025)",  "lines": [    {      "csv_line": 2,      "worker": "John Mason",      "worker_type": "J",      "st_hours": 40,      "ot_hours": 4,      "total_hours": 44,      "rate_6a_st": 30,      "rate_6a_ot": 45,      "fringe_6b": 264,      "cash_in_lieu_6c": 0,      "gross_project_7a": 1380,      "gross_all_work_7b": 1380,      "gross_all_work_7b_entered": false,      "deductions_8": 310,      "net_pay_9": 1070,      "sanity": "ok"    }  ],  "plan_totals": { "health_welfare": 176, "pension": 88, "vacation": 0, "training": 0 },  "plan_totals_sum": 264,  "fringe_column_6b_sum": 264,  "reconciles": true,  "source": "TableTemplates LeaveSheet WH-347 engine (port of codeberg.org/tresor2k/tabletemplates-go/wh347)",  "reference_url": "https://tabletemplates.com/certified-payroll-software/",  "disclaimer": "Calculator output only: not legal or payroll advice, not an official DOL tool."}

pto_accrual with a monthly policy of 1.25 days (+0.25 after 2 years, cap 15, carryover cap 5), hired 2023-04-03, 9 days carried over, one approved request from 2026-06-29 to 2026-07-07 and the 2026 federal holidays, as of 2026-07-31:

json
{  "balance": {    "months_worked": 7,    "years_of_service": 3.328767123287671,    "effective_rate": 1.5,    "accrued": 10.5,    "carryover": 5,    "taken": 6,    "pending": 0,    "left": 9.5,    "is_negative": false  },  "request_days": [6],  "source": "TableTemplates LeaveSheet PTO engine (port of codeberg.org/tresor2k/tabletemplates-go/pto)",  "reference_url": "https://tabletemplates.com/pto-tracking-software/",  "disclaimer": "Calculator output only: not legal or payroll advice; state paid-leave laws are not encoded."}

(July 3, 2026 is the observed Independence Day, so the 7 weekdays of the request count as 6.)

Limits

  • Not an official DOL tool, not legal or payroll advice. The WH-347 tool does not look up prevailing wage rates, classify work, or compute taxes: rates and deductions are entered. The ST/OT split is entered, not computed.
  • WH-347 amounts are rounded to cents in the output only (halves toward +infinity), never inside the calculation. PTO values are not rounded.
  • PTO: month-granular accrual (the hire month counts in full), years of service = days / 365, accrual restarts on January 1; the carryover is the value you enter, capped by the policy. State paid-leave laws are not encoded; the only built-in holidays are the U.S. federal ones.

Development

sh
npm installnpm test                      # parity with the Go engines + stdio smoke testnode scripts/gen-golden.mjs   # regenerate test/golden.json (needs Go 1.24 and the Go sources)

License: MIT.

Source: README.md at commit 0486eac

Tools

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

Version history

1
  1. v0.1.0LatestOct 13, 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