{"_id":"@heypcb/mcp","_rev":"10-037e523cbc35928af554a594c2bdf9a4","name":"@heypcb/mcp","dist-tags":{"latest":"0.1.8"},"versions":{"0.0.0-stage":{"name":"@heypcb/mcp","version":"0.0.0-stage","_id":"@heypcb/mcp@0.0.0-stage","stub":true,"maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"dist":{"shasum":"0d2984e80cf206d308f3b27983a3d1adc706fb63","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-MmWqjjKAWOLVFFdKxezurFRpfAo2PLCF5keROnVq7rBmbY7hB8vDD2FmJEgj/jfHaExzk2syk0UCCCzkwxciZQ==","signatures":[{"sig":"MEQCIAuR4Cw5V9ke1JcW5m5RkGMWRe/buXUkUFni5/pFbekvAiAY7QBaoYVkpoScOAmo94JoU6kIS0RlD/u3H2SlpISQaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"0.1.0":{"name":"@heypcb/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.0","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai","bugs":{"url":"https://github.com/Justin3134/HeyPCB/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"dc87d6de2b030d21f0ff402ce609e0eeef38a256","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.0.tgz","fileCount":5,"integrity":"sha512-jgoALnHPtbxNTvVNC7ik2+0xW9YPeIrwZ5wEu3cwc0Ncwh+CH/aVdh2Uj9WRLdoM07EtZh2kBuXwh2DbJPV3ow==","signatures":[{"sig":"MEUCICY3B8PW0/IxXw2GMyAdNFjvHCEqY7SjZ1F2Ug4BC8WkAiEArElqufe5r17lAK68hRf8jsEJFmcfF7IVAgVqYmsQA3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDMuwp9z4o401gp4UgPWRYe3OCvOB2F2gAZQA4/5y4wKAiBeQLVgsarr9tclS7tLJYas6GcKJ6wxxJi1EJpvjxBpLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":797226},"type":"module","engines":{"node":">=18"},"gitHead":"a3361d8a2e1f51d04ea8f7678c8115df6fea4b61","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/Justin3134/HeyPCB.git","type":"git","directory":"clients/mcp"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.30.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1791835965049_0.8635410255667253","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@heypcb/mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.1","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"7d7f647f87232a0b9756bd8d7f7e21641d1ee421","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.1.tgz","fileCount":5,"integrity":"sha512-JPhJH8yG1lBWFLkGzclEMwjSsD6yZQUhTKYr6jUzCA2A06YOITV0+uANYSrPxw6LTwCfDNRdaIbmFV3VddEXQg==","signatures":[{"sig":"MEUCIHPDh00KwG3MijmkfG2JwcoOGQ9Cn6FmiUg+lOfkl07zAiEA4XgNAuJqVFeHtgnj1QwJGUe8139bP06dKECwY0LWwgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCBQMb1Jn3LFMA9vXRBiUiNjjb3SKHI/h7GiP8A0sXJ1gIhAInY+ddYL01pb+Hab5S00g22bTwuoqbgLvTGwVK2tcgv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":797024},"type":"module","engines":{"node":">=18"},"gitHead":"7656d3189d557577682ec2c333e9f128a4cfe3d4","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.30.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1791836629034_0.9971989473906402","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@heypcb/mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.2","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"0584f791356d5210d3f14f99227e13ea09cc8d77","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.2.tgz","fileCount":5,"integrity":"sha512-OLnhzv/+2NakdvD9D59MlFpFhdnceuybweJEC/H1s/HVKBymEuDKfAnL2VH4xKIhtFMYjtj7s9iT59aOnnBWGQ==","signatures":[{"sig":"MEUCIQCd8w7Nb/whTo0UHYMDs8LPpBwfQHRd3hi1E5jR89AULAIgZyqzBPoO1Cqbgr+PawfSP0drwCKPyBAK2I5vOIEuWPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICp4+8r8Dy9WcDQ8pUSFQnb4yd1lJ7knaT17SqIQqHrPAiBKgL5C46iMC+QcGnQ9zkVIni64Qc8AfWph8/XUKaRJdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":797456},"type":"module","engines":{"node":">=18"},"gitHead":"ad54a5868b7d5e24e891adfe97b1a69707f26dfa","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.30.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1791840705985_0.9235608113455105","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@heypcb/mcp","version":"0.1.3","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.3","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"8cfae7b27624f77ae05ed71d99069a87ac42c3b9","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.3.tgz","fileCount":5,"integrity":"sha512-zX9zVFPNfYWRX0L/htYo0/hODqJPO+uQmxLmGok+lB2FXeXqyhOxE6q3YBpWd1HIWX+CBnSAhsAu59dnm3dWQw==","signatures":[{"sig":"MEUCIAM19IJ/1NN2844STF38yq8yZzvzMoI2vaWszoqDWLRTAiEA3rYTa+n2XY2CvE+4x2U7erbqioKUNZ7MHwIPJToMuVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDCpG2eZduEOx7B5Ubd7nTcWYAhhhaXGfa93Eer4RHtyAiBANhZQOtq8SbOm+A6jhm+q7OV00Aos8aonF4gQK2jlVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":800446},"type":"module","engines":{"node":">=18"},"gitHead":"689df5d9145913731435b9e98277577ea10b05a2","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.30.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.3_1791928411164_0.35999378429189965","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@heypcb/mcp","version":"0.1.4","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.4","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"0e1b3d5f0db6492c6d6d295f29a8b7c536c3a1f9","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.4.tgz","fileCount":5,"integrity":"sha512-bxBZT34YgmcqyCxBAZ1SVarO2+GdTlRCdEjC9rcfdOTjJp1l+ChhotKVeBXZK1qL4YFqQnSa6kgsxxtbQYoOkQ==","signatures":[{"sig":"MEYCIQCKSSh0uJHPEL8FqWF1BHwL1izho/sFaMwsraeKDPvJbwIhANvKoWOi2lIhASCDusZcpUjD7lbeyK80JtpUcDVlGQ0j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDD/nSeLqIHaf+dacpC8IZRUeHpgCugxyngje0NgkkNhwIgLlztVkCnjV7KsFuLd+fU1qTK0T26Sv5EMTutVp8ejLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":808714},"type":"module","engines":{"node":">=18"},"gitHead":"d5ba763fd0043e5c5f1405b4f8acc80d11ae91ca","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.32.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.4_1791928803474_0.8360967435513023","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@heypcb/mcp","version":"0.1.5","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.5","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"0959fb3ab7498d4b9da668e036e204674566643c","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.5.tgz","fileCount":5,"integrity":"sha512-QBPVSmxIS8E6pGqgEehn+gVb1NtuWk4UD29/Wjr8IM2qHm/ZXBpbvpocH2DLHMHQOaqK7Ih2UvTs8QqllupQOg==","signatures":[{"sig":"MEQCIHh+16FHJyO232/YHvKG673GySyQht/O+FMCsTLKAzDQAiAD53pfrHywcQNGEKHOrv/bH0dVSRYLKUrumpcIKcnpTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH3GveJiUiB4ZZ9uuXnS2Yv/A717ciy2ho0j0i1GugOZAiB3/1pGHK17AxbrJuHXMcdACOB1BleEo4oM4/iph2VjJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":809332},"type":"module","engines":{"node":">=18"},"gitHead":"ca2d97c41515c2a7c045d75f7882cfb3bac1eb43","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.32.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.5_1791930203245_0.210029089336786","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@heypcb/mcp","version":"0.1.6","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.6","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"78c541c5764f650f2e52cf07c02385c91ddf5ec4","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.6.tgz","fileCount":5,"integrity":"sha512-XNN0dTE8v79UPcUfoCP97FYmXmhiXh10lap1UzbtQiMuCEIJ9x6tqiimbCYWzF/okvMh57m3AiQf7w5tsaH5Pg==","signatures":[{"sig":"MEYCIQDC0jiBEwBNNxu+r8/9kCD5og32AnGIB0bCKemHH5fLwAIhAJgW7Zm7vR9Sv8nfA8DRFk1Z+NbJp77cSWpEoVL4rF+s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCdxNbJiQaUa0jcbTOum7ojQor/xP5Nn9XibLhgKuFImwIgGJqVNcDFbwVEeBBpWQnzp9CL87Fk6nxkF+kaG/+c8ag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":881409},"type":"module","engines":{"node":">=18"},"gitHead":"a975edeb85cc335d2ec9298a844b6fbd49afff4a","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:kicad":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs kicad-cli","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.32.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.6_1792557200183_0.6971792407961437","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@heypcb/mcp","version":"0.1.7","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"license":"MIT","_id":"@heypcb/mcp@0.1.7","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"homepage":"https://heypcb.ai/mcp","bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"bin":{"heypcb-mcp":"dist/cli.js"},"dist":{"shasum":"b467c89211ec1f9f1af5b7e81bccfdb17a5a6487","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.7.tgz","fileCount":5,"integrity":"sha512-RibT3s2aaVaUg8Ei0BX6Knm4wYFBG1+A3CiIVx1zoPI2Iq1KOoEB2T/Fy6PWqVWFzV+7kw8IM0gFdRZ83WnNzg==","signatures":[{"sig":"MEQCIAb7UU3KIfI3Q3wxh8+IPRVOUkcsmbgIB6of/Qbwg3b3AiB7xejgqoS2qLlAOJOsYYpFVU/4suf5jFmGkBr7ayXfKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDqEgbWyJRwgh1t+q+nF81o3U/WL7zjedM8IUZ6GfpzQgIhAORYSIwM1Km0eb0TwUONumzRIeIJ5IcPcUzLE8y0018x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":889013},"type":"module","engines":{"node":">=18"},"gitHead":"ab4aaf12351539978a82a1641f49fa1ebef056a2","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:kicad":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs kicad-cli","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"_nodeVersion":"22.23.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.32.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.7_1793525332536_0.1117564886155139","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"_id":"@heypcb/mcp@0.1.8","bin":{"heypcb-mcp":"dist/cli.js"},"bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"dist":{"shasum":"7ba6a68ccd965093e9cade421114f23d581ffd9e","tarball":"https://registry.npmjs.org/@heypcb/mcp/-/mcp-0.1.8.tgz","fileCount":5,"integrity":"sha512-2g/5cjTFXk3lfv9XNKtP+Qv0ic6LIH8k0ynZXYy/ldwSQ2rb84JYU6hFaquW327N6BCu/lwIYxJ1HkLpLcUiiA==","signatures":[{"sig":"MEUCIQD6Uio1e3ku0TiirsLBM3KwxvYATC3LF0tUA8VWSRXLuAIgSkYVK5FGDlgJn2sAEHEJ8ldQIZJAfIkhBOmgmM15qBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC2OASrqsq2g9zxI6ICNofiiXGSMhQvCnnFcQZyHJ5SdAiBNmg/6cwygIF0Vm0iJAm2viX9C85YJWito+OS2qji5Fw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heypcb%2fmcp@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":891504},"name":"@heypcb/mcp","type":"module","engines":{"node":">=18"},"gitHead":"b6174c8ed40256a7b8aef49a40036e88c774c08a","license":"MIT","scripts":{"test":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepack":"node scripts/build.mjs","typecheck":"tsc -p tsconfig.json","test:kicad":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs kicad-cli","test:smoke":"node scripts/clean.mjs .test-build && tsc -p tsconfig.test.json && node scripts/run-tests.mjs smoke"},"version":"0.1.8","_npmUser":{"name":"enkhbold470","email":"enkhbold470@gmail.com"},"homepage":"https://heypcb.ai/mcp","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"_npmVersion":"10.9.9","description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","directories":{},"maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"_nodeVersion":"22.23.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.9","devDependencies":{"zod":"4.6.5","esbuild":"0.28.2","typescript":"5.9.3","@types/node":"22.20.5","@modelcontextprotocol/sdk":"1.32.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.8_1793628611610_0.2758439158468693"}}},"time":{"created":"2026-10-12T20:11:49.224Z","modified":"2026-11-02T14:10:12.219Z","0.0.0-stage":"2026-10-12T20:11:49.224Z","0.1.0":"2026-10-12T20:12:45.183Z","0.1.1":"2026-10-12T20:23:49.159Z","0.1.2":"2026-10-12T21:31:46.085Z","0.1.3":"2026-10-13T21:53:31.274Z","0.1.4":"2026-10-13T22:00:03.687Z","0.1.5":"2026-10-13T22:23:23.373Z","0.1.6":"2026-10-21T04:33:20.309Z","0.1.7":"2026-11-01T09:28:52.624Z","0.1.8":"2026-11-02T14:10:11.756Z"},"bugs":{"url":"https://github.com/HeyPCB/heypcb-mcp/issues"},"license":"MIT","homepage":"https://heypcb.ai/mcp","keywords":["mcp","model-context-protocol","kicad","pcb","heypcb","claude","codex","cursor"],"repository":{"url":"git+https://github.com/HeyPCB/heypcb-mcp.git","type":"git"},"description":"HeyPCB for AI agents: a local MCP server (stdio) that proxies to HeyPCB's remote MCP server and adds local KiCad upload and export-to-disk tools.","maintainers":[{"name":"enkhbold470","email":"enkhbold470@gmail.com"}],"readme":"# @heypcb/mcp\n\nHeyPCB for AI agents. Add HeyPCB to Claude Code, Codex, Cursor or Claude\nDesktop and design real KiCad boards from your agent: HeyPCB's server does\nthe engineering (Inky's design agent, parts, placement, routing, DRC/ERC,\nfab checks), and your agent calls a few high-level tools such as\n`build_board`, `get_board`, `check_board` and `export`. Or your agent\ndesigns the board itself with HeyPCB's parts library, proven circuit blocks\nand checks: `search_parts`, `get_part`, `add_parts`, `add_block`, `connect`,\n`get_netlist` and the rest of the parts and circuit tools, then lays it out\nwith `set_board_outline`, `set_board_rules`, `move_part`, `lock_parts`,\n`add_ground_pour` and `get_board_layout`, and takes it to fab-ready by\nfollowing `check_board`: every finding names the call that fixes it\n(`fixWith`). It sees what it built with `preview_board` (chosen layers,\nhighlighted nets and parts, open connections), measures it with\n`inspect_net`, `inspect_part` and `check_placement`, says where parts go with\n`set_placement_rules`, controls copper with `rip_up_net`, `add_pour`,\n`add_keepout` and `stitch_vias`, goes back through the board's history with\n`list_history`, `restore_board` and `redo`, and reads the playbook with\n`get_guide`.\n\n## Two ways to design\n\n| | You say | Your agent calls |\n|---|---|---|\n| **Let HeyPCB design it** | \"Build a USB-C powered board for …\" | `build_board`, `get_board`, `check_board`, `export`. HeyPCB's server does the engineering: Inky's design agent, parts, placement, routing, DRC/ERC and fab checks. |\n| **Let your agent design it** | \"Add an LDO and wire it to the MCU\" | Parts and blocks: `search_parts`, `get_part`, `add_parts`, `add_block`, `connect`, `get_netlist`. Layout: `set_board_outline`, `set_board_rules`, `move_part`, `lock_parts`, `add_ground_pour`, `get_board_layout`. Then `check_board` until the board is fab-ready. Each finding names the call that fixes it (`fixWith`). |\n\n## Quick start\n\nHeyPCB runs the MCP server for you at `https://api.heypcb.ai/mcp` (Streamable\nHTTP, OAuth sign-in in your browser). Nothing to install:\n\n```sh\nclaude mcp add --transport http heypcb https://api.heypcb.ai/mcp\n```\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=heypcb&config=eyJ1cmwiOiJodHRwczovL2FwaS5oZXlwY2IuYWkvbWNwIn0%3D)\n\nclaude.ai (as a custom connector) takes the same URL. Codex cannot sign in\nto the remote server (since codex-cli 0.165 it refuses an approve page on\nanother origin than the issuer), so give Codex the local server below. One\npaste adds it and signs it in with a code:\n\n```sh\ncodex mcp add heypcb -- npx -y @heypcb/mcp && npx -y @heypcb/mcp login\n```\n\n### Which one do I need?\n\n| | Remote server | Local server (this package) |\n|---|:---:|:---:|\n| Install | nothing | Node.js 18+ |\n| All HeyPCB tools | ✅ | ✅ |\n| Work on a KiCad project in its own folder, edits synced back | ❌ | ✅ `open_kicad_project` |\n| Upload a copy of a KiCad project from your disk | ❌ | ✅ `upload_kicad_project` |\n| Save Gerbers, BOM, CPL, STEP to a folder | ❌ | ✅ `save_export` |\n| HeyPCB parts in the project's own libraries | ❌ | Awaiting the parts-assets API |\n| KiCad's own DRC/ERC and exports, free and offline | ❌ | ✅ `check_local`, `export_local` |\n\nUse the remote server unless you use Codex or need one of the local tools.\n\n## Tools\n\nBoth servers offer every tool below, with the same names; the local server\nadds [its own](#the-local-server-this-package). Each tool's full description\nand input schema come from the server itself, so your agent always reads the\ncurrent ones.\n\nSeven tools run paid engine work, at what the same work costs on heypcb.ai:\n`build_board`, `ask_inky`, `answer_decision`, `check_board`, `route_board`,\n`place_parts` and `preview_placement` (`estimate` prices them first). Every\nother tool says it is free in its own description; the design and layout\ntools are rate-limited.\n\n<details>\n<summary><b>Let HeyPCB design it</b></summary>\n\n| Tool | What it does |\n|---|---|\n| `whoami` | Your HeyPCB account, plan, balance and what can run. |\n| `list_projects` | Your HeyPCB boards: id, name, last update, web link. |\n| `create_project` | Create an empty HeyPCB board project. |\n| `build_board` | Design a whole PCB from a plain-language brief: schematic, parts, placement, routing and checks. |\n| `ask_inky` | One turn of Inky, HeyPCB's design agent, on a project: a question or an edit. |\n| `wait_for_turn` | Wait for a running Inky turn and return its result. |\n| `stop_turn` | Stop a running Inky turn at its next step. |\n| `answer_decision` | Answer a decision Inky asked for (for example approve the layout). |\n| `get_board` | Board facts: layers, size, parts, nets, routed %, DRC/ERC counts, fab readiness, web link. |\n| `get_board_image` | A picture of the PCB (top or bottom), a schematic page or the 3D view. |\n| `check_board` | Run DRC, ERC and the placement check, the full verification, or the fab check, with findings. |\n| `route_board` | Autoroute the board, or only the nets you name, and return the result. |\n| `place_parts` | Re-place the board's parts. |\n| `preview_placement` | Plan a re-place on a copy and show it before anything moves. |\n| `apply_placement` | Land a previewed placement plan exactly, as one undoable change. |\n| `export` | Gerbers, KiCad project, BOM, pick-and-place or STEP as a short-lived download link. |\n| `read_design` | Read the design or a schematic/board file's text for inspection. |\n| `estimate` | The price of an operation before running it. |\n\n</details>\n\n<details>\n<summary><b>Design it yourself: parts and circuit</b></summary>\n\n| Tool | What it does |\n|---|---|\n| `search_parts` | Find real, orderable parts: LCSC stock and price, verified footprints, KiCad symbols. |\n| `get_part` | A part's pins and facts: an LCSC part card, a KiCad symbol's pins, or a part on the board. |\n| `add_parts` | Add parts to the board's design; the board places them. |\n| `remove_parts` | Delete parts from the design and the board. |\n| `set_part_value` | Change one part's value in place. |\n| `rename_part` | Rename a designator everywhere: design, nets, schematic and board. |\n| `source_parts` | Give every unsourced part an orderable LCSC part. |\n| `connect` | Connect pins (REF.PIN) into named nets. |\n| `disconnect` | Remove pins from every net they are on. |\n| `list_blocks` | HeyPCB's proven circuit blocks (USB-C power, regulators, MCU modules…). |\n| `add_block` | Add a proven circuit block to the design. |\n| `set_net_class` | Set a net class: width, clearance, current, impedance, differential pairs. |\n| `rename_net` | Rename a net. |\n| `set_no_connect` | Toggle a no-connect flag on a pin. |\n| `get_netlist` | Every net with its pins, class, drivers and current grade. |\n| `get_design_summary` | The design in one compact read: parts, nets, counts, unsourced parts. |\n| `get_schematic` | One schematic page as text, with the page list. |\n| `tidy_schematic` | Re-lay the schematic's hand-placed symbols with HeyPCB's own layout. |\n| `get_capable_pins` | Which MCU pins can carry a function (UART, I2C, SPI, PWM…) and are free. |\n\n</details>\n\n<details>\n<summary><b>Design it yourself: the board</b></summary>\n\n| Tool | What it does |\n|---|---|\n| `set_board_outline` | Set the board's outline in mm (rect, rounded, circle, polygon…), with corner mounting holes. |\n| `set_board_rules` | Set the copper layers, HDI, metal core or flex, thickness, colours and finish, and the design rules, e.g. JLCPCB's. |\n| `move_part` | Move parts on the board: x/y, a shift, beside a pin, against an edge; a routed board keeps its routing. |\n| `lock_parts` | Pin parts where they are so place_parts keeps them. |\n| `unlock_parts` | Release locked parts. |\n| `set_placement_rules` | Say where parts go: edges, locks, caps by a pin, signal chains, rings and grids. |\n| `add_ground_pour` | Pour the GND plane once routing is finished. |\n| `add_pour` | Pour copper on any net and layer, once routing is finished. |\n| `remove_pour` | Take a copper pour off the board. |\n| `add_keepout` | Keep an area clear of tracks, vias, pads, pours or parts. |\n| `rip_up_net` | Delete a net's tracks and vias so it can be routed again. |\n| `stitch_vias` | Stitch a net's pours together with a grid of vias. |\n| `tune_lengths` | Match lengths of a bus or a differential pair with meanders, kept only when DRC holds. |\n| `add_text` | Write text on the board (silkscreen, copper or mask). |\n| `add_mounting_hole` | Put a screw hole (M2–M4) on the board. |\n| `tidy_silkscreen` | Re-place every silkscreen designator beside its part, clear of pads and openings. |\n\n</details>\n\n<details>\n<summary><b>See, measure and go back</b></summary>\n\n| Tool | What it does |\n|---|---|\n| `get_board_layout` | The layout in one read: outline, layers, rules, every part's place, rotation, side and box. |\n| `preview_board` | A CAD view of the board: chosen layers, highlighted nets and parts, open connections, cropped. |\n| `inspect_net` | A net measured: status, copper per layer, vias, every open connection pin to pin. |\n| `inspect_part` | A part measured: place, edge gaps, neighbours, open pins, the nearest cap to each supply pin. |\n| `check_placement` | Grade the placement: decoupling, crystals, connectors at edges; each finding names its fix. |\n| `check_routing` | Grade routed copper against pairs, matched lengths and impedance the net classes state. |\n| `undo` | Undo the last change to a project. |\n| `list_history` | Every change the board can go back through, and what redo can put back. |\n| `restore_board` | Put the board back to any point in its history, in one guarded call. |\n| `redo` | Put back changes undo or restore_board took back. |\n| `save_checkpoint` | Save the whole board under a label, past the 50 changes the history keeps. |\n| `delete_checkpoint` | Delete a saved checkpoint. |\n| `get_guide` | The playbook for designing a board with these tools yourself. |\n\n</details>\n\n## The local server (this package)\n\n`npx -y @heypcb/mcp` runs a small MCP server on your computer (stdio). It\npasses every HeyPCB tool through to the remote server unchanged, with the\nsame names, schemas, results, progress and cancellation. It has no design\nlogic of its own. It adds the tools that need your files:\n\n| Tool | What it does |\n|---|---|\n| `open_kicad_project` | Binds a KiCad project folder on this computer to one HeyPCB project, so every HeyPCB tool works on it and its edits land back in the folder ([see below](#working-on-a-kicad-project-in-its-own-folder)). |\n| `upload_kicad_project` | Zips a KiCad project folder on this computer (board, schematic hierarchy, `.kicad_pro`, `.kicad_dru`, library tables and project-local libraries, but not 3D models, backups or `.kicad_prl`; at most 50 MB) and imports it as a new, separate HeyPCB project: a one-off copy. Returns the project id and its web link. |\n| `save_export` | Saves Gerbers, the KiCad project, BOM, pick-and-place (CPL) or STEP into a folder here, atomically, and returns the file's path. |\n| `install_parts` (not advertised) | Refuses before writing until the server exposes a supported parts-assets API. |\n| `check_local` | KiCad's own DRC or ERC on the project here, with `kicad-cli`: free, no network. A fast pre-check; `check_board` stays the full verification. |\n| `export_local` | Gerbers (+ drill), BOM, pick-and-place or STEP from the project here, with `kicad-cli`. |\n| `restore_local` | Puts back files a sync backed up before HeyPCB's changes replaced them. |\n\nIt needs Node.js 18 or newer and nothing else. Everything it uses is bundled\ninto one file. `check_local` and `export_local` also need KiCad 8 or newer\ninstalled (`kicad-cli` on `PATH`, or in KiCad's standard install folder).\n\n### 1. Sign in (once per computer)\n\n**Option A: sign in with a code**\n\n```sh\nnpx @heypcb/mcp login\n```\n\nIt opens heypcb.ai/connect and shows a code; check the page shows the same\ncode and approve. The sign-in is stored in `~/.config/heypcb/credentials.json`\n(`%APPDATA%\\heypcb\\credentials.json` on Windows), readable only by you. A\nrunning server picks it up on its next call, without a restart.\n\n**Option B: use a personal key**\n\nMake one in **heypcb.ai → Settings → Devices & API keys** and give it to the\nserver as `HEYPCB_API_KEY` (examples below). A key is used instead of a\nstored sign-in while it is set.\n\n> [!TIP]\n> Without either, the server still starts, and every tool answers with these\n> two ways to sign in.\n\n### 2. Add it to your agent\n\n#### Claude Code\n\n```sh\nclaude mcp add heypcb -- npx -y @heypcb/mcp\n# or with a personal key instead of `login`:\nclaude mcp add heypcb -e HEYPCB_API_KEY=hpcb_pk_… -- npx -y @heypcb/mcp\n```\n\n#### Cursor\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=heypcb&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBoZXlwY2IvbWNwIl19)\n\nOr add it by hand to `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"heypcb\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@heypcb/mcp\"]\n    }\n  }\n}\n```\n\n#### Codex\n\nIn `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.heypcb]\ncommand = \"npx\"\nargs = [\"-y\", \"@heypcb/mcp\"]\n# env = { HEYPCB_API_KEY = \"hpcb_pk_…\" }\n```\n\n#### Claude Desktop\n\nIn `claude_desktop_config.json` (Settings → Developer → Edit Config):\n\n```json\n{\n  \"mcpServers\": {\n    \"heypcb\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@heypcb/mcp\"],\n      \"env\": { \"HEYPCB_API_KEY\": \"hpcb_pk_…\" }\n    }\n  }\n}\n```\n\n### 3. Try it\n\nAsk your agent, for example:\n\n- \"Upload my KiCad project at `~/boards/sensor` to HeyPCB and run the full check.\"\n- \"Save the Gerbers and BOM for that project into `~/boards/sensor/fab`.\"\n- \"Open my KiCad project at `~/boards/sensor`, add a 3.3 V LDO and route the board.\"\n\n### Working on a KiCad project in its own folder\n\nAsk your agent to open the project (`open_kicad_project` with its folder).\nThe first time, the folder is uploaded as a new HeyPCB project and bound to\nit in `.heypcb/workspace.json` (added to `.gitignore` when the folder is in a\ngit repository). From then on, every HeyPCB tool called on that project\nkeeps the folder in sync:\n\n- **before a call**, a changed project is uploaded as a complete zip against its last synced revision;\n- **after a call that changes the design**, the files HeyPCB changed come\n  back. The old ones are copied to `.heypcb/backup/<revision>/` first, and\n  the result tells your agent which files to reload in KiCad;\n- **a file you save in KiCad while a call runs is never overwritten**:\n  HeyPCB's version is written beside it as `<file>.heypcb-new`, and syncing\n  waits until you choose (`on_conflict: \"take_heypcb\"` or `\"keep_local\"`).\n  The same choice resolves an edit made on heypcb.ai and here at once;\n- part-library installation is not advertised yet: the current API does not\n  serve the required part assets. Direct `install_parts` attempts refuse before writing.\n\nThe project stays a normal KiCad project: open it in KiCad at any time.\nList files you never want uploaded in a `.heypcbignore` next to the\n`.kicad_pro` (one gitignore-style pattern a line).\n\n### Commands\n\n```text\nnpx -y @heypcb/mcp          run the MCP server on stdio (what your agent runs)\n     --max-spend <amount>   block potentially charged calls until server-side caps are supported\nnpx @heypcb/mcp login       sign in with a code (--no-browser prints the link only)\nnpx @heypcb/mcp logout      sign out here and end that sign-in on HeyPCB\nnpx @heypcb/mcp status      who this computer is signed in as\n```\n\n<details>\n<summary><b>Environment variables</b></summary>\n\n| Variable | Meaning |\n|---|---|\n| `HEYPCB_API_KEY` | A personal key (`hpcb_pk_…`). Used instead of a stored sign-in. |\n| `HEYPCB_MCP_URL` | The remote server. Default `https://api.heypcb.ai/mcp`. |\n| `HEYPCB_API_BASE` | The API host for sign-in and the local tools. Default: the MCP URL's host, and it must be that host. |\n| `HEYPCB_WEB_BASE` | Where project links point. Default `https://heypcb.ai`. |\n| `HEYPCB_CONFIG_DIR` | Where the sign-in is stored. |\n| `HEYPCB_MCP_TIMEOUT_MS` | How long one remote call may run without progress. Default 10 minutes. |\n\n</details>\n\n### What it does with your computer\n\n- **Reads** a project's files when you call `upload_kicad_project`,\n  `open_kicad_project`, `check_local` or `export_local`, and before each\n  HeyPCB call on a bound project: only the project's own files listed\n  above, minus what `.heypcbignore` names. **A bound project's files are\n  uploaded to HeyPCB**, again whenever you change them. A file or link that\n  leads outside the project folder stops the upload; nothing partial is sent.\n- **Writes**, in a bound project folder, the files HeyPCB changed (after\n  backing up the old ones in `.heypcb/backup/`), `.heypcb/` itself, the\n  `heypcb` libraries and lib-table entries `install_parts` adds, and\n  `exports/` for `export_local`. It never writes outside the project folder\n  there, never through a link that leads out of it, and never over a file\n  you changed since the last sync.\n- **Writes** other files only when you call `save_export`: inside your home\n  folder (it creates missing folders), or into an existing folder elsewhere\n  that you can write to. It never follows a link out of your home folder,\n  never writes into folders that hold keys (`~/.ssh`, `~/.aws`, …), never\n  overwrites a file unless you pass `overwrite: true`, and writes through a\n  temp file it renames into place.\n- **Your sign-in** is only ever sent to the API host it was issued by, over\n  https (plain http only to `localhost`). Refreshes are coordinated between\n  every copy of the server running on your computer, so two agents never\n  spend the same refresh token.\n- **Names your agent and this computer** to HeyPCB, so a board's history\n  can say \"Sam, with Claude Code on Sams-MacBook-Pro\": `login` sends this\n  computer's name (its hostname), and every request the name your agent\n  gives itself when it starts the server (Claude Code calls itself \"Claude\n  Code\"). With a personal key, the history names neither.\n\nIf a connection drops after an edit starts, the edit may still complete.\nThe server returns `write_outcome_unknown` with `inspectWith`, naming the\nread to make before sending another edit. It never automatically repeats\nthat write. A read can be retried safely; a running operation is collected\nusing its existing turn, job or handle.\n\n## Billing\n\nTools cost what the same work costs on heypcb.ai, from the same account and\nwallet. `estimate` prices an operation before it runs; `whoami` shows the\nbalance — and, from the local server, what this session has spent. The\nlocal tools are free.\n\nA session `--max-spend` or per-call `_meta.heypcb.maxCost` is a spending\nconstraint. The current server does not advertise enforcement of these\nmetadata caps, so potentially charged calls are refused before dispatch\nwhen any cap is supplied (including zero). Verified free reads and local\ntools remain usable. Without a cap, pre-existing remote behavior is\nunchanged. A client-generated key does not itself prove server billing\nidempotency; a lost write reply still requires readback, never blind replay.\nSession charge totals are shown only when the server supplied charge data;\nmissing billing metadata is unmeasured, not a measured zero.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| Every tool says to sign in | Run `npx @heypcb/mcp login`, or set `HEYPCB_API_KEY`. Check with `npx @heypcb/mcp status`. |\n| Claude Desktop can't find `npx` | It starts servers with a short `PATH`. Put the full path from `which npx` in `command`. |\n| Codex says to sign in after `login` worked | Codex starts servers with a short environment. If you set `HEYPCB_CONFIG_DIR` or `XDG_CONFIG_HOME`, pass it on: `codex mcp add heypcb --env HEYPCB_CONFIG_DIR=… -- npx -y @heypcb/mcp`. |\n| Running `npx @heypcb/mcp` in a terminal prints a hint and waits | That's expected: your agent starts the server, not you. Add it to your agent as shown above. |\n| A long call stops with `remote_timeout` | It may still be running on HeyPCB. Read its state (`wait_for_turn` for a turn, `get_board` for a board) before calling it again, or raise `HEYPCB_MCP_TIMEOUT_MS`. |\n\n## Source\n\nThe source is at https://github.com/HeyPCB/heypcb-mcp. Issues and pull\nrequests are welcome there; see `CONTRIBUTING.md`, and send security\nreports as described in `SECURITY.md`. Releases are mirrored there from\nHeyPCB's own repository. That GitHub repository's CI then publishes each\nrelease to npm with provenance, so npm links each version to the commit\nand the build that made it.\n\n<details>\n<summary><b>Development</b></summary>\n\nThe package has its own pnpm lockfile and is its own workspace root.\n\n```sh\npnpm install --ignore-workspace --frozen-lockfile\npnpm run typecheck\npnpm run test          # node --test against a fake HeyPCB host\npnpm run build         # dist/cli.js, one bundled file\npnpm run test:smoke    # the built file over stdio\n```\n\nReleasing: bump `version` in `package.json` and `src/version.ts` (a test\nholds them equal) and add the release to `CHANGELOG.md`. When that commit\nreaches `main` in heypcb-mcp, its CI publishes it to npm, with provenance, if\nthat version is not on npm yet.\n\n</details>\n\n## Changes\n\nWhat each release changed is in\n[CHANGELOG.md](https://github.com/HeyPCB/heypcb-mcp/blob/main/CHANGELOG.md).\n\n## License\n\nMIT; see `LICENSE`. The bundled packages' notices are in\n`dist/THIRD-PARTY-NOTICES.txt` in the published package.\n","readmeFilename":"README.md"}