{"_id":"opentakeoff-mcp","_rev":"67-18b5fc02c760b53a820846132a83b536","name":"opentakeoff-mcp","dist-tags":{"latest":"0.9.90"},"versions":{"0.1.0":{"name":"opentakeoff-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.1.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"124bb87aeb98d07cd154a973fddc7252135b16c4","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.1.0.tgz","fileCount":4,"integrity":"sha512-a/uq/r934MjHIOL8ac4AOrUA0/1twi9Snos7rGxjBIBGbmfVd08dAcWHcFkXeLllkolL0xPEWILq1eg5+CJrPg==","signatures":[{"sig":"MEQCIAVS9Bvy9v/8E5o+r5XdILmI+6/Acka2Xo5R7O0NYl/pAiBHNvQhtFjaJW5jLuKe3W9VoTVoM/CpEsxVTtUrKl+lkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55198},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"9c22fcbd27da43b3c67a01b23fcb25fbacefdb75","scripts":{"dev":"node --import tsx server.ts","test":"node --import tsx --test test/*.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && cp bin.js dist/server.js && chmod +x dist/server.js","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.1.0_1783953714603_0.8478809600818209","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"opentakeoff-mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.1.1","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"52a1bf50686705407ed34f67bd18bb75d180c405","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.1.1.tgz","fileCount":4,"integrity":"sha512-AEVE+dxJn3/YS/7xo8QC8g5mC+m1r0eq3lp/OWXeTehd2rg3YL4I2tJjP7VayQW3TcRW7p9VFmWzKhBdhLH3rg==","signatures":[{"sig":"MEUCIQCKowV+G8UmtAqeZhf85EIyKn/ZqW6S0kfpYxCLpOStyAIgX6vasz8cakSGEo0Lokk4+4i5QPhFch+U9A6RPLbHNTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56500},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"scripts":{"dev":"node --import tsx server.ts","test":"node --import tsx --test test/*.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.1.1_1784075535894_0.9098331596964999","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"opentakeoff-mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.1.2","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"4bebac699098f161010218f39ac17b8f46e2bd2d","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.1.2.tgz","fileCount":4,"integrity":"sha512-oeVBFDq7bvY/XLgEYAdgKfTFCD+SAg9Pb+FNiJia+hDCEhu/j1dKN/pgCHDnVKkRZO0u2hJhrr/asmrBsaEI8Q==","signatures":[{"sig":"MEUCIERqs6vrEE7Z/6j2IBb1vu2tWJy8PmMX3WNscKvpxH1hAiEA3rh16H7Gu0s0XScM4tBJ7hgpxsNT3AWpYZ6/qcR2Id8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58010},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"3f94617a91a5582e3b673bb23b4f4457822b8fb5","mcpName":"io.github.kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","test":"node --import tsx --test test/*.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.1.2_1784261348359_0.3963257857769127","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"opentakeoff-mcp","version":"0.1.3","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.1.3","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"cae52e590e96a477f779bf35b3abff257a5d6003","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.1.3.tgz","fileCount":4,"integrity":"sha512-XNg/K3mdahaWvXG6tc2YSecHcTyqgxKoY7/5jfCOqPJHCsmq+B7h3SFPgd515qIKqAfZ7wq+TVFFNP/AV8KWwA==","signatures":[{"sig":"MEUCIQCpHoKN36JaJCgptaZxxZlNooGruQJ+SK6kybyG9CdmdgIgTd4kBPnADFnJmupHcIw3ZCY8ujrqjAtxxmGvuAsRNgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58010},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"d8767a05d02decbb229c0fde971466865faec45f","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","test":"node --import tsx --test test/*.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.1.3_1784266048773_0.7705599085223007","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"opentakeoff-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.2.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"e674236b99effbf61d4c356dcb05af9987d1a8d1","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.2.0.tgz","fileCount":4,"integrity":"sha512-+IrRqe0imeDWZs7pEqd9leQg0IydJczzqSF9IVuD9LYHhDKlYlw5F6ufG6LNt9fO7iAqGBqwYEl7BlZiYTR0Xg==","signatures":[{"sig":"MEYCIQDv7gNMaQ38qGCMPb7UW/8x2Alwe66SVLOVR0lqVxKSnAIhAOBBzW3bYTUoPCAyj4ZgDAbHaS7w4jWNUcIMwo8mD83L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67265},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"96f90299f5ea1c4887bdddd2904f3f56d9352826","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","test":"node --import tsx --test test/*.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.2.0_1784307539021_0.7182453063251089","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"opentakeoff-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.3.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2a156f45dfbfcfaff5f7353816e0a796e98a2e50","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.3.0.tgz","fileCount":4,"integrity":"sha512-AX61SuXgWgnVNiBNBpabRs6crhCQksXuWLt4EMpNj+0mGVZLE5vJ5Yyz8UdVm6GVBxYE0uzSITVyrLRCdEB0EA==","signatures":[{"sig":"MEUCIQCpEAq2lERm/7OjokRg96Xvs/sXhrERqHXsm7YeENJzIwIgHxKZTXCW4hkUcnjqR3RU6CV1NPgMsQ/Vhl/PNx0MhoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73913},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"fd774c919326da61d43596814080bfddf37fe31e","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.3.0_1784310974885_0.927143662071334","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"opentakeoff-mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.4.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"8bc68264cd2ad673b6461fadc7101ee6368fe2d8","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.4.0.tgz","fileCount":4,"integrity":"sha512-n8t2PzQN1iNMzyIpghQ2YudxofqCVwacvvOdLvGyqw4/saamGQLBwCSjCcGX5jK3DttzBYrhuesKiS6IDaf4EA==","signatures":[{"sig":"MEUCIQC0kaVD1d+/mCr663KXSg7YetSyi8lgQSlndgDfCEAsOgIgQK9Bq4nE3Aq0OX0fcpCDOPAa3lAdeQJlrcqav4F0EpM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74353},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.4.0_1784356275501_0.6244387045441155","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"opentakeoff-mcp","version":"0.5.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.5.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"24251ec9d7becf8829e9b701564d66d2897a7118","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.5.0.tgz","fileCount":4,"integrity":"sha512-LJ/Jytze3GoFXmfv8jNvKk+YBiiVQk/hJRPYAX9eHl9VjVkg6seNbSLKrn1AoKXaJVenAClJmI4dr51dHCHfhw==","signatures":[{"sig":"MEYCIQC+kU9HSvLRPX/ZL8DDe1uP2RomHiYE1BGVhRiQijutFgIhANtQA37oFeVbG3YZ62hcgahdSFelrqhhk2FcU6IyTTTz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80259},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.5.0_1784607605854_0.5492573278210613","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"opentakeoff-mcp","version":"0.6.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.6.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"a77d3a1920b28bc600f784e4495269f7ff670327","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.6.0.tgz","fileCount":4,"integrity":"sha512-VHe7D17KFUfxGddaQWMnsKRTQg//0GJmVNZ+I5Yu9qrDIffi2xxjDo9PFSZ7uWe83l4m7O4Gfs2MRe9ln9HiDw==","signatures":[{"sig":"MEQCIEKVX4G+69Y+hFMJZF520SZBpEJ1hBlr3GcG1LRVApPvAiA23FY0wiT4SWjCJTI3hnHM1Z5ExWaDWyXwUN7pVOkAjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90223},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"12a4fda5539dab03639794a6851201146b1b1d96","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"kentucky-ai","email":"michael@kentucky-ai.com"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.12.1","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.6.0_1784688132540_0.02155750185950578","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"opentakeoff-mcp","version":"0.6.1","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.6.1","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"53587117d66279ae2730d0ed58a30ef1a2b10be6","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.6.1.tgz","fileCount":4,"integrity":"sha512-pFvc041EQLctuV3hCmPUb/kPd9x/LoL2Agiatu8D9GYqVat+sEtfln6Z59lBORqwuJ020ZLzMASqFYa5t5A1kw==","signatures":[{"sig":"MEYCIQC5lXCrWDFs47QNnZRW1vgC6IMe6rwzpbF6VYOCEVDvRAIhAOg/hyFBNv7zQjM8yeFu25E8Fq4raW2e6zKLVcuRDGfw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94522},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"7a78ba5bf0c64938bf348a5fd583ae14b3b3aa57","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.24.2","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.6.1_1784734959377_0.8241099104563199","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"opentakeoff-mcp","version":"0.7.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.7.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2257bef18cc741eb2029f86c12936133c6bce410","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.7.0.tgz","fileCount":4,"integrity":"sha512-F/mCeZzM0BpCPW093N/RgYA5kwkeFS5ocoNIsrYv3JPTJOyX3zlOL4V4pse14wPQ2syHde4zUNBOp1588DT/YQ==","signatures":[{"sig":"MEQCIACmQ5TDgfoY57JUP4FMB5fyL/XETxod9pjjPMQWIDbFAiBkk/2SrCQKhKQ7TwLgDvrpibwFWndHfpF4Be2SLnwL8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121367},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"bc23619214063065563a21b06863e54320d4ce33","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.7.0_1784928953500_0.20103165069810425","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"opentakeoff-mcp","version":"0.8.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.8.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"9b5a92da340f0e007eeb8fd2c1ddbb17b4216420","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.8.0.tgz","fileCount":4,"integrity":"sha512-igWn8Oj2qYm82cbf1Cxm9rPoMsDinAyAjBXRH9ZM3z4RV4u/8V+hUUNQfJqWHQnRUWoessnBchdrAur14LKHuw==","signatures":[{"sig":"MEQCIBdPejwveIc5Pn+Vgy2aN0rK5NHvfI0veefAByIQvSgwAiBjdH2v4BL62E3jtbjvaivvvdgb4J68IbmD+Yqr/BnWXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":132177},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"84bfae6436de81aa3034aa2dd16d494fd62884b6","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.8.0_1784954744351_0.10443419217795702","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"opentakeoff-mcp","version":"0.9.0","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.0","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"e8a4deb4021008e5ddea57fca580563e2fbd935e","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.0.tgz","fileCount":4,"integrity":"sha512-4iusDOvR2BjFSwfrcU8I4AYYV33ig4HKpmFsmdZ5NaSHf8EX+J/Pag/mDQHNlxQe+bZvzgSanwzMqn4oHSpq2A==","signatures":[{"sig":"MEYCIQDqfo34BX73o87PPS94rDfEFY5Y29IWoiz2kjjoRt+ClAIhAPDBxxFXzOa8O2HBbqR/OIZD2dt/uFNMWaDbMrxCUW6f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142316},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"2989bad350545bb0de3e80c738e354b2907e43cf","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.0_1785022334548_0.30802357137744263","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"opentakeoff-mcp","version":"0.9.2","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.2","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"34d61873f0dedc75e7ae385db28cea5a24c6f3c0","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.2.tgz","fileCount":4,"integrity":"sha512-Hmf0kVdced1whQnMSlkXaFupB3063zUeLFAZU7yqaXnQ7UQ4GGjaMUgUk7LOjtV8VpYFgFuietcrCqeNR6jgEw==","signatures":[{"sig":"MEYCIQDKivqBi+QjgScKKDWJ1qZKZVbtpQ6CEjMhM4u9pWB0iAIhAKNF340jL1YU8L319Up04/Ugnw4UsImDG75r0mkF/0jG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142549},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"2356c23834955517240e0b863bbda7de9cb772f7","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.2_1785203880003_0.8430923188096484","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"opentakeoff-mcp","version":"0.9.3","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.3","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"8570aca1e99ecc9d60737e11123b5655d72c653f","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.3.tgz","fileCount":4,"integrity":"sha512-fBqORG58CegI6OX07OVqlLh/rfPk2pvlqFRBkPxwFR614JKOgPPMxi5pdgE2xfkV52evSluXT4Pum21R3PbKUQ==","signatures":[{"sig":"MEUCIGMLc111DzoHFtWGDcc/kKzyBMvbtntjsMM+qq9qrGdiAiEA6Gya5ysVNx69hyG1JbRFgoJ9yoddBxDMINPF/TT7zoA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":159734},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"f93916d21464c25086ffab18e83e3d4f2e88285f","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.3_1785289246779_0.08761268467773387","host":"s3://npm-registry-packages-npm-production"}},"0.9.7":{"name":"opentakeoff-mcp","version":"0.9.7","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.7","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"dacf0065630d6049560d2aba50d0c93a8eca0c78","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.7.tgz","fileCount":4,"integrity":"sha512-vvGMFry3LoBR66f10ABphw8Phhy/3gnJUibF6xbGlRdIOrwtEUMDDibLkOiZqgzWIqL55X85PvgeudDC4x9yUw==","signatures":[{"sig":"MEUCIQCyCoBEg5x3xT1co/4gZZykXUem7RZiZ4KsmbvMp9mC7AIgPwNiw5Kl7yjriCv5AEJVKUUtt4FrMcRhxF/7WQlySq0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191368},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"e5d3ee1454b2b7fa14f7856d256350bd7c95283c","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.7_1785369428039_0.1384723276595532","host":"s3://npm-registry-packages-npm-production"}},"0.9.8":{"name":"opentakeoff-mcp","version":"0.9.8","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.8","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"a659b06933412a08c8419667b2b059678587b491","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.8.tgz","fileCount":4,"integrity":"sha512-9iqSD/Aze7a5SnPR0gw0ODPNUycl/BpYN09IpZySx5FWCCpXotk7N6vcLup80QtH1JtINa8Arvg2gm1jWthFVw==","signatures":[{"sig":"MEYCIQDGup0BXysEbnIHtm61lQH8uiyJ0B+sT0ttKSWhen291AIhAL3CJ+gKMr8BLObdEBkC15gZWbfrgq3Kqo1lubsz2pS7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244710},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"8be0dde6ca7bd35b6c8c3252845ce19a302ec8f3","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.8_1785463980938_0.48383605439159827","host":"s3://npm-registry-packages-npm-production"}},"0.9.12":{"name":"opentakeoff-mcp","version":"0.9.12","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.12","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"fdb65aff7e828cf1864e45c9c776cc9112591be4","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.12.tgz","fileCount":4,"integrity":"sha512-mwCjnMGA+g+y1ytkdK/rXY211hfdwAPXuMBFV+ocMRsWerl5Ghuj4up5GsWVfsN21BqxuFuBAGekt5278RVnaQ==","signatures":[{"sig":"MEYCIQCFf/J+BOSnMJ6yD09VfAWiu0uoUrhJ7WMIMpc3EEkCVwIhAJSzi54iWSCzdoLYXa1+s4u/2UHPB3L4IYFcGlTNVoHH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":278655},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"278887c3a0749fcaf57c8f60550ced912567f3f5","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.12_1785467177811_0.8515169691955391","host":"s3://npm-registry-packages-npm-production"}},"0.9.17":{"name":"opentakeoff-mcp","version":"0.9.17","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.17","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"7926be217b03933efd3a162d7cb71b5f5c7b8b42","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.17.tgz","fileCount":4,"integrity":"sha512-IRJYHx+rZ63MuGnudSiOB151zPwRnDnjSQsKdJYHhUswM75suyq6/l65xE7l720g9OWAVhIVtnWre3DYvXX/1w==","signatures":[{"sig":"MEUCIQDsCF3MXgbujJy/XzqMaCNiGv/wCF+DtCDxRFJfIqXuBgIgU8omGM70rjAJEIvmWGdrn7m549G6cxsqI123zT8RZzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":303635},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"77de19079f2231a1b9e78a3b87e94b6c646814ac","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.17_1785470759289_0.5090399907885268","host":"s3://npm-registry-packages-npm-production"}},"0.9.18":{"name":"opentakeoff-mcp","version":"0.9.18","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.18","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"7b60dec93d860dc2d97e5abed150b33d37204f81","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.18.tgz","fileCount":4,"integrity":"sha512-SF0rvuzGsFZ+ySvtQRVHUh7PCBqj/x0aZCEthb74xfqcfQxwpUQ3303XzK59WDYf7JMmFtqsMbor7MS7aRaZCg==","signatures":[{"sig":"MEUCIH4PZ9mO3vyHhe35MwaHNdIoHrupmU4C17xCv7Jq0w/nAiEA4UF6J8DBeMpE7F+Y/4atO2vFw/k2m9yBiu5OIwdfoXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":303632},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"859a0e863f6cd15e9f22ab57cdbfc2de3a9696ca","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.18_1785561041749_0.608436008251934","host":"s3://npm-registry-packages-npm-production"}},"0.9.19":{"name":"opentakeoff-mcp","version":"0.9.19","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.19","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"58f1a5950fc72352c6400b737afaaaf7d693a119","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.19.tgz","fileCount":4,"integrity":"sha512-5S3VOregFh7+M+zf88+/Onj3LhbF5HYKryb1cqjs67Svbu0v1OelxHgj3y25HsL7thjh006mrUNe2oyIbNbLLg==","signatures":[{"sig":"MEYCIQDfnW/R8qg9Tf+DRTyGA+ZZA4iyreih7BT0+PmR8jdFAAIhAM2s8LWvVkqhujRjW7lyFxPQf/cyyVifbRAnKzlgbap0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":313133},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"476f7a40cad6026835fb82a0f07068edf50c9a3d","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.19_1785561865456_0.9259466737931272","host":"s3://npm-registry-packages-npm-production"}},"0.9.20":{"name":"opentakeoff-mcp","version":"0.9.20","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.20","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2474b53f75876b5e1420a3054b1e84ef2900915e","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.20.tgz","fileCount":4,"integrity":"sha512-FC+oxzVnq1aJmMfVvQ7EgX91OuDwAifZIsAvNPSamZsDs5VsChI4rQc3d7+Wv4bu3C82P9zNH1jYfQnOm9R7FQ==","signatures":[{"sig":"MEUCIQCejsMvCgYivk/PXs7CUljXQaWwPyFH8vRusPHLaNXlPQIgH7AXw32ljnYDVxc9Fwy2YLOq/+3PJIbSpU0wSEzOs2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":337837},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"08b706ac583b7e6d3b720f21f4806e6b3c1153f7","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.20_1785648275579_0.18158246385944588","host":"s3://npm-registry-packages-npm-production"}},"0.9.21":{"name":"opentakeoff-mcp","version":"0.9.21","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.21","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"4df7c95b7e9aa022649f10399f793548fd0503b9","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.21.tgz","fileCount":4,"integrity":"sha512-MfN+mDIqW/Z5DheD6Cw9P5+ZmHgM7CZ2bWpXLlwzJ5tFbB31mMaL+v6FbfEk31/gCSMOocLD0KTEKZEg44wxWw==","signatures":[{"sig":"MEQCIF8JTpSf0UJtr6ZY2pFArFCKYJIF4lyNlluxPCzOURP/AiBtaDZrsDmx4WfvBTrCsmkGMQI2w695EwSP10UC7buMGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":347950},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"160400b9bfea42b48df96c4d5b9163ccacf78efd","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.21_1785648281453_0.23027575660122324","host":"s3://npm-registry-packages-npm-production"}},"0.9.25":{"name":"opentakeoff-mcp","version":"0.9.25","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.25","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"8a8388936867ad48254ea6096b0cabf164e772f5","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.25.tgz","fileCount":4,"integrity":"sha512-+4HyWwt9r3yWHxPJ4X7UGLaGavbHLXscMv+ESyPpiLJxlx8yu7SsYgvzTtSyv1BPHoXQEGdaw0Hu4DeNqd92wg==","signatures":[{"sig":"MEUCIQCjkPfUDpc7qJbHzETAjahtmZ5SWIVey604NM+5uRcfyAIgfDl5CWegFSeLad1lLFotGhNfdy3ZlXjDpxS9aOX38do=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":429873},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"1053f0060a36e04f49b83114d15dea318f15f653","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.25_1785672711757_0.8842238268924496","host":"s3://npm-registry-packages-npm-production"}},"0.9.26":{"name":"opentakeoff-mcp","version":"0.9.26","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.26","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"07dc7b5f345a4026df5cc51f8262a67bb91b026b","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.26.tgz","fileCount":4,"integrity":"sha512-QZhnA+vmDb6hxsCPa8vhMu6EZYbFF2Okm5SX0LXUsLXo8xVGx85TlyAwA+GDkbc5YXP3FlygMqjn6heO2DxZaw==","signatures":[{"sig":"MEQCIAhEBLPnyNkCDv5DHF4LqlWdMYdQRyKqEKgsL1TZ/ejYAiB2AeAcWMy+zEsuVkpslngf09odLs5p8cbrl8Ehx9aUkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":460936},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"c1dd30456928460daa7cf7c41b7d617286d3820e","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.26_1785676865323_0.3202696972726826","host":"s3://npm-registry-packages-npm-production"}},"0.9.27":{"name":"opentakeoff-mcp","version":"0.9.27","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.27","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"1be9197c318d93c77ba3e5cc025a9ae4905e8aed","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.27.tgz","fileCount":4,"integrity":"sha512-FNg4OsMt0jRN2dTdCue1N3JXfjqqF01hy5pfh/a1RHh7hUGGuzxphbzX15N7pjMwvxOr2j1sRsm5Bhn8t8Bc9Q==","signatures":[{"sig":"MEYCIQDmS22pgtp/nmYPNlqrzXXASjDCp/Qqo5cc4/B1nOhbIQIhAILrFWCQXQ+3ur5wgxY6oV0qy0ifTiQwNaPcgXlBFsF+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":471766},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"126ca36bc3104354cfc84353613614b77b81b5dc","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.27_1785691901783_0.26946193456485856","host":"s3://npm-registry-packages-npm-production"}},"0.9.29":{"name":"opentakeoff-mcp","version":"0.9.29","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.29","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"24fbcfe0e8304db9ac639349b97585b5a59fdbaf","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.29.tgz","fileCount":4,"integrity":"sha512-EV/KP4PSu5+cRlcBGWgM9cflMzhDIDckqe2VhT8M6ROU79hl5l6dELJAyUh1TxCoVYEELchcyIcvdYb8/DInDQ==","signatures":[{"sig":"MEUCIQC1ITcNU5H4pFjOiDoGkC/3YQPUz0ea3MjWrOUj9lEjJgIgY7HngSeY3ASxt+E+qpuQs+uVx1AAqajIZYDarHYCIi8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":480063},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"f649b1fbd581adb3b45ca700ca25479904193e86","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.29_1785718590081_0.6241967637484593","host":"s3://npm-registry-packages-npm-production"}},"0.9.30":{"name":"opentakeoff-mcp","version":"0.9.30","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.30","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"efa63a90ee35fd1aeeef6f4bea944a1113b7fed2","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.30.tgz","fileCount":4,"integrity":"sha512-B2uhdHvWUEphdyQdT3M+7+qoCzIpYsv6XWMylhSKaEj5xSMXQLDC0fuXYGCKgwTxzZAsKYPOCwl1IMJGD51XUg==","signatures":[{"sig":"MEUCIAumWhOJY2uSFr65Ij6xkZ2IjR6vPiC3zf6SzPalOWILAiEAjQ0y10DCkbrm1Kk4g6cbQyYqXqw5Ld8/s/rHHQPhU3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":496070},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"7b5b0fb9023e09c585ca62c45f1c84affe89f756","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.30_1785722307249_0.41467200022496953","host":"s3://npm-registry-packages-npm-production"}},"0.9.31":{"name":"opentakeoff-mcp","version":"0.9.31","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.31","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"43572ca3d225c14e4f8a43399b0597bd0e22aa69","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.31.tgz","fileCount":4,"integrity":"sha512-TsEGWInZNgN5ThJUZlytJxwVOInT2yMbXgXyFq1p8cCLnir/A4aSM1pvD/H2aO/gdzmuSw1mDBGJxg5VVbJDTg==","signatures":[{"sig":"MEQCIEEJd0gdKifrxZePKSd7cw5WV4VC5EzJvZTz6pNbwiLPAiBktEtqdDaEY27b1ObxeP2NS+mBl0/s07i0qUcQhWqPUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":496070},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"303ae5a59acbaf2ece3de553cd9dcc9938ee31c2","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.31_1785724595039_0.49931122334350775","host":"s3://npm-registry-packages-npm-production"}},"0.9.32":{"name":"opentakeoff-mcp","version":"0.9.32","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.32","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"5df707e6f5aeacab83c75103dd1ad01b53c6b329","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.32.tgz","fileCount":4,"integrity":"sha512-B7x/GhrXTIqcJtogOx+xS2IjdCluC57aKAx5giQvu/uWkTHZ14u325d+kPMOpY40oyYrMJvhGOasFfVD8dbP7w==","signatures":[{"sig":"MEQCIE/PV6XGPwELaYphPd9RB543fr5uceSvt1bqt3KUFz4QAiB9+S7/oA+wpWh4nlQXThykvLxZ4SC9unWqkj+bMwRXyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":513353},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"98d04cf3ac2493e2f2d2a97ae5a8ee5ebef5966e","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.32_1785814479307_0.568650436371732","host":"s3://npm-registry-packages-npm-production"}},"0.9.33":{"name":"opentakeoff-mcp","version":"0.9.33","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.33","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"6f7b49230e19a6fbfa948bf3b7b8b90d6e724c0e","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.33.tgz","fileCount":4,"integrity":"sha512-hBKSRF0P7+1u+rJuxRP6T0YqgkdTHWnaUO8hy7Xdz/nm5FBZt9lIxAMpUt/qjUmHbudvLrmkEckqGPmx5qThXg==","signatures":[{"sig":"MEYCIQDa8MClePBYPiOtVtqYv2/46vPA2LsFIE4H/gyJh1tuCQIhALXPx7LeY54OALltpGnG2udjcATTGZcQfKv25o3Nthuu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":519360},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"3bea70c0eceb5a6504baf8e8b46db1b785a708c3","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.33_1785816209340_0.6587853993083266","host":"s3://npm-registry-packages-npm-production"}},"0.9.35":{"name":"opentakeoff-mcp","version":"0.9.35","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.35","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2632e9860ce68382acf24586341a0cc68d8b92a3","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.35.tgz","fileCount":4,"integrity":"sha512-soHCNXqs3BK0pbn3M2F8v2QChOeM/80SDPdVmUP3nT2cGqxTr8u5OrWl3b3544OAEIr097bXEuMOrVFL3sRGrw==","signatures":[{"sig":"MEYCIQD5Bmrqre4da/0501C7mKcZyea3GMhtWWSgNwa3MthFwgIhANj0xjJXBscjNnVCF1Wtv2t+h/3/9t5r8zk6WlW9KGyK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":522736},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"45e60671b9ec08466e2ea0f3713032a5cf3ebe60","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.35_1785945890616_0.018888060679557395","host":"s3://npm-registry-packages-npm-production"}},"0.9.36":{"name":"opentakeoff-mcp","version":"0.9.36","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.36","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"cb5d0a007bc288d75ee53c5e26e4547ea8e8fd7a","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.36.tgz","fileCount":4,"integrity":"sha512-pmjPlkQPKIyLS3YLG1BT0vlbTAxEGC/Mox0n8xrUn9o2yVAHnh7JmrZR/9Tbi2Mroleu547FDm1dNJF/0zN0eQ==","signatures":[{"sig":"MEUCIQCfDLSvNEOUYm5cXelNKXAWUh0ZMc5SSQq4h7Cx3EX5wQIgBlHtBXSDoXAmASphypr/b3iJWzXf0Gq3FkO/IcERxFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":523866},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"3965197ccf298bd8ea73a557c55bacf8789f9307","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.36_1785948871367_0.4232168647775574","host":"s3://npm-registry-packages-npm-production"}},"0.9.38":{"name":"opentakeoff-mcp","version":"0.9.38","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.38","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"c8c8d285b2abf464eedfab7b17c103d760102afd","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.38.tgz","fileCount":4,"integrity":"sha512-hbjTqCKqIlY4pz8Jm5YyGfRfrbsOYEPR0ohwBFJqe3FKsV27xvmWM0kT9diyG3gPak4McGffP5WkkFOhqYPgww==","signatures":[{"sig":"MEQCIC43S5ZO41rF1+eA9pkvjAjux4wRyl0yp89kSpz7o344AiBNtZI/tmZISpYPKZwz4S61ka+/U4V9CdzayNAI/YJbfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":553437},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"7caddc6419291fc9cab9a4719559c07596b49a10","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.38_1785974837206_0.947960938589643","host":"s3://npm-registry-packages-npm-production"}},"0.9.39":{"name":"opentakeoff-mcp","version":"0.9.39","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.39","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"e6d92e6f102ecacaf2a56b1e14ef86fac5ef78d3","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.39.tgz","fileCount":4,"integrity":"sha512-naSboSMPpylEgVymcpgF637wQwBjkHfQNndXtFDoPJKWiAu/LX7ZPiMwrF0BRl4bDFIoSJjRKPpGhPGpGMwC8Q==","signatures":[{"sig":"MEUCIQDPGLoFtoo/cFp1kZBjS8vXVAymMqTdZRXWMzF3uZ7uigIgRiFj5yhctNrxZOHxhTEEBxnpMtX2zztYKiwP3X04g2A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":555589},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"3d0cc04a6139f72951092a6122c53c46b9e0293a","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.39_1786486876402_0.7308700894949358","host":"s3://npm-registry-packages-npm-production"}},"0.9.40":{"name":"opentakeoff-mcp","version":"0.9.40","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.40","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"c1c294ad0ec62cc3a58c3355c91db50b2aba8843","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.40.tgz","fileCount":4,"integrity":"sha512-jjius6ogavTi4JzTu54U5lMoFa0NFSVqeyTSn3PcWrla+4wXKAlhXO1Z6hBeWPfyPpBA6LARn3v/jNPdRs/Wvg==","signatures":[{"sig":"MEYCIQDNSUuWriR5IZWbwbPaH2hlvSXP7TB8PN5owrczNotBrwIhAOPM11Zo+k/Exp9mk6QnSIfBTCP6SjsS32y3pC5b/6+k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":566598},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"dc5cbf1df047f484b50432d3ccc2f87691be3a76","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.16.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.40_1786676178449_0.8468194106529299","host":"s3://npm-registry-packages-npm-production"}},"0.9.41":{"name":"opentakeoff-mcp","version":"0.9.41","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.41","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"34d14c7d1614b11dd7728146334d1e6d82a842f2","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.41.tgz","fileCount":4,"integrity":"sha512-JFrRLzvl+8t1zayDRhSTzGNa5LHiwKRnCAtfOHewOoB+Kjz7OrMQkTbL7F+2RMW418rVmSCagBnqHw2o/epEpg==","signatures":[{"sig":"MEQCIFUgsKsTnSRIa4Vq2jxgX8lQ/7tnO98eCnpJHxI6b0FkAiAoLhwbGQqfVs/bSywkKMsshYPgFO6EHt1zIN77evYtJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567543},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"9ab205ba5a0d483f6db961f16ad1674027e81262","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.41_1786715246872_0.12353518736309521","host":"s3://npm-registry-packages-npm-production"}},"0.9.42":{"name":"opentakeoff-mcp","version":"0.9.42","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.42","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"fbf9fdac61e7c30c22211e1e47c90973d11d1c74","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.42.tgz","fileCount":4,"integrity":"sha512-+lHEs+NvJmrBQMKfind1354Byj1cnFU3QILjYFwQU+XdvNESTRfrHZgdnA8r7daJy0C2xW5Ltf5Pmv+uvCAyyQ==","signatures":[{"sig":"MEYCIQDX5c2rjzK5w18ZMKnpFG8FvNPH/M9kF7HCtctLU26mhQIhAKLIyp1ZDGLK+gyg2kEmEbHwAeQFJ1dQiwwEyDCyj71s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567936},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"90c6717b50b83690e65b440c983c20ec3e98a6ac","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.42_1786716043805_0.614831251733261","host":"s3://npm-registry-packages-npm-production"}},"0.9.43":{"name":"opentakeoff-mcp","version":"0.9.43","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.43","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"659ec43a149e272764039a462fcbb1848eaac58c","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.43.tgz","fileCount":4,"integrity":"sha512-LyD/oQaBMTUr2OJkMjLIp6nHKdCGHopdEWZCdmVxKPxSR8QiX9xUcFSzbF9jyCg74lvoQJrvg5h0WZKeTQaoDw==","signatures":[{"sig":"MEUCIHKd/fMD0V8qD4Bs62H8StVasf90ffEPR5LOmxvMmf60AiEAzrwusRHIidZAHDNNZNUShN8k7wyBV5FL8xsun6hLmXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.43","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":569167},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"7804c08b7d716114b6a1a05a583fe36d6f416eae","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.43_1786845267188_0.25746735965263134","host":"s3://npm-registry-packages-npm-production"}},"0.9.44":{"name":"opentakeoff-mcp","version":"0.9.44","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.44","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"63ee8b35bdcbc80793604b766cae0b3fd2b644dd","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.44.tgz","fileCount":4,"integrity":"sha512-U+pgfVknVLeYjt6MZoxdzjGncu1xwKFCp4Oi3KzpG+jerO5StjGN0vHbcTgSjcnNK80nfhzO03QgVO05z+7EBA==","signatures":[{"sig":"MEUCIEVQQR0ccKKL85nWgYL0fzYtoCLQiY3qF0Aw0mXDTPvQAiEA++2V1z7Q8S4XbuH+is3YXpVnl0Xv/xkbH2zKIm1k41I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.44","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":580640},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"56f3cca8a8e2c5fb9c532c036485a07d0ba5c933","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.44_1786853160623_0.8488225081080851","host":"s3://npm-registry-packages-npm-production"}},"0.9.45":{"name":"opentakeoff-mcp","version":"0.9.45","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.45","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"365760f07d760a8aa899d6228752eecc35560cce","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.45.tgz","fileCount":4,"integrity":"sha512-PwuE1AZb8E6EmMMGcIIgDKxutOVjB6ybjqij+/LcVaYb0CvT2QB6DE4y8A2MAOR/pRUDMKhztIA7z1wHwnABgw==","signatures":[{"sig":"MEUCIQCodFv8sVE9tkSXAoArlSin7p8Efrau1VetZ4c/lBF4VQIgagrIvVXUFkzikGA+iUiBSe7CMxODi1NI0Su53LMs5qE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.45","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":583953},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"dc5b3183d4069225b539fe6cd6726dcb5d59d1b1","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.45_1786889892559_0.37820945921441296","host":"s3://npm-registry-packages-npm-production"}},"0.9.46":{"name":"opentakeoff-mcp","version":"0.9.46","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.46","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"4a40c0d34d8098aa7f1b96fbaacd628e180900dc","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.46.tgz","fileCount":4,"integrity":"sha512-ONe87BqzapREtvZOzmhoCL6jG3zvvfMcWvbPhkvmUxJn8Ox8gmCbNAotMKTMd4h2x2qzYxpvkAE3pmqAo2+g6Q==","signatures":[{"sig":"MEQCIG7OGQjfHN61nZ3mBczaZmA5blbkPhD6DfJ5PvUY+drAAiB3e/w1PtCR3cp7RSsZBN4GzIjGu5XRSlSkipTL71hPmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.46","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":593147},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"a93cb928f777b629ed6f17bd03c14dd28f734ca5","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.46_1786895286755_0.04900026546344871","host":"s3://npm-registry-packages-npm-production"}},"0.9.47":{"name":"opentakeoff-mcp","version":"0.9.47","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.47","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"0cf262088d183cc6b1bbf1e01d84d65fe1ef206d","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.47.tgz","fileCount":4,"integrity":"sha512-zvIyBuG//BHx15jC63MqSW6fWMZXrZsuzWAOT0MNllhQ7BM7HklPR+RhsqE9CgZM7mBY6wnU9xuy71+qmK4gsA==","signatures":[{"sig":"MEYCIQCVfo+/wmT2zc1ywFzfULEUkJiXHzzWm4J42rLiOCiKMwIhAKZNQmzLvcHmzfdTsvhmlTv8qcbWHruGP4e8egkWAwPe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.47","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":594201},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"980ba3397891e577a2d014335c191474ab262c83","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.47_1786903625991_0.4285010068493984","host":"s3://npm-registry-packages-npm-production"}},"0.9.48":{"name":"opentakeoff-mcp","version":"0.9.48","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.48","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2945a6a738b1c872bd3eeb01701c3cf2badd0939","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.48.tgz","fileCount":4,"integrity":"sha512-94T/Fo53ekaBzy1ZMW+ZIHjI7XHuEn2uF5WoxVWIsa9oJYhoFPYswZ5aM6Hamuc00tX7GXSUL6nkMbBMMKaAlg==","signatures":[{"sig":"MEUCIHGaZllhKTs6ltObYvKbdZm1F9dQx4I87dGNFZthgU+cAiEAq71AN9F55vn05YdcL1lDSQl0yEMQxtIMBqUn9gLZW3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.48","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":594828},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"39ab6d95083e8547ed7bfa34683d47ebd9718c93","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.48_1786903917204_0.706434243029298","host":"s3://npm-registry-packages-npm-production"}},"0.9.49":{"name":"opentakeoff-mcp","version":"0.9.49","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.49","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"6830d6f5729b9dbc8e8fbec807665a806000b9dc","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.49.tgz","fileCount":4,"integrity":"sha512-OHuzcOxwiP1JUDHu0z4ZlqpNCDqh9vV+n0bOdG0aYT0jFl96PCoIXkPLMZQ8vdl5EvJpqjHfBlt+xkU6Z8a6jA==","signatures":[{"sig":"MEUCIC/DkZI9N30yr4llWpSGCRbYt44YrraZ9YDnAdF3l4h9AiEAnJa2RjqaRMNET5fKvFxnwrYLJHpoKkVMhpOXx0ST6a0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.49","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":594828},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"0a6afbbc728dd127da0e9e4d5c4382361ba4ce61","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.49_1786911354986_0.9745249990287876","host":"s3://npm-registry-packages-npm-production"}},"0.9.56":{"name":"opentakeoff-mcp","version":"0.9.56","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.56","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"03675dc5a026282a8579d4893eb303c942c5f83c","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.56.tgz","fileCount":4,"integrity":"sha512-wsHRHK+jllVpHMZbxNV6QR2/sOSzTbUmmyyGGzDJqo6X+f+9Kx+6ozTfGzRhFkm0AivNWlxOyZszxoDsKbDTRw==","signatures":[{"sig":"MEUCIFGu4GC6KEYEDDYNlJ9xQ8yntdWLYghXvv1EPMe/fM8FAiEAh5G06W/5e1HQc67c+nUqGlkiN2+5RwkIUxH5nCCHQJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.56","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":627254},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"84869f0b1711b8b97225aafbc8e5f356dab47c7d","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.56_1787259494449_0.016108527211050605","host":"s3://npm-registry-packages-npm-production"}},"0.9.59":{"name":"opentakeoff-mcp","version":"0.9.59","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.59","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"515611b9853f82415e7a6689e857afca52bafacf","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.59.tgz","fileCount":4,"integrity":"sha512-or3N66Y4HIbJXY2OInqj0XfMFLMPvYdDvzzJDZPjQ+l5jd3wxJUFqEu0igYuQuosbvdrBliu3ReTu+4MBpmEqg==","signatures":[{"sig":"MEUCIQC+Mna6+7Gt5JPh+rVKXB7RbUWJlH27mTds4g4lyigreAIgVbbl9sm5hCExVgfWpIlbB7RsGDXQrhYluzquZA7TmP4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.59","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":640955},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"af4ec22c96327ec1b0d8aa8193ac3320c5ca42ba","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.59_1787290434053_0.606424708815932","host":"s3://npm-registry-packages-npm-production"}},"0.9.60":{"name":"opentakeoff-mcp","version":"0.9.60","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.60","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"aa2155ad83d64d55f4e9371ee1036a2097455797","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.60.tgz","fileCount":4,"integrity":"sha512-WKqC3tFvPrF/Vr3VVahRqJe3CHfE9kn1WnqAihfLA+79lDTlKplbYKxvHZrEUbRHUU1buF/GdnKnpahwU7mbvQ==","signatures":[{"sig":"MEUCIQDF61Ha3CMgDocWiiyePeTkWsrVLkMJDlSW6MZdUYaSKQIgUzis/XRBsxPwm1xd3JILnCawqk18K2ceFFoJmfHEDzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.60","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":641348},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"949a7210b532a421f18af89c60bfd26ca4d70584","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.60_1787326276937_0.16524834017544587","host":"s3://npm-registry-packages-npm-production"}},"0.9.61":{"name":"opentakeoff-mcp","version":"0.9.61","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.61","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"1bd75c1534990fcb03a4b13a6868112a684e4fe9","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.61.tgz","fileCount":4,"integrity":"sha512-06zhfpXkkkjRepOJ6SDxqb6xV2V2LyRc5LGW9czqS2nR5oZwlKuCHG8QjJqqsqxT4BSn7d2RcUtviHVywQcW2A==","signatures":[{"sig":"MEUCIDeh0qxs1cCwobV1+ds98AxL63UM0QHdxpTufpFuc6cZAiEA/hq0w1sF7HoJbDq++JX1VqDD6+4FTsoTdijiilvd0dY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.61","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":651077},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"f4300df6545e5b8677824fb77849a2b52b237def","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.61_1787328557469_0.6986673333324285","host":"s3://npm-registry-packages-npm-production"}},"0.9.62":{"name":"opentakeoff-mcp","version":"0.9.62","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.62","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"dac9c249c4c82fea974a21135f5a9483fd365f8f","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.62.tgz","fileCount":4,"integrity":"sha512-qo2YtDA3rEahQGB0ClrMvYnmkqj1t0qkDLSxjHgpp50lI6cc95F9NAtJr2KWbOPtLCorVKqZi05mH6DfvHkEqQ==","signatures":[{"sig":"MEQCIBRmMaTpGTvuYmyJv1Hum43t0wZJ3I83C5rmp0IlKbbrAiBZ1qDBDYOeA6039nFLr33XXuthos3O/rALnEaXvJcgjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.62","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":656227},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"b99a69d15b6a204ba6abb06ef21b0e62af7d6086","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.62_1787330020523_0.3625978759371289","host":"s3://npm-registry-packages-npm-production"}},"0.9.63":{"name":"opentakeoff-mcp","version":"0.9.63","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.63","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"8749d00b3dc7f9629c3ad6522f9dc8eba9bb2dd8","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.63.tgz","fileCount":4,"integrity":"sha512-67S8cduICkcuJpw0nTcf46zzue5ahzN3jG9S+04inDO8uBGQtgVaGqoCB2ai7oCjNYfCT2FjWUkMsFffgWE2/Q==","signatures":[{"sig":"MEQCIB4ncMfpbKaG70NDMQU2lZbKWGcPrwnO8VUtci4NlRhVAiATjs8IuU7ARXiF7z2vZNdJYOq7Cj17oyCSycoAUqyI7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.63","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":658445},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"29a658d380ad949f9bda0fbaf72838f86ed49b17","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.63_1787369856362_0.9412300350671685","host":"s3://npm-registry-packages-npm-production"}},"0.9.65":{"name":"opentakeoff-mcp","version":"0.9.65","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.65","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"570515f1aa252e06baf04f9c81091ed598cbebb7","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.65.tgz","fileCount":4,"integrity":"sha512-NZcFnAUIFMcq4XdofBlfvxNcpWdrFViyc5ozGD0DKsADAQmQbdy5iax7cb09q7wg7UXnlVwLL9V2QH66afAjeQ==","signatures":[{"sig":"MEUCIDelZtBuNIFcF4uVOS7LVeWjtBDx4fajPlCSDTa8RRowAiEAvzWRDuCpbZ560A/AgKKF7klRpJDtoMDWzxj0nSYy9hI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.65","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":697350},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"5cbf598bfbd88a0a66e603135a0669702dbdb37f","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.65_1787621121106_0.2205727834123028","host":"s3://npm-registry-packages-npm-production"}},"0.9.68":{"name":"opentakeoff-mcp","version":"0.9.68","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.68","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"c9dbca4107382c345183b4dc450115c42536a5ea","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.68.tgz","fileCount":4,"integrity":"sha512-Ivr1pP89aPPPNo0GxctM3uYN3FJeSGYGGYPajyQLxBfftd1CouoQUNmVqaX2d8GZndA9X5G31T7zQyJiTi+yAA==","signatures":[{"sig":"MEUCIQDgrbjZ0L+XBhWrElTMssD17Tz7DA+sYIYEu/t1/j3KrgIgWaG7BLUjuAe/2sCl3bJ9kyxhKSjcH0978tYBJ25J9jg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.68","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":744528},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"d5b9ba5b766911143a35fa36926a6ca3bfba794b","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.68_1788362311460_0.6270444677845888","host":"s3://npm-registry-packages-npm-production"}},"0.9.71":{"name":"opentakeoff-mcp","version":"0.9.71","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.71","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2a696d3286742001fcd64ce33c3b84d92f461cbb","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.71.tgz","fileCount":4,"integrity":"sha512-1fhLlv4WlbBjPIdOqx++cJTCwmHaRHJCqSTljEMX4wboSbepj3obrE4S64yN+Yl4yuZ6xAIVQkQwQwNH94TGMw==","signatures":[{"sig":"MEQCIChEvg17g8Ie98URsVbqeTAsRyRmuHS/bgP+nxBD6GR+AiAuBjJvAouKNLixGMVn31xWVDNnpPDkjzBgI9zZMM8GZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.71","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":750935},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"173f881b7559e7b9294b854979ac4115b6b097fd","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.17.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.71_1788397905219_0.2964229259058244","host":"s3://npm-registry-packages-npm-production"}},"0.9.73":{"name":"opentakeoff-mcp","version":"0.9.73","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.73","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"b3512342b9cd96be4bd296e114a1b039eb6f0bed","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.73.tgz","fileCount":4,"integrity":"sha512-R+dF39Sp/eVuJ7HWt1qfJ45BxUpMm0ho09L1N7MFrj+J4DZO0o+AbuZB1UVggx+wFvgXlSb12NqdHaYukdAM9g==","signatures":[{"sig":"MEUCIQC1BCfNgM7QIMewxqSOe0Sux6C+c6vnqP/H9Mh0vLuQQAIgbwnU8atYKzf4jnF0U5PwdjLzufUVmkkznKVvJ5JsAI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAUWm5tuWgitt+xllZ7BpgZRUrK7kIFCpYmyiYsplIV4AiBifMfEP8kySbsoXMI8aI0E8f2YfBKAl/nv3AK/ujtzBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.73","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":761149},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"b79410d14cf87228751259680a9e5dfe6de9ffa9","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.73_1788585287915_0.024267807836922062","host":"s3://npm-registry-packages-npm-production"}},"0.9.75":{"name":"opentakeoff-mcp","version":"0.9.75","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.75","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"54511f21c14ab7f043206eaa0ea0f7ae159db124","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.75.tgz","fileCount":4,"integrity":"sha512-ckFyvgZBHI2yzKDj2Gf0Cyg+EkjkO5s7U6Y52Wv3a6uebbyIlZ5Aon3UO50B5/zK51c6IKoLRGAyR3y2tlPXjg==","signatures":[{"sig":"MEYCIQDsiiVsSrTfEoK6NMrDt1c8kxYqVgVPzhxhudMRLlVSuAIhAIbYhmWy1FnotVG62cUfjfUPIlapPtlNsNz5K4aaja3N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFKBql8WF9SKZi49s2kbZRDzFjBhk0h9IxOH26bHhUpGAiBxd0YQdmMx3Csm9HDda7KvRFhpyp4P4+rqjm1pYt5zCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.75","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":818413},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"c23a24f4334ad4110b966d4c3f0dfe6a702ea70c","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/scope.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.75_1788617555729_0.6902252713925807","host":"s3://npm-registry-packages-npm-production"}},"0.9.76":{"name":"opentakeoff-mcp","version":"0.9.76","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.76","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"12000329386419f8f349e9efb97b2791e2014676","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.76.tgz","fileCount":4,"integrity":"sha512-RjiBW9aGZ551ha52lnC1EmzVO0GRga0HlTJ2R6PqHXANOi8DhOreHVbuaVY6TfuT4x0+Ra7nCxesocO7lcpRzg==","signatures":[{"sig":"MEUCIE7vBFNtOsF74Ld8fd44KRM/EjqbyHgmhh6uwONwj4tHAiEAhS1+jHzTP20mgZnJvhlRJ4IihDbDIX8EKKUmyNBm5lw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCi52mq1A6BJ/nZzcjkZSTcrMXunGBPY0gr9gWSL3hzqQIgc7iHGmxFl8Cnl+KYeTkczEzYh0kPJJokeQ3qCaB3bLw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.76","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":820002},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"178e18852f1a222c662771ae6cd20b983179f5a9","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/labels.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/scope.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/session.test.ts test/staging.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.76_1788623021351_0.2156489894579554","host":"s3://npm-registry-packages-npm-production"}},"0.9.77":{"name":"opentakeoff-mcp","version":"0.9.77","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.77","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"17e82b34647eaec63a37286ce5aa50003612883f","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.77.tgz","fileCount":4,"integrity":"sha512-YqElqrnaZHReSkt5t/DoLS++NEKlZleSh3RaWKJ4lmTy7BXDy5fi26hNdIwu1cnzDMLDDkSFX1+OggVSReRZbQ==","signatures":[{"sig":"MEQCIBuYkEE+OY/vSLhfu1KN/HVLRFP0pm1frmmJvk/FTXozAiAND7OBAzXWDt7ChOYUHfZ6M1ytPUhqpW/C0pW7ItCwvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCubYXO4r1pp+wrL58J+3YvnDHC0TnpDraNbfLvyXCAwgIgNUwv+3zXc68KYWjPzZcV1oSEiWiTQ+sJCOUyJ1Ov7OY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.77","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":833125},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"37b7f1cbcb229476a9c50c5e1cbd927af5eb589f","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts","build":"esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.77_1788648493196_0.7036115307838757","host":"s3://npm-registry-packages-npm-production"}},"0.9.80":{"name":"opentakeoff-mcp","version":"0.9.80","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.80","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"2a4859099ac03ddae48248479dfea4cb748a6472","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.80.tgz","fileCount":4,"integrity":"sha512-fyuz8td/pboRBM1wdqybXe+B3Dwip9HIEEG8t2mmLCM75/GDknt1Ef3cPluxM5FR3ixouXBZ35RiJPPxLlQEvA==","signatures":[{"sig":"MEYCIQDGICeEtIiodTuB3fG3Wvskp0oz/SZWkQ4vTmYoRWkEOwIhAKx7Sa4gtdOOsL/6un+Ci5g7ZELOdlTsBqC4bSlWIUZR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFJWRtM3O02bl8/+4EoEmwjI17ZOPBUXeGyNbNAwrMIsAiAmfHlrumapKruyxK95SJcLqJhwLge/l4N/JYUs7wQ9AA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.80","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":878119},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"9367cc87794cbacd4b706e9434059736c7eb81a5","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.80_1789131093780_0.1216271492923704","host":"s3://npm-registry-packages-npm-production"}},"0.9.81":{"name":"opentakeoff-mcp","version":"0.9.81","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.81","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"c851784e0c23f6b53c2a282c08c72a75fafc246a","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.81.tgz","fileCount":4,"integrity":"sha512-Cj8NGDoDE3bclyH/UHv/MxTjXnWjYwKehmtumr7dZSy8T7pObwS3hPqXlV2LBEBG23IN5sBKz1ts4DKJtJCIEQ==","signatures":[{"sig":"MEUCIQD5qbg9N5T4J7rjhZ6+eKhYz7RPoPMnvyC2NNjS2e5FCgIgfboa2XHNwn66tTvGeMioUunzhqDXvDXEzh5aWaGeVpI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCbeXfzBsf6fabNsnC0nlNtNV7hutbc79g+13Tol3LrWwIgQCRmUxr1EqFzd581sAXYab8PlqAU2iim5Ub6osB/d44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.81","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":878983},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"2203f12a4523897e18b785bb687adc44f86205df","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.81_1789138059766_0.7481215035348046","host":"s3://npm-registry-packages-npm-production"}},"0.9.82":{"name":"opentakeoff-mcp","version":"0.9.82","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.82","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"c169ef243aa609c8bf6335f9b550551e8a666559","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.82.tgz","fileCount":4,"integrity":"sha512-BxcEm/UeYOpIPlE3LU0i/+729uF1nhkn3fScVNBaw7o7ahnKyCN/GoZ0yR18lkKe34WeMT4KhSxyuC311+bt+Q==","signatures":[{"sig":"MEQCIBI06Rp3SwL+O0NsM/Vp+3/xDWJrJZGmCMLvTLPc6b3jAiBtjGKUjpppUUp57xpjKzbtRzYpezAmPcJ4UMld6Qf37w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDx/RITdKWWU1ZRvghxBJS4FkmjZbhI7H5cqNSrXD/jxAIhAJgwNxdRhKDfeeEmAHk/mHM9CNT4HB/iRcDT4wQGOjav","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.82","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":913474},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"f34f5d86b93c31face01a1af5313994b1255cac7","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.82_1789147035974_0.7769970907176935","host":"s3://npm-registry-packages-npm-production"}},"0.9.83":{"name":"opentakeoff-mcp","version":"0.9.83","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.83","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"3def206a9df93c663680cc04f9600b6731e3bc1a","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.83.tgz","fileCount":4,"integrity":"sha512-EHTROn/y4q/WPrRI2ucTJ5j9cuGLlGitI0eKenrNFHjaW+tMOqiY5L48TOik8QBLSdRRwjdzw99xyaHyVxBB2w==","signatures":[{"sig":"MEQCH0oFihOr4LO1tTBvdtWqVCwduI1Fn1eOYGsJh5lcU94CIQCcDoRwjx/sfnWmX3T1HilsP8scLsTmtxoa+Xhk5oYtqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDcdxpG/NA8kKjAcVqQdYNfvDUNa4EEEZ9Sw/XPvmL2tgIhAJxvMIzuWOuc8jQezOhYGTpcaEhohoTDcUxh6M+K51vK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.83","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":916726},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"8802540458adad346b3b2af1f51cfab3173cbf9c","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/checkers.test.ts test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.83_1789152065562_0.9914254967970912","host":"s3://npm-registry-packages-npm-production"}},"0.9.84":{"name":"opentakeoff-mcp","version":"0.9.84","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.84","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"03215e686274ce9c0892a75e35e43e6ce7c1f927","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.84.tgz","fileCount":4,"integrity":"sha512-awfQrSRGRtzdmZ4MllGXOsTNcfPGXKXdswj/kfxWj3taPIuAbJJowu+G4BLxioEZm3lh97xUbSVtuv/sJpdjDw==","signatures":[{"sig":"MEQCIGLtB3vrDLX8t0xHJcr5B4e9GSbQmZNE1VHt/P7r+kI6AiAiFez9Y5s4KOy4Gwt+/2ENGxiv1dWZmn+sqzTo50xeaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICFu6/7sn0l4JgDH00z7IXLhgWmDtl/cPelkPBIryFWAAiEAjJS36AK7AIBglsoAWu00NNPD9p2Yb3p8XECE2StJpjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.84","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":919987},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"7f6e34edb3f6dcaa8ef3a06841603fec871483b2","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/checkers.test.ts test/conformance.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.84_1789183977583_0.5504696592051936","host":"s3://npm-registry-packages-npm-production"}},"0.9.85":{"name":"opentakeoff-mcp","version":"0.9.85","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.85","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"da5610df6179f8d8daea052d7566e1986e0d2cd9","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.85.tgz","fileCount":4,"integrity":"sha512-/Q1+JnC5u8R2USJ8F69+eAmJcs7RgbCff/s2qJETia6wh1te/jNVxyAgNrNyBa6eKndZKS9GP6DKw9BT9i63EA==","signatures":[{"sig":"MEUCIQD5QRaYPo6BR2hQJowwSerfQbiq2s6wTryXkaMqvrnCGgIgZPSh5dWmjyq7p+fU/6Mc9jUuukScL9du1SlWh+9HC0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCiGvpekXi6xCOhEJuiO1ox5XsD2fxlHGuXiFhoYTxclwIhAKUav6gjyq6US0kGz5tTNw5W6GIJs9PwnG+dOAv4vQM5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.85","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":919876},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"241567a83153ce11e423f1dd0a1dd8d8dc837776","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/checkers.test.ts test/conformance.test.ts test/constants.test.ts test/context.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.85_1789188615590_0.525040262154969","host":"s3://npm-registry-packages-npm-production"}},"0.9.86":{"name":"opentakeoff-mcp","version":"0.9.86","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.86","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"727abe0c247f1ef9cbb075c4f484705d9134ad92","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.86.tgz","fileCount":4,"integrity":"sha512-O5TKBQvuXAjKogSSv3ZKSNXw4jx376oQ/klM0wipA5x7biLg5kr3rvNxAArdp/1rIwoTr9eV8CPr/2mN8z3b5g==","signatures":[{"sig":"MEUCIEOqOtgNKGN2dzWkY6GvOOeDEAXCmUZGZuwnv26SFqtNAiEA6nU5sUbTIZTkrnVqkXmr0fku8LTRmpw968mkM7omsAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD1TyvMbHtRmvWCvl9gpSM6/nsn12re4RkkAiqr3EErOgIgXOFGfyG9MX9sEaq9foLRJG+PM+wcRN9aUKFEeUD72Xo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.86","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":921491},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"ba7380d592a1183ae01e84111e6c920e54e66523","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/checkers.test.ts test/conformance.test.ts test/constants.test.ts test/context.test.ts test/document.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.86_1789217406957_0.8065741972895761","host":"s3://npm-registry-packages-npm-production"}},"0.9.87":{"name":"opentakeoff-mcp","version":"0.9.87","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"license":"Apache-2.0","_id":"opentakeoff-mcp@0.9.87","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"bin":{"opentakeoff-mcp":"dist/server.js"},"dist":{"shasum":"af89771a7569b36f9f8efdfd1aa5e1447078b62c","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.87.tgz","fileCount":4,"integrity":"sha512-/T1FZ07KJoDubxcVw4uMMA4Mtvd7HAe10mr1/FfSqtxA5n7X38+HYzpWMSpY6RSJ3BlNHQiUt7OOxPw9e3hR6w==","signatures":[{"sig":"MEQCIBj5YUyUL1ZT9n0CbuTqqp0K3qQ427Z0Gaqo1NSDgJP8AiAWqVhwwo1X1DGhZMCqp+5Xl6YfqCQpo9agSaeihiObIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICCG1zkCp07LOLwMOGAywRZMxCegDZn118xNmdPXwsNbAiEA5xjc+JfbR9svr/Lbo6S5AFrYQc1iKnziWGv/PvFqux4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.87","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":932645},"main":"dist/server.js","type":"module","engines":{"node":">=20"},"gitHead":"d8a5b5aa305f81e0f0d391275fb16bfd6de3270f","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/arc.test.ts test/checkers.test.ts test/conformance.test.ts test/constants.test.ts test/context.test.ts test/document.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"tmp":"tmp/opentakeoff-mcp_0.9.87_1789265670274_0.3551502281891492","host":"s3://npm-registry-packages-npm-production"}},"0.9.90":{"_id":"opentakeoff-mcp@0.9.90","bin":{"opentakeoff-mcp":"dist/server.js"},"bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"dist":{"shasum":"6d7328ab0d2d11f2d82dafe8033625078944135d","tarball":"https://registry.npmjs.org/opentakeoff-mcp/-/opentakeoff-mcp-0.9.90.tgz","fileCount":4,"integrity":"sha512-pz4Jcwnmry4prK3jTF7rC6gh3D5RqvSAKvYfFNwvZc9kwCUNUUebwqzk/yr4WlgjKQ56//aaHgneWx0wlKSC/g==","signatures":[{"sig":"MEQCIHa6tbkiwLiWwj22dQUSwbijqD/Pra5ZmeX4DEUYQqxYAiAYC8+WXoM9Sp3vKtLGdPVieRdO8GOIxwBbxK1AB9lkyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH9yGrUoNvDCmeNlYRD/Q8mGddDMAGBPexor/SLL3t1OAiEAxRwuqN4amtG8UZ2yEs2aJ3sDNryEMgVwbUiQkycRkfc="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/opentakeoff-mcp@0.9.90","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":956456},"main":"dist/server.js","name":"opentakeoff-mcp","type":"module","engines":{"node":">=20"},"gitHead":"3ea5dabe9e3c5f17698067551f3e05dcb272cf0f","license":"Apache-2.0","mcpName":"io.github.Kentucky-ai/opentakeoff","scripts":{"dev":"node --import tsx server.ts","mcpb":"npm run build && node scripts/build-mcpb.mjs","test":"node --import tsx --test test/arc.test.ts test/checkers.test.ts test/conformance.test.ts test/constants.test.ts test/context.test.ts test/document.test.ts test/dxf.test.ts test/e2e.test.ts test/gate.test.ts test/graphEvalRowsym.test.ts test/labels.test.ts test/mep.test.ts test/overlap.test.ts test/parity.test.ts test/proposals.test.ts test/raster.test.ts test/resources.test.ts test/safewrite.test.ts test/scalewarn.test.ts test/scope.test.ts test/session.test.ts test/splittags.test.ts test/staging.test.ts test/sweepguard.test.ts test/tools.test.ts test/transitions.test.ts test/twins.test.ts test/view.test.ts test/wiki.test.ts","build":"npm run check:protocol-resources && npm run check:wiki && esbuild server.ts --bundle --platform=node --format=esm --packages=external --outfile=dist/server-core.js && node scripts/finish-build.mjs","start":"node dist/server.js","typecheck":"tsc --noEmit","check:wiki":"node scripts/check-wiki.mjs","smoke:dist":"node scripts/smoke-dist.mjs","check:versions":"node ../scripts/check-version-consistency.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build","check:tool-count":"node --import tsx scripts/check-tool-count.mjs","check:protocol-resources":"node scripts/check-protocol-resources.mjs"},"version":"0.9.90","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b3c70b-0367-4618-abc8-c58e41389fbb"}},"homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"overrides":{"fast-uri":"^3.1.4","@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"_npmVersion":"11.19.0","description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","directories":{},"maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^3.24.1","jsts":"^2.12.1","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@turf/helpers":"^7.4.0","@turf/difference":"^7.4.0","@turf/boolean-overlap":"^7.4.0","@turf/boolean-contains":"^7.4.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^22.19.21"},"optionalDependencies":{"@napi-rs/canvas":"^0.1.100"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opentakeoff-mcp_0.9.90_1790300914136_0.8057373114959261"}}},"time":{"created":"2026-07-13T14:41:54.556Z","modified":"2026-09-25T01:48:34.542Z","0.1.0":"2026-07-13T14:41:54.772Z","0.1.1":"2026-07-15T00:32:16.044Z","0.1.2":"2026-07-17T04:09:08.490Z","0.1.3":"2026-07-17T05:27:28.909Z","0.2.0":"2026-07-17T16:58:59.159Z","0.3.0":"2026-07-17T17:56:15.026Z","0.4.0":"2026-07-18T06:31:15.643Z","0.5.0":"2026-07-21T04:20:06.013Z","0.6.0":"2026-07-22T02:42:12.683Z","0.6.1":"2026-07-22T15:42:39.607Z","0.7.0":"2026-07-24T21:35:53.693Z","0.8.0":"2026-07-25T04:45:44.493Z","0.9.0":"2026-07-25T23:32:14.723Z","0.9.2":"2026-07-28T01:58:00.197Z","0.9.3":"2026-07-29T01:40:46.929Z","0.9.7":"2026-07-29T23:57:08.217Z","0.9.8":"2026-07-31T02:13:01.121Z","0.9.12":"2026-07-31T03:06:17.963Z","0.9.17":"2026-07-31T04:05:59.436Z","0.9.18":"2026-08-01T05:10:41.892Z","0.9.19":"2026-08-01T05:24:25.607Z","0.9.20":"2026-08-02T05:24:35.719Z","0.9.21":"2026-08-02T05:24:41.618Z","0.9.25":"2026-08-02T12:11:51.912Z","0.9.26":"2026-08-02T13:21:05.484Z","0.9.27":"2026-08-02T17:31:41.953Z","0.9.29":"2026-08-03T00:56:30.251Z","0.9.30":"2026-08-03T01:58:27.411Z","0.9.31":"2026-08-03T02:36:35.233Z","0.9.32":"2026-08-04T03:34:39.486Z","0.9.33":"2026-08-04T04:03:29.501Z","0.9.35":"2026-08-05T16:04:50.784Z","0.9.36":"2026-08-05T16:54:31.578Z","0.9.38":"2026-08-06T00:07:17.384Z","0.9.39":"2026-08-11T22:21:16.535Z","0.9.40":"2026-08-14T02:56:18.623Z","0.9.41":"2026-08-14T13:47:27.058Z","0.9.42":"2026-08-14T14:00:43.959Z","0.9.43":"2026-08-16T01:54:27.346Z","0.9.44":"2026-08-16T04:06:00.768Z","0.9.45":"2026-08-16T14:18:12.709Z","0.9.46":"2026-08-16T15:48:06.902Z","0.9.47":"2026-08-16T18:07:06.170Z","0.9.48":"2026-08-16T18:11:57.376Z","0.9.49":"2026-08-16T20:15:55.126Z","0.9.56":"2026-08-20T20:58:14.592Z","0.9.59":"2026-08-21T05:33:54.204Z","0.9.60":"2026-08-21T15:31:17.076Z","0.9.61":"2026-08-21T16:09:17.605Z","0.9.62":"2026-08-21T16:33:40.703Z","0.9.63":"2026-08-22T03:37:36.541Z","0.9.65":"2026-08-25T01:25:21.328Z","0.9.68":"2026-09-02T15:18:31.634Z","0.9.71":"2026-09-03T01:11:45.404Z","0.9.73":"2026-09-05T05:14:48.019Z","0.9.75":"2026-09-05T14:12:35.831Z","0.9.76":"2026-09-05T15:43:41.461Z","0.9.77":"2026-09-05T22:48:13.303Z","0.9.80":"2026-09-11T12:51:33.881Z","0.9.81":"2026-09-11T14:47:39.840Z","0.9.82":"2026-09-11T17:17:16.071Z","0.9.83":"2026-09-11T18:41:05.681Z","0.9.84":"2026-09-12T03:32:57.735Z","0.9.85":"2026-09-12T04:50:15.712Z","0.9.86":"2026-09-12T12:50:07.055Z","0.9.87":"2026-09-13T02:14:30.375Z","0.9.90":"2026-09-25T01:48:34.241Z"},"bugs":{"url":"https://github.com/Kentucky-ai/opentakeoff/issues"},"license":"Apache-2.0","homepage":"https://github.com/Kentucky-ai/opentakeoff/tree/main/mcp","keywords":["mcp","model-context-protocol","takeoff","construction","estimating","pdf","quantity-takeoff","flooring","ai-agent","agentic-ai","preconstruction","construction-management","project-management"],"repository":{"url":"git+https://github.com/Kentucky-ai/opentakeoff.git","type":"git","directory":"mcp"},"description":"OpenTakeoff MCP server — drive the takeoff engine from your MCP client over stdio.","maintainers":[{"name":"kentucky-ai","email":"michael@kentucky-ai.com"}],"readme":"# OpenTakeoff MCP server\n\nListed in the [official MCP registry](https://registry.modelcontextprotocol.io) as\n`io.github.Kentucky-ai/opentakeoff`, on [Glama](https://glama.ai/mcp/servers/Kentucky-ai/opentakeoff),\nand on [Smithery](https://smithery.ai/servers/Kentucky-ai/opentakeoff).\n\n**This page is the reference—every tool, every rule, every limit.** For *how to run a\ntakeoff well* with it—the operating model, the standard finish, what the engine withholds\nand why, and the move that answers each refusal—read\n[`docs/AGENT_GUIDE.md`](../docs/AGENT_GUIDE.md) first. It's short, and it's the half that\ndecides whether the numbers are any good.\n\n## Run it in 60 seconds (npx)\n\nNo clone, no build—point your MCP client at the published package:\n\n```json\n{\n  \"mcpServers\": {\n    \"opentakeoff\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"opentakeoff-mcp\"]\n    }\n  }\n}\n```\n\nWorks with Claude Code (`claude mcp add opentakeoff -- npx -y opentakeoff-mcp`), Claude Desktop, Cursor, or any stdio MCP client. Node 20+.\n\n## One-click install (Claude Desktop)\n\nNo Node, no npm: download **`opentakeoff-mcp.mcpb`** from the\n[latest release](https://github.com/Kentucky-ai/opentakeoff/releases) and\ndouble-click it—Claude Desktop installs the server with its dependencies\nbundled. Built by `npm run mcpb` and attached automatically to every `mcp-v*`\nrelease. The bundle is platform-neutral on purpose: it excludes the optional\nnative canvas, so every JSON tool and the text/metadata resources work\neverywhere; the sheet-image resource and the `view_sheet` tool say exactly\nwhat's missing where rendering isn't available.\n\n## One-Click is temporarily gated\n\n`one_click` and `detect_rooms` are **not registered** on a default build while the flood\nengine is re-validated against a wider plan corpus: `tools/list` never names them, the\ninitialize `instructions` say so and point at `measure_polygon`, and no other tool's\ndescription sends an agent to a verb that is not there. A default build registers\n**<!--tool-count-->53<!--/tool-count--> tools**. Everything else — sweeps, counts, `derive_base`, `derive_transitions`, the\nexports — is unchanged. Set `OPENTAKEOFF_ONE_CLICK=1` in the server's environment to\nregister both verbs (<!--tool-count-all-->55<!--/tool-count-all--> tools); the parity, conformance and e2e tests run that way, and\n`test/gate.test.ts` pins both surfaces. The rows and examples below that use `one_click`\ndescribe the lifted build. Design note: [`docs/design/ONE_CLICK_GATE.md`](../docs/design/ONE_CLICK_GATE.md).\n\n\nThe takeoff engine—scale model, conditions and totals—on **stdio for your MCP\nclient**. An agent can open a plan, read the title block, set the scale, inspect\nsource geometry and commit defensible measurements. The server imports shared\nweb modules, so quantity math and takeoff records are compatible with the\ncanvas. Browser and MCP room-detection paths currently differ; a shared module\ndoes not establish identical boundaries on every plan. See the [capability\nstatus](../docs/wiki/status.md) and [compatibility matrix](../protocol/COMPATIBILITY.md)\nbefore claiming detector parity or a lossless handoff.\n\n## Run with Docker\n\nBuild from the repository root so the Dockerfile can bundle the shared web\nengine:\n\n```bash\ndocker build -f mcp/Dockerfile -t opentakeoff-mcp .\ndocker run --rm -i opentakeoff-mcp\n```\n\nMount local plans read-only and pass that container path to `load_plan`:\n\n```bash\ndocker run --rm -i -v \"$PWD/demo:/plans:ro\" opentakeoff-mcp\ndocker run --rm -i -e OPENTAKEOFF_MCP_TRACE=1 -v \"$PWD/demo:/plans:ro\" opentakeoff-mcp\n```\n\nFor example, load `/plans/sample-plan.pdf` after mounting `demo/`.\n\n## Quickstart\n\nBoth `web/` and `mcp/` need their dependencies (the engine's pdf.js lives in\n`web/node_modules`):\n\n```bash\ncd web && npm install\ncd ../mcp && npm install\nnode --import tsx server.ts        # speaks MCP on stdio\n```\n\nThen register it with your MCP client (any stdio MCP client works):\n\n```json\n{\n  \"mcpServers\": {\n    \"opentakeoff\": {\n      \"command\": \"node\",\n      \"args\": [\"--import\", \"tsx\", \"/absolute/path/to/opentakeoff/mcp/server.ts\"]\n    }\n  }\n}\n```\n\nPoint `command` at `node` directly, as above—**never `npm start` in a client\nconfig**: npm prints its banner to stdout, and stdout is the MCP wire. (Same\nreason the server redirects `console.log` to stderr before pdf.js loads—see\n`src/hush.ts`.)\n\n`tsx` is a runtime dependency, not a build tool: the engine is imported\nstraight from `web/src/lib` as TypeScript, so plain `node` can't run it.\n\nFor tool-call debugging, opt into structured stderr tracing:\n\n```bash\nOPENTAKEOFF_MCP_TRACE=1 node --import tsx server.ts\n```\n\nEach tool call writes one JSON line to stderr with the tool name, duration,\nsheet, result size, and error flag. The trace never writes to stdout and never\nincludes document text, shape vertices, or result payload content.\n\n### Staged tool exposure (opt-in)\n\nBy default every client gets all <!--tool-count-->53<!--/tool-count--> tool schemas on `tools/list`—the flat\ncontract every published client already expects. Fifty-two descriptions is real\ntoken weight for an agent session that may never touch half of them, so the\nserver can instead stage the surface along the workflow it already teaches:\n\n```bash\nOPENTAKEOFF_MCP_STAGED_TOOLS=1 npx -y opentakeoff-mcp\n```\n\nStaged, only the **setup** stage (load, scale, read the set—<!--tool-count-setup-->11<!--/tool-count-setup--> tools) starts\nenabled, plus one opener: `open_tool_stage`. Calling it with `\"measure\"`,\n`\"revise\"`, or `\"handoff\"` enables that stage's tools and fires\n`tools/list_changed`, so any client that supports dynamic tool lists (Claude\nCode, Claude Desktop, anything built against the current spec) sees the group\nappear the moment the agent asks for it. Opening is idempotent and never\ncloses anything—the surface only grows. The initialize instructions state\nthe scheme, so an agent knows to open a stage before it needs one. Requires a\nclient that honors `tools/list_changed`; leave the flag unset for one that\nreads the tool list once. ([#230](https://github.com/Kentucky-ai/opentakeoff/issues/230))\n\n## Tools\n\nThe [generated tool index](../docs/MCP_TOOL_INDEX.md) lists stages and required arguments from the runtime schemas; CI rejects stale output and missing reference rows.\n\n| Tool | What it does |\n|---|---|\n| `load_plan` | Open a plan PDF from disk. Default replaces the whole session; **`merge: true` ADDS the document to the working set** (#152)—plans + schedule + addenda as one takeoff, sheet graph spanning the whole set, marked set covering every worked sheet. Returns per-sheet dims, title-block `sheet_number`, and the detected drawn scale where present. |\n| `sheet_info` | One sheet's dims, vector segment count, scale status, detected suggestion, committed shape count. |\n| `set_scale` | Set a sheet's scale—exactly one of `label`, `upp`, `calibrate {p1, p2, feet}`, `use_detected`. **Lands unconfirmed** (`confirmed: false`) until a human confirms in the canvas—see Scale rules. |\n| `one_click` | **Temporarily gated — not registered unless `OPENTAKEOFF_ONE_CLICK=1`.** One-Click Area at (x, y): the sealed flood engine bounded by the plan linework, traced, vertices snapped—the SAME feet-true arguments the canvas passes at a click (gap sealing up to a door width, door-swing wedge inclusion, the half-foot minimum-passage rule), so an MCP trace and a canvas click at one seed measure the same square footage (pinned against the bench corpus goldens in `test/parity.test.ts`). Every trace carries the engine's account of itself: `confidence` 0–1 with `confidence_factors` naming each deduction (`gap_sealed_px`, `door_wedges`, `min_pass_delta`, …)—a review prioritizer, never a verification; a low score is a `view_sheet {overlay: true}` audit prompt, not a fact. On a SCANNED sheet (no usable linework) the flood falls back automatically to the rendered pixels—same engine as the canvas—with `raster_traced` disclosed on the reply and on the shape's origin (#154). Pass `condition` to commit (the full account stamps `origin` centrally at the commit); `role: \"deduct\"` subtracts. |\n| `detect_rooms` | **Temporarily gated — not registered unless `OPENTAKEOFF_ONE_CLICK=1`.** Batch One-Click: reads every room-number label off the sheet's text layer and floods each—one call instead of `read_sheet_text` + reasoning + N `one_click` calls, through the SAME sealed engine per room (confidence + the engine account ride each room and its committed origin). Only cleanly-traced rooms come back; everything skipped is counted and reasoned in `withheld` (degenerate / duplicate / implausible / unresolved), never dropped silently. To commit: `assign_from_schedule: true` routes each room through its OWN room-finish schedule row and commits under the FLOOR finish that row states (rooms the schedule can't answer for return in `unresolved[]` with reasons and re-seedable coordinates); or pass `condition` to commit every room under one stated tag. |\n| `measure_polygon` | Area + perimeter of a polygon you supply (min 3 verts). Requires scale. |\n| `cut_out` | **A real hole in a committed floor shape** (#206), reconciled the way the canvas cuts one (#137)—the same `lib/cutout.js` boolean subtract, one module, so a headless session and the app can never disagree about what a hole holds. The parent keeps its outer ring + `verts_norm_holes`, its `computed` nets for real (N cuts compose, overlap never double-deducts, a hole ADDS perimeter), and the deduct carries `cuts_shape_id` so report/legend read the reconciled number. Refuses a ring not FULLY inside the parent (the canvas's edge-clip is a canvas affordance; over the wire it's refusal-over-guessing) and a cut that would erase or split the parent. One undo step restores parent and hole together; `delete_shape` on the deduct reverts the cut too (multi-cut parents rebuild from the chain's pristine snapshot minus survivors—the canvas's own delete semantics, ported as the spec). |\n| `measure_line` | Length of an open polyline (min 2 points). Requires scale. |\n| `derive_base` | **Base LF from committed rooms**: for every floor shape of a source condition, commits a linear base run tracing that room's boundary, quantified net of the door openings YOU state per room (`{shape_id, lf}`—your claim, recorded on `origin.derived`; the tool never guesses). All-or-nothing; one undo step. |\n| `derive_transitions` | **The transition where two finishes meet**: pass two finish tags and the tag to commit under, and every committed room of each is compared against every room of the other. The catch this is built around—flood-traced rooms **do not share edges**, a partition puts 4–8″ between them—so proximity comes in two flavours and they are never conflated. A **butt joint** (rings running together inside one open space, within an inch) *is* the transition and commits as a linear shape, `origin.derived` naming both parents, the tags, and the measured gap. A **wall-separated** run means the rooms are adjacent across a partition, where the transition is a threshold in a doorway that nothing in the trace record locates (the flood engine reports how *much* boundary it sealed, never where)—those return in `withheld` with length, gap in inches, and an `at` point to `view_sheet`, as questions rather than a confident wrong number. `max_gap_in` (default 12) only ever turns more of the plan into questions, never into committed LF. All-or-nothing; one undo step. |\n| `measure_surface` | **Wall SF**: an open run traced along the wall, quantified as traced LF × the condition's height (the canvas's H knob—pass `height_ft` to set it, or set it once with `edit_condition`). Wall tile, wainscot, wall systems. Refuses without a height, minting nothing. |\n| `place_count` | **EA markers**: one point, one each—thresholds, stair nosings, floor boxes. No scale required (EA is scale-free). One shape per point; the whole call is one undo step. |\n| `count_marks` | Count value-annotated device marks or schedule-keyed equipment labels, report withheld mentions, and optionally commit pending count shapes. |\n| `symbol_sweep` | **Every instance of a repeated plan symbol, from ONE example**: marquee a tight `seed_rect` around a single drain/threshold/fixture symbol and the vector linework is searched deterministically for every other placement—translation plus 0/90/180/270 rotation and mirroring (both on by default). Score = length-weighted fraction of the seed's segments matched within `tolerance_px`; ≥ 0.92 is a match, the 0.75–0.92 band returns in `withheld` with reasons (never committed, never dropped silently), and the work cap is disclosed when it bites. **`scope: \"set\"` sweeps the whole working set, counting on PLAN-role sheets only** (the sheet graph decides; every excluded sheet disclosed in `skipped` with role and reason)—and the seed rect may sit on a detail or legend sheet, which then serves as the fingerprint SOURCE while staying excluded from counting: the estimator's \"click the assembly in the detail, count it on the plans\" gesture. Per-sheet results carry their own match/withheld lists, per-sheet cap accounting, and wall-clock `elapsed_ms`. `commit: true` + `condition` commits every match center as an EA count marker—the whole sweep (set-wide included) is one undo step, `origin.method \"symbol_sweep\"` with per-marker score, transform, and seed source (`origin.symbol.seed`). No scale required. **Counter-examples** (`exclude`, #259): rects around instances you do NOT mean, marqueed like the seed—the rect's own contents decide whether it rejects by extra contained linework or by the background line running THROUGH it that a real instance would break; every rejection disclosed in `rejected[]`, reinstatable with `place_count`, dead negatives refused with instructions. **Stroke-luminance gate** (`luminance_tolerance`, #260): for flattened exports where layers and pen weights are stripped but the file still states stroke color—a stated tolerance holds candidates to the seed's own pen, opt-in both ways, with `lum_gate` naming every placement the pen pulled under the bar. **Labels** (#308): for labeled families the sweep reads the drawing's own names—a fixture token written beside a placement or connected by its drawn leader (leader-following arms only on multi-pen sheets)—as `label`/`label_via` on every row plus `seed.label`; the reply flags shape-only matches in a labeled family, withheld rows carrying the seed's own tag, and matches the drawing names differently. Disclosure, never a recount. |\n| `sweep_schedule_row` | **Take off a schedule row's mark from the row itself**: pass the row's key (for example, `T1`) and the tool reads the row from the set's schedule tables (the row is the condition's cited source), anchors a fingerprint on the marker the tag is DRAWN as on a plan sheet (a deterministic pad ladder around the tag text; where the tag occurs more than once the fingerprint must recur at a second occurrence—`anchor.corroborated`—before it is trusted), and sweeps every plan-role sheet. **The count is geometry AND text agreeing**: drafting reuses one bubble shape across many marks, so a match counts only when the row's own tag sits within the marker footprint (its bbox rides the match as `tag_at` evidence); a match labeled with a sibling key is `excluded` and says whose it is, an unlabeled match is `withheld` as a question, a tag drawn with no matching marker is `text_only`. Refusal over guessing, each with the reason and the fix: no such row, an ambiguous key, a tag drawn on no plan sheet, no repeatable marker linework—a fingerprint is never guessed from text alone. `commit: true` commits the counted matches under the row's own key—one undo step, `origin.assignment {source: \"schedule\"}` plus the anchor and row citation on `origin.symbol.seed`. No scale required. |\n| `takeoff_summary` | Per-condition totals + grand totals, computed by the Report's rules. |\n| `export_takeoff` | Includes calibration provenance (`scale_source`, `scale_confirmed`) when present and live RFIs in its declared output schema. The full `opentakeoff.takeoff_canvas.v1` payload—exactly what the app autosaves. Inline, and to disk with `path` (see **Writing to disk** below). |\n| `delete_shape` | Remove a committed shape by id. |\n| `propose_takeoff` | **Open a named batch** (#365). Every shape you commit from here on attaches to it (`origin.proposal_id`, stamped centrally at the commit—hand traces, sweeps, derives, `cut_out` alike), so the estimator sees ONE Accept pill for the batch instead of one per shape. `label` is what they read on the pill, `rationale` is what decided the batch; both required. Commits nothing itself. |\n| `revise_proposal` | Replace **every still-pending shape** in a batch with a new set, as one journal step. All-or-nothing: validated (sheet, scale, vertex minimum, a height for `surface_area`) before the first pending shape is removed, the error naming the entry. Accepted shapes are ink and stay. One `undo_last` puts the previous batch back. |\n| `withdraw_proposal` | Remove a batch's pending shapes in one step; the record stays marked withdrawn, accepted shapes stay (the reply counts them). `undo_last` restores the whole batch. |\n| `propose_condition_edit` | **Propose** a condition change instead of making it: a diff—new `finish_tag` (rename), `waste_pct`, `multiplier`, `height_ft`, `roll_setup`—held pending until the estimator accepts from the panel. Nothing changes until then: `takeoff_summary` and `export_report` compute from the current values and carry the diff beside them. Only differing fields are recorded; a no-op or a rename onto a taken tag is refused; one pending diff per condition (proposing again replaces it). `rationale` required. |\n| `withdraw_condition_edit` | Drop a pending condition-edit diff without touching the condition. |\n| `scope_duplicates` | **Two conditions claiming the same floor, as a list** (#366): every pair of committed floor shapes on one sheet whose EXACT polygon intersection exceeds `min_fraction` of the smaller (default 0.05), with the shared SF, each side's condition, label and review state, and a `look` region for `view_sheet {overlay: true}`. Different conditions = a collision (the floor is counted twice downstream); the same condition = a double trace, returned in `duplicates`. `shared_floor_sf` is Σ areas − union over the compared set, counted once per cell — the number `takeoff_summary` always carries. Deducts and runs are not claims; unscaled sheets and degenerate rings are `unmeasured`, never zero. Read-only. |\n| `scope_merge` | **Resolve one collision**: given the pair and the winner, the loser gives up the shared floor — trimmed to its remainder (exact boolean difference, quantities re-measured) or deleted when the overlap is near-total (≥ 98% of the loser). One journal step; `undo_last` restores the loser verbatim. With `winner` omitted the reviewed shape wins; refuses when neither is reviewed (it does not guess), when both are (the estimator's call in the canvas), always when the loser is ink, when the trim would split the loser, and when the loser carries reconciled cutouts. |\n| `edit_shape` | **Revise** a committed shape instead of redoing it: new `verts`, a different `condition`, a different `role`, a `label` (the room it belongs to—what per-room reporting groups by; `\"\"` clears it), or any combination—quantities recomputed from the result. Refuses shapes a human affirmed. |\n| `edit_materials` | Add/remove/patch supporting-materials rows on a condition—the coverage-rate lines (adhesive at N sf/gal, grout at N lf/bag, …) that turn a measured quantity into an order quantity, matching the canvas's Supporting Materials panel. `basis` is `area` \\| `linear` \\| `count` \\| **`seam_lf`**—the last is the *figured* roll-layout seam length a weld rod or seam tape is bought by (set `roll_setup` on the condition first; without one it reads 0, because nothing has decided how that floor gets cut). `condition` mints on first touch, like `one_click`/`measure_polygon`. No review gate (materials rows are quantity config, not traced geometry)—edits directly, reversible with `undo_last`. |\n| `edit_condition` | Set a condition's **waste %**, **×N multiplier**, **height_ft** (the H knob `measure_surface` quantifies against), and **roll_setup** (the roll-goods opt-in: seams figured, cuts packed, the reply echoes the order—cuts, `order_lf`, rolls, `order_qty`—and `export_report`'s `roll_goods` block carries the same rows; `null` opts out)—the knobs that turn measured quantities into order quantities. Resolves an **existing** finish tag or errors—a typo must not mint an empty condition. No review gate; one `undo_last` step restores the knobs verbatim. |\n| `duplicate_condition` | **Twin a condition**—the same finish measured somewhere else, with its own supporting materials. One finish in two areas is neither two conditions nor one: the same sheet goods over a slab and over a raised deck take the same field material and different preparation underneath. The twin arrives carrying the original's whole materials list and keeps **following** it—fix a coverage rate on the original and every twin that hasn't touched that row gets it; edit a row on the twin and only THAT row stops following. `label` is required and becomes the tag suffix (`CPT-1` + `Level 2` → `CPT-1 – Level 2`). Reversible with `undo_last`. |\n| `split_condition` | **Cut a twin loose** from its family: every following material row freezes at its current values and edits to the original stop reaching it. It keeps its finish tag and still groups with its siblings—only the inheritance ends. For when two variants have diverged far enough that following each other is wrong. A condition that already owns its materials returns `split: false` rather than erroring. Reversible with `undo_last`. |\n| `export_report` | The **computed Report document**—`opentakeoff.report.v1`, the same JSON the canvas Report exports: gross + waste-adjusted quantities, the computed materials **buy list** per condition plus the project-wide roll-up, per-sheet base subtotals, and scale provenance. The contract for pricing consumers—`export_takeoff` carries materials as config rows, `takeoff_summary` strips them. Inline, and to disk with `path` (see **Writing to disk** below). |\n| `import_takeoff` | **The way back in**: load a `takeoff_canvas.v1` file (a prior `export_takeoff`, or the app's own save) through the SAME merge rules as the app's Sheet-menu import—finish-tag identity joins conditions (this session's knobs win), new ids append, duplicates skip (idempotent re-import), this session's calibration wins per sheet. Resume, extend, or audit. Correction rules (#88) ride the file too—`apply_rules` re-runs them. |\n| `apply_rules` | **Re-run the correction rules the takeoff arrived with** (#207)—the lessons an estimator TAUGHT the canvas (#88), for example, \"every room like this loses the mechanical chase\". Same pure `rules.ts` engine the canvas Preview runs; committed as the ONE batch its Apply makes (`reviewed: false`, one undo step, `origin {method rule_v1, actor rule}` with the rule/seed/room citation). The reply's per-rule disclosure—produced, skipped, ids—IS the preview an agent gets. Idempotent by construction: anything an existing deduct covers is dropped by the engine, so re-running after new rooms commit is the intended workflow. Rules arrive ONLY through `import_takeoff`; minting one is an estimator's correction and stays behind the canvas's human Preview→Apply gate. |\n| `export_dxf` | The takeoff as a **CAD drawing**—a DXF (R2000) that AutoCAD, BricsCAD, LibreCAD and Revit import as native geometry. One sheet per file, like a DWG: every committed shape becomes an `LWPOLYLINE` (floor rings closed, walls and linear runs open, counts a circle) on a layer named for its finish—`OT-<TAG>`, with `-DEDUCT` / `-HOLE` / `-WALL` / `-LINEAR` / `-COUNT` suffix layers and room labels on `OT-LABELS`. Real units in the sheet's frame (origin bottom-left, Y up; feet, or `units:\"m\"`), and a ring's CAD area equals its `export_report` area to rounding. Refuses without a scale; with several sheets carrying shapes, `sheet` picks the drawing. Names every shape left out and why. `path` required. |\n| `export_marked_pdf` | The **marked-up planset**—the deliverable. Writes a distribution-ready PDF: a legend cover (per-condition totals, swatches, by-sheet breakdown) plus every sheet that carries work, vector-copied from the source with shapes, hatches, per-shape quantity chips, and annotations burned in—built by the same module as the canvas's MARKED SET button. Machine-traced shapes are disclosed as pending human review on the document itself, and the cover states where the finish tags came from (`Finish assignment: N schedule-resolved · N agent-asserted · …`, plus any rooms the last assign run withheld). Default path: `<plan> - marked set.pdf` next to the plan (see **Writing to disk** below). Works without `@napi-rs/canvas`. Refuses an **encrypted** source PDF (owner password, empty user password) with the sheet named — its pages cannot be vector-copied and the server has no canvas to render them; export from the app, or supply an unencrypted PDF. |\n| `list_shapes` | The **mid-session inventory**: every committed shape's id, sheet, condition, role, quantities, room `label`, review state, and assignment verdict (`schedule` \\| `asserted`—where its finish tag came from) in one compact read—the ids `edit_shape`/`delete_shape` assume you have, without pulling the whole `export_takeoff` payload. Filters by sheet/condition narrow; empty is a result, not an error. |\n| `undo_last` | Step back over your own last `n` mutations, newest first. Exact inverses: a commit is removed, an edit restored verbatim, a delete re-inserted where it was, a materials edit's whole array restored, a condition edit's waste/multiplier pair restored. A whole `detect_rooms` sweep is **one** step. |\n| `annotate` | Place a note ABOUT the work—cloud/highlight (`rect`), text (`at`), callout (`at` + `target`), **arrow** (`from` + `to`—plank/seam direction), **bubble** (`at` + optional `r`—keynote circle, centered text), **dimension** (`from` + `to`—a dimension line with end ticks, labeled with the measured length at the sheet's scale; the one annotation the scale gate applies to—an unscaled sheet refuses like the measure tools). Attach to a condition and it wears that scope's color on the canvas and in the marked set. No review gate: notes are not geometry. |\n| `list_annotations` | Every annotation with its condition RESOLVED to a finish tag, coordinates back in image px; filter by sheet/condition. `unattached` counts the link_annotation candidates. `verdicts[]` is the approval family's inventory—every mark with its actor stated, a condition filter reaching a verdict through its target shape. |\n| `edit_annotation` | Replace or clear only annotation text; coordinates, dimensions, links, quantities and review stay unchanged. RFI-linked notes refuse. `undo_last` restores the previous text. |\n| `link_annotation` | Attach an existing annotation to a condition (or detach with an empty tag)—the canvas's Attach/Detach control, reachable by an agent. |\n| `mark_verdict` | The **agent's pencil-signature** on work it checked—the agent half of the approval family (#176). Mints the graphite AGENT diamond, and structurally nothing else: the tool takes no actor input, so the estimator's APPROVED ring stays behind the canvas's human-only Approve tool. Target a committed `shape_id` (anchored on the shape—a room's centroid, a run's midpoint—with the id recorded as provenance) or a `sheet` + `at` point; optional short `text` rides the record. Touches no quantity; renders on the canvas and in the marked set, whose cover tallies the split (`Approval stamps: N estimator-approved · M agent-marked`); rides the annotations payload through `export_takeoff`/`import_takeoff` and the app's own saves. One mark per shape. |\n| `delete_verdict` | Lift an agent verdict mark by id. Agent marks only—the estimator's seal is human ink and is refused, the same line `edit_shape` holds on reviewed shapes. `undo_last` re-seats a lifted mark exactly where it was. |\n| `create_rfi` | **Raise an RFI** (#364)—a Request For Information—when the drawing set contradicts itself: a schedule row the plan never draws, a room the schedule has no row for, a finish called out two ways. Lands in the canvas's RFI register with the **next number in the register's own sequence**, status open, dated today, on the sheet you name; `markup_ids` pins it to annotations already on the sheet (they carry the RFI number on the canvas and in the marked set). Raised **as the agent**: `origin {actor: \"agent\", reviewed: false}`—PENDING in the register until the estimator accepts it there, because an RFI goes to the architect and nothing sends without a human. Prints in the marked set's RFI schedule like any other RFI. Journaled; `undo_last` takes it back. |\n| `list_rfis` | Every RFI with status, sheet, who raised it (`actor`) and whether an agent-raised one is still `pending`, its linked markup ids, and the finish tags those markups touch. `withdrawn[]` names the numbers `delete_rfi` tombstoned, so a gap in the sequence is explained. |\n| `resolve_rfi` | Answer an **open** RFI: the answer lands as its response, status becomes `answered` (the register's own state), the response date stamps as the panel's would, plus an ISO `resolved_at`. Anything not open is refused—answered, closed, or void—rather than re-answered or revived. |\n| `delete_rfi` | Withdraw an RFI. A **tombstone, never a renumber**: the number stays reserved, the register and the marked set keep printing a gap where it was, and the next RFI takes the next number. Linked markups keep their note and lose the link (the canvas's own delete rule). `undo_last` puts the record and its links back. |\n| `read_sheet_text` | Positioned page text (image px), optionally restricted to a region—title blocks, room labels, finish schedules. |\n| `find_text` | **Locate** a known string—the complement to `read_sheet_text` (which returns what a region *says*; this finds *where* a string sits). Case-insensitive substring match per pdf.js text run; each hit's center feeds straight into `one_click`'s seed. |\n| `sheet_graph` | The plan-set INDEX (#87): every sheet's role with evidence, the schedule tables found, every room tag with its stacked name, the detail callouts, and every revision marker (text `Δ2`/`REV 2` tags AND drawn deltas—a bare digit inside a triangle of linework, proven from the sheet's vector geometry—in `revisions`)—how an agent decides WHAT to measure without a human enumerating rooms. |\n| `resolve_tag` | ONE room tag → its room-finish schedule row → each code's finish/material definition, every edge cited (sheet + literal text + bbox). Refusal over guessing: `unresolved` comes back with a reason, never as silence. A delta/REV marker on the answering row rides the result as `revisions`—the codes are the post-revision answer, and you're told the ink changed. |\n| `find_schedule` | Locate a schedule table by kind (\"room finish\", \"material\", or \"equipment\"—device schedules of any trade: fans, pumps, heaters, light fixtures, plumbing fixtures, diffusers, keyed by mark and proven by a device column such as CFM, WATTS, GPM, LAMPS, NECK)—sheet, title, headers, row count, a `view_sheet`-ready region, and `revised_rows` when delta/REV-marked rows exist. Every stacked schedule on a sheet is read, top to bottom. |\n| `sheet_context` | The region's STRUCTURE in one frame: classified vector segments (endpoints as drawn, meta byte per segment), text spans with bboxes, and hatch-family instances with content-derived ids—same pattern spec ⇒ same id anywhere on the sheet, so plan↔legend matching is `id === id`. Decimation is declared and counted on every reply: `kept + dropped === total_in_region`, cap applies longest-first so walls survive. |\n| `get_sheet_vectors` | The STROKES (#367): the sheet's vector layer exactly as the engine is fed it—flat `[x1, y1, x2, y2, …]` points in image px, one meta byte per segment (curve / clip / fill-only / polyline-arc flags, pen width in the high nibble), per-segment stroke luminance, the drawn figure each segment belongs to, the placed-image area, and the PDF layer table with a per-segment layer index. Nothing classified, decimated, or merged—so a reader can run its own room finder, symbol matcher, or wall classifier against the same array and commit through the existing verbs. Paged (default 20,000 segments, ceiling 100,000) with `offset + returned + dropped === total` on every page; `next_cursor` recovers exactly what `dropped` counts. Read-only and stateless. Refuses on a scan and names `view_sheet` as the path. |\n| `view_sheet` | The agent's eyes: render the sheet (or an image-px crop) to PNG. `overlay` burns committed shapes in (solid = human-affirmed, dashed = unreviewed) to verify geometry landed; `grid` burns in a calibrated 1-ft/5-ft measuring grid with foot labels (`\"auto\"` from the set scale, or the drawing scale like `\"1/4\"`) so dimensions are counted off cells, not guessed; `marks` (#297) burns disclosure layers in — `question` (withheld placements, orange ?-circle), `struck` (rejections, magenta struck ×), `ring` (the sweep's seed, violet double ring) — in colors off the common CAD pens, so what a reply names, the picture shows. |\n\n### The agent revises its own work\n\n`edit_shape` and `undo_last` exist because an agent that can only *append* has\none recovery move: delete and re-derive. The loop they enable instead—**commit\n→ `view_sheet overlay:true` → see the ring overshot into the corridor\n→ move those two vertices → look again**—is the loop a human estimator\nalready runs, and it is the difference between an agent that drafts and one\nthat works.\n\nTwo rules hold the surface honest:\n\n- **Ink is not pencil.** A shape carrying `origin.reviewed === true` is work a\n  human affirmed, and no agent verb touches it. This server has no review gate\n  of its own, so the guard is inert here—it is the contract that makes the\n  surface safe to port to a host that *does* have one. The approval family\n  holds the same line at the mark itself: `mark_verdict` can mint only the\n  AGENT diamond (there is no actor input to misuse), and `delete_verdict`\n  refuses the estimator's APPROVED seal outright.\n- **Self-revision is not correction.** `edit_shape` bumps `origin.agent_edits`\n  and touches nothing in the human-correction vocabulary (`edited`, `edits`,\n  `proposed_verts_norm`). Those fields mean *a human corrected the machine*;\n  merging a machine's own fix into them would corrupt the one signal that\n  measures whether the machine is getting better.\n\nEvery JSON tool declares an **`outputSchema`**, and every reply carries the\npayload as **`structuredContent`**—typed, machine-validated on every call—alongside\nthe same compact JSON in a single text item for clients that predate\nstructured output. `view_sheet` is the one image tool: its reply is a PNG\ncontent item plus a JSON meta text item (image replies aren't structured\noutput, so it declares no schema by design). Failures come back as\n`isError: true` with `{\"error\": \"...\"}`—never a dropped connection.\n\n## Resources — browse before you measure\n\nThe [wiki index](../docs/wiki/README.md) is always available as `takeoff://wiki`,\nincluding before `load_plan` and while measurement stages are closed. Its eight\nlinked pages use `takeoff://wiki/{page}`: status, architecture, protocol,\nworkflows, mcp, domain, repo-guide and tool-index. Read only the page relevant\nto the current task. These are static public Markdown resources, not tools;\nreading them cannot change geometry, scale or review.\n\nPages are embedded in the published MCP bundle with its version and an\nLF-normalized source hash. Wiki links navigate to packaged resources; links to\nrepository code browse `main` and may be newer. Unknown resource paths refuse;\nthere is no filesystem path or remote URL input. `npm run check:wiki` compares\nthe embedded copy to source; `-- --write` regenerates it. Build and CI fail when\nit is stale. The distribution smoke check reads all nine pages over stdio.\n\nMCP 0.9.82 also embeds the explicit allowlist of draft Takeoff Protocol schemas\nas read-only resources. Read `takeoff://protocol` for the machine-readable\nindex, then a schema such as\n`takeoff://protocol/v1/measurement.schema.json`. This route is available before\nplan load and while stages are closed; it adds no tool and does not change\n`exportPayload()` or any writer. The URI is a transport address separate from\nthe unchanged schema `$id`; the `$id` is an offline-resolution identifier, not\na hosted-file promise. See `takeoff://wiki/protocol` for scope and limitations.\n\nThe generated registry is checked with `npm run check:protocol-resources`; it\nmust remain current before building or publishing the package.\n\nTools let an agent act; resources let it **see**. When a plan loads, the sheet\nset becomes browsable natively (`resources/list` re-announces itself through\n`list_changed`):\n\n| URI | Contents |\n|---|---|\n| `takeoff://sheets` | The plan index—file, page count, every sheet's dims, title-block number, detected scale, scale state, shape count. Always listed; before any plan loads it says so and points at `load_plan`. |\n| `takeoff://sheet/{page}` | One sheet's metadata (JSON), addressed by 1-based page number. |\n| `takeoff://sheet/{page}/text` | The sheet's text, joined—title block, room labels, schedules. Positions live in the `read_sheet_text` tool. |\n| `takeoff://sheet/{page}/image` | The page rendered to PNG, long edge capped at **1568 px**—the native resolution of vision-model eyes. Rendered lazily, cached until the next `load_plan`. |\n\nPage numbers—not file-derived sheet keys—address resources, so URIs stay\nclean regardless of the PDF's name; the human-facing key (`plan.pdf#2`) and\ntitle-block number (`A-101`) ride along as the resource name and title.\nRendering uses `@napi-rs/canvas`, declared as this package's own optional\ndependency so a plain `npx opentakeoff-mcp` installs the prebuilt binary and\narrives with eyes; on a platform without a prebuilt binary every non-raster\ncapability still works and the image read explains exactly what's missing.\n\nThe intended agent loop: read `takeoff://sheets` → look at\n`takeoff://sheet/{page}/image` → pick click targets → measure with the tools.\nAn image coordinate maps to the tool space (image px at render scale 2.0) by\nmultiplying by `width_px / <image pixel width>`.\n\n## The coordinate contract\n\nAll coordinates are **image pixels at render scale 2.0**: PDF points × 2,\norigin **top-left**, y **down**. This is the browser canvas's native space, so\ncoordinates round-trip 1:1 with the app. Every sheet payload carries its dims\nin both px and pt; text positions from `read_sheet_text` are in the same\nspace, which makes them usable directly as click targets.\n\n## Scale rules\n\n- A detected scale is a **suggestion**—it is never applied automatically.\n  Adopting it is always an explicit `set_scale { use_detected: true }`.\n- **Agent proposes, human confirms.** `set_scale` is the agent surface, so a\n  scale set here lands **unconfirmed** (`confirmed: false` in the reply).\n  Quantities still flow—the gate is a flag, never a refusal—but\n  `takeoff_summary` names the affected sheets in\n  `scale_unconfirmed`, and the export/report carry `scale_confirmed` so the\n  canvas can ask the estimator to confirm (its scale menu grows a\n  **Confirm agent-set scale** row on import). Only a human act in the canvas\n  clears the flag.\n- `measure_polygon` and `measure_line` refuse without a scale:\n  `Set the scale for <sheet> first — use set_scale (detected: <label>).`\n- `one_click` without a scale returns a **px-only preview**\n  (`area_px2`, `perimeter_px`) with a warning, and commits nothing.\n- `upp` is real feet per image px at render scale 2.0, per sheet—the same\n  number the app stores as `units_per_px`.\n\n## A whole takeoff, end to end\n\nThe bundled demo plan, as a copy-pasteable session (this is also the shape of\n`test/e2e.test.ts`):\n\n```\nload_plan       { \"path\": \"/absolute/path/to/opentakeoff/demo/sample-plan.pdf\" }\n                → sheet \"sample-plan.pdf\", 2448×1584 px, sheet_number \"A-101\",\n                  detected_scale \"1/4\\\" = 1'-0\\\"\"\nread_sheet_text { \"sheet\": \"sample-plan.pdf\", \"region\": { \"x0\": 1468, \"y0\": 871, \"x1\": 2448, \"y1\": 1584 } }\n                → the title block: A-101, SCALE: 1/4\" = 1'-0\"\nset_scale       { \"sheet\": \"sample-plan.pdf\", \"use_detected\": true }\none_click       { \"sheet\": \"sample-plan.pdf\", \"x\": 600,  \"y\": 1084, \"condition\": \"CPT-1\" }   → ~438 SF\none_click       { \"sheet\": \"sample-plan.pdf\", \"x\": 1640, \"y\": 1084, \"condition\": \"CPT-1\" }   → ~438 SF\none_click       { \"sheet\": \"sample-plan.pdf\", \"x\": 600,  \"y\": 464,  \"condition\": \"CPT-1\" }   → ~438 SF\none_click       { \"sheet\": \"sample-plan.pdf\", \"x\": 1600, \"y\": 464,  \"condition\": \"CPT-1\" }   → ~438 SF\ntakeoff_summary {}                                        → CPT-1, 4 shapes, ~1752 SF\nexport_takeoff  { \"path\": \"/tmp/takeoff.json\" }           → the app's save payload\nexport_marked_pdf {}                                      → the marked-up planset PDF,\n                                                            written next to the plan\n```\n\nA takeoff finishes with **both** exports: `export_marked_pdf` is what a human\nreviews (construction takeoffs are no good without markup), `export_report` is\nwhat pricing consumes.\n\n### Writing to disk\n\n`path` is not confined to a working directory, and deliberately so—the marked\nset belongs in the job folder, wherever that is. What the export tools will not\ndo is destroy a file they didn't write:\n\n- **Nothing at the path** → written.\n- **A previous export of OpenTakeoff's own at the path** → overwritten silently. Fix a\n  condition and export again to the same path as often as you like; that's the\n  normal loop, and it needs no flag.\n- **Any other existing file** → refused, with the path named. Pass\n  `overwrite: true` to replace it anyway.\n- **Corrupt, encrypted, or unreadable** → treated as *not* OpenTakeoff's, so refused. An\n  unrecognizable file is exactly the kind worth not overwriting.\n\nA marked set is recognized by its PDF `Producer`; the JSON exports by the\n`schema` key they stamp. This is data-loss protection, not a sandbox—the\nserver runs as you, with your privileges. See [`SECURITY.md`](../SECURITY.md)\nfor the threat model.\n\nSheet keys follow the app's codec: page 1 is the bare file name\n(`plan.pdf`), pages 2+ are `plan.pdf#2`. Tools also accept the title-block\nsheet number (`A-101`) wherever a sheet is named.\n\n## Limits (v1)\n\n- **Scanned sheets flood, but don't index.** `one_click` and `detect_rooms`\n  fall back to the sheet's rendered pixels where vectors can't bound the room\n  (#154)—disclosed as `raster_traced`—but a scan with no text layer still\n  has nothing for `detect_rooms`/`sheet_graph`/`resolve_tag` to read: seeds\n  come from you (`view_sheet`, then `one_click`). The raster path needs the\n  same optional `@napi-rs/canvas` as `view_sheet`.\n- **Stitching is human-only—deliberately, not a gap.** The canvas can join\n  2–4 sheets split at a match line into one composite surface (#200), but no\n  MCP verb creates, aligns, or addresses a stitch. Joining the match line\n  means clicking the same drawn wall junction on both halves—a judgment\n  call with a worse blast radius than a bad scale, because a sloppy align\n  silently skews every quantity that crosses the seam. That stays behind\n  human eyes; it is not staged for later exposure. For a split floor: a\n  human stitches and aligns in the canvas, and over MCP you work each member\n  sheet as its own surface—a seam-crossing room belongs to the canvas.\n  This server also doesn't read the app's additive `stitches` payload field,\n  so a stitched takeoff round-tripped through `import_takeoff` →\n  `export_takeoff` comes back without its stitches—when a stitch is in\n  play, the app's own save is the one to keep.\n- `load_plan` replaces the session by default; `merge: true` builds a multi-document working set (#152). Reloading a merged file is refused—reload = replace, deliberately.\n- The takeoff lives in memory. `export_takeoff` (the app's exact save payload,\n  nothing lost in translation) and `export_marked_pdf` (the reviewable marked\n  planset) are the ways out.\n\n## Tests\n\n```bash\nnpm run typecheck\nnpm test        # session + tool-layer + e2e, against demo/sample-plan.pdf\n```\n\n## Releasing (maintainers)\n\nMCP releases live in the **`mcp-v*`** tag namespace — bare `v*` tags belong to\nthe app (v0.2.0, v0.3.0 are app releases). Releases publish through **npm trusted\npublishing**: the tag push fires `.github/workflows/publish-mcp.yml`, which\nruns straight through—no approval click—and publishes the npm artifact\nover OIDC with a **provenance attestation** (no npm token exists anywhere—the\nnpm package designates that exact repo + workflow as its trusted\npublisher), followed by the MCP registry entry, the GitHub release, and the\nMCPB bundle. The `release` environment's required-reviewer gate existed\nbriefly and was deliberately removed (2026-07-22)—the tag push is the one\nhuman decision, and it's already admin-gated, so a second click added\nfriction without adding safety.\n\n```bash\n# 1. bump the version — all three fields together:\n#    package.json .version, server.json .version, server.json .packages[0].version\n# 2. tag and push — this fires the whole release, fully unattended:\ngit tag mcp-v<version> && git push origin mcp-v<version>\n```\n\n⚠️ Because there's no approval step, an accidental or mistyped `mcp-v*` tag\npublishes to npm immediately, and npm unpublish is heavily restricted—double-check\nthe version before tagging.\n\nThe workflow checks version consistency, runs the full publish gate\n(`prepublishOnly` = typecheck + tests + build), publishes to npm and the\nofficial MCP registry, verifies the registry listing, and creates the GitHub\nrelease (titled `opentakeoff-mcp <version>`). A re-run skips the npm publish\nif that version already shipped, so a transient failure downstream is safe to\nretry.\n\n### Refreshing the Smithery listing\n\nSmithery isn't part of the automated release above—it needs a **separate,\nmanual** publish after any tool signature change, because of a genuine spec\nconflict between two validators: the official MCPB validator (what\n`npm run mcpb` gates on) rejects a `tools[].inputSchema` key outright, while\nSmithery's registry rejects a bundle *without* real `inputSchema` per tool\n(smithery-ai/cli#770, #797, #787—no manifest satisfies both). The canonical\n`dist-mcpb/opentakeoff-mcp.mcpb` stays spec-compliant for Claude Desktop / the\nofficial registry / Glama; `scripts/build-smithery-mcpb.mjs` builds a\nSmithery-only bundle instead, with live-introspected tools + inputSchema baked\nin, packed with a plain zip (bypassing `mcpb validate`, which would reject it):\n\n```bash\nnpm run build\nnode scripts/build-smithery-mcpb.mjs\nsmithery mcp publish dist-smithery/opentakeoff-mcp.mcpb -n Kentucky-ai/opentakeoff\n```\n\n## Calibration and review correctness (0.9.72)\n\n`set_scale` recomputes existing dimensional quantities from geometry, including holes and cutout restore snapshots. Changing an existing calibration records one `undo_last` step that restores the scale, its confirmation/source, and the prior quantities together. Initial calibration of an unmeasured sheet adds no undo step. Counts retain their stored values. A sheet containing human-reviewed dimensional measurements refuses recalibration over MCP, consistent with the existing reviewed-shape edit rules; recalibrate it in the canvas and import the updated takeoff into a fresh session.\n\n`import_takeoff` refuses new dimensional shapes when their source calibration differs from the session's calibration, or is missing while the session has one. The error names the sheet and scales; no session state changes. Align calibrations and re-export, or load a fresh session to adopt the export's calibration. Counts and duplicate IDs are exempt. An existing calibration is preserved even in an untraced session.\n\nNew agent measurements, including `measure_polygon` and `measure_line`, explicitly carry `origin.reviewed: false`. Legacy agent records without the flag are normalized on import and browser reload. Explicit prior human approval is preserved. No new review gate is introduced.\n","readmeFilename":"README.md"}