{"_id":"@aiwayds/dsh-mcp-adapter","_rev":"13-5ec1e9c4df0dbf914f9a1d5b8720220b","name":"@aiwayds/dsh-mcp-adapter","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.1.0","author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.1.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"de14f6f6f352111c2e4388c6cf1c66e13ed6ccfe","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.1.0.tgz","fileCount":8,"integrity":"sha512-dJl0TiGrDp898QHdFtNn2CE3hFvL1jPVdVClXMXoMxGqXxO2H6P1KjzrAFXLYOhBRtMlLmuhV+WZlITPi/nSbg==","signatures":[{"sig":"MEQCIEauQoNAi0zwAe72Qj3QGF8wFHZLYDs/XbOl7TMGZovmAiB25sZJlUAl1zFhHa/ddCyovxdsdlBzkFyC+x9tA31Vgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80299},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c377f165d4295b2e5c97d7181328a6cc85941921","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"11.17.0","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.1.0_1787795383428_0.06296469255717962","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.1.1","author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.1.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"97f0f1bee3dffcadb2c66156b3c1e930da694460","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.1.1.tgz","fileCount":8,"integrity":"sha512-Ae5o23DcJiruusr46INFIn/tr22qVe+mkin0pauznZWdJai4INwdPZ9+6gyKYisRcW847L02p5Iq+KL/up4zxQ==","signatures":[{"sig":"MEYCIQDJHG5oSbwD7lGcCLYTV0Fsiioo3fKtfaO0401zHrizpQIhAK4dFJAfkziUinBKdTJm84EXmB6oTIQzSdcxjFdzQzD4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81876},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"ad988d396dde30f4a8fed6f7f684302760f77d5e","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.1.1_1787796399904_0.2982293558347373","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.2.0","author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.2.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9d7e62c1bb15f66a2b53d72a25ed1b433a947db1","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.2.0.tgz","fileCount":8,"integrity":"sha512-ADNsnZHniqCn7dhi4Za5ytOfdbRAXW0JLfUVy5VozCSin0YeIonJwV47CN6PDkt99GKFE0M6/vkn6w5OQiGegw==","signatures":[{"sig":"MEYCIQDWYeJ9suTtXg9/ptzCl7c5EzgtYSgDZumoZS5V6HlfdQIhAOKS32mtRAJTjeAbn1YrGO6Pp53nsUDYPCF7sj6bSIRB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":174969},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"673e1eb6af5dd11123002819034c30e4c1eff881","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.2.0_1787807876160_0.7313444525183879","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.2.1","author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.2.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"24e16758e3d32f77217842ed45e4989d55a838f8","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.2.1.tgz","fileCount":8,"integrity":"sha512-mCddEY0QlsHfkX5MkUtJAIlgGMu6FfYDzUfiEs3zyD3PQkx+Fu0Y946wIp+Lp1K/rt2RfcBwzggBVc4DU/m4xg==","signatures":[{"sig":"MEUCIE82LfDGJkuVc2RkXcyCxBi4m4Y2/tYGEY+MIKbsPMoOAiEAqEkVjH2Jen8altPmKFGwAuY8R3yuJ/E/eVSdzI0InoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176618},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"dd80a059667a30eb82dd993de7aa4dc06aff87e2","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.2.1_1787809603664_0.16743404283617513","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.2.2","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.2.2","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"f75b238b24dea59e2cb6610fbd3c2a69ea3a4ca8","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.2.2.tgz","fileCount":8,"integrity":"sha512-IuJQ8TCz7gOkkUZdJedKH5792WizUQwl4vTp6OVqDix6IDhy6Ym+80/iK3Znv9R3TrMhueqDwzxm/AfifYrfrw==","signatures":[{"sig":"MEUCIQCl9IjsedIDlononvGa9N1j0aJyD8YKDbjnVQ3J19vTRgIgbnmbBUXYh8anWtg/YjhT+AactV4Ajj7MwTgbiQGHpB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176740},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"7b2ae9cc0a9302750228bc9cec9f5d890a33d4d9","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.2.2_1787977245492_0.21922079804192807","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.3.0","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.3.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"f3ed765f96c5dfdc746c68ddf50993d6ff83f6a4","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.3.0.tgz","fileCount":9,"integrity":"sha512-EUsO4aWEa3CKUVjtZphuMEgMvOn4GLx6Hnk4fs+UrsKwRde4NDSqKg3EtYkVO1Zs5T38ia3WoNyjAF7ruS27ZA==","signatures":[{"sig":"MEUCIQCjEac1mioRitWbKt2AUQBXLm6Iw2tP9QCCyV6u7Sjj8wIgcdIAS2/7V+8SA4+/y0psub22/oVUCoi0MunDYD01DdU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":182568},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"cac2a5e16dd9b7963764a113f4c081902d906759","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.3.0_1788282910461_0.9477718159081281","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.4.0","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.4.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b3caa6fa5d4afdfed981a47596193ffd3d0b3a38","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.4.0.tgz","fileCount":9,"integrity":"sha512-LdeGPM3SECAsAjpYogurQorIW/txcYNQGpQll/1dgJ/4DcWBqGszCc0sO2x/Xc0jiUF4b07oR/AsWw75SuXguQ==","signatures":[{"sig":"MEQCIB8rkNX0xePJjxiaavuK1aRb4BRjhdF1AJjGqAFbfNBOAiAl6YOFVnQqcDqrz86cu0i1ox5AkCRRHKU/ST0Huxhpdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":182717},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c4e044ef0283c6b2e02ca3f6704feff30480d3a3","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.4.0_1788442323882_0.47368022558716016","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.4.1","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.4.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"794a0afc91b14ae3550b27806e41b7f28eec19f5","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.4.1.tgz","fileCount":9,"integrity":"sha512-Q+7QX/vmqQ0nUqTWCerggnK7325Pg3+Yx32dYfdmM/gOFOzqAM6T3eUDHc5vRc8fqIqIcL/bvxtUR3tTR+B5UQ==","signatures":[{"sig":"MEYCIQDj6DPlDVC4ZYlCxaO3iSyFh5bMJSQkEWfS5N6ner7q2QIhAIGE/XnquZfivzMCTWr2DThIOR1cBAcfjWihftGpyH9O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":184857},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"6e9cffec692590a0de28e462d9c142ca64c83e47","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.4.1_1788603287136_0.702373080080319","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.4.2","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.4.2","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"ea1ec3d26d3e666b5b1f786f330e33e1c86f599b","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.4.2.tgz","fileCount":9,"integrity":"sha512-gx9EpusjDJ1Lh7v7ZOgolQdlCQejYgnJvV44899oMSS7+SW7Sdwg/0QBgzv/lOl/y8oBBveDe+Gr88dV1JW/PA==","signatures":[{"sig":"MEQCIENnrMFwG1XCrwc+yKLb7ifw9ju6QgFPrqiwzs3KPFKJAiB0wW0q9l1rtn3zyB7SMKCsiVxd6MtN0GyJ2vqjdwy5vA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEL7+WnAQh04aT8Lw2GrMo02kFp6z/JZE7Mxre1cef+TAiAhw4VqTGx9oNeZlyaZUfECvgBBbI0LSEw5Lhi6NHvwJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":184857},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"7c2942cfc7bb7f35d270bed4c6db176b3bd445a3","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.4.2_1789097723846_0.1621097208824418","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.5.0","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.5.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"985bcaa80f0a1d18d81c96464a6f6a9e16b95b2c","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.5.0.tgz","fileCount":12,"integrity":"sha512-j4wWMYxat1KRk4jApwDuzqn9FZMIX2tfwdwEyE8xVynpvhGNAwLH66Af3LYiwScFrdRmx7MRaILPa+8mHPNV6A==","signatures":[{"sig":"MEQCIA/mwfSFgmh+WNv8iMZhyjISbMxFkhwkX7/Xmma7GkvTAiBVJxNfIpVSCBDYz7imIgsqHM6DrEPnItZ8RjMg8SzREg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH7dKE8gDRcYc8X2s+auBlstFaXyGo93NhffbVSf51X4AiEA7/2+hhyoea5uv6ZrRPfY/l+xmDwZpZ8+LBTh4DTStrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":197344},"icon":"./icon.svg","main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"e3edddee4d082b3462837ddc36bb099a485187de","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","postinstall":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":"0.1.7-rc.1","@deepseek-ai/dsh-scope":"0.1.7-rc.1","@deepseek-ai/dsh-tools":"0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":"0.1.7-rc.1","@deepseek-ai/dsh-util-values":"0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":"0.1.7-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":">=0.1.7-rc.1","@deepseek-ai/dsh-scope":">=0.1.7-rc.1","@deepseek-ai/dsh-tools":">=0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":">=0.1.7-rc.1","@deepseek-ai/dsh-util-values":">=0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":">=0.1.7-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/schemastery":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.5.0_1790230987522_0.33529936615822153","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.5.1","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.5.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"a984d0146ebc61987eaecac3e73ad099591514ef","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.5.1.tgz","fileCount":12,"integrity":"sha512-elznxI0+OqK8EzvzdyBdwskUG3ZiNg6fd8Y7+OSR9UuQCqzqI2f/LbwFYZeqlOiqSjWIdlm+W3l9A8A7OHsCgw==","signatures":[{"sig":"MEQCIFHcCpjhQAqAOdTNxJ2GiHXnAhHBIJFgV+o5U1NKXojfAiAu5MHOC33DVEP58k9+a/3XCRD7iRUNhmeMr12Vt+VNmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICI8tIh42OUHl0KKToiDhJn76he1GB/ZJXN6DoA99HjPAiEAvN6N49cTvThL02UDZG+6kUkaWUrFXX0SZpB4xFNDPE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":217142},"icon":"./icon.svg","main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"34d9e0c2ddf01c36f2a208c938f334c069db3b8a","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","postinstall":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":"0.1.7-rc.1","@deepseek-ai/dsh-scope":"0.1.7-rc.1","@deepseek-ai/dsh-tools":"0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":"0.1.7-rc.1","@deepseek-ai/dsh-util-values":"0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":"0.1.7-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":">=0.1.7-rc.1","@deepseek-ai/dsh-scope":">=0.1.7-rc.1","@deepseek-ai/dsh-tools":">=0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":">=0.1.7-rc.1","@deepseek-ai/dsh-util-values":">=0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":">=0.1.7-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/schemastery":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.5.1_1790295544952_0.4715622191618434","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aiwayds/dsh-mcp-adapter","version":"0.6.0","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-mcp-adapter@0.6.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-mcp-adapter","bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"bc4ec668efdd7ad4e90f10dcc25eea8975f39ad4","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.6.0.tgz","fileCount":42,"integrity":"sha512-kAn/1IJ4kfVNQovUemnimsQX2Ua+fW5JeOhxyaktUfPJK9kcifPRMHx1jlk4zrtybH/uwiiA4i0IISqriax8kg==","signatures":[{"sig":"MEUCIQCf9HFYo62FyCzg9J/Ypks8Q7P1ayu/7vBfF/0vMOr4xwIgCTSOMB/W/nP5+ENfFHQVtSUzcvkVV0jg7Z5VBjGlm28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCC/mtStxbkEK4sZ9QcjUFVldOBRBqg72ZfqQMMgscKfAIhAMmiudFbWQdPNmSkwD77ISrMydjhfafhNok58Oyu5gEW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469654},"icon":"./icon.svg","main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"febccda6ebd882c1c877ffda89422ac0e2afae3c","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","postinstall":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":"0.1.7-rc.1","@deepseek-ai/dsh-scope":"0.1.7-rc.1","@deepseek-ai/dsh-tools":"0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":"0.1.7-rc.1","@deepseek-ai/dsh-util-values":"0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":"0.1.7-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":">=0.1.7-rc.1","@deepseek-ai/dsh-scope":">=0.1.7-rc.1","@deepseek-ai/dsh-tools":">=0.1.7-rc.1","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":">=0.1.7-rc.1","@deepseek-ai/dsh-util-values":">=0.1.7-rc.1","@deepseek-ai/dsh-system-prompt":">=0.1.7-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/schemastery":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-mcp-adapter_0.6.0_1790490679853_0.17991403082527424","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"_id":"@aiwayds/dsh-mcp-adapter@0.7.0","dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"dist":{"shasum":"120a3d81f226890faae5a6d6be048c3e3e064e7e","tarball":"https://registry.npmjs.org/@aiwayds/dsh-mcp-adapter/-/dsh-mcp-adapter-0.7.0.tgz","fileCount":42,"integrity":"sha512-95RGPKjADX0NxqNCIcEoJdKU84hB37dSm4q9dX41rqP61ncq4HKSZns3ACL8KNvYFCVuWCG+Fr4pZyMAcBFZPw==","signatures":[{"sig":"MEUCIHEWJ3IwfhOZ4QArJxXrSwh/eTWLxRaHdfSl8OSLnoC0AiEA49kHpkAIpZaVvuV//6bveWynCJ6qvUsb3C0NH7HB6p4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCF4Eiti7KBHIEDem5sQivkWASkHYOoWdUw129nUpDqUwIhAMVp3z7Q99BltYRzDjDO+nJoY9YiUbygM4LNVv0PAjtE"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-mcp-adapter@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469654},"icon":"./icon.svg","main":"lib/index.js","name":"@aiwayds/dsh-mcp-adapter","type":"module","types":"lib/index.d.ts","author":{"name":"fan56"},"engines":{"node":">=22.19.0"},"gitHead":"11f8b96b760bd59d7e2db969d50ecaf8d93e1cd8","license":"MIT","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","postinstall":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"version":"0.7.0","_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"homepage":"https://github.com/fan56/dsh-mcp-adapter","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","directories":{},"maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-scope":"0.2.0-rc.2","@deepseek-ai/dsh-tools":"0.2.0-rc.2","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":"0.2.0-rc.2","@deepseek-ai/dsh-util-values":"0.2.0-rc.2","@deepseek-ai/dsh-system-prompt":"0.2.0-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.4","@deepseek-ai/dsh-llm":">=0.2.0-rc.2","@deepseek-ai/dsh-scope":">=0.2.0-rc.2","@deepseek-ai/dsh-tools":">=0.2.0-rc.2","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-commands":">=0.2.0-rc.2","@deepseek-ai/dsh-util-values":">=0.2.0-rc.2","@deepseek-ai/dsh-system-prompt":">=0.2.0-rc.2"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/schemastery":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-mcp-adapter_0.7.0_1790685391131_0.37526659848404487"}}},"time":{"created":"2026-08-27T01:49:43.246Z","modified":"2026-09-29T12:36:31.614Z","0.1.0":"2026-08-27T01:49:43.585Z","0.1.1":"2026-08-27T02:06:40.041Z","0.2.0":"2026-08-27T05:17:56.298Z","0.2.1":"2026-08-27T05:46:43.816Z","0.2.2":"2026-08-29T04:20:45.631Z","0.3.0":"2026-09-01T17:15:10.599Z","0.4.0":"2026-09-03T13:32:04.012Z","0.4.1":"2026-09-05T10:14:47.271Z","0.4.2":"2026-09-11T03:35:23.933Z","0.5.0":"2026-09-24T06:23:07.608Z","0.5.1":"2026-09-25T00:19:05.039Z","0.6.0":"2026-09-27T06:31:19.944Z","0.7.0":"2026-09-29T12:36:31.290Z"},"bugs":{"url":"https://github.com/fan56/dsh-mcp-adapter/issues"},"author":{"name":"fan56"},"license":"MIT","homepage":"https://github.com/fan56/dsh-mcp-adapter","keywords":["dsh","dsh-plugin","deepseek-harness","mcp","meta-tools","token-saving"],"repository":{"url":"git+https://github.com/fan56/dsh-mcp-adapter.git","type":"git"},"description":"dsh plugin: token-efficient prompt-side shim for the official MCP client — folds mcp__* tool schemas out of every assembled prompt and exposes two constant meta-tools (mcp_list / mcp_call) instead","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"readme":"# dsh-mcp-adapter\n\n[English](README.md) | 简体中文\n\n面向 [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/deepseek-harness) 的省 token MCP 适配器——一个受 [pi-mcp-adapter](https://github.com/nicobailon/pi-mcp-adapter) 启发的 **prompt-side shim**（提示词侧垫片）。\n\n**要求 dsh >= 0.1.7-rc.1** — 本插件只跟随 dsh RC/stable 线（CI 与发版在运行时解析 latest/next 中更新的 dist-tag）。**不再支持 alpha 线。**\n\n## 问题\n\n官方 `@deepseek-ai/dsh-mcp-client` 插件把发现的每个 MCP 工具都原生注册进工具表（`mcp__<server>__<tool>`），于是**每次请求都要为每个 MCP 工具的完整 JSON Schema 付费**——上游 README 原话：*\"Data-dependent schema cost is paid on every request while the tools are registered.\"* 几个 server、几十个工具下来，就是每条消息烧掉数千 token，无论模型是否真的调用它们。\n\n## 思路\n\n本插件完全保留官方 `dsh-mcp-client` 作为连接层（transport、自动重连、`tools/list_changed` 重同步——全是上游现成的），只在提示词装配这一处介入：\n\n- 每个匹配的 `mcp__*` 工具 schema 被**折叠出**装配后的 prompt（`system-prompt/assemble` waterfall）；\n- 原位换上两个**恒定 meta-tool**，常驻 prompt 成本对 server/工具数量而言是 O(1)：\n  - **`mcp_list`** — 紧凑目录（工具名 + 截断描述，不含 schema）；传 `tool` 按需展开单个工具的完整 schema，传 `server` 过滤，传 `query` 拿相关性精排的子集，传 `verbose` 全量内联；\n  - **`mcp_call`** — 按 `{ tool, arguments }` 把调用分发到仍然注册着的定义上，运行上下文原样透传。\n\n工具本身仍注册在 `ctx.tools` 里，所以 TUI 渲染、`tools.restrict()` 掩蔽照常工作——变的只是 prompt 载荷。折叠后恒定的工具列表也比上游\"每次重同步就换代\"的模式更利于 KV 前缀缓存。\n\n一个管线细节：按子工具名（`mcp__server__tool`）匹配的 pre-execute / guard / post-execute 阶段不会在折叠调用上触发——注册表只会看到外层的 `mcp_call`。要管控 MCP 使用（审批、策略），请 guard **`mcp_call` 本身**。\n\n图片结果保持原生行为：`mcp_call` 把 `output.render` 委托给被分发的子工具，并以同一个执行对象转发子工具的 `finalizeContent`——带图 MCP 结果仍会投影为持久附件引用，而不是把 base64 内联进上下文。\n\n**故障放行（fail-open）：** 若两个 meta-tool 未成功注册（重名冲突、启动中断），本插件不动装配结果——退回官方全量直通，绝不会让 MCP 工具变得不可发现。\n\n**Code Mode：** 在 `mode: 'code'` 下线上本来就折叠为 `run_code`，本插件天然 no-op。\n\n**宿主资源工具（dsh ≥ 0.1.6）：** 宿主内置的 `@deepseek-ai/dsh-mcp-resources` 注册三个共享工具 —— `list_mcp_resources`、`list_mcp_resource_templates`、`read_mcp_resource`，均不带 `mcp__` 前缀。它们按设计不进折叠路径，原生呈现给模型；折叠与 keep 语义保持不变，`keep` 也只会命中匹配前缀的名字，本插件无需任何额外配置。\n\n**加载位置：** 经宿主组合加载（即下方 `cordis.patch.yml` 的 `insert` 行）时全局生效——所有 agent 的装配都会被折叠；若经某个 agent 的 scoped context 加载，则只对该 agent 生效。\n\n## 安装\n\n保留（或新增）你的 `@deepseek-ai/dsh-mcp-client` 配置行，然后把本插件加在同处：\n\n```yaml\n- insert:\n    - id: dsh-mcp-adapter\n      name: '@aiwayds/dsh-mcp-adapter'\n      config: {}\n```\n\n```\ndsh plugin --profile <name> add @aiwayds/dsh-mcp-adapter\n```\n\n## 卸载\n\n```\ndsh plugin --profile <name> remove @aiwayds/dsh-mcp-adapter\n```\n\n宿主会自动完成清理：`dsh.profile.bundles` 里对应的条目被拼接移除，插件的 patch 层随之失效。\n\n有一份状态被刻意**保留**：插件自己的门闩文件 `~/.dsh/storages/mcp-adapter/gate.json`（设置了 `DSH_HOME` 则以其为准）——stable server id（1..99）和 disabled 门闩。它按设计永不回收：重装本插件后，每个 server 仍沿用之前的 id。\n\n连这份状态也想清掉的话，请自行删除 `storages/mcp-adapter/` 目录；重装时 id 会重新分配。\n\n从 dsh 0.1.5 升级：旧 `settings.yaml` 里的 `mcp-adapter:` 小节（0.1.7 宿主首次启动时把该文件一次性导入并改名为 `settings.yaml.imported`，旧段名与本插件 entry id 不同名）会被**一次性自动承接**：下次插件启动时若尚无门闩文件，则从 `settings.yaml.imported`（兜底仍在的 `settings.yaml`）读取 stable id 与 disabled 门闩，消毒后直接写入 `gate.json`——无需再逐条 `/mcp disable <id>` 重新闩上。承接过程记录在 `<dsh home>/storages/mcp-adapter/legacy-import.json`（该 marker 存在即永不重跑；已有 gate.json 则完全不介入）。profile patch 里该 entry 的 `config:` 配置原样继承，不受影响。\n\n## 配置\n\n| 键 | 默认值 | 含义 |\n|---|---|---|\n| `prefix` | `\"mcp__\"` | 要折叠的工具名前缀 |\n| `keep` | `[]` | 保持原生进 prompt 的名字模式（`*` 通配）——对应 pi-mcp-adapter 的 direct 模式，适合高频、值得占一等座 schema 的工具 |\n| `servers` | `[]` | server 白名单：非空时只有这些 server 的工具会被折叠 / 进目录 / 可分发（三处共用同一份名单） |\n| `descriptionLimit` | `200` | `mcp_list` 目录里每条工具描述的最大字符数 |\n| `storageDir` | `\"\"` | 门闩存储目录覆盖；空 = `<dsh home>/storages/mcp-adapter`（插件启动时读一次，改后需重启插件生效） |\n| `jevEnabled` | `false` | System One 总开关——**默认关闭**：false 表示任何环节都不发决策请求，而调用统计照常累积 |\n| `jevBackend` | `\"zen\"` | 决策后端：`zen`（opencode-zen 免费档）/ `native`（typesafe 直连）/ `openrouter`；各自需要自己的 API key（`JEV_ZEN_API_KEY` / `TYPESAFE_API_KEY` / `OPENROUTER_API_KEY`，或 macOS 钥匙串） |\n| `jevModel` | `\"\"` | 钉死的模型 id；空 = 调用时解析后端自带默认（`jev-1.13-free` / `jev-1.13.0` / `typesafe/jev-1.13`）——升级是一次有意为之的动作 |\n| `jevTimeoutMs` | `3000` | 单次请求超时（毫秒）；只试一次、不重试——下一次节奏就是重试 |\n| `jevSecretFile` | `\"\"` | 出站密钥闸的额外字面量密钥清单（`JEV_SECRET_FILE` 语义）；换路径即热更清单 |\n| `jevLayaFallback` | `false` | **默认关闭**：每次决策请求同时并行打一发本地 laya；其答案只作对比记录，仅在主后端失败时接管 |\n| `jevLayaUrl` | `\"http://127.0.0.1:8000/v1/systemone\"` | 该本地 laya-serve 端点 |\n\n后七行即 System One 决策层（见下节），全部是可选开关——默认安装下插件不会发出任何一次对外决策请求。\n\n以上字段全部声明为 **volatile**（dsh 0.1.7 settings 契约）：十二个键都会出现在插件设置页（entry `dsh-mcp-adapter`）中，在设置页修改**无需重启插件即可生效**——折叠边界、目录与分发在下一次使用时立即采用新值；`jev*` 开关同样每次使用时现读，在设置页打开 `jevEnabled` 后，下一次分发立即生效。（唯一例外是 `storageDir`：存储位置本身在插件启动时读一次，如其表行所述。）profile patch 里的 `config:` 写法照旧可用。\n\n```yaml\nconfig:\n  keep:\n    - mcp__fs__read_file\n    - mcp__github__*\n  servers:\n    - fs\n    - github\n```\n\n**信任边界：** 默认所有匹配 `prefix` 的工具都会被折叠——前缀只是命名约定而非安全边界，第三方插件恰好用 `mcp__*` 注册的工具同样会折叠。若只信任官方 client 的 server，请在 `servers` 里显式列出；其余保持原生（仍可直调，只是不走 meta-tool）。\n\n## 自我进化（System One 决策层）\n\n一个**默认关闭**的可选决策层：`jevEnabled: false` 时插件任何地方都不发对外决策请求，行为与接入前完全一致。打开后只发生三件事，且三件都是建议性的。\n\n**调用统计（常开，永不走网络）。** 每一次走完的 `mcp_call` 分发（成功与失败都算）按工具计数（`calls`、`errors`、首次/最近使用时间），落进插件自有门闩目录里与 `gate.json` 并排的 `usage.json`。统计与 `jevEnabled` 无关——事后打开开关，此前攒下的计数直接复用。\n\n**keep 建议（自我进化的部分）。** 每累计 20 次调用（越过 20、40、60……）触发一次后台批量提问：问决策后端，当前**处于折叠态**、且确实被调用过的工具里，哪些值得常驻每一条 prompt（省掉每次都要查目录、展开 schema 的成本）。触发它的那次分发早就返回了，这些活没人 await。答案写入 `suggestions.json`；这一轮失败则原样保留上一批。\n\n**查看。** `/mcp suggest` 渲染当前这批建议——每行给出概率、档位、支撑它的调用证据，以及该行对应的 `keep` 片段——外加已记录的总量。视图自己会写明：`display only — nothing was written to keep, prefix, or the server gate.` 片段由你亲手粘进配置；**本插件永不修改你的配置**，任何一条决策路径都不会自行写入 `keep`、`prefix` 或门闩。\n\n同一个后端，除了被计数器调用，也服务模型侧的两处检索：\n\n- `mcp_list { \"query\": \"<你想做什么>\" }` — 是一个**子集**视图：先做一遍词法预筛（对工具名与描述，确定性、无网络），再对该批候选做可选重排。答案会说明总共命中多少个工具，并指回未过滤的完整目录；无参 `mcp_list` 依然是完整目录，而不带 query 的调用根本不会发起决策请求。\n- `mcp_call` 打到未注册的工具名 — 报错保留原句，末尾追加 `Did you mean: \"…\"?` 建议：先按词法近似排序（编辑距离优先，其次共享的名字 token），可选再重排。末尾始终标注排序来源（`lexical` 或 `jev reranked`），没排过序的猜测不会被当成排过序的。\n\n**故障放行（fail-open）：** 后端不可达、超时或给不出可用答案，与开关关闭不可区分——每条决策路径都退回它原本的词法行为；建议那一轮失败，代价仅是这一批没有更新。\n\n**隐私：** 计数、建议与决策日志（`decisions.jsonl`）都不出本机——它们是门闩目录里的三个文件。打开 `jevEnabled` 后，工具名、其描述的前 200 字、调用计数以及模型自己的 query 文本**会**作为问题上下文发给决策后端；每个出站请求体都会先过内置密钥闸（JWT、各家 provider key、GitHub/Slack/AWS 令牌、PEM 块，外加你在 `jevSecretFile` 里列的字面量），命中即在出进程前中止这次调用。发往哪里由 `jevBackend` 决定：`zen`（opencode-zen 免费档，默认）、`native`（typesafe 直连）或 `openrouter`。本地 laya 陪跑（`jevLayaFallback`）默认关闭。\n\n### 别把本地 laya 当后端——暂时不建议（实测针对 laya 0.3.20）\n\n**`jevLayaFallback` 保持关闭。** 用真实 MCP 工具目录、经 `jevAskDual` 并行与免费档 `zen` 头对头，在本插件自己的三条缝上实测：\n\n| 缝 | zen（免费档） | laya 0.3.20 | 纯词法 |\n| --- | --- | --- | --- |\n| keep 建议（12 工具批量 noul） | AUC **1.000**——高频 0.71 / 边界 0.48 / 该折叠 0.11 | AUC **0.333**，比随机还差：概率全挤在 51–55% | — |\n| `mcp_list {query}` 排序（10 问） | **8/10** | 4/10——把 `read_file` 排到 SQL `query` 之下 | 6/10 |\n| did-you-mean 重排（6 错拼） | 5/6 | 4/6 | 5/6 |\n| 中文 query 语义兜底（5 问） | **5/5** | 1/5——不管问什么都锚在同一个工具上 | 0（词法零命中） |\n\nlaya 快约 8–10 倍（70 毫秒–1 秒 vs 0.6–6 秒），但判别力差得不是一点：它读不出 keep 建议**赖以成立**的调用频次信号——调用 412 次和调用 1 次的工具给回来的置信度一样高；而目录排序缝依赖的跨语言 query 匹配，是它彻底塌掉的地方。laya 自己的运行时也在警告内置 checkpoint 的置信度未校准。\n\n所以陪跑只当降级模式的安全网：主路失败时 laya 的答案**降级**接管——只借相对排序，绝不拿它的绝对分数去撞校准过的档位，那一轮的 keep 建议直接跳过，而不是拿未校准的数字糊弄你。两边的判定行照旧都进 `decisions.jsonl`，等于这份对比免费持续跑着。\n\n**何时再看：** 等 laya 出 typed-decisions checkpoint（或某个版本不再只\"警告未校准\"而是公开校准结果），并且上表被翻转时——届时先拿你自己的目录重测一遍再信。\n\n## 备注\n\n- `mcp_call` 只接受匹配 `prefix` 的工具（配置了 `servers` 时还须在白名单内）——它不可能被用来绕过其它工具自己的 pre-execute 管线。\n- 已知边界（waterfall 次序）：若某 listener 注册**早于**本插件、并在自己的 `next()` 之后补插 `mcp__*` schema，该 schema 会逃过折叠——本插件折叠的是它运行时装配结果里的内容。当前上游不存在这样的 listener。\n- 目录里的 server 名是启发式提取：前缀后第一段 `__` 分隔段（server 名规范为 `[A-Za-z0-9_-]{1,32}`，不会含字面 `__`，故不会错分组）。\n- 与 [ben7am1n/dsh-mcp-proxy](https://github.com/ben7am1n/dsh-mcp-proxy) 可共存（它是 connection-side 代理、自带连接管理，工具名互不冲突）。该项目同样致谢 pi-mcp-adapter；本仓库是独立的 prompt-side 实现：复用官方 client 而不是重造连接层。\n- 权衡（与 pi-mcp-adapter 相同）：首次调用多一次发现往返；模型展开过的 schema 会占据后续上下文。\n\n## 命令\n\n本插件在平台 `commands` 服务上注册一条斜杠命令——该依赖是软性的：宿主若没有命令服务，折叠与两个 meta-tool 照常工作（只记一条日志警告，代价是没有 `/mcp`）。`/mcp` 展示状态；v0.2.0 起它同时也是整个 MCP server 进/出适配器的唯一控制面：\n\n| 形态 | 输出 |\n|---|---|\n| `/mcp` 或 `/mcp list` | 树形总览——每行 server 带 stable `[<id>]` 前缀；disabled 的标 `⏸ disabled` 且不列工具；尾部附折叠健康行 |\n| `/mcp list <name>` | `<name>` 匹配某 server → 该 server 全部工具（disabled 的附加 `⏸` 说明行）；匹配完整工具名 → 完整描述 + 完整 input schema |\n| `/mcp config` | 当前生效的 `prefix` / `keep` / `servers` / `descriptionLimit` 及各自命中清单，外加持久 enable/disable 台账、七个 `jev*` 设置与已记录的调用统计 |\n| `/mcp suggest` | 当前这批 keep 建议：每行给出概率、档位、调用证据与对应的 `keep` 片段，外加已记录总量。只读：不向 `keep`、`prefix` 或门闩写任何东西 |\n| `/mcp disable <id>` | 把一个 server 整体闩上：工具强制折叠出 prompt（keep 与 `servers` 豁免一并覆盖）、从 `mcp_list` 目录消失、`mcp_call` 拒绝并给 `/mcp enable <id>` 指引 |\n| `/mcp enable <id>` | 用同一个 stable id 复原 |\n\n其余形态一律回复用法说明。`/mcp` 观测到的每个 server 都会分到一个稳定数字 id（1..99，最小空闲优先），持久化到插件自己的门闩文件 `<dsh home>/storages/mcp-adapter/gate.json`（机器态——刻意用文件而非设置页字段）。id 跨重启、跨 re-sync 空窗保持不变，且永不回收——一个 id 永远指同一个 server；99 个用尽时由 `/mcp` 视图明确标注（`id space exhausted (99/99): N server(s) beyond the cap cannot be gated`，受影响的分组行会带标记）。\n\ndisable 是**门闩式开关，不是真断连**：官方 client 不提供断连 API，工具仍留在注册表里、连接照常运行——门闩只把它请出 prompt、目录与分发。三层门闩共用同一个判定函数，彼此之间以及与 `/mcp` 的展示永远不会口径不一。enable/disable 经该文件持久化（tmp+rename 原子写；文档损坏时启动告警一次并退化为全启，下一次分配写会自动修复）。若存储位置完全不可写，其余功能照常，只有 toggle 会回一条持久化报错。\n\n一条真实边界：门闩生效在 prompt 侧（目录/分发层）；记得完整工具名的模型仍可能原生直调 `mcp__server__tool` 成功——需要硬性拦截时，请配合管线 guard 或 `tools.restrict()`。\n\n状态是**二态语义**：server 出现在列表里 = 它的工具在本 scope 可见——不可见不代表未启用（可能正在重连退避）；官方 client 不暴露连接状态。健康行形如 `meta-tools: mcp_list/mcp_call live · folding ACTIVE — folded N, kept M · ~X chars of schema out of prompt`（meta-tools 存活且至少折叠一个工具时），否则降级为 fail-open（或无可折叠）提示。X 是被折叠 schema 的 JSON 字符数，刻意标注为字符而非 token。输出超过 400 行会被截断，并提示用 `/mcp list <server>` 收窄。\n\n## 致谢\n\n特别致敬 **[pi-mcp-adapter](https://github.com/nicobailon/pi-mcp-adapter)** 及其作者 [@nicobailon](https://github.com/nicobailon)：本插件的核心思想——把无界的 MCP 工具面折叠为恒定的 meta-tool、schema 按需展开，从而无论挂多少 server 常驻 prompt 成本都是 O(1)——完全来自该项目；正是它重新定义了 MCP 集成应有的代价。本仓库是这个理念在 DeepSeek Harness 上的移植，机制上刻意走了不同的路线（复用官方连接层的 prompt-side shim），但灵感与理念的功劳归于原作。如果你用的是 pi，请直接用原版。\n\n同样值得提及：[ben7am1n/dsh-mcp-proxy](https://github.com/ben7am1n/dsh-mcp-proxy) 独立验证了 dsh 侧对这类方案的真实需求。\n\n## 开发\n\n```\nnpm install && npm run check && npm test\n```\n\n`@deepseek-ai/*` 类型由 `scripts/link-dsh-closure.mjs` 从全局 dsh 闭包软链解析（`precheck` 自动执行）——它们被刻意排除在 `package.json` 之外，以保证类型图中只存在一份 cordis 实例。完整设计依据与上游参考见 `DESIGN.md`。\n","readmeFilename":"README.zh.md"}