免费、开源的 PDF 取量画布。自行追踪图纸并获取数量,或在 MCP 上指向同一引擎的 AI 代理。完全在您的浏览器中运行,无需账户。
AI 翻译
A free, open-source PDF takeoff canvas. Trace plans and get quantities yourself, or point an AI agent at the same engine over MCP. Runs entirely in your browser, no account.
开发工具TypeScript · JavaScriptGitHub @Kentucky-ai在线运营者未确认
试用过了吗? 点一下就好,无需登录。
Open-source (Apache-2.0) PDF takeoff for construction & flooring — the first engine an AI agent drives natively over MCP, not bolted on. One-click room detection, materials + quantities, built for preconstruction. Runs entirely in your browser.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
The measurement engine for building plans—built so an AI agent can drive it, and so an estimator wants to.查看完整 README ↗Measure construction plans in your browser, or hand the same engine to your AI agent. Free, open source and local. Nothing uploads, and nobody has to sign up.
A takeoff is the measuring that every construction bid starts with: how much floor, how much wall, how many fixtures, at what scale and on which sheet. OpenTakeoff is an open-source engine for that job. It has two front ends:
Both front ends share one takeoff format, so you can open an agent's takeoff in the canvas, check it and fix it. Every shape records the scale it was measured at, the method that drew it, and whether a person or an agent drew it.
[!NOTE] One-Click Area is temporarily gated while the flood engine is re-validated on a wider plan corpus. Trace rooms with Area (
A) in the canvas andmeasure_polygonover MCP. Every other tool works as normal. Seedocs/design/ONE_CLICK_GATE.md.
| You are… | Start here | Time | |
|---|---|---|---|
| 🧑🔧 | An estimator with a bid due | Open the canvas, click Guided first takeoff, then read the user manual | 5 min |
| 🤖 | An AI agent, or the person wiring one up | Run npx -y opentakeoff-mcp (see Plug it into your agent), then read the agent manual | 1 min |
| 🛠 | A developer | Read AGENTS.md for the repo map, FEATURES.md for where each feature lives in the code, then Contribute | 10 min |
| 🏗 | A crew that wants its own copy | Fork it. Any static host will run it, and nothing phones home | 5 min |
The server needs Node 20 or newer. You don't need to clone or build anything. Pick your client:
| Client | Install |
|---|---|
| Claude Code | claude mcp add opentakeoff -- npx -y opentakeoff-mcp |
| Codex CLI | codex mcp add opentakeoff -- npx -y opentakeoff-mcp |
| Cursor | |
| VS Code | |
| Claude Desktop | Double-click opentakeoff-mcp.mcpb |
| Docker (from a clone) | docker build -f mcp/Dockerfile -t opentakeoff-mcp . && docker run --rm -i opentakeoff-mcp |
| Any other stdio client | Use the JSON below |
{
"mcpServers": {
"opentakeoff": { "command": "npx", "args": ["-y", "opentakeoff-mcp"] }
}
}
If you've cloned the repo, the root .mcp.json, .cursor/mcp.json
and .vscode/mcp.json register the server when you open the folder, so
there's nothing else to set up.
Your first prompt. Paste this once the server is connected:
Load
demo/sample-finish-plan.pdffrom the OpenTakeoff repo, read the scale note on the floor plan, set the scale, trace room 134 on its wall faces under its finish tag from the schedule, check your ring withview_sheet, and export the marked-up PDF.
The step-by-step walkthrough for each client is in Connect OpenTakeoff to your AI.
The server can also describe itself: read the takeoff://wiki resource before you load a plan.
| Stage | Tools |
|---|---|
| Open and orient | load_plan · sheet_info · sheet_context · get_sheet_vectors · read_sheet_text · find_text · view_sheet |
| Scale | set_scale |
| Measure | measure_polygon · cut_out · measure_line · measure_surface · place_count · count_marks |
| Repeat and derive | symbol_sweep · sweep_schedule_row · derive_base · derive_transitions · apply_rules |
| Read the drawing set | sheet_graph · resolve_tag · find_schedule |
| Edit and audit | list_shapes · edit_shape · edit_condition · edit_materials · duplicate_condition · split_condition · delete_shape · undo_last · scope_duplicates · scope_merge |
| Propose for review | propose_takeoff · revise_proposal · withdraw_proposal · propose_condition_edit · withdraw_condition_edit |
| Mark and sign | annotate · list_annotations · edit_annotation · link_annotation · mark_verdict · delete_verdict |
| Ask the architect | create_rfi · list_rfis · resolve_rfi · delete_rfi |
| Price | set_pricing · set_estimate_settings · estimate_summary · export_estimate · export_proposal |
The generated reference, with the required arguments for each tool, is docs/MCP_TOOL_INDEX.md.
The full tool reference is mcp/README.md.
A real run at 3× speed. The agent takes off patient rooms 161–163 on a federal finish plan and exports after each commit. Each shape lands in the canvas as a dashed proposal and becomes ink only when the operator clicks Accept. Watch it live and uncut: autonomous agent run (2:47) · finish plan to report in about a minute (1:14) · canvas walkthrough (1:10)
AGENT diamond. Only a person at the canvas can apply the green APPROVED seal.export_marked_pdf burns the work
into the drawings behind a legend cover with totals.The full contract, with the reasoning behind each rule, is in the tour.
October 2026
set_pricing, set_estimate_settings,
estimate_summary, export_estimate and export_proposal. Prices always come from the
estimator, and nothing fills one in for you
(#558–#562, MCP 0.9.99).buildNet time dropped by 2.4× to
2.5× on the slowest sheets
(#540, #547, #550).September 2026: on-device OCR for scanned sheets, plan-set text search, Copy text, schedule import from raster pages, the annotation toolbar, Pin references and a guided first takeoff. Everything is in the CHANGELOG, and the older highlights are in the tour.
| Area | What you get |
|---|---|
| Ingest | PDFs, images and whole .zip plan sets, unpacked in the browser, with up to 4 sheets side by side |
| Scale | Detects the drawn scale note, calibrates from a known dimension, and grades a dimension check, all per sheet |
| Measure | Area, Rectangle, Linear, Curved Line, Surface Area (walls), Count, Cut Out, ⟂ Transitions and Zone check, in imperial or metric |
| Conditions | A color and CAD hatch for each finish, waste %, ×N multiplier, height, thickness, and import from the finish schedule |
| Materials | Coverage rate × basis gives rounded order quantities. Includes a grout calculator and the figured seam LF |
| Roll goods | Lanes, seams, multi-roll splits and to-scale cuts with drag-to-reorder nesting |
| Multi-sheet | A sheet tree with title-block numbers, a gallery, levels, stitching across a match line, PDF layer roles and a reference split |
| Estimate | Unit prices, tax, overhead and profit, an Excel export and a bid proposal PDF |
| Report and export | SF, SY, LF and EA per condition, with and without waste. Exports CSV, JSON, Excel, DXF and a Marked Set PDF |
| Review | Revisions with quantity deltas, markups, approval seals, an RFI register, and agent proposals you accept or reject |
| MCP server | 58 tools, sheet resources, a packaged wiki and multi-document sessions (mcp/) |
| Privacy | Runs only in the client. Work is stored in IndexedDB and localStorage and is never uploaded |
You'll find every feature in depth in the tour, every feature mapped to its code in FEATURES.md, and every click in the user manual.
OpenTakeoff merges evidence, not promises. It is used on real commercial bids, so a pull request has to show that it works. It doesn't need to be big. People and agents are held to the same bar, and a PR that clears it merges fast.
1 · Find something. Pick an open issue,
an RFC, a
flagship challenge, a
good first issue,
or a bug you hit on your own plans. If it's still an idea, start in
Discussions.
2 · Build it.
git clone https://github.com/<you>/opentakeoff && cd opentakeoff/web
npm ci && npm run dev # http://localhost:5173
npm run check # the exact CI gate
3 · Prove it.
| Your change | The evidence it carries |
|---|---|
| Visible (a panel, a tool, an export) | A screenshot of each surface you changed, and a short recording for a flow |
| Engine (geometry, totals, MCP, readers) | An exact-output gate, a before/after table with its conditions, and the command that reproduces it |
| Any PR | Notes for the reviewer: coordinate spaces, limits you chose on purpose, and anything you didn't verify |
Two merged PRs show the bar well. #346 covers a UI feature with a screenshot of each surface, a recording and the reviewer's notes. #547 covers an engine change with 548/548 identical room probes and a before/after retime table. Both come from @knmurphy. The PR template walks you through the same structure, and CONTRIBUTING.md has the ground rules, including the one-comment contributor agreement.
🤖 Agents are welcome contributors. Point yours at AGENTS.md. PRs from forks
run the full CI with a read-only token, and an agent's PR merges under the same evidence bar
as anyone else's. Engine work that lands ships to every agent that pulls opentakeoff-mcp.
OpenTakeoff is AGPL-3.0. You can fork it, change it, and ship it to your own crew or as the base of your own product. If you run a modified copy for other people, including as a hosted service, publish your changes under the same license.
cd web && npm ci && npm run dev. npm run check is the exact CI gate
(typecheck, lint, test and build).netlify.toml, so importing
your fork into Netlify deploys it with no settings. Any static host works, and
docs/SELF_HOSTING.md covers the one nginx gotcha.The geometry libraries have no React or DOM code, so you can lift them straight out:
oneclick.ts (flood fill, face extraction, corner snap),
sheets.ts (scale, polygon area), totals.js
(waste, SY, order quantities) and rollgoods.js (lanes and seams).
Every finished takeoff is a set of expert decisions: this region gets this finish, at this waste. If you record those decisions, you get a labeled dataset (plan geometry paired with the finish an expert assigned to it) that doesn't exist today. The thesis, stated so it can be attacked, is that markup is label.
OpenTakeoff is the instrument that produces that corpus. Collection is opt-in and auditable.
The Contribute button builds a payload that contains only derived data. It never includes
the PDF, file names, client names or scale values, and a whitelist in
contribute.js enforces that. The contract is
docs/CONTRIBUTION_SPEC.md, and the bundled
capture server banks the rows on your own machine. If you don't run it,
nothing is captured. The engine is free because a corpus is only as good as the number of real
takeoffs that flow through it. The research program behind this, including the model work and
the evaluation method, is in the tour.
OpenTakeoff Academy scores agents on operating this engine
against geometry they don't control.
If OpenTakeoff saved you an afternoon, a ⭐ helps the next estimator find it.
I run estimating for a commercial flooring company, and the takeoff tool I bid with is one I wrote. OpenTakeoff is the open half of that work: a measuring engine for anyone, person or agent, who needs to read a building. The models trained on our own estimating archive stay ours, and the boundary is drawn in public so it can be held to account.
— Michael · Kentucky AI
Kentucky AI is a member of the NVIDIA Inception program.
Contact: for research collaborations, data questions, press, or anything that isn't a bug, write to [email protected]. Bugs and feature requests go in issues. Security reports follow SECURITY.md, through private vulnerability reporting.
Thanks to @knmurphy (Kevin Murphy) for the reference split-screen, the room-engine speedups, the sheet tree, image captures, drawing styles and sharper overlays. The Pin reference tool builds on his image-capture work. The roll-goods layout engine was contributed by Michael Hartman.
GNU Affero General Public License v3.0 (AGPL-3.0-only). You can use it,
fork it, ship it and build on it, as long as you share your changes when you run a
modified copy for others. Through commit 84c7f48e (tag apache-2.0-final) OpenTakeoff was
Apache-2.0, and that code stays Apache-2.0 for everyone who already has it. See NOTICE
for attribution, the relicensing note and the section 7(b) attribution term. Contributions are
accepted under the CLA. For commercial terms outside the AGPL, contact
Kentucky AI.
Privacy Policy · Terms of Service · Shared wiki for people and agents
© 2026 NVIDIA, the NVIDIA logo, and NVIDIA Inception are trademarks and/or registered trademarks of NVIDIA Corporation in the U.S. and other countries.
takeoff_summary · export_takeoff · export_report · export_marked_pdf · export_dxf · import_takeoff |