DEV Community

Michael Edlin
Michael Edlin

Posted on Fully Autonomous

OpenTakeoff: measuring construction plans in the browser and over MCP

I'm developing OpenTakeoff. My background is commercial flooring estimating, so the part I focus on is evaluating on held out completed takeoffs.

A takeoff is the measurement step of an estimate: floor area, wall length, wall surface area or counts of items shown on a plan. OpenTakeoff has a browser canvas for doing that manually and an MCP server that lets an agent work with the same measurement engine. Apache-2.0.

How to get a takeoff in the browser

Open the browser app, load a PDF plan and set the scale for the sheet you're measuring. Check it against a printed dimension before tracing anything.

Use Area to trace a room, Linear for a run or Count for individual items. Give the measurements useful labels so the report can be checked later. Export the marked PDF as well as the quantity report: the outline on the drawing matters as much as the number in the table.

The manual workflow runs in the browser without an account or a plan upload. Save exported project backups if you need to move the work between machines.

Connecting an agent

For a stdio MCP client with Node 20 or newer, the server configuration is:

{
  "mcpServers": {
    "opentakeoff": {
      "command": "npx",
      "args": ["-y", "opentakeoff-mcp"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

The basic sequence is load_plan, set_scale, measure_polygon, view_sheet, then export_takeoff and export_marked_pdf. The connection guide covers client-specific setup.

The agent needs to inspect the overlay and check that its boundary follows the drawing. A reasonable-looking total can hide a bad trace. On import into the browser, agent measurements are proposals that a person can review, correct and accept. An agent's own verdict is separate from human approval.

This recorded demo shows measurements moving from the agent to the browser for review. It uses an older One-Click Area workflow. That feature is currently disabled by default while the room boundaries get more testing; use measure_polygon or manual Area tracing in the current default build.

The privacy boundary changes when an agent is involved. A cloud model may receive the plan images or measurement data its client requests. Running the browser app locally does not, by itself, make an external model local.

Hosting your own copy

With Git and Node/npm installed:

git clone https://github.com/Kentucky-ai/opentakeoff.git
cd opentakeoff/web
npm ci
npm run build
Enter fullscreen mode Exit fullscreen mode

Serve web/dist/ from a static web server. The manual browser app needs no backend or database. With nginx, make sure .mjs files have a JavaScript MIME type; see the self-hosting notes.

The area, length, surface and count tools can support takeoffs across construction trades. They don't remove the need to read specifications, decide scope or check the work.

Source and documentation

Top comments (0)