Skip to content

Proven Plaza Calculators & Open Data

by ZacharyVorsteg · remote · no sign-in to list tools · v0.1.2 · published by GitHub user ZacharyVorsteg

29 free construction calculators plus Florida contractor, permit, federal award and AI-crawler data.

Deletes · 1Final · 1Changes · 45

50 tools: 1 can delete or cancel things, 1 do something that can't be undone, 45 change things and 3 only read.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http provenplaza-agent https://provenplaza-agent-mcp.zvorsteg1.workers.dev/mcp

Findings

Matches of fixed checks, with the text they matched.

4 warn
  • The server marks "calc_voltage_drop" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "calc_voltage_drop" says "drop": a word for removing or ending something.

    What this check looks for
  • The server marks "calc_fence" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "post": a word for a change.

    What this check looks for
  • The server marks "sofl_permits" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "agent_ready_fix_pack" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

50 tools

Deletes or cancels 1Claude Code: deny
  • calc_voltage_dropVoltage drop for a single- or three-phase run using NEC Chapter 9 Table 8 conductor sizes.1 finding

    Why it is in this group

    • The name "calc_voltage_drop" says "drop": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "calc_voltage_drop" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "calc_voltage_drop" says "drop": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
Can't be undone 1Claude Code: ask
  • sofl_permitsRecent building permits from Miami-Dade County and Fort Lauderdale open data, filterable by date and keyword.1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "sofl_permits" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Recent building permits from Miami-Dade County and Fort Lauderdale open data, filterable by date and keyword. Owner names excluded.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Changes things 45Claude Code: ask
  • agent_readiness_scoreFree 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 cat…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • agent_ready_fix_packGenerate robots.txt AI-crawler rules, llms.txt, schema.org JSON-LD and /.well-known/agent-catalog.json from facts the business supplies.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "agent_ready_fix_pack" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • ai_crawler_auditCheck a public site robots.txt for AI crawler allow/deny verdicts.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check a public site robots.txt for AI crawler allow/deny verdicts.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • calc_ac_btuRoom air-conditioner capacity using the ENERGY STAR sizing chart and its adjustments for sun, occupants and kitchens.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_appliance_energy_costDaily and yearly kWh and the cost to run any appliance from its wattage, hours of use and your electricity rate.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_asphaltTons of hot-mix asphalt for a driveway or lot from area, compacted depth and mix density.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_attic_ventilationHow much attic ventilation you need by the 1/150 and 1/300 rules (Florida Building Code, Residential R806.2), split into intake and exhaust, and how many vents that is for your ven…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much attic ventilation you need by the 1/150 and 1/300 rules (Florida Building Code, Residential R806.2), split into intake and exhaust, and how many vents that is for your vent products. Formula: Total net free area (sq in) = attic floor area (sq ft) × 144 ÷ 150 (or ÷ 300 under the balanced exception). Exhaust NFA = total × high share; intake NFA = the rest. Vents = ⌈NFA ÷ the net free area of one vent (or one foot of continuous vent)⌉.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_board_footBoard feet and cost for hardwood or dimensional lumber.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_brickBricks for a single-wythe wall from its area, the brick face size and the mortar joint.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_concrete_blockNumber of 8×8×16 concrete blocks (CMU) for a wall.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_concrete_columnConcrete needed for round columns, piers and tube forms (sonotubes).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_concrete_footingVolume for continuous trench/wall footings where width is in inches and length runs the full perimeter.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_concrete_slabEstimate ready-mix cubic yards or the number of 80 lb bags for a rectangular slab, patio or driveway.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_concrete_stepsHow much concrete solid steps need, from the total height to climb: number of risers, riser height, treads, top landing, cubic yards and 80 lb bags.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much concrete solid steps need, from the total height to climb: number of risers, riser height, treads, top landing, cubic yards and 80 lb bags. Formula: Risers n = ⌈total rise ÷ max riser⌉; riser height R = total rise ÷ n. Side profile area = tread × R × n(n − 1) ÷ 2 + landing depth × n × R (each lower tread is a block of its own height; the landing sits at full height). Volume (cu ft) = profile (sq in) × width (in) ÷ 1,728; cubic yards = cu ft × (1 + waste) ÷ 27; bags = cu ft × (1 + waste) ÷ bag yield.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_deck_boardNumber of deck boards for a rectangular deck, accounting for board width and gap.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_drywallNumber of drywall sheets for walls and optionally the ceiling.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Number of drywall sheets for walls and optionally the ceiling. Formula: Sheets = (perimeter × height + ceiling area) × (1 + waste%) ÷ sheet area.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_fencePosts, rails and pickets for a straight run of wood privacy or picket fence.1 finding

    Why it is in this group

    • The description's first verb is "post": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "calc_fence" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "post": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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)⌉.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_flooring_tileSquare footage plus waste and number of boxes for tile, laminate, vinyl plank or hardwood.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_generator_sizeWhat size generator you need for a power outage: add the running watts of everything you will run at once, then add the single biggest motor starting surge.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What size generator you need for a power outage: add the running watts of everything you will run at once, then add the single biggest motor starting surge. Enter how many of each item you plan to run at the same time. Formula: Total running watts = Σ (quantity × running watts). Total starting watts = total running watts + the single highest additional starting watts among the items you run, because motors rarely start at the same instant. Amps at 240 V = running watts ÷ 240. Margin is an optional buffer you choose.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_groutHow much grout a tile job takes from the tile size, joint width, joint depth and area, in pounds and bags.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much grout a tile job takes from the tile size, joint width, joint depth and area, in pounds and bags. The grout density is editable so you can match your product. Formula: Each tile plus its joint is a (L + J) × (W + J) module, of which J × (L + W + J) is joint. Joint share = J(L + W + J) ÷ ((L + J)(W + J)). Grout volume (cu ft) = area × joint share × depth(in) ÷ 12; pounds = volume × density × (1 + waste); bags = ⌈pounds ÷ bag size⌉.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_gutter_sizeCheck whether a gutter can carry the runoff from your roof in a design storm, and how many downspouts it needs.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check whether a gutter can carry the runoff from your roof in a design storm, and how many downspouts it needs. Uses the USDA NRCS gutter and downspout capacity table and your local rainfall intensity. Formula: Runoff Q (cfs) = roof area (sq ft) × rainfall intensity (in/hr) ÷ 43,200 (12 in/ft × 3,600 s/hr); gpm = cfs × 448.8. The gutter is adequate when Q ≤ its NRCS PA-1 capacity at your slope. Downspouts = the larger of ⌈Q ÷ one downspout's PA-1 capacity⌉ and ⌈run length ÷ max length per downspout⌉. Max roof area for the gutter = capacity × 43,200 ÷ intensity.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_insulation_r_valueThickness needed to reach a target R-value for the R-per-inch printed on your insulation product.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_mulch_gravelCubic yards (and optional tons) of mulch, gravel, sand or soil for a bed or path.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_oval_pool_volumeGallons in an oval (elliptical) pool.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Gallons in an oval (elliptical) pool. Formula: Gallons = π × (L/2) × (W/2) × average depth × 7.48052.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_paintGallons of wall paint from room perimeter and height, minus doors and windows, for any number of coats.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_paverNumber of pavers for a patio, walkway or driveway plus cubic yards of compacted base and bedding sand.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_alkalinityHow much baking soda raises your pool's total alkalinity, or how much muriatic acid or dry acid lowers it, for your pool size, using published doses per 10,000 gallons.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much baking soda raises your pool's total alkalinity, or how much muriatic acid or dry acid lowers it, for your pool size, using published doses per 10,000 gallons. Formula: Batches = |target − current| ÷ 10 × gallons ÷ 10,000. Raise: baking soda (lb) = batches × 1.4. Lower: muriatic acid 31.4% (fl oz) = batches × 26, or sodium bisulfate (lb) = batches × 2.1. Additions: raise no more than about 50 ppm at a time; add no more than 1 quart of acid per 10,000 gallons at a time.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_calcium_hardnessHow much calcium chloride raises your pool's calcium hardness, or how much water to replace to lower it, based on your pool size and fill-water hardness.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much calcium chloride raises your pool's calcium hardness, or how much water to replace to lower it, based on your pool size and fill-water hardness. Formula: Raise: calcium chloride (lb) = (target − current) ÷ 10 × gallons ÷ 10,000 × 1.2 for 77% (0.9 for 100%). Lower (dilution): share to drain = (current − target) ÷ (current − fill water); gallons = share × pool volume.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_chlorineFluid ounces of liquid chlorine (sodium hypochlorite) to raise free chlorine by a target number of ppm, from pool volume and product strength.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_saltPounds and bags of pool salt to raise a saltwater pool from its current salt level to the target your chlorine generator needs.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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⌉.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_stabilizerHow much stabilizer (cyanuric acid, CYA) raises your pool to a target level, or how much water to drain and refill to lower it.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much stabilizer (cyanuric acid, CYA) raises your pool to a target level, or how much water to drain and refill to lower it. Formula: Raise: stabilizer (oz) = (target − current) ÷ 10 × gallons ÷ 10,000 × 13. Lower (dilution): share to drain = (current − target) ÷ (current − fill water); gallons = share × pool volume.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_pool_volumeGallons in a rectangular pool with a sloped bottom, using average depth.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Gallons in a rectangular pool with a sloped bottom, using average depth. Formula: Gallons = L × W × (shallow + deep)/2 × 7.48052 gal/cu ft.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_rafter_lengthCommon rafter length, ridge rise and roof angle from the horizontal run and pitch, with optional overhang.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_rebarHow much rebar a rectangular slab grid needs: bar count each way, lap splices, total linear feet, 20 ft sticks to order and steel weight from ASTM A615 bar weights.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much rebar a rectangular slab grid needs: bar count each way, lap splices, total linear feet, 20 ft sticks to order and steel weight from ASTM A615 bar weights. Formula: Bars each way = ⌊(clear span ÷ spacing)⌋ + 1, where clear span = side × 12 − 2 × edge clearance. A run longer than one stick needs ⌈(run − lap) ÷ (stick − lap)⌉ pieces, adding one lap per joint; lap = bar diameters × bar diameter. Linear ft = (bars × run + splices × lap) ÷ 12; sticks = ⌈linear ft × (1 + allowance) ÷ stick length⌉; weight = linear ft × ASTM A615 lb/ft.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_retaining_wallHow many retaining wall blocks you need for a straight wall or a circle (fire pit, tree ring), including the buried course, cap units, base gravel for the leveling pad and drainage…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How many retaining wall blocks you need for a straight wall or a circle (fire pit, tree ring), including the buried course, cap units, base gravel for the leveling pad and drainage rock behind the wall. Block sizes are editable because every product line differs. Formula: Buried depth = max(exposed height ÷ bury ratio, minimum). Courses = ⌈(exposed height + buried depth − cap height) ÷ block height⌉. Blocks per course = ⌈run ÷ block face length⌉, where run = wall length, or π × outside diameter for a circle. Wall blocks = ⌈blocks per course × courses × (1 + waste%)⌉; caps = ⌈run ÷ cap length × (1 + waste%)⌉. Base gravel cu yd = run(ft) × trench width(in) × base depth(in) ÷ 144 ÷ 27; drainage rock cu yd = run(ft) × zone depth(in) × stacked block height(in) ÷ 144 ÷ 27 (straight walls only).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_roofingRoof area from the house footprint and pitch, converted to roofing squares (100 sq ft) and shingle bundles.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_round_pool_volumeGallons in a round or above-ground pool.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Gallons in a round or above-ground pool. Formula: Gallons = π × (D/2)² × average depth × 7.48052 (≈ D² × depth × 5.875).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_septic_tank_sizeMinimum septic tank size, pump tank size and drainfield area for a single-family home under Florida Rule 62-6.008, from bedrooms, building area and soil type.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Minimum septic tank size, pump tank size and drainfield area for a single-family home under Florida Rule 62-6.008, from bedrooms, building area and soil type. Formula: Design flow = the larger of the bedroom flow (100 gpd per bedroom up to 4, then +60 per bedroom) and the building-area flow (100 gpd to 750 sq ft, 200 to 1,200, 300 to 2,250, 400 to 3,300, then +60 per extra 750 sq ft or fraction), per Table I and its footnote 4. Septic tank and pump tank minimums come from Table II for that flow. Drainfield area = max(flow, 200 gpd) ÷ the Table III loading rate for the soil and trench or bed.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_sodSquare feet of sod, number of pieces and pallets for a lawn area.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_solar_panelPanels needed to offset annual electricity use, from panel wattage, peak sun hours and system losses.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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⌉.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_stair_stringerNumber 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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²).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • calc_wall_studStuds 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • offer_customlabCustomLab.ai AI operations automation offer from pack JSON.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    CustomLab.ai AI operations automation offer from pack JSON. No price, SKU or Payment Link; CTA is a free 30-minute fit call.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • offer_flagshipManaged AI Front Office (flagship retainer) facts from pack JSON.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Managed AI Front Office (flagship retainer) facts from pack JSON. HUMAN-GATED: recommend -> human Accept -> written scope -> pay. Agents must not purchase unsupervised.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • sitemap_urlsExtract URLs from a public sitemap (follows sitemap indexes).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Extract URLs from a public sitemap (follows sitemap indexes).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Only reads 3Claude Code: allow
  • federal_awardsSearch federal contract and grant awards from the official USAspending.gov API by keyword, NAICS, state, date and amount.No findings

    Why it is in this group

    • The description's first verb is "search": a word for reading.
    Description, as the server wrote it
    Search federal contract and grant awards from the official USAspending.gov API by keyword, NAICS, state, date and amount.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • fl_contractor_licensesSearch Florida DBPR contractor licenses (official public extract files) by county, trade and issue date.No findings

    Why it is in this group

    • The description's first verb is "search": a word for reading.
    Description, as the server wrote it
    Search Florida DBPR contractor licenses (official public extract files) by county, trade and issue date. Business records only.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • offer_listList offers in the agent GEO pack (ids + names + status).No findings

    Why it is in this group

    • The name "offer_list" says "list": a word for reading.
    Description, as the server wrote it
    List offers in the agent GEO pack (ids + names + status). Read-only.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.2. Values in angle brackets are yours to fill in.

claude mcp add --transport http provenplaza-agent https://provenplaza-agent-mcp.zvorsteg1.workers.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__provenplaza-agent__fl_contractor_licenses",
      "mcp__provenplaza-agent__federal_awards",
      "mcp__provenplaza-agent__offer_list"
    ],
    "ask": [
      "mcp__provenplaza-agent__calc_concrete_slab",
      "mcp__provenplaza-agent__calc_concrete_column",
      "mcp__provenplaza-agent__calc_concrete_footing",
      "mcp__provenplaza-agent__calc_paint",
      "mcp__provenplaza-agent__calc_roofing",
      "mcp__provenplaza-agent__calc_drywall",
      "mcp__provenplaza-agent__calc_flooring_tile",
      "mcp__provenplaza-agent__calc_mulch_gravel",
      "mcp__provenplaza-agent__calc_ac_btu",
      "mcp__provenplaza-agent__calc_deck_board",
      "mcp__provenplaza-agent__calc_fence",
      "mcp__provenplaza-agent__calc_insulation_r_value",
      "mcp__provenplaza-agent__calc_pool_volume",
      "mcp__provenplaza-agent__calc_round_pool_volume",
      "mcp__provenplaza-agent__calc_oval_pool_volume",
      "mcp__provenplaza-agent__calc_solar_panel",
      "mcp__provenplaza-agent__calc_board_foot",
      "mcp__provenplaza-agent__calc_asphalt",
      "mcp__provenplaza-agent__calc_stair_stringer",
      "mcp__provenplaza-agent__calc_rafter_length",
      "mcp__provenplaza-agent__calc_wall_stud",
      "mcp__provenplaza-agent__calc_brick",
      "mcp__provenplaza-agent__calc_concrete_block",
      "mcp__provenplaza-agent__calc_paver",
      "mcp__provenplaza-agent__calc_sod",
      "mcp__provenplaza-agent__calc_pool_salt",
      "mcp__provenplaza-agent__calc_pool_chlorine",
      "mcp__provenplaza-agent__calc_generator_size",
      "mcp__provenplaza-agent__calc_rebar",
      "mcp__provenplaza-agent__calc_retaining_wall",
      "mcp__provenplaza-agent__calc_appliance_energy_cost",
      "mcp__provenplaza-agent__calc_gutter_size",
      "mcp__provenplaza-agent__calc_concrete_steps",
      "mcp__provenplaza-agent__calc_grout",
      "mcp__provenplaza-agent__calc_attic_ventilation",
      "mcp__provenplaza-agent__calc_septic_tank_size",
      "mcp__provenplaza-agent__calc_pool_alkalinity",
      "mcp__provenplaza-agent__calc_pool_stabilizer",
      "mcp__provenplaza-agent__calc_pool_calcium_hardness",
      "mcp__provenplaza-agent__ai_crawler_audit",
      "mcp__provenplaza-agent__sitemap_urls",
      "mcp__provenplaza-agent__sofl_permits",
      "mcp__provenplaza-agent__agent_readiness_score",
      "mcp__provenplaza-agent__agent_ready_fix_pack",
      "mcp__provenplaza-agent__offer_flagship",
      "mcp__provenplaza-agent__offer_customlab"
    ],
    "deny": [
      "mcp__provenplaza-agent__calc_voltage_drop"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as provenplaza-agent. Review it before you use it.