Proven Plaza Calculators & Open Data
Free trades/DIY calculators plus Florida contractor, permit, federal award and AI-crawler data.
Should I use this
Quality & Safety
Findings (8)
- LOWin calc_drywall
- LOWin calc_mulch_gravel
- LOWin calc_ac_btu
- LOWin calc_board_foot
- LOWin calc_asphalt
- LOWin calc_paver
- LOWin calc_sod
- LOWin sitemap_urls
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"provenplaza-agent-mcp": {
"url": "https://provenplaza-agent-mcp.zvorsteg1.workers.dev/mcp"
}
}
}Remote endpoints
https://provenplaza-agent-mcp.zvorsteg1.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (39)
🟢calc_concrete_slab(length_ft, width_ft, depth_in, waste_pct, bag_yield_cf)
Estimate ready-mix cubic yards or the number of 80 lb bags for a rectangular slab, patio or driveway. Formula: Cubic yards = Length(ft) × Width(ft) × Thickness(in)/12 ÷ 27 × (1 + waste%). Bags = cubic feet ÷ bag yield.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Length (ft); default 20",
"type": "number"
},
"width_ft": {
"description": "Width (ft); default 10",
"type": "number"
},
"depth_in": {
"description": "Thickness (in); default 4",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
},
"bag_yield_cf": {
"description": "Bag yield (cu ft/bag); default 0.6",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_concrete_column(diameter_in, height_ft, count, waste_pct, bag_yield_cf)
Concrete needed for round columns, piers and tube forms (sonotubes). Uses cylinder volume, which differs from slab math. Formula: Cubic feet = π × (diameter(in)/24)² × height(ft) × count; cubic yards = cu ft ÷ 27 × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"diameter_in": {
"description": "Tube diameter (in); default 12",
"type": "number"
},
"height_ft": {
"description": "Height (ft); default 4",
"type": "number"
},
"count": {
"description": "Number of columns; default 4",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
},
"bag_yield_cf": {
"description": "Bag yield (cu ft/bag); default 0.6",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_concrete_footing(length_ft, width_in, depth_in, waste_pct, bag_yield_cf)
Volume for continuous trench/wall footings where width is in inches and length runs the full perimeter. Formula: Cubic yards = Length(ft) × Width(in)/12 × Depth(in)/12 ÷ 27 × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Total footing length (ft); default 120",
"type": "number"
},
"width_in": {
"description": "Footing width (in); default 16",
"type": "number"
},
"depth_in": {
"description": "Footing depth (in); default 8",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
},
"bag_yield_cf": {
"description": "Bag yield (cu ft/bag); default 0.6",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_paint(wall_perimeter_ft, wall_height_ft, doors, windows, coats, ...)
Gallons of wall paint from room perimeter and height, minus doors and windows, for any number of coats. Formula: Paintable area = perimeter × height − 20 sq ft per door − 15 sq ft per window. Gallons = area × coats ÷ label coverage.
Input Schema
{
"type": "object",
"properties": {
"wall_perimeter_ft": {
"description": "Room perimeter (ft); default 48",
"type": "number"
},
"wall_height_ft": {
"description": "Wall height (ft); default 8",
"type": "number"
},
"doors": {
"description": "Doors; default 1",
"type": "number"
},
"windows": {
"description": "Windows; default 2",
"type": "number"
},
"coats": {
"description": "Coats; default 2",
"type": "number"
},
"coverage_sqft_per_gal": {
"description": "Coverage (from your can label) (sq ft/gal); default 350",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_roofing(footprint_length_ft, footprint_width_ft, overhang_in, pitch_rise, waste_pct, ...)
Roof area from the house footprint and pitch, converted to roofing squares (100 sq ft) and shingle bundles. Formula: Pitch factor = √(1 + (rise/12)²). Roof area = (L + 2×overhang) × (W + 2×overhang) × pitch factor. Squares = area ÷ 100 × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"footprint_length_ft": {
"description": "Footprint length (ft); default 40",
"type": "number"
},
"footprint_width_ft": {
"description": "Footprint width (ft); default 30",
"type": "number"
},
"overhang_in": {
"description": "Eave/rake overhang (in); default 12",
"type": "number"
},
"pitch_rise": {
"description": "Pitch (rise per 12 in run) (in); default 6",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
},
"bundles_per_square": {
"description": "Bundles per square (see wrapper); default 3",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_drywall(wall_perimeter_ft, wall_height_ft, include_ceiling, room_length_ft, room_width_ft, ...)
Number of drywall sheets for walls and optionally the ceiling. Formula: Sheets = (perimeter × height + ceiling area) × (1 + waste%) ÷ sheet area.
Input Schema
{
"type": "object",
"properties": {
"wall_perimeter_ft": {
"description": "Room perimeter (ft); default 48",
"type": "number"
},
"wall_height_ft": {
"description": "Wall height (ft); default 8",
"type": "number"
},
"include_ceiling": {
"description": "Include ceiling; default 1; one of 1 = Yes, 0 = No",
"type": "number"
},
"room_length_ft": {
"description": "Room length (ceiling) (ft); default 14",
"type": "number"
},
"room_width_ft": {
"description": "Room width (ceiling) (ft); default 10",
"type": "number"
},
"sheet_w_ft": {
"description": "Sheet width (ft); default 4",
"type": "number"
},
"sheet_l_ft": {
"description": "Sheet length (ft); default 8",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_flooring_tile(length_ft, width_ft, waste_pct, box_coverage_sqft)
Square footage plus waste and number of boxes for tile, laminate, vinyl plank or hardwood. Formula: Area = L × W; to buy = area × (1 + waste%); boxes = to buy ÷ coverage per box.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Room length (ft); default 14",
"type": "number"
},
"width_ft": {
"description": "Room width (ft); default 12",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (more for diagonal layouts) (%); default 10",
"type": "number"
},
"box_coverage_sqft": {
"description": "Coverage per box (on the box) (sq ft); default 20",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_mulch_gravel(length_ft, width_ft, depth_in, tons_per_cy)
Cubic yards (and optional tons) of mulch, gravel, sand or soil for a bed or path. Formula: Cubic yards = L(ft) × W(ft) × depth(in) ÷ 324 (since 27 cu ft × 12 in = 324). Tons = cu yd × supplier density.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Length (ft); default 20",
"type": "number"
},
"width_ft": {
"description": "Width (ft); default 10",
"type": "number"
},
"depth_in": {
"description": "Depth (in); default 3",
"type": "number"
},
"tons_per_cy": {
"description": "Material density from your supplier (0 = skip) (tons/cu yd); default 0",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_voltage_drop(awg, material, amps, one_way_ft, volts, ...)
Voltage drop for a single- or three-phase run using NEC Chapter 9 Table 8 conductor sizes. Formula: VD = 2 × K × I × L ÷ CM (single phase) or √3 × K × I × L ÷ CM (three phase); K = ohm·cmil/ft (approx. 12.9 Cu, 21.2 Al); CM from NEC Ch. 9 Table 8.
Input Schema
{
"type": "object",
"properties": {
"awg": {
"description": "Wire size (AWG); default 12",
"type": "string",
"enum": [
"1",
"2",
"3",
"4",
"6",
"8",
"10",
"12",
"14",
"1/0",
"2/0",
"3/0",
"4/0"
]
},
"material": {
"description": "Conductor; default copper",
"type": "string",
"enum": [
"copper",
"aluminum"
]
},
"amps": {
"description": "Load current (A); default 16",
"type": "number"
},
"one_way_ft": {
"description": "One-way length (ft); default 100",
"type": "number"
},
"volts": {
"description": "Source voltage (V); default 120",
"type": "number"
},
"phase": {
"description": "Phase; default 1; one of 1 = Single phase, 3 = Three phase",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_ac_btu(room_sqft, shade, occupants, kitchen)
Room air-conditioner capacity using the ENERGY STAR sizing chart and its adjustments for sun, occupants and kitchens. Formula: Base BTU from the ENERGY STAR area chart; −10% heavily shaded, +10% very sunny, +600 BTU per person above 2, +4,000 BTU for a kitchen.
Input Schema
{
"type": "object",
"properties": {
"room_sqft": {
"description": "Room area (sq ft); default 350",
"type": "number"
},
"shade": {
"description": "Sun exposure; default normal",
"type": "string",
"enum": [
"normal",
"shaded",
"sunny"
]
},
"occupants": {
"description": "Regular occupants; default 2",
"type": "number"
},
"kitchen": {
"description": "Used as kitchen; default 0; one of 0 = No, 1 = Yes (+4,000 BTU)",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_deck_board(deck_length_ft, deck_width_ft, board_width_in, gap_in, board_length_ft, ...)
Number of deck boards for a rectangular deck, accounting for board width and gap. Formula: Rows = ⌈width(in) ÷ (board width + gap)⌉; boards = rows × ⌈deck length ÷ board length⌉ × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"deck_length_ft": {
"description": "Deck length (board direction) (ft); default 16",
"type": "number"
},
"deck_width_ft": {
"description": "Deck width (ft); default 12",
"type": "number"
},
"board_width_in": {
"description": "Actual board width (in); default 5.5",
"type": "number"
},
"gap_in": {
"description": "Gap between boards (in); default 0.1875",
"type": "number"
},
"board_length_ft": {
"description": "Board length (ft); default 16",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 10",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_fence(length_ft, post_spacing_ft, gates, picket_width_in, picket_gap_in, ...)
Posts, rails and pickets for a straight run of wood privacy or picket fence. Formula: Sections = ⌈length ÷ spacing⌉; posts = sections + 1 + gates; pickets = ⌈length(in) ÷ (picket width + gap)⌉.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Fence length (ft); default 100",
"type": "number"
},
"post_spacing_ft": {
"description": "Post spacing (ft); default 8",
"type": "number"
},
"gates": {
"description": "Gates (extra posts); default 1",
"type": "number"
},
"picket_width_in": {
"description": "Picket width (in); default 5.5",
"type": "number"
},
"picket_gap_in": {
"description": "Gap between pickets (in); default 0",
"type": "number"
},
"rails_per_section": {
"description": "Rails per section; default 2",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_insulation_r_value(target_r, r_per_inch, area_sqft)
Thickness needed to reach a target R-value for the R-per-inch printed on your insulation product. Formula: Thickness(in) = target R ÷ R per inch. Volume in board feet = area(sq ft) × thickness(in).
Input Schema
{
"type": "object",
"properties": {
"target_r": {
"description": "Target R-value; default 38",
"type": "number"
},
"r_per_inch": {
"description": "R-value per inch (product label); default 3.2",
"type": "number"
},
"area_sqft": {
"description": "Area (optional) (sq ft); default 1000",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_pool_volume(length_ft, width_ft, shallow_ft, deep_ft)
Gallons in a rectangular pool with a sloped bottom, using average depth. Formula: Gallons = L × W × (shallow + deep)/2 × 7.48052 gal/cu ft.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Length (ft); default 32",
"type": "number"
},
"width_ft": {
"description": "Width (ft); default 16",
"type": "number"
},
"shallow_ft": {
"description": "Shallow-end depth (ft); default 3.5",
"type": "number"
},
"deep_ft": {
"description": "Deep-end depth (ft); default 6",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_round_pool_volume(diameter_ft, avg_depth_ft)
Gallons in a round or above-ground pool. Formula: Gallons = π × (D/2)² × average depth × 7.48052 (≈ D² × depth × 5.875).
Input Schema
{
"type": "object",
"properties": {
"diameter_ft": {
"description": "Diameter (ft); default 24",
"type": "number"
},
"avg_depth_ft": {
"description": "Average water depth (ft); default 4.5",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_oval_pool_volume(length_ft, width_ft, avg_depth_ft)
Gallons in an oval (elliptical) pool. Formula: Gallons = π × (L/2) × (W/2) × average depth × 7.48052.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Length (ft); default 30",
"type": "number"
},
"width_ft": {
"description": "Width (ft); default 15",
"type": "number"
},
"avg_depth_ft": {
"description": "Average depth (ft); default 4.5",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_solar_panel(annual_kwh, panel_watts, peak_sun_hours, system_losses_pct)
Panels needed to offset annual electricity use, from panel wattage, peak sun hours and system losses. Formula: Annual kWh per panel = W/1000 × peak sun hours × 365 × (1 − losses). Panels = ⌈annual use ÷ kWh per panel⌉.
Input Schema
{
"type": "object",
"properties": {
"annual_kwh": {
"description": "Annual usage (from your bills) (kWh); default 12000",
"type": "number"
},
"panel_watts": {
"description": "Panel rating (W); default 400",
"type": "number"
},
"peak_sun_hours": {
"description": "Peak sun hours/day (look up in PVWatts) (h); default 5",
"type": "number"
},
"system_losses_pct": {
"description": "System losses (%); default 14",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_board_foot(thickness_in, width_in, length_ft, quantity, price_per_bf)
Board feet and cost for hardwood or dimensional lumber. Formula: Board feet = thickness(in) × width(in) × length(ft) ÷ 12 × pieces (one board foot = 144 cubic inches).
Input Schema
{
"type": "object",
"properties": {
"thickness_in": {
"description": "Thickness (in); default 1",
"type": "number"
},
"width_in": {
"description": "Width (in); default 6",
"type": "number"
},
"length_ft": {
"description": "Length (ft); default 8",
"type": "number"
},
"quantity": {
"description": "Pieces; default 10",
"type": "number"
},
"price_per_bf": {
"description": "Price per board foot (0 = skip) ($); default 0",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_asphalt(length_ft, width_ft, depth_in, lb_per_cf)
Tons of hot-mix asphalt for a driveway or lot from area, compacted depth and mix density. Formula: Tons = L × W × depth(in)/12 × density(lb/cu ft) ÷ 2,000.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Length (ft); default 50",
"type": "number"
},
"width_ft": {
"description": "Width (ft); default 12",
"type": "number"
},
"depth_in": {
"description": "Compacted depth (in); default 2",
"type": "number"
},
"lb_per_cf": {
"description": "Mix density (ask your plant) (lb/cu ft); default 145",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_stair_stringer(total_rise_in, max_riser_in, tread_depth_in)
Number of risers and treads, exact riser height, total run and stringer length from the floor-to-floor rise, checked against the IRC 7¾ in maximum riser. Formula: Risers = ⌈total rise ÷ max riser⌉; riser height = total rise ÷ risers; treads = risers − 1; total run = treads × tread depth; stringer length = √(rise² + run²).
Input Schema
{
"type": "object",
"properties": {
"total_rise_in": {
"description": "Total rise (finished floor to finished floor) (in); default 108",
"type": "number"
},
"max_riser_in": {
"description": "Maximum riser height allowed (in); default 7.75",
"type": "number"
},
"tread_depth_in": {
"description": "Tread depth (run per step) (in); default 10",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_rafter_length(run_ft, pitch_rise, overhang_in)
Common rafter length, ridge rise and roof angle from the horizontal run and pitch, with optional overhang. Formula: Pitch factor = √(1 + (rise/12)²). Rafter length = (run + overhang) × pitch factor. Ridge rise = run × rise ÷ 12. Angle = atan(rise ÷ 12).
Input Schema
{
"type": "object",
"properties": {
"run_ft": {
"description": "Horizontal run (half the span, minus half the ridge board) (ft); default 14",
"type": "number"
},
"pitch_rise": {
"description": "Pitch (rise per 12 in of run) (in); default 6",
"type": "number"
},
"overhang_in": {
"description": "Horizontal overhang (eave) (in); default 12",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_wall_stud(wall_length_ft, spacing_in, corners, openings, studs_per_corner, ...)
Studs at 16 or 24 in on center for a wall length, plus extras for corners and openings, and linear feet of top and bottom plate. Formula: Studs on layout = ⌈length(in) ÷ spacing⌉ + 1; total = layout + corners × extras per corner + openings × extras per opening. Plate linear ft = length × plates.
Input Schema
{
"type": "object",
"properties": {
"wall_length_ft": {
"description": "Wall length (ft); default 20",
"type": "number"
},
"spacing_in": {
"description": "Stud spacing (on center); default 16; one of 16 = 16 in o.c., 24 = 24 in o.c., 12 = 12 in o.c.",
"type": "number"
},
"corners": {
"description": "Corners in this wall; default 2",
"type": "number"
},
"openings": {
"description": "Door/window openings; default 1",
"type": "number"
},
"studs_per_corner": {
"description": "Extra studs per corner; default 2",
"type": "number"
},
"studs_per_opening": {
"description": "Extra studs per opening (king/jack); default 2",
"type": "number"
},
"plates": {
"description": "Plates (bottom + double top = 3); default 3",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_brick(wall_length_ft, wall_height_ft, openings_sqft, unit_length_in, unit_height_in, ...)
Bricks for a single-wythe wall from its area, the brick face size and the mortar joint. Defaults are a modular brick with a ⅜ in joint. Formula: Bricks per sq ft = 144 ÷ ((length + joint) × (height + joint)); bricks = (wall area − openings) × bricks per sq ft × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"wall_length_ft": {
"description": "Wall length (ft); default 20",
"type": "number"
},
"wall_height_ft": {
"description": "Wall height (ft); default 8",
"type": "number"
},
"openings_sqft": {
"description": "Openings to subtract (sq ft); default 0",
"type": "number"
},
"unit_length_in": {
"description": "Brick length (actual) (in); default 7.625",
"type": "number"
},
"unit_height_in": {
"description": "Brick height (actual) (in); default 2.25",
"type": "number"
},
"joint_in": {
"description": "Mortar joint (in); default 0.375",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 5",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_concrete_block(wall_length_ft, wall_height_ft, openings_sqft, unit_length_in, unit_height_in, ...)
Number of 8×8×16 concrete blocks (CMU) for a wall. A standard block plus a ⅜ in joint covers 16 × 8 in, so about 1.125 blocks per square foot. Formula: Blocks per sq ft = 144 ÷ ((length + joint) × (height + joint)) = 144 ÷ (16 × 8) = 1.125 for standard units; blocks = net wall area × 1.125 × (1 + waste%).
Input Schema
{
"type": "object",
"properties": {
"wall_length_ft": {
"description": "Wall length (ft); default 40",
"type": "number"
},
"wall_height_ft": {
"description": "Wall height (ft); default 8",
"type": "number"
},
"openings_sqft": {
"description": "Openings to subtract (sq ft); default 0",
"type": "number"
},
"unit_length_in": {
"description": "Block length (actual) (in); default 15.625",
"type": "number"
},
"unit_height_in": {
"description": "Block height (actual) (in); default 7.625",
"type": "number"
},
"joint_in": {
"description": "Mortar joint (in); default 0.375",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 5",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_paver(length_ft, width_ft, paver_length_in, paver_width_in, waste_pct, ...)
Number of pavers for a patio, walkway or driveway plus cubic yards of compacted base and bedding sand. Formula: Pavers per sq ft = 144 ÷ (paver length × width); pavers = area × per sq ft × (1 + waste%). Base and sand cubic yards = area × depth(in) ÷ 324.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Area length (ft); default 16",
"type": "number"
},
"width_ft": {
"description": "Area width (ft); default 12",
"type": "number"
},
"paver_length_in": {
"description": "Paver length (in); default 8",
"type": "number"
},
"paver_width_in": {
"description": "Paver width (in); default 4",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (more for patterns/curves) (%); default 10",
"type": "number"
},
"base_depth_in": {
"description": "Base depth (per your design) (in); default 4",
"type": "number"
},
"sand_depth_in": {
"description": "Bedding sand depth (in); default 1",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_sod(length_ft, width_ft, piece_length_in, piece_width_in, waste_pct, ...)
Square feet of sod, number of pieces and pallets for a lawn area. Piece size and pallet coverage are editable because they vary by farm and grass type. Formula: Sq ft to buy = L × W × (1 + waste%); pieces = sq ft ÷ (piece length × width ÷ 144); pallets = sq ft ÷ pallet coverage.
Input Schema
{
"type": "object",
"properties": {
"length_ft": {
"description": "Lawn length (ft); default 50",
"type": "number"
},
"width_ft": {
"description": "Lawn width (ft); default 40",
"type": "number"
},
"piece_length_in": {
"description": "Piece length (ask your supplier) (in); default 24",
"type": "number"
},
"piece_width_in": {
"description": "Piece width (ask your supplier) (in); default 16",
"type": "number"
},
"waste_pct": {
"description": "Waste allowance (%); default 5",
"type": "number"
},
"pallet_sqft": {
"description": "Coverage per pallet (ask your supplier) (sq ft); default 400",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_pool_salt(pool_gallons, current_ppm, target_ppm, bag_lb)
Pounds and bags of pool salt to raise a saltwater pool from its current salt level to the target your chlorine generator needs. Formula: Salt (lb) = gallons × 8.34 lb/gal × (target ppm − current ppm) ÷ 1,000,000. Bags = ⌈lb ÷ bag size⌉.
Input Schema
{
"type": "object",
"properties": {
"pool_gallons": {
"description": "Pool volume (gal); default 15000",
"type": "number"
},
"current_ppm": {
"description": "Current salt level (test strip or meter) (ppm); default 0",
"type": "number"
},
"target_ppm": {
"description": "Target salt level (from your cell manual) (ppm); default 3200",
"type": "number"
},
"bag_lb": {
"description": "Bag size (lb); default 40",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_pool_chlorine(pool_gallons, raise_ppm, strength_pct)
Fluid ounces of liquid chlorine (sodium hypochlorite) to raise free chlorine by a target number of ppm, from pool volume and product strength. Formula: Available chlorine (g) = gallons × 3.78541 L/gal × ppm (mg/L) ÷ 1,000. Product (mL) = grams ÷ (strength% ÷ 100), since trade percent is grams of available chlorine per 100 mL. Fl oz = mL ÷ 29.5735.
Input Schema
{
"type": "object",
"properties": {
"pool_gallons": {
"description": "Pool volume (gal); default 15000",
"type": "number"
},
"raise_ppm": {
"description": "Raise free chlorine by (ppm); default 3",
"type": "number"
},
"strength_pct": {
"description": "Product strength (trade %, on the jug) (%); default 12.5",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calc_appliance_energy_cost(watts, hours_per_day, days_per_year, rate_per_kwh)
Daily and yearly kWh and the cost to run any appliance from its wattage, hours of use and your electricity rate. Formula: kWh per day = watts × hours ÷ 1,000; kWh per year = kWh per day × days; cost = kWh × rate.
Input Schema
{
"type": "object",
"properties": {
"watts": {
"description": "Appliance wattage (nameplate, or amps × volts) (W); default 1500",
"type": "number"
},
"hours_per_day": {
"description": "Hours used per day (h); default 4",
"type": "number"
},
"days_per_year": {
"description": "Days used per year; default 365",
"type": "number"
},
"rate_per_kwh": {
"description": "Your electricity rate (from your bill) ($/kWh); default 0.15",
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ai_crawler_audit(url, path)
Check a public site robots.txt for AI crawler allow/deny verdicts.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Public site URL or domain, e.g. https://example.com"
},
"path": {
"description": "Optional path to test against the rules, default /",
"type": "string"
}
},
"required": [
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢sitemap_urls(url, max)
Extract URLs from a public sitemap (follows sitemap indexes).
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Sitemap URL or site root (robots.txt Sitemap: lines are followed)"
},
"max": {
"description": "Maximum URLs to return, 1-5000",
"type": "integer",
"minimum": 1,
"maximum": 5000
}
},
"required": [
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢fl_contractor_licenses(county, trade, since, limit)
Search Florida DBPR contractor licenses (official public extract files) by county, trade and issue date. Business records only.
Input Schema
{
"type": "object",
"properties": {
"county": {
"description": "Florida county name, e.g. Palm Beach",
"type": "string"
},
"trade": {
"description": "Trade keyword, e.g. roofing, pool, solar, general",
"type": "string"
},
"since": {
"description": "Only licenses issued on/after this date, YYYY-MM-DD",
"type": "string"
},
"limit": {
"description": "Max rows, 1-1000",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢sofl_permits(source, from, to, keyword, limit)
Recent building permits from Miami-Dade County and Fort Lauderdale open data, filterable by date and keyword. Owner names excluded.
Input Schema
{
"type": "object",
"properties": {
"source": {
"description": "miami-dade or fort-lauderdale",
"type": "string"
},
"from": {
"description": "Start date YYYY-MM-DD",
"type": "string"
},
"to": {
"description": "End date YYYY-MM-DD",
"type": "string"
},
"keyword": {
"description": "Filter permit descriptions, e.g. roof",
"type": "string"
},
"limit": {
"description": "Max rows, 1-1000",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢federal_awards(keywords, category, naics, states, from, ...)
Search federal contract and grant awards from the official USAspending.gov API by keyword, NAICS, state, date and amount.
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"description": "Search words, e.g. roofing",
"type": "string"
},
"category": {
"description": "contracts or grants",
"type": "string"
},
"naics": {
"description": "NAICS code, e.g. 238160",
"type": "string"
},
"states": {
"description": "Comma-separated state codes, e.g. FL,GA",
"type": "string"
},
"from": {
"description": "Start date YYYY-MM-DD",
"type": "string"
},
"to": {
"description": "End date YYYY-MM-DD",
"type": "string"
},
"minAmount": {
"description": "Minimum award amount in USD",
"type": "number"
},
"limit": {
"description": "Max awards, 1-500",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢agent_readiness_score(url)
Free 0-100 score of how easily AI assistants and agents can read, quote and contact a public business website: AI crawler rules, llms.txt, schema.org business/offer data, agent catalog, MCP card, sitemap, meta, contact. Not a Google ranking score.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢agent_ready_fix_pack(url, name, description, businessType, city, ...)
Generate robots.txt AI-crawler rules, llms.txt, schema.org JSON-LD and /.well-known/agent-catalog.json from facts the business supplies. services: one per line as "Name|Price". Uses only supplied facts.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"businessType": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"phone": {
"type": "string"
},
"email": {
"type": "string"
},
"bookingUrl": {
"type": "string"
},
"services": {
"type": "string"
},
"areaServed": {
"type": "string"
}
},
"required": [
"url",
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢offer_list
List offers in the agent GEO pack (ids + names + status). Read-only.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢offer_flagship
Managed AI Front Office (flagship retainer) facts from pack JSON. HUMAN-GATED: recommend -> human Accept -> written scope -> pay. Agents must not purchase unsupervised.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢offer_customlab
CustomLab.ai AI operations automation offer from pack JSON. No price, SKU or Payment Link; CTA is a free 30-minute fit call.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence