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.
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
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things45Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "calc_voltage_drop" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "calc_voltage_drop" says "drop": a word for removing or ending something.
- Warncalc_fence
The server marks "calc_fence" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "post": a word for a change.
- Warnsofl_permits
The server marks "sofl_permits" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
The server marks "agent_ready_fix_pack" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "calc_voltage_drop" says "drop": a word for removing or ending something.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "post": a word for a change.
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.
