Skip to main content
Glama

LeaveSheet: Davis-Bacon wage rates and WH-347 certified payroll

Check a crew's pay against the wage determination

check_crew_pay
Read-onlyIdempotent

Use when the user wants to know whether each worker on a Davis-Bacon job was paid at least the WD rate for a payroll week. For every worker and classification it computes the base and fringe due vs. paid, recomputes overtime (hours over 40 in the workweek, 29 CFR 5.5(b)(1) and 5.32), checks apprentice registration and the daily apprentice ratio (29 CFR 5.5(a)(4)), and totals the restitution owed, each amount with its CFR citation; also returns the WH-347 lines as paid. Up to 50 workers. Either pass the pasted WD text (wdText) and link each segment to a row with wdRowId (from get_wage_rates on the same text), or give the WD rate of each segment directly (rate) as the user reads it in the contract. Example: wdText="General Decision Number: TX20260291 …", weekEnding="2026-06-07", workers=[{name:"Crew 1", segments:[{classification:"Welder", wdRowId:"r1", stByDay:[8,8,8,8,8], paidBaseRate:22}]}].

Input Schema

NameRequiredDescriptionDefault
wdTextNoFull text of the general wage determination, pasted by the user from the contract or from the sam.gov page, from "General Decision Number" to "END OF GENERAL DECISION", line breaks kept (max 400000 characters). Pass the same text again in later calls so rowId values stay valid.
workersYes
weekEndingYesLast day of the payroll week.
overtimeClauseNoCWHSSA overtime clause applies (contracts over $100,000).

Output Schema

NameRequiredDescriptionDefault
cardYes
viewYes
flagsYes
ratiosYes
sourceYes
workersYes
disclaimerYes
wdRowsUsedYes
weekEndingYes
wh347LinesYes
notImplementedYes
totalRestitutionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description still adds substantial behavioral depth beyond them: it enumerates the computations performed (base vs fringe due vs paid, overtime recompute on hours over 40, apprentice registration and daily ratio checks, restitution totals), cites the governing CFR sections, notes each amount carries its citation, returns WH-347 lines as paid, and flags the 50-worker cap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and the computed outputs, then the input-mode choice, then a worked example. Dense but every element (CFR citations, worker cap, example) informs invocation. The example string is long, slightly testing the length budget, but it is concrete and earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be restated, and the description instead covers what matters for correct invocation: trigger, dual input paths, worker cap, and the regulatory checks executed. For a 4-parameter, nested-worker tool this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema already documents most fields. The description adds the non-obvious semantics: the wdText/wdRowId linkage to get_wage_rates on the same text, the alternative direct 'rate' path, the 50-worker limit, and a worked example showing stByDay, paidBaseRate and segment structure. The one gap is that apprentice and overtimeClause inputs are not explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('check a crew's pay against the wage determination') and immediately narrows it to the Davis-Bacon question: was each worker paid at least the WD rate for a payroll week. This clearly distinguishes it from siblings like get_wage_rates (which supplies row IDs) and build_certified_payroll.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use trigger ('Use when the user wants to know whether each worker ... was paid at least the WD rate') and resolves the key input decision: pass wdText with wdRowId from get_wage_rates on the same text, or supply rate directly as read in the contract. It names get_wage_rates as the upstream call, but does not state explicit exclusions or when a sibling tool is the better choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources