{"_id":"@adchengzhi7/sandbox-mcp","_rev":"16-41d286a7868096a7d815b99e62d0f395","name":"@adchengzhi7/sandbox-mcp","dist-tags":{"latest":"0.15.1"},"versions":{"0.1.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.1.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.1.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"ebc39c3fdb634d9e2a05ef82099d71e1b4c2f0a0","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.1.0.tgz","fileCount":6,"integrity":"sha512-vICNrV9JSRGN66RpZ6QYlbabAMgVj8l1vgkZV+7sP3R0vXo6oVxud6MT5LwHonbrw0muccd9SHv2BEhziT+ybQ==","signatures":[{"sig":"MEYCIQCnrEhNk6SGE+bEGYY9Xe8iLs5INeg7Fqaz3I9OjQY3bwIhALrNjPvw5t5xzVmEfTw/VjK1Nls5x/b7qgXaQd8GXYvE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22889},"type":"module","engines":{"node":">=18"},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"苗林練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.1.0_1782407502308_0.15179512767495473","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.2.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.2.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"f9c2e29e052b7c6cc48ff5bdad93e6d9c0d06596","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.2.0.tgz","fileCount":7,"integrity":"sha512-mrskGGVBLi05P1iEvxecGWSTPw2nkzKGt9aSQknqjq7Q7CAvL2gODVII+7ra0u514eaViToXoFvvKm60P7Sebg==","signatures":[{"sig":"MEUCICn28IBCV7XP436FgW+0/2MYxHj4c1Sxzoqh4q9OFnqQAiEAo1WTH3qCsQB8JjTVL9owteWdOvKj9Ok0VLFiBMBnLyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44417},"type":"module","engines":{"node":">=18"},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"苗林練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.2.0_1782708074594_0.2936353533150673","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@adchengzhi7/sandbox-mcp","version":"0.2.1","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.2.1","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"5e022e287cbd9b28bc1252964587e4fa6c0b7c1b","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.2.1.tgz","fileCount":7,"integrity":"sha512-HirXSQruSlDxqhfPrKIlehWRJsb3sgrbD19ixnAUClDDozvo1M2I10a7oGsi54WFiypsCFkEjbwOl27+dWWNhw==","signatures":[{"sig":"MEUCIHgjgIsmxLHA31NVDfTOjOcDCyDMPHBh8u1FNoui/sqwAiEApW//9xx87t1LCYjdoAFmLoO9krg0cLm1/zxmual8KYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47529},"type":"module","engines":{"node":">=18"},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"苗林練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.2.1_1782828201666_0.9816620034016637","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.3.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.3.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"9891703399b3daacfbd14373727f51ee838b0b36","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.3.0.tgz","fileCount":8,"integrity":"sha512-PqYdjn5BBqOLrfMm9MRgyNEbfbT/eLdL/Q90atQyXjNQ8Kd0katesajzTBUgJMx6VPePR+rZUxOhK4TCs3c6zA==","signatures":[{"sig":"MEQCIB6BY4lv46ue9rCHnGYJHi1Hd9wh0YSZamHUqdOY5pDhAiBpY2eMbgpGRib91gn35oDqBH8Ba147m87ytRrU5Wiyig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56282},"type":"module","engines":{"node":">=18"},"scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"苗林練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.3.0_1783328624722_0.25983992863090655","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.4.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.4.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"df24cff216af4e29dd20b0e01d4f15caf27c1e24","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.4.0.tgz","fileCount":9,"integrity":"sha512-+tVGFUy0VWfldW+8DTVuwa48NZzxziq75mC3LjefXkXtRHqaq06Nzj+yRt16WH+vjdQHuiIiqOedyjvZTvyzRA==","signatures":[{"sig":"MEUCIEasLS6sdtYF8rpu7asZkonYPv/3vDa4tnpbQnK4sKYUAiEAxCYWeRB46VeDheietS/5voWr/fRljYPhvWqX5hgj6Sw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59939},"type":"module","engines":{"node":">=18"},"gitHead":"b81d55624e210588072ef090ef9e1834163cfc07","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.4.0_1783349954028_0.953430526783996","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.5.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.5.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"33c8af33706847cee2bb8bae36c1c7083c535cde","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.5.0.tgz","fileCount":10,"integrity":"sha512-7Vj0WoMwh/rV9buOOliqz2dvITNDfqc85xkIQCQtIjs88UB3/QvS12jxay78u46vM8h9UXrHvbONw1rxlkNvRg==","signatures":[{"sig":"MEUCIExFG1sk43heeHpMRhNxVJA/dA348Q/9iITtvJu89oYkAiEApeLJFpTxVTd+NjNM1DAlGoDh3BhYsABUIN2Z2X5DqB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62941},"type":"module","engines":{"node":">=18"},"gitHead":"74f54742ba37bccfb7abe442fcec292b880f1131","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.5.0_1783769021543_0.5908067008312066","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.6.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.6.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"7027ea0519ab8213932397d127fd6c72cab6d2f9","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.6.0.tgz","fileCount":10,"integrity":"sha512-Hlg0qPeS7EXaBDGCugdN3zS/4SAEYsnQKGG3mCrkmrBm5UAaeGKNDiU6ggLDcgTOOCUacjP0gjgDD9GrvBVBPA==","signatures":[{"sig":"MEUCIQDON8IvLIQeA0FxGq3GmSsLNPwJhpmx7omXwwxwdchz6wIgYIl5QlSm6r9SimQt01emPz/S7f9uH7MmJSjgz6p7RtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65186},"type":"module","engines":{"node":">=18"},"gitHead":"156ac8dd4abfa056714a853dbb77a74d074fba0f","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.6.0_1784121284014_0.10024084514750342","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@adchengzhi7/sandbox-mcp","version":"0.6.1","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.6.1","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"4af6cb9f38683bdf5aeeed9fb4f7d9adea6850ba","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.6.1.tgz","fileCount":10,"integrity":"sha512-DJ1LTUbn/NnWKe0WbQ2l0nJExfNo7+kkIEjqY9LmCPRAIlSBvmcOlZVCVO8OBsyossK2Yc6IMMH8R+rhZEqsEA==","signatures":[{"sig":"MEQCIA7rYjkWM4dC4S9rECLb5zcM0bKlMx0JPAmFonDEvemVAiBLD0IKjdCsAIue4bYyG1qb+6B4MR9/tf2c1P3tyspblA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65371},"type":"module","engines":{"node":">=18"},"gitHead":"1f980ee206f4a999111b33559612ada8c8930ece","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.6.1_1785169823767_0.04327897853008955","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.7.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.7.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"de25c9e026ad1e95b8bbe4acb40d4002c7f3ac1e","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.7.0.tgz","fileCount":10,"integrity":"sha512-m1D50tks955yDUy9nDQ67lfCQ5I1AzmuHT8Ao3UEANoyeq7Dg8FcdpAx/Vk9T2FiOxeg1DMil8Xmn77jMlwPPQ==","signatures":[{"sig":"MEQCICmZjBBWva5S2n+0TXM3FN7OL+gPZzCeOieH0G2ulotoAiBH2+V3PYnWOAAOhfBLTUtyMxqe5F6WuLGrwDh1ZjyTCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68492},"type":"module","engines":{"node":">=18"},"gitHead":"60eb090f13d56d39562021d211da1b2982e8d975","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.12.1","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.7.0_1787209746967_0.03375452581061156","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.8.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.8.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"8fa1e5dc0fedbdefe360e34b0883f20887dea24c","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.8.0.tgz","fileCount":10,"integrity":"sha512-F1zjh6Y2IM6mYHF2WsRx6TsZa7gnzj5DqDPvl4kmMZtVkvEh14e5KaGuX1UZLl+BNKZvOu+c+ODKnc6yYl+IMg==","signatures":[{"sig":"MEQCIGSkjpzSxQGeA6geGrqyYFTvv2Dy00z2x6RkyijqMXRFAiBi0ap2Z1LsS8g6GgBZERjZvQJwlCWf3LXCFp0KWsqhCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69405},"type":"module","engines":{"node":">=18"},"gitHead":"9793ce8205de2c60d0146d98bf53fdbf6bbaf341","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.12.1","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.8.0_1787213589567_0.5743915436543268","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.9.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.9.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"42bacb9ab5c7180cb38a230cb943d9ea6c383c3d","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.9.0.tgz","fileCount":10,"integrity":"sha512-E35MsRf88mGrlxbV29+2LLo1qSGGlrBKssIh8PNWMz2hnJjCwpHqWPe2SYKwK0afhjDUNkgpbjFuhDhp2iHFtQ==","signatures":[{"sig":"MEUCIQCxdv4BWMZVhOibCJz9BMH8kNLs3GFiJRp3FUvjrgo0EwIgWOiS7Yl4RtBcXctMf3Y61jDN8rz9HqKQVL2fLYLJdYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70352},"type":"module","engines":{"node":">=18"},"gitHead":"2477df9fb0ac6aa8d6a1310021d2fbaf26a03f11","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.12.1","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.9.0_1787231248646_0.6384253016180803","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.10.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.10.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"17961c9cd003339e80a75c3e9e69b6ae8a335a99","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.10.0.tgz","fileCount":11,"integrity":"sha512-lTx8EM8bpI1/DwBfqPnGpBineOzBAdbvXNWaOaY1pKGe7DHyrX8eCo7aLK5ZzA83z/NHhMP7tySU7Rms0LK/1A==","signatures":[{"sig":"MEYCIQC98E3w+YL1lyNlwLkTRIsxPQPqUjJEEi5luakNVxel+QIhAJeRGz1lT/X/ECEjwNJ1ddFXlKORZYfnDhpbPkLuGzf4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69488},"type":"module","engines":{"node":">=18"},"gitHead":"8ec4712008385c0d739b92c3c11154c4969bab72","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"rm -rf dist && tsc && cp src/catalog-snapshot.json dist/catalog-snapshot.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.10.0_1788517609798_0.9622500633721669","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.11.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.11.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"2b5095328a777ffb022a5f3c8ef2bb254154db6f","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.11.0.tgz","fileCount":12,"integrity":"sha512-JsT86C7OX8OYj2O6XTCGPQgP+ZIQ/ydPZnIuVz6jgJjZyjgGnOzMb5DEBnIr9YoOyxvntbid4HaAhjiDcBiL6w==","signatures":[{"sig":"MEQCIG2qzrLP9Xx1ra6SwavFgy/KY+fZqBgAZNdz9RcSHdUYAiBdiZeEx2GY8Y1hrusrvTG+gMvoE8RkyUxUKOfnK5olLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72567},"type":"module","engines":{"node":">=18"},"gitHead":"bf06a634889a04a66d1aece506e1b4771188decd","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"rm -rf dist && tsc && cp src/catalog-snapshot.json dist/catalog-snapshot.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.11.0_1788544201995_0.6739417719409406","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.12.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.12.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"983d3055f2eb87a06a4852f78853357d64ea3383","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.12.0.tgz","fileCount":13,"integrity":"sha512-Vl8yCKNVGLWQwpBMRzjV0NY45IpSTJNF0zTxvZJQp+7sCcHDtv6rnmvCo9KR3uLKDw8dJJV7nBOSlZzcI4YzSw==","signatures":[{"sig":"MEUCIGEC0mAeCfUMKDOJUvvz/tIUrh7/D37CDSVPZRV6enY8AiEA/s8aGp1vg5/3NZ+7OmibIe0d0CmSdMWifE4Zjah7MNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85631},"type":"module","engines":{"node":">=18"},"gitHead":"74a139e8015285ba00defef2aadec5fe032fbd00","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"rm -rf dist && tsc && cp src/catalog-snapshot.json dist/catalog-snapshot.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.12.0_1788597880113_0.8882129249836943","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@adchengzhi7/sandbox-mcp","version":"0.15.0","keywords":["mcp","modelcontextprotocol","claude"],"license":"UNLICENSED","_id":"@adchengzhi7/sandbox-mcp@0.15.0","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"726da719ec1c999a81adf2a41074d369a47fda57","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.15.0.tgz","fileCount":14,"integrity":"sha512-fnbIS8Je4HLJMrsvvx+BLXksreHDrTfHx5Akssnbe1qgq2IxZsD4miW8F8yjacKpn9wGzFlWqgdbTPlxRhex4w==","signatures":[{"sig":"MEYCIQDwcx+EuNjpwfTqKnnV9ITvyXcV2CYULJx6bVfljcv/ggIhAJhGeuD4cdf9pd4ta5d319N177PeYEJlCkhgnmn3Qs3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQChaNmcXlmpZoXJ+OEpuKrNhbNF84dyigvkmgBihjbpbwIgGUlmrRIMApAVV4/d+9fk3jPPsgTGem/eVhl6eRUPQzs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118755},"type":"module","engines":{"node":">=18"},"scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"rm -rf dist && tsc && cp src/catalog-snapshot.json dist/catalog-snapshot.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/sandbox-mcp_0.15.0_1790587245121_0.8649814642544209","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"_id":"@adchengzhi7/sandbox-mcp@0.15.1","bin":{"sandbox-mcp":"dist/index.js"},"dist":{"shasum":"7815bc6dde62fd8386833ce7c0fdf84bc0399c3c","tarball":"https://registry.npmjs.org/@adchengzhi7/sandbox-mcp/-/sandbox-mcp-0.15.1.tgz","fileCount":14,"integrity":"sha512-Ic3xcH4Zv1NzBocIM31JxuFwhBuCDRNky3uu80vw2z/eoi0lsrWJT34pMtmvLO7186BquJBeAmzPHvDM2C32Tw==","signatures":[{"sig":"MEUCIQDaHUurCuYr7FHnrqmg5o+FEc2z5HEBrw+j877G6oaKfAIgVNuacMKqeu8wgMjlSte97MTLQdUD64ywaIsm4jiDxeM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD9FN1f1KqfY++KnBCXWW1E5SZwkV/m4i8xERdc9SdZVQIgMT648uAWw6fhdSA4XPruNYYVtCgztEAryLAvHXUWtWQ="}],"unpackedSize":119381},"name":"@adchengzhi7/sandbox-mcp","type":"module","engines":{"node":">=18"},"license":"UNLICENSED","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"rm -rf dist && tsc && cp src/catalog-snapshot.json dist/catalog-snapshot.json","prepublishOnly":"npm run build"},"version":"0.15.1","_npmUser":{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"},"keywords":["mcp","modelcontextprotocol","claude"],"_npmVersion":"11.9.0","description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","directories":{},"maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sandbox-mcp_0.15.1_1790752848942_0.5481591436107576"}}},"time":{"created":"2026-06-25T17:11:42.127Z","modified":"2026-09-30T07:20:49.259Z","0.1.0":"2026-06-25T17:11:42.440Z","0.2.0":"2026-06-29T04:41:14.733Z","0.2.1":"2026-06-30T14:03:21.801Z","0.3.0":"2026-07-06T09:03:44.862Z","0.4.0":"2026-07-06T14:59:14.176Z","0.5.0":"2026-07-11T11:23:41.681Z","0.6.0":"2026-07-15T13:14:44.197Z","0.6.1":"2026-07-27T16:30:23.917Z","0.7.0":"2026-08-20T07:09:07.130Z","0.8.0":"2026-08-20T08:13:09.758Z","0.9.0":"2026-08-20T13:07:28.861Z","0.10.0":"2026-09-04T10:26:49.945Z","0.11.0":"2026-09-04T17:50:02.182Z","0.12.0":"2026-09-05T08:44:40.262Z","0.15.0":"2026-09-28T09:20:45.206Z","0.15.1":"2026-09-30T07:20:49.028Z"},"license":"UNLICENSED","keywords":["mcp","modelcontextprotocol","claude"],"description":"練習室（沙盒）本地 MCP：用自然語言發佈 / 分享 / 申請上線靜態頁原型（多客戶白標，身分由 env 注入）","maintainers":[{"name":"adchengzhi7","email":"adchengzhi7@gmail.com"}],"readme":"# @adchengzhi7/sandbox-mcp\n\n練習室（沙盒）本地 MCP：讓你在 Claude（CLI / Desktop）裡用**自然語言**發佈、分享、申請上線靜態頁原型。\n\n多客戶共用一包：站台與品牌字樣由安裝指令的 `--env` 注入（見下方「多客戶（白標）環境變數」）。\n**請以你的練習室網站「MCP 安裝」頁產生的指令為準**——它已帶好你所屬站台的身分；以下為通用範例。\n\n## 安裝（一次性，一行）\n\n兩種身分方式可擇一（過渡期並存）：\n\n### A. 用 Google 登入（新，推薦）\n\n安裝時帶入 Google 用戶端 ID：\n\n```bash\nclaude mcp add miaolin-sandbox \\\n  --env SANDBOX_CLI_GOOGLE_CLIENT_ID=<你的 Google 用戶端 ID> \\\n  -- npx -y @adchengzhi7/sandbox-mcp\n```\n\n> 若你的 Google 用戶端類型需要 client secret，再加 `--env SANDBOX_CLI_GOOGLE_CLIENT_SECRET=<secret>`。\n\n首次使用前，在終端機登入一次（裝置授權流程，會給你網址＋代碼）：\n\n```bash\nnpx -y @adchengzhi7/sandbox-mcp login\n# 依畫面開網址、輸入代碼、按允許即可。之後憑證會自動更新。\n# 也可：npx -y @adchengzhi7/sandbox-mcp whoami   查看登入狀態\n#       npx -y @adchengzhi7/sandbox-mcp logout   登出清除憑證\n```\n\n或直接在 Claude 裡說「登入」→ 工具會給你網址＋代碼，照做後說「完成登入」即可。\n\n### B. 用發佈金鑰（相容路徑）\n\n先取得你的**發佈金鑰**（登入練習室後可複製），然後：\n\n```bash\nclaude mcp add miaolin-sandbox \\\n  --env SANDBOX_TOKEN=<你的發佈金鑰> \\\n  -- npx -y @adchengzhi7/sandbox-mcp\n```\n\n> 站台網址預設正式站；如需指向其他環境，加 `--env SANDBOX_ENDPOINT=https://...`。\n> 需要 Node.js（用 Claude CLI 通常已具備）。\n> 兩種都設時，**優先用已登入的 Google 身分**；未登入才退回發佈金鑰。\n\n## 多客戶（白標）環境變數（0.4.0 起）\n\n同一包可服務多個客戶沙盒；各站的 MCP 安裝頁產生的指令會自動帶好這些值：\n\n| 變數 | 作用 | 未設時的預設（＝首個客戶現況） |\n|---|---|---|\n| `SANDBOX_ENDPOINT` | 沙盒站台網址 | `https://miaolin-sandbox.vercel.app` |\n| `SANDBOX_HUB_NAME` | 客戶 / 母站名（工具說明文案） | `苗林` |\n| `SANDBOX_PRODUCT_NAME` | 產品名（工具說明文案） | `練習室` |\n| `SANDBOX_MCP_SERVER_NAME` | MCP server 名（serverInfo / 啟動 log） | `miaolin-sandbox` |\n| `SANDBOX_PUBLISH_ROOT` | （選用，0.14.0 起）相對路徑的解析基準；設定後 `directory` 才能帶相對路徑，否則相對路徑一律被擋下 | 未設定＝不接受相對路徑（`directory`／`folder_path` 一律必填且須為絕對路徑，見 0.15.0 說明） |\n\nenv 全不帶時行為與 0.3.x 逐字相同，既有安裝可直接升級。\n\n> **0.5.0 登入體驗**：`login` 時會自動幫使用者打開 Google 登入頁（只開 google.com 網址；開不了就照舊給網址＋代碼手動輸入）。\n\n> **0.4.0 憑證路徑變更**：Google 登入憑證改存 `~/.config/doremi-sandbox/<endpoint-host-slug>/auth.json`\n> （依站台分目錄，同一台電腦可同時登入多個客戶沙盒）。舊路徑 `~/.config/miaolin-sandbox/` 不再讀取，\n> 升級後如遇「尚未登入」，重跑一次 `login` 即可。\n\n> **0.12.0 新增「下載」**：`download_page` 把已發佈頁面的原始檔載回本機資料夾（並寫下對應檔，之後同資料夾 `publish_page`＝更新同一頁、沿用原頁名）；`get_page_files` 只看內容不落地。在此之前沙盒只能「發上去」、不能「載下來」，本機沒有原始檔的頁改不了。伺服器端需部署含 `get_page_files` 的版本，否則 `download_page` 會白話提示「站台需更新」。\n\n> **0.14.0 資料夾路徑一律要求絕對路徑**：`publish_page` / `check_folder` / `download_page` 的\n> `directory` 參數，**只要有明講就必須是絕對路徑**（例如 `/Users/xxx/my-site`）；相對路徑或 `.`\n> 一律擋下並給白話說明。原因：這支程式看不到你目前 shell 在哪個目錄——中途 `cd` 不會讓它跟著變，\n> 用相對路徑常常會猜錯資料夾（甚至把整個工作目錄誤發出去），且猜錯不會報錯。\n> 若你想繼續用相對路徑，可設定環境變數 `SANDBOX_PUBLISH_ROOT=<一個固定的絕對路徑>`（見下方\n> 「多客戶（白標）環境變數」表），之後相對路徑會以它為基準解析。\n\n> **0.15.0 省略資料夾參數也一律擋下（不再是 0.14.0 的例外）**：`directory` 改成一律必填\n> （兩種模式都一樣）——**0.14.0 原本「省略＝用目前工作目錄」的例外已經取消**：只要工作目錄\n> 檔案數/總量夠小（≤20 個檔、≤3MB），連「量太大先確認」這道保險都攔不到，省略參數就會無聲\n> 把整個工作目錄發出去，這是差點外洩事故的最後一條路。省略時會擋下並在錯誤訊息附上「目前\n> 看到的工作目錄絕對路徑」，AI 讀到後照著這個路徑帶入 `directory` 即可——`cd 目標資料夾 &&\n> claude` 這個暫時做法**仍然可行**，只是不再「連問都不問」就自動生效，AI 要明確帶一次路徑。\n> 同時新增 `folder_path` 作為 `directory` 的別名（同一件事的兩個名字，效果一樣；兩者都帶且\n> 值不同會報錯）；三個工具現在也會擋下任何不認得的參數名並給白話錯誤，不再被 MCP SDK 預設的\n> 「不認得的欄位就靜默丟棄」影響（過去客戶帶 `folder_path`，因為工具只認得 `directory`，\n> 這個參數會被悄悄丟掉，等於整個發佈都沒帶資料夾參數）。\n\n## 怎麼用\n\n裝好後，在你做網頁的資料夾裡，直接跟 Claude 說：\n\n- 「把這個資料夾**發佈**到練習室」→ 回上線連結 + 版本\n- 「先**檢查**這個資料夾能不能發佈」→ 本機預檢，不會真的上傳\n- 「**列出**我發佈過的頁」\n- 「把剛剛那頁**開分享連結**」/「**分享給** a@b.com」/「**改回私密**」\n- 「列出這頁的**分享狀況**」/「**撤銷**某個分享」\n- 「列出**版本**」/「**切到** v2」\n- 「把那頁**載下來**我要改」→ download_page 載回資料夾 → 改 → 同資料夾再「發佈」就是更新同一頁\n- 「這頁我要**申請上線**」（開苗林審核工單，永不自動上線）\n- 「把這頁**下架**」\n\n## 工具一覽\n\n| 工具 | 作用 |\n|---|---|\n| `publish_page` | 發佈/更新一個資料夾的靜態頁（本機先掃密鑰，掃到拒發；同資料夾再發＝更新同頁、版本遞增、沿用上次頁名——要改名就明講 module_name） |\n| `check_folder` | 發佈前預檢：純本機檢查（副檔名、大小、檔名空格、疑似密鑰、進入點等），不上傳、不需登入 |\n| `list_my_pages` | 列出我發佈過的頁 |\n| `share_page` | 開分享連結 / 指名分享某 email / 改回私密 |\n| `revoke_share` | 撤銷某條分享（連結或指名） |\n| `list_shares` | 列出某頁目前的分享 |\n| `list_versions` | 列出某頁版本 |\n| `get_page_files` | 取回某頁已發佈的原始檔：不帶 path 列檔案清單、帶 path 回內容（文字原文／二進位 base64），可直接餵回 `publish_page` |\n| `download_page` | 把某頁原始檔載回本機資料夾並寫下對應檔，改完在同資料夾 `publish_page` 就發回同一頁（既有同名檔不覆蓋，需 overwrite=true） |\n| `set_version` | 切換某頁對外服務的版本（可回退舊版） |\n| `request_go_live` | 申請正式上線（開審核工單） |\n| `unpublish_page` | 下架（軟刪除，可救回） |\n| `login` / `login_complete` | 用 Google 登入（裝置授權流程：先拿網址＋代碼，授權後完成） |\n| `auth_status` | 查看登入狀態（Google 帳號 / 相容金鑰模式） |\n| `logout` | 登出並清除本機儲存的登入憑證 |\n\n## 安全\n\n- AI 只看得到上面這些工具 → **能力受限**：做不了 git / 自己部署 / 讀其他敏感檔。\n- 發佈前在**本機掃描密鑰**，掃到（API key / 私鑰 / token…）就拒發。\n- 金鑰只存在你的 MCP 設定與本程序記憶體，**永不寫 log、永不回給對話**。\n- 只能管「你自己發佈的頁」（後端以金鑰確認身分 + owner 把關）。\n- 撤權後金鑰即失效。\n\n## 本機 HTTP 模式（多視窗共用一份行程，選用）\n\n**預設完全不受影響**：不設定下列環境變數就照舊走 stdio（每個 `claude mcp add` 各自 spawn 一份子行程）。\n\n只有在**同一台機器要開很多個 Claude Code 視窗、且想省記憶體**時才需要這個模式：設定\n`SANDBOX_MCP_HTTP_PORT` 後，`sandbox-mcp` 會改成監聽本機 HTTP（Streamable HTTP），讓多個視窗\n的 MCP client 連到**同一份**行程；每個 client 連線（MCP session）各自拿到獨立的 server 實例，\n彼此不共用狀態、也看不到對方的呼叫。\n\n```bash\n# 啟動一份共用行程（前景跑；正式用法通常交給 launchd / pm2 常駐）\nSANDBOX_MCP_HTTP_PORT=8765 \\\nSANDBOX_MCP_HTTP_TOKEN=<自己產生的一組隨機字串> \\\nSANDBOX_TOKEN=<原本的發佈金鑰或改用 Google 登入> \\\nnpx -y @adchengzhi7/sandbox-mcp\n```\n\n各視窗改用 HTTP transport 連過去（而不是各自 spawn stdio 子行程）；`Authorization: Bearer <SANDBOX_MCP_HTTP_TOKEN>` 為必帶 header，缺了直接 401。\n\n安全限制（三道門，任一失敗直接拒絕）：\n- 只綁 `127.0.0.1`，不對外網開放。\n- 沒設定 `SANDBOX_MCP_HTTP_TOKEN` 就**拒絕啟動整個 HTTP 模式**（fail-closed）。\n- Host header 只准 `localhost` / `127.0.0.1` / `[::1]`（防瀏覽器頁面 DNS rebinding 打進本機服務）。\n\n多客戶（例如 miracle 與苗林各一份）要各開一個行程、各用不同 `SANDBOX_MCP_HTTP_PORT` 與不同\n`SANDBOX_MCP_HTTP_TOKEN`——這支程式一份行程只服務一組身分設定，不在單一行程內切換多租戶。\n","readmeFilename":"README.md"}