{"_id":"@daodao97/localmcp","_rev":"9-1490cc26c53e22632f897caf27a6d2e6","name":"@daodao97/localmcp","dist-tags":{"latest":"0.3.9"},"versions":{"0.1.0":{"name":"@daodao97/localmcp","version":"0.1.0","_id":"@daodao97/localmcp@0.1.0","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"dist":{"shasum":"4af10ac492bdd22c12d094321e5f06b31c585813","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.1.0.tgz","fileCount":254,"integrity":"sha512-RhHMr6AFJM9M7wWEkG8tp1f2V2fV9m4EsM5qtfA1J43cJHJlNNt53Ee6lVt6UUVnc6sfYcL3GidE1pPoNyUl9A==","signatures":[{"sig":"MEUCICV/UZHbyAEPGD0LLzsXuEE4b6yKCylz5PcrD/afXj7UAiEAtMtPN8QKHdVyGTlU1a99+bQKPzmcDBJzbbo6KuYwuH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3803639},"type":"module","gitHead":"fbd2a801c42835b62ac2439961ad9c3f26ffc36a","scripts":{"dev":"bun run build:admin && APP_ENV=dev SERVER_PORT_FALLBACK=true bun --watch run bun/src/server.ts","test":"bun run build:admin && bun test bun/test","build":"bun run build:admin && bun run build:server && bun run build:worker","start":"bun run build:admin && bun run bun/src/server.ts","worker":"NODE_ROLE=worker bun run bun/src/worker.ts","migrate":"bun run bun/scripts/migrateSqliteToMysql.ts","acceptance":"bun run bun/scripts/acceptance.ts","build:admin":"vite build --config vite.admin.config.ts","probe-cache":"bun run bun/scripts/probeCacheRate.ts","watch:admin":"vite build --config vite.admin.config.ts --watch","build:server":"mkdir -p dist/bin && bun build bun/src/server.ts --target=bun --outfile dist/bin/server.js","build:worker":"mkdir -p dist/bin && bun build bun/src/worker.ts --target=bun --outfile dist/bin/worker.js","capture:pull":"bash scripts/pull-captures.sh","diagnose-logs":"bun run bun/scripts/diagnoseRequestLogs.ts","backfill-usage":"bun run bun/scripts/backfillUsageDaily.ts","verify-capture":"bun run bun/scripts/verifyClaudeCodeCapture.ts","build:oauth-helper":"mkdir -p dist/bin && cd helper/claude-cookie-http && go build -trimpath -o ../../dist/bin/claude-cookie-http .","sync:claude-code-template":"bun bun/scripts/syncClaudeCodeAgenticTemplate.ts"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"_npmVersion":"11.11.0","description":"> The production runtime is implemented in Bun/TypeScript under `bun/`. > SQLite is the single-node default; MySQL and Redis support multi-node > deployments.","directories":{},"_nodeVersion":"25.2.1","dependencies":{"vue":"*","zod":"*","mysql2":"^3.22.5","chart.js":"^4.5.1","vue-router":"^5.1.0","element-plus":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"*","@types/bun":"*","@vitejs/plugin-vue":"*"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.1.0_1788687706417_0.046720163501605017","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@daodao97/localmcp","version":"0.3.1","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"ISC","_id":"@daodao97/localmcp@0.3.1","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/locamcp#readme","bugs":{"url":"https://github.com/daodao97/locamcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"154a40a376dfc75b184033249d5b9ab7a0812a10","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.1.tgz","fileCount":28,"integrity":"sha512-j252/98VZJNGjJo8gPnpaUfyzMCpGdCB54LxZnzzEKsRvRIHcu/ClIsw8No5DpzKfjU4jLF6Ft50whSVsTrQFA==","signatures":[{"sig":"MEUCIACx4dDziwrkPwEfP8mTjSHtuurEKMcvJa9f1SYcvTcUAiEA9EOYUDzl++S3NgQK/g1RYT9hDlv4vQLql1iULie4v9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87558},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"424b6f12bc755ef320f09ef845aec986c5a2df98","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","start":"node dist/agent.js","stdio":"node dist/index.js stdio","prepack":"npm run build","worker:dev":"wrangler dev --config worker/wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config worker/wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk .localmcp/worker-secrets.json --config worker/wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/locamcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.1_1788689429760_0.857024902252534","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@daodao97/localmcp","version":"0.3.3","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"ISC","_id":"@daodao97/localmcp@0.3.3","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/locamcp#readme","bugs":{"url":"https://github.com/daodao97/locamcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"ac42baff0ebeeb7bcdcfc5f0dc1828ca7fd734f8","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.3.tgz","fileCount":23,"integrity":"sha512-Z2iQYnKo49P8zYK8QYYGKzUZXezsHMrBKVp5O1sqNBL6ao4FR8Ew6W2pzS05dLmb57Bd7VC4Un1RwW7QYKCO/A==","signatures":[{"sig":"MEYCIQDIE7Y3rQ4TG/CiuKr3sdJsHFVS2cte0WPjnth8+cDRGQIhALIsB+DgeXmK4nASL6djj+M3Mk13w3gvj7yuZEKf3JT8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83200},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"28b844db9107a4c22b62c751adf9ed73e9ef280a","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","prepack":"npm run build","worker:dev":"wrangler dev --config worker/wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config worker/wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config worker/wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/locamcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.3_1788689970248_0.0025314818214128287","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@daodao97/localmcp","version":"0.3.4","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"ISC","_id":"@daodao97/localmcp@0.3.4","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/locamcp#readme","bugs":{"url":"https://github.com/daodao97/locamcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"d15843a99183572829f4e1f61c49cc2a96cc2a60","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.4.tgz","fileCount":23,"integrity":"sha512-mC5wO52gJao4zJ6efNheZN9I/bejqlRv8+gTvPVZey3YfPV55+8/ao9eknc4lP10iHWkLbD8y4nvQCosdrEy6Q==","signatures":[{"sig":"MEUCIDLv4CZIV4DoZx7ZFfBDx+Bg9d7qwuzi51mfNtQ2vB9DAiEA6eb7Q9j7s8cs7O5RTafJwei/vuzo79Qxqu3ATRs6KPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84050},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"d5802cfd153a6203cbd9f30be76953c77c285d06","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","prepack":"npm run build","worker:dev":"wrangler dev --config worker/wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config worker/wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config worker/wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/locamcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.4_1788690757051_0.10813326824048519","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@daodao97/localmcp","version":"0.3.5","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"ISC","_id":"@daodao97/localmcp@0.3.5","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/locamcp#readme","bugs":{"url":"https://github.com/daodao97/locamcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"7ba60f69ef95787352ea13e2beca1f91afbf8a0e","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.5.tgz","fileCount":24,"integrity":"sha512-Q/i88wU/orbBCMZU5ATebRocryorFKma0HiS4eflNyJQFi2lQR3bIJTySxlXg9rZuuYsOj/TWEd3+kkoRWk7XA==","signatures":[{"sig":"MEUCIQDYlF2gTWyc+/nSkrAwXuyu96feDHD5KOUuKRsTSFBWigIgJTnqRIzYZs/2uNY75smXMzuyyfa2G2stSZIceqbOig8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92983},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"41b88e38f9d1813bdf2f2c41b6b8156b44a80dff","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","prepack":"npm run build","worker:dev":"wrangler dev --config worker/wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config worker/wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config worker/wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/locamcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.5_1788691866777_0.6443207526182637","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@daodao97/localmcp","version":"0.3.6","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"MIT","_id":"@daodao97/localmcp@0.3.6","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/localmcp#readme","bugs":{"url":"https://github.com/daodao97/localmcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"af6836ae040ad3321bb911ac42f9fedad90c8f24","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.6.tgz","fileCount":27,"integrity":"sha512-1Tl612+KvKiB1bqUxgj3+7jDEJN2OD9r0Q2gBDjq/l85GDnKhwYXBOe5h1l/qQ3fbvpW0o4mpCqsN0SEF9MaDA==","signatures":[{"sig":"MEUCIC3dk+iuTyfZzIw65xh8Ls4u0iOPJRnkUY7F0vbRxqrhAiEAt5lteuyW0Zy9i/x6Fj3saxq94RGxUMsEUYWe2aWJlT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1769832},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"a4fbcb9bf592368f29b3f16191a65cbdc632d5c2","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","deploy":"npm run worker:deploy","prepack":"npm run build","worker:dev":"wrangler dev --config wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/localmcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.6_1788696354825_0.7197990358964474","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@daodao97/localmcp","version":"0.3.7","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"MIT","_id":"@daodao97/localmcp@0.3.7","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/localmcp#readme","bugs":{"url":"https://github.com/daodao97/localmcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"065868056e755c239473395a3a2dd594eab53549","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.7.tgz","fileCount":27,"integrity":"sha512-OKpAL+9mR+4uAKa7Lh0xAXO6Z5PYVPrC5ddx4Ke7W7flWx4oNFs6fPPbkPpYiMcMkt3gYcI1pbk4Fjn50xQrXg==","signatures":[{"sig":"MEQCIDdVQILuD6GxItOME1M0En3EnsGIK5dPIr1U1nOPo2XpAiAzV/fyoJgxlPtrTJ4bEmG8wzs9dtZuunuulo3A6RdC0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1774483},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"a4fbcb9bf592368f29b3f16191a65cbdc632d5c2","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","deploy":"npm run worker:deploy","prepack":"npm run build","worker:dev":"wrangler dev --config wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/localmcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.7_1788697309430_0.8902973888132717","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@daodao97/localmcp","version":"0.3.8","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"MIT","_id":"@daodao97/localmcp@0.3.8","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"homepage":"https://github.com/daodao97/localmcp#readme","bugs":{"url":"https://github.com/daodao97/localmcp/issues"},"bin":{"localmcp":"dist/index.js"},"dist":{"shasum":"0ec70e0d6d2c76a5461e478879d62fece4281ff5","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.8.tgz","fileCount":28,"integrity":"sha512-8CX3LEL+SmR+1PMO1mdkt/0V4Lwq/Y/lELlN7pRKV01kwMr6bBIfmO4s5GVNnXWvO6ZtjfA3Vz9+GKBl9GWgNQ==","signatures":[{"sig":"MEUCIQC5txtLLa5yWktNSdSB1hzj2zmIWXHRGCakAwd3fT4zlgIgMk/DppweG15KdkKbLtt173MMJiv67ICeZZ769v3JFDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1779595},"main":"dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"176a4090d06eb50ea6c961ba2b0ac1ff6797107d","scripts":{"dev":"tsx src/index.ts","http":"node dist/index.js http","test":"tsx --test test/*.test.ts","build":"npm run clean && tsc","check":"tsc --noEmit && tsc -p worker/tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","start":"node dist/agent.js","stdio":"node dist/index.js stdio","deploy":"npm run worker:deploy","prepack":"npm run build","worker:dev":"wrangler dev --config wrangler.jsonc","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:deploy":"wrangler deploy --config wrangler.jsonc","prepublishOnly":"npm run check && npm test && npm run build","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config wrangler.jsonc"},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"repository":{"url":"git+ssh://git@github.com/daodao97/localmcp.git","type":"git"},"_npmVersion":"11.11.0","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","wrangler":"^4.129.0","@types/ws":"^8.18.1","typescript":"^7.0.2","@types/node":"^26.4.1","@types/express":"^5.0.6","@cloudflare/workers-types":"^5.20260906.1"},"_npmOperationalInternal":{"tmp":"tmp/localmcp_0.3.8_1788699041545_0.4818340709835294","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@daodao97/localmcp","version":"0.3.9","description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","main":"dist/index.js","type":"module","bin":{"localmcp":"dist/index.js"},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","build":"npm run clean && tsc","start":"node dist/agent.js","stdio":"node dist/index.js stdio","http":"node dist/index.js http","dev":"tsx src/index.ts","test":"tsx --test test/*.test.ts","check":"tsc --noEmit && tsc -p worker/tsconfig.json","prepack":"npm run build","prepublishOnly":"npm run check && npm test && npm run build","start:quick":"node dist/launch.js","worker:setup":"node scripts/worker-setup.mjs","worker:dev":"wrangler dev --config wrangler.jsonc","deploy":"npm run worker:deploy","worker:deploy":"wrangler deploy --config wrangler.jsonc","worker:secrets":"wrangler secret bulk ~/.localmcp/worker-secrets.json --config wrangler.jsonc"},"repository":{"type":"git","url":"git+ssh://git@github.com/daodao97/localmcp.git"},"bugs":{"url":"https://github.com/daodao97/localmcp/issues"},"homepage":"https://github.com/daodao97/localmcp#readme","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"author":{"name":"daodao97"},"license":"MIT","engines":{"node":">=22"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","express":"^5.2.1","ws":"^8.21.3","zod":"^4.5.4"},"devDependencies":{"@cloudflare/workers-types":"^5.20260906.1","@types/express":"^5.0.6","@types/node":"^26.4.1","@types/ws":"^8.18.1","tsx":"^4.23.13","typescript":"^7.0.2","wrangler":"^4.129.0"},"gitHead":"fff33cfb5249be914ec7bab54455e793c1617321","_id":"@daodao97/localmcp@0.3.9","_nodeVersion":"25.2.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-S6W5RaakEo8wiIgY4O+b5eyFnciUi/Sw1zSILjU8WjucueD8d/g3Y+nzbMtqK8QjCJEUFD2K4DRxmtk7uE8pHQ==","shasum":"72d185456b352a9a5cf8c74d364364efacc3d0f3","tarball":"https://registry.npmjs.org/@daodao97/localmcp/-/localmcp-0.3.9.tgz","fileCount":29,"unpackedSize":1781200,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDALmYCz7TkM4+TcBDj5CX2X++XL1oF74pLMbCIgsFimwIgE4d0I9K5HniAnlHu+q8BkSJ9JbU6wyvOh5xIMJhw3Xg="}]},"_npmUser":{"name":"daodao97","email":"daodao97@foxmail.com"},"directories":{},"maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/localmcp_0.3.9_1788916912711_0.7610826479686821"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-06T09:41:46.241Z","modified":"2026-09-09T01:21:53.127Z","0.1.0":"2026-09-06T09:41:46.562Z","0.3.1":"2026-09-06T10:10:29.893Z","0.3.3":"2026-09-06T10:19:30.355Z","0.3.4":"2026-09-06T10:32:37.196Z","0.3.5":"2026-09-06T10:51:06.922Z","0.3.6":"2026-09-06T12:05:55.035Z","0.3.7":"2026-09-06T12:21:49.620Z","0.3.8":"2026-09-06T12:50:41.712Z","0.3.9":"2026-09-09T01:21:52.961Z"},"bugs":{"url":"https://github.com/daodao97/localmcp/issues"},"author":{"name":"daodao97"},"license":"MIT","homepage":"https://github.com/daodao97/localmcp#readme","keywords":["mcp","model-context-protocol","chatgpt","local","agent","skills"],"repository":{"type":"git","url":"git+ssh://git@github.com/daodao97/localmcp.git"},"description":"Local MCP bridge for ChatGPT with files, shell, skills, pluggable MCP servers and multiple workspaces","maintainers":[{"name":"daodao97","email":"daodao97@foxmail.com"}],"readme":"# LocalMCP - 榨干 ChatGPT 的所有价值\n\n让 ChatGPT 网页端使用你的本机开发能力：文件操作、Shell、持久进程、Skills 和可插拔 MCP Server。\n\n![LocalMCP 工作原理：ChatGPT 经 Cloudflare Worker 中继，连接本机 Agent 和工具](localmcp.png)\n\n本机主动通过 WebSocket 连接 Cloudflare Worker，由 Worker 负责认证与请求中继，无需公网 IP 或开放入站端口。\n\n## 快速开始\n\n需要 **Node.js 22+**。\n\n```sh\nnpm install -g @daodao97/localmcp\nlocalmcp\n```\n\n首次运行会自动创建 `~/.localmcp/` 配置、向默认公共 Worker 注册独立设备，并在后台启动 Agent。连接成功后会输出完整 MCP URL，关闭终端不会停止服务。\n\n在 ChatGPT 中添加 MCP 连接，服务器 URL 填入输出的完整地址，身份验证选择 **None**。\n\n> 完整 MCP URL 包含访问凭证，请勿公开分享或提交到 Git。\n\n## 常用命令\n\n```sh\nlocalmcp          # 启动后台服务，重复执行会复用已有进程\nlocalmcp status   # 查看状态、MCP URL 和日志路径\nlocalmcp stop     # 停止后台服务\nlocalmcp reload   # 校验并重新加载配置\nlocalmcp agent    # 前台运行，便于调试\n```\n\n日志位于 `~/.localmcp/agent.log`。也支持 `localmcp stdio`，或通过 `LOCALMCP_TOKEN=<至少32字符的密钥> localmcp http` 启动本地 HTTP 服务。\n\n## 自建 Worker（可选）\n\n将中继部署到自己的 Cloudflare 账号，再让本机 LocalMCP 连接它。需要 Cloudflare 和 GitHub 账号。\n\n### 1. 部署到 Cloudflare\n\n[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/daodao97/localmcp)\n\n点击按钮，按提示登录、连接 GitHub 并创建仓库，然后点击 **Deploy**。Cloudflare 会根据仓库配置部署 Worker 和 SQLite Durable Object，无需手动创建数据库或填写密钥。按钮流程见 [Cloudflare 官方说明](https://developers.cloudflare.com/workers/platform/deploy-buttons/)。\n\n部署成功后，在 Worker 的 **Settings → Domains & Routes** 中复制 `workers.dev` 地址，例如 `https://localmcp-relay.YOUR-SUBDOMAIN.workers.dev`。\n\n<details>\n<summary>也可以通过命令行部署</summary>\n\n```sh\ngit clone https://github.com/daodao97/localmcp.git\ncd localmcp\nnpm ci\nnpx wrangler login\nnpm run worker:deploy\n```\n\n复制命令输出中的 Worker 地址，然后继续下面的连接步骤。\n\n</details>\n\n### 2. 连接本机\n\n安装 LocalMCP，并用你的 Worker 地址启动：\n\n```sh\nnpm install -g @daodao97/localmcp\nLOCALMCP_WORKER_URL=https://localmcp-relay.YOUR-SUBDOMAIN.workers.dev localmcp\n```\n\n首次连接会自动注册设备，将地址和凭证保存到 `~/.localmcp/worker.json`；之后直接运行 `localmcp` 即可，无需再设置环境变量，也无需运行 `worker:setup` 或 `worker:secrets`。\n\n**如果已经连接过公共 Worker 或其他 Worker**，先停止服务并备份旧凭证，再执行上面的启动命令。仅修改环境变量不会重新注册设备：\n\n```sh\nlocalmcp stop\nmv ~/.localmcp/worker.json ~/.localmcp/worker.json.backup-$(date +%Y%m%d%H%M%S)\nLOCALMCP_WORKER_URL=https://localmcp-relay.YOUR-SUBDOMAIN.workers.dev localmcp\n```\n\n### 3. 在 ChatGPT 中使用\n\n1. 运行 `localmcp status`，复制输出的完整 MCP URL（包含 `/mcp/<设备ID>/<密钥>`）。\n2. 在 ChatGPT 网页端 打开开发者模式, [点我打开](https://chatgpt.com/#settings/Security?section=developer-mode)\n\n   ![在 ChatGPT 中开启开发者模式](chatgpt_setting.png)\n\n3. 在 ChatGPT 网页端 新建插件, [点我打开](https://chatgpt.com/plugins#settings/Connectors?create-connector=true&redirectAfter=%2Fplugins)\n\n   ![在 ChatGPT 中添加 LocalMCP 插件](chatgpt_plugin.png)\n\n4. 在对话中 @LocalMCP 开始使用\n\n```sh\ncurl https://localmcp-relay.YOUR-SUBDOMAIN.workers.dev/healthz\n# 预期：{\"ok\":true,\"service\":\"localmcp-relay\",\"registration\":true}\n```\n\n## 开发\n\n```sh\nnpm ci\nnpm run check\nnpm test\nnpm run build\n```\n\n## 配置与扩展\n\n编辑 `~/.localmcp/localmcp.json` 后会自动热更新，无需手动 reload；通过 `LOCALMCP_CONFIG` 指定的配置文件同样支持。内容稳定约一秒后生效，支持编辑器原子保存。以下示例配置工作区并开启 Shell：\n\n```json\n{\n  \"workspaces\": {\n    \"project\": \"/Users/me/code/project\"\n  },\n  \"defaultWorkspace\": \"project\",\n  \"features\": {\n    \"files\": true,\n    \"shell\": true,\n    \"processes\": true\n  },\n  \"skills\": {\n    \"dir\": \"skills\",\n    \"enabled\": [\"local-development\"]\n  },\n  \"mcpServers\": {}\n}\n```\n\n- **多工作区**：在 `workspaces` 中添加路径，调用工具时用 `workspace` 选择；省略时使用默认工作区。\n- **Skills**：将操作说明放入 `~/.localmcp/skills/<名称>/SKILL.md`，并在 `skills.enabled` 中启用。\n- **MCP 扩展**：在 `mcpServers` 中配置标准 MCP Server，例如下方的 Computer Use 服务；通过固定入口发现和调用工具，不再注册 `computer_*` 顶层工具。\n\n```json\n{\n  \"mcpServers\": {\n    \"computer\": {\n      \"enabled\": true,\n      \"command\": \"cua-driver\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\n外部 MCP 使用三个固定工具：\n\n| 工具 | 用途 |\n| --- | --- |\n| `list_mcp_servers` | 列出已加载的 MCP 服务 |\n| `list_mcp_tools` | 按 `server` 查询当前工具说明、参数 schema 和注解 |\n| `call_mcp_tool` | 传入 `server`、原始 `tool` 名称和 `arguments` 执行调用 |\n\n例如先调用 `list_mcp_tools({\"server\":\"computer\"})`，确认参数后调用 `call_mcp_tool({\"server\":\"computer\",\"tool\":\"list_apps\",\"arguments\":{}})`。服务端按子工具的 schema 校验参数，保留图片、结构化结果和错误状态。统一调用入口按可能执行写操作、命令及网络访问标注，不承诺只读。\n\n修改配置中的 MCP 或 Skill 设置后，等待自动热更新，再通过 `list_mcp_servers` / `list_mcp_tools` 或 `list_skills` / `read_skill` 发现新能力，对外工具列表保持不变。已加载 MCP 的工具变化可以直接重新调用 `list_mcp_tools` 获取。\n\n热更新先校验配置并准备新的 MCP 服务，成功后再切换；JSON 错误、工作区路径无效、配置文件暂时消失或 MCP 启动失败时保留旧配置，原因写入服务日志。自动热更新不重启 Agent，不改变公网 URL，也不会中断正在执行的工具调用或清理已有持久进程。关闭 Shell/Processes 只限制后续调用，不会自动终止已启动进程。\n\n仅监听主配置文件的内容变化；单独修改 `SKILL.md` 或 Worker 地址/凭证不会触发热更新。技能文件修改后仍可在外部终端运行 `localmcp reload`；手动 reload 会重启内部服务，不能通过 LocalMCP 自己的 `run_command` 同步执行。Worker 连接配置修改后需重启 Agent。\n\n**从旧版迁移**：首次升级到固定入口后，客户端需要刷新一次工具列表并新建会话；旧的 `<server>_<tool>` 调用不再支持。已有 `~/.localmcp/skills/` 不会随 npm 升级自动覆盖，请同步更新其中引用旧工具名的技能说明。内置 Files/Shell/Processes 开关仍会改变顶层工具列表。\n\n完整配置示例见 [localmcp.example.json](localmcp.example.json)。可通过 `LOCALMCP_CONFIG` 指定其他配置文件。\n\n## License\n\nMIT\n","readmeFilename":"README.md"}