{"_id":"@cscec3b-mcp/dop-portal-mcp","_rev":"9-05bbe3343a6153ab5b269f800fab77b7","name":"@cscec3b-mcp/dop-portal-mcp","dist-tags":{"latest":"0.1.2","alpha":"0.1.2-alpha.0"},"versions":{"0.1.1-alpha.0":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.1-alpha.0","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.1-alpha.0","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"fe778ad4efffcaa3c07bfcb08351c06d61273345","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.1-alpha.0.tgz","fileCount":5,"integrity":"sha512-nKSA0lqFEqBc0rrzTU+eW4paUJs79Zi1SqHa1Lp6NIEfxb5OhyONTP9MXccdsAammMyDGMzpBHXzupezte3tCg==","signatures":[{"sig":"MEQCIERs4MKylIa+daUMjjoPLoZRIKDp4zDDVG3pCkyppPPaAiB+IeafT8mlvLXCJjHPE00ItfldVjbrGtwlki4UmFCSfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1372054},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"844024d9382f8fe57355c750819f64f7dee915c5","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"0.1.1","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.1-alpha.0_1788424214365_0.530964787342934","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-alpha.1":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.1-alpha.1","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.1-alpha.1","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"cb2aefe2245b1de8938aab4450922f66f40a8344","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.1-alpha.1.tgz","fileCount":5,"integrity":"sha512-Xk1m3kmFs1DzWSx9kObTcVCE4ulU8gKdqjlArgEg1eCXJAKTZsYfGSWwZ3Sf9+yVCqfTOuMpgRD7OFeKvYf16w==","signatures":[{"sig":"MEQCIE24pl5phyZOLsmvAcPT1H600n53bAcQ+fILYSQi6ZuVAiAA9XJeReW6eztsDbdabw0Dp/DFSz8Ds6stK4f6vpLfmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1372527},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"844024d9382f8fe57355c750819f64f7dee915c5","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"0.1.1","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.1-alpha.1_1788426174124_0.6560109954319788","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-alpha.2":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.1-alpha.2","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.1-alpha.2","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"e7e64862dc3aed06fc2d62d6885be57040020ce8","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.1-alpha.2.tgz","fileCount":5,"integrity":"sha512-Mb9QdDZYADGzq11g+LRIQaMXalk4azXgF65sYAtOHHryYCRhdU8ZGJLoERTwaESt0WH+hi7y8jJbGwY+n4oVJw==","signatures":[{"sig":"MEYCIQDWoeVVgQDwnyrG2LWLHmfnnRA0jXBUCZ8fjV7RE94SvwIhALH9gUpxFG7XfjdVtAmrbqevBl0NirPN9fXxRxQbm2Ue","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGqjs6bLH+UmqiyGnQkmLPBpJF9aQZnZlTzGfXL0SrR6AiBd23arbYXaalgyYyD3ee6TZBbGAa9F/AdnXnFydLHE4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1385188},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"7c653032e574b71d4e9b253e123deec7605210de","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"^0.1.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.1-alpha.2_1789452917664_0.8371378767009365","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-alpha.3":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.1-alpha.3","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.1-alpha.3","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"0523cece4b35d966a0f46b3a72c453a3eb6b3b13","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.1-alpha.3.tgz","fileCount":5,"integrity":"sha512-Rd6bD3MIvz0aLkpD4Z87xrOMPDdhvLEOe1QgUhM6BZSbZ3S5x+gquvR8Y8JScKcRIOdXBCnU1KVKa0yER9q30g==","signatures":[{"sig":"MEUCIQD/XwxTV1QCGPL43cg31IAq+u1DduVNOG1EtkQSfhM3TgIgLXo5ozMwTUgZ9wSMSVH98UnQIMHlRN6NMcrKXBSVdpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGory5b9AwTFe/M3oVu2yfXIDj3FWxMdOuXEFxG/EzYFAiA1xCMBvP8Bw5/Kd2QgOcFVqrSex7hRdy2xm9tb67u3ZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1374537},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"b8ff4ef6e4ac42164640549544b274d32183c373","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"^0.1.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.1-alpha.3_1789871852883_0.18756086143962092","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.1","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.1","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"e7aa773b8fea89c598d422ee0a9e8f4198cbe6f9","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.1.tgz","fileCount":5,"integrity":"sha512-tQXiOrBfaq6VTVoj4UImkcrZo9lE6t/hwTlU6jMokNKAxV7glUqer4Kp9asVr2+JiN16brAFHqSucR9jtCWj1Q==","signatures":[{"sig":"MEUCIQCUt5mWlqZopfVVFi7gn5o33xrcvIkc5pryx1B0AqZeiwIgMRTNhY9BdXZGLKC3eY7O+EaPu4qRJYmLxa+CLiNnR7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDvC6xHwBgMqpyRWtlTys51vyB/HW+57tuo06bV54WpYAIgIENSEpdpAFl4RkW4oT9n65DLi6EvPGAaiKXKobpn8Ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1374529},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"b8ff4ef6e4ac42164640549544b274d32183c373","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"^0.1.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.1_1789872108886_0.11915930173203315","host":"s3://npm-registry-packages-npm-production"}},"0.1.2-alpha.0":{"name":"@cscec3b-mcp/dop-portal-mcp","version":"0.1.2-alpha.0","license":"UNLICENSED","_id":"@cscec3b-mcp/dop-portal-mcp@0.1.2-alpha.0","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"09f933fe931c68b86750b76a79f2b92eb6469e7f","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.2-alpha.0.tgz","fileCount":5,"integrity":"sha512-6OxhZgHiO/1ZLOyflZZ57PEUFkHSqZCPQ38kpSqQspwvYiSvwhN9GtE7ENxOOQGrGYgftPKFk/7pquEAEZJErQ==","signatures":[{"sig":"MEUCIQCVSH0s5s2NaqNTNIze7Y9QPbQQS06CzBdNveKYQOUxywIgJvcSql0zoVjpbsU1SVRQiciCIe7vNeXGBHVWbGeNAFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE84nJQV9ZG6FnMr44V6tl2fdEwEYpMXb4gV9dk2ygXYAiAaKtuSjl0YFU+cAyQFAWgcsPt4mTV2KBrnad2x1qytcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1375073},"main":"./dist/index.cjs","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"ca49981637e90d977ef2b0b12e233932254b92e6","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"^0.1.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dop-portal-mcp_0.1.2-alpha.0_1790663461527_0.3354035745788717","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"_id":"@cscec3b-mcp/dop-portal-mcp@0.1.2","bin":{"dop-portal-mcp":"dist/index.cjs"},"dist":{"shasum":"2323917d3fa4c487e78ff8cd1fdf11ba07282c30","tarball":"https://registry.npmjs.org/@cscec3b-mcp/dop-portal-mcp/-/dop-portal-mcp-0.1.2.tgz","fileCount":5,"integrity":"sha512-tbnoFJ66RpqcLLHiZbNCLPYRGpgvqwuwoP3RjrPLmwp1trnDJ3BgcFJP059hNk418mW4ycQ3dEjtqo+G785+lw==","signatures":[{"sig":"MEYCIQCUCbF9mGuBHfjktIPe4csTkCvQmEvOMVsXZ0Ktq2J5cQIhAIJYtHKUhvK2wEFvZcf2cNXCD3EyetJQRK+OgT8V+FE5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICp/kYHU2yCo0seDiqn0ck0Og/qK97aXW9vyqRRqiaK6AiAA8w21G+PkD7I35mZwUBS0ifchL7t0G1wZ/XM5ruMIZg=="}],"unpackedSize":1375065},"main":"./dist/index.cjs","name":"@cscec3b-mcp/dop-portal-mcp","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/index.cjs"},"gitHead":"ca49981637e90d977ef2b0b12e233932254b92e6","license":"UNLICENSED","private":false,"scripts":{"dev":"cross-env MCP_ENV=test DEV_MODE=1 node scripts/inspect.mjs","pub":"npm publish","build":"node scripts/build.mjs","gen-json":"node scripts/gen-json.mjs","pub-alpha":"npm version prerelease --preid=alpha --no-git-tag-version && npm run build && npm publish --tag alpha","typecheck":"node scripts/typecheck.mjs","pub-release":"npm version patch --no-git-tag-version && npm run build && npm publish --tag latest","prepublishOnly":"npm run build"},"version":"0.1.2","_npmUser":{"name":"waitingsun910","email":"408437662@qq.com"},"_npmVersion":"10.8.2","description":"DOP门户MCP","directories":{},"maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"_nodeVersion":"18.20.8","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","zod":"^4.4.3","axios":"^1.19.0","esbuild":"^0.21.5","express":"^4.19.2","cross-env":"^7.0.3","typescript":"^5.5.0","@types/node":"^22.0.0","@types/express":"^4.17.21","@cscec/dop-mcp-tool":"^0.1.2","@modelcontextprotocol/client":"^2.0.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dop-portal-mcp_0.1.2_1790663675002_0.10236471544964498"}}},"time":{"created":"2026-09-03T08:30:14.126Z","modified":"2026-09-29T06:34:35.359Z","0.1.1-alpha.0":"2026-09-03T08:30:14.552Z","0.1.1-alpha.1":"2026-09-03T09:02:54.280Z","0.1.1-alpha.2":"2026-09-15T06:15:17.746Z","0.1.1-alpha.3":"2026-09-20T02:37:32.987Z","0.1.1":"2026-09-20T02:41:48.980Z","0.1.2-alpha.0":"2026-09-29T06:31:01.727Z","0.1.2":"2026-09-29T06:34:35.122Z"},"license":"UNLICENSED","description":"DOP门户MCP","maintainers":[{"name":"cscec3b_npm","email":"cscec3b_npm@163.com"},{"name":"zhangshichun","email":"zhangshichun_looper@aliyun.com"},{"name":"waitingsun910","email":"408437662@qq.com"},{"name":"stephenpeng","email":"htmmyqw@hotmail.com"}],"readme":"# @cscec3b-mcp/dop-portal-mcp\n\nDOP门户MCP\n\n> 由 `@cscec/create-dop-mcp` 脚手架生成,基于 DOP MCP 模板(扫码登录与 token 管理由 `@cscec/dop-mcp-tool` 提供)。\n\n\n## 目录结构\n\n```\ndop-portal-mcp/\n├── package.json          # bin 指向 dist/index.cjs;发布自包含(dependencies 为空,esbuild 全内联)\n├── scripts/\n│   ├── lib.mjs           # 构建共用路径:buildTool()(tsc 编译共享库) + buildMcp()(esbuild 打包 + 复制 help-doc.md)\n│   ├── build.mjs         # yarn build:产出自包含 dist/index.cjs\n│   ├── inspect.mjs       # yarn dev:MCP Inspector 调试 + esbuild watch(改源码自动 rebuild,Inspector 里重连即生效)\n│   ├── typecheck.mjs     # yarn typecheck:先编译共享库(.d.ts)再 tsc --noEmit\n│   └── gen-json.mjs      # yarn gen-json [--env test|pre|prod]:生成 .mcp.npm.json(MCP 客户端配置,npx 拉发布包)\n└── src/\n    ├── index.ts          # 入口:第一行 import './base/env.js'(解析 --env/--dev-mode,必须最先);createServer() 里每行注册一个工具\n    ├── help-doc.md       # help 工具返回的文档:公共鉴权 + 各场景 SOP,新增业务场景时追加子章节\n    ├── base/             # 基建层(被业务依赖、自身不依赖业务 service)\n    │   ├── env.ts        # --env test|pre|prod + --dev-mode(日志)参数解析(Inspector 不继承父进程 env,用参数显式传;--dev 是 Inspector 保留字)\n    │   ├── config.ts     # currentEnv() + 业务网关配置 ENV_BIZ_CONFIG(按环境切 apiBase/appId/tenant)\n    │   ├── logger.ts     # JSON 追加日志到 cwd/mcp-dop-portal.log,仅 DEV_MODE=1 落盘(与 MCP_ENV 解耦)\n    │   ├── http.ts       # 共用 axios 实例;拦截器统一注入 Authorization: bearer <iamToken>(实时读盘、临期自动续期)\n    │   └── request.ts    # dopGet/dopPost/dopGetRaw:解 {code,success,message,data} 信封\n    ├── service/          # 按接口域封装 REST 调用(纯函数,不碰 MCP)\n    │   └── common.ts     # getUserInfo(biz /api/auth/getUserInfo)\n    └── tools/            # 每个工具一个文件,导出 registerXxx(server)\n        ├── help.ts                 # 返回 help-doc.md(+共享库文档)\n        ├── portalQrLoginStart.ts   # 启动扫码登录(非阻塞,返回 loginUrl)\n        ├── portalQrLoginWait.ts    # 阻塞等待扫码完成(登录态加密落盘)\n        └── getUserInfo.ts          # 查当前用户与组织(未登录返回 loggedIn:false + 扫码指引)\n```\n\n## 快速开始\n\n```bash\n# 仓库根目录装依赖(yarn 1 workspaces,packages/* 自动纳入)\nyarn install\n\n# 调试:起 MCP Inspector(浏览器 UI)+ esbuild watch;改源码后 Inspector 里手动重连即可\nyarn workspace @cscec3b-mcp/dop-portal-mcp dev\n\n# 构建/类型检查\nyarn workspace @cscec3b-mcp/dop-portal-mcp build\nyarn workspace @cscec3b-mcp/dop-portal-mcp typecheck\n```\n\n环境由 `MCP_ENV` 决定(`test|pre|prod`,默认 prod),只切换后端域名;`yarn dev` 默认 test 并带 `DEV_MODE=1`。日志开关独立:`DEV_MODE=1` 才落盘(见 base/logger.ts,空/0 静默)。裸 `node dist/index.cjs` 不带参数回落 prod 且不写日志。\n\n## 如何新增一个工具\n\n1. **service 层**:`src/service/<域>.ts` 封装 REST 调用——用 `dopGet`/`dopPost`(解 `{code,success,message,data}` 信封)或 `dopGetRaw`(不包信封的接口)。**不要显式传 token**,http.ts 拦截器统一注入。\n2. **tool 层**:`src/tools/<工具名>.ts`,导出 `registerXxx(server: McpServer)`,用 zod 声明 `inputSchema`/`outputSchema`。**声明了 `outputSchema` 就必须返回 `structuredContent`**(SDK 强制)。参考 `src/tools/getUserInfo.ts` 的写法(含「未登录不算工具错误」的降级模式)。\n3. **注册**:`src/index.ts` 的 `createServer()` 里加一行 `registerXxx(server);`。\n4. **文档**:`src/help-doc.md` 追加场景章节(工具用途/入参约束/分页约定/展示要求)——这是给使用 MCP 的 AI 看的操作指引,工具描述里写「使用前先调用本 MCP 的 help_tool 查看文档」引导 AI 先读它。\n\n改完跑 `yarn typecheck`;`yarn dev` 的 watch 会自动 rebuild(含 help-doc.md 复制),Inspector 里重连即生效。\n\n## 关键约定 / 坑\n\n- **esbuild 必须打成 CJS**:axios 有动态 require,ESM bundle 会炸;bundle 里 `import.meta.url` 不可用——运行时定位文件用 `process.cwd()`/`__dirname`(见 `logger.ts`、`tools/help.ts`)。\n- **MCP Inspector 不继承父进程 env**:server 支持 `--env <env>` 与 `--dev-mode`(日志开关,等价 DEV_MODE=1)参数(`src/base/env.ts` 最先加载解析),inspect.mjs 把环境与日志开关写进启动命令。**server 自定义参数避开 Inspector 保留字**(`--dev`/`-e`/`--config` 等会被 Inspector 吃掉不透传)。\n- **19 位 snowflake ID 一律字符串透传**(zod 用 `z.string()`):超 JS Number 安全整数,转数字精度丢失,后端查不到。\n- **日志不含 token**:请求日志只记 method/url/params/body,不记 headers;日志文件仅 `DEV_MODE=1` 时落盘(与 `MCP_ENV` 解耦,prod 也可显式开)。\n- **登录态**:扫码一次全场景通用,token 临期由共享库自动续期;任何工具返回 `HTTP 401/402` 或 `token 无效` → 重新扫码登录 → 重试。\n- **token 分工**:业务工具只用 iamToken(拦截器注入);门户 token 只在共享库登录域内部使用,不出库。\n- **发布自包含**:依赖全在 devDependencies(esbuild 内联),`dependencies` 为空;`files: [\"dist\"]`,`help-doc.md` 靠 build 脚本复制进 dist——**改文档要重新 `yarn build`**。\n- **yarn 1 的 `.yarnrc` 必须放各 package 目录**(不向上查找),registry 指 `https://registry.npmmirror.com`。\n\n## 发布\n\n```bash\nyarn workspace @cscec3b-mcp/dop-portal-mcp pub          # 发 alpha/当前 tag\nyarn workspace @cscec3b-mcp/dop-portal-mcp pub-alpha    # 版本号 prerelease(alpha) + 发布\nyarn workspace @cscec3b-mcp/dop-portal-mcp pub-release  # 版本号 patch + 发布 latest\n```\n\n发布前改 `package.json` 的 `name`/`bin` 为实际包名;registry 走 `publishConfig.registry`。","readmeFilename":"README.md"}