{"_id":"@asiainfo-sdd/skillshub-mcp","_rev":"9-423c103167cb85cdf8da8d361df61fa5","name":"@asiainfo-sdd/skillshub-mcp","dist-tags":{"latest":"0.0.10"},"versions":{"0.0.1":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.1","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.1","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"71c6195625655cdd09ea8623c52f32adccb9168a","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.1.tgz","fileCount":10,"integrity":"sha512-w4bfSL6sVTglyvQ44RrWeZSscWXKMyWEWooZnpgqqlQSuMwq4MjJsf2L78Dvh2VLKQwfUXI6Wz9hst1RSKb/QA==","signatures":[{"sig":"MEQCIGckSHSD7uegdrc/F992YBl0z5JbFz5Dl54mHcr8fPHLAiBh1sHj/AQ+0wfUO6/4ny4PNx6uz6uoHK/j/qQ97XkWwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48937},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.1_1783492401957_0.9551889848279445","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.2","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.2","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"1feaf64aa1cc387255c79f7386727e2d71e78e18","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.2.tgz","fileCount":11,"integrity":"sha512-uQAJCgXXuJZXi61G/OooJPdL8XZQmnRhF9CKe5n5xKBKyVLym+T/bvSzRmt3ntCOzGtt9gXdUTl63AYY1RxmDQ==","signatures":[{"sig":"MEUCICeti7zeuwF8HxmRGpGfDJH4kUDoJ91Z6eRxxa6D9Qr5AiEA3sdtmAt+QpO90XevOAZO+4/cw1ihwj1Na5qGW9U2+Lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62198},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"2bf34a172d36ff8ef332d687db7e5c2d0457598b","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.2_1783577601412_0.9554385595611183","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.3","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.3","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"fba513e0b2ef382ff29f115755659445aafb9127","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.3.tgz","fileCount":12,"integrity":"sha512-IjrzT1Pud7lYgXAgcqXJDgc4vLENiAG0Ydue7Vvn52u9icWqjCJFLAdKr5FtNPgBs5TLb3P1MhFiZTBC94VEVA==","signatures":[{"sig":"MEUCIQDzQNgjxRlD2ScyuH13a7cFdsksVJgOMi45UAR6OZTveQIgTOuM3pZ1RKpQ+xYUThiV5L0WugsiY0F8dkSobBssZwc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73328},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"2bf34a172d36ff8ef332d687db7e5c2d0457598b","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.3_1783582168457_0.9893935703785903","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.4","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.4","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"be42fa37b3dd5d4c0f85c722eb6fe23453372ca5","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.4.tgz","fileCount":12,"integrity":"sha512-lECEGbejjTtbgxF9zOeA+y0E//cTxhlDj0oW5nUK/CAxJNyIyQiNDo1ITQLlUC1MGCIbYhOzf/su3TN2wvQNng==","signatures":[{"sig":"MEQCIENnByikBiwsQT2C38R0VODhFLTaZzKIT0Oau9eIy5veAiBPkI2BT43l4s8t+ONoZPaYLKCgMaecF5kDZICMLfGfzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73410},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"9eaa01232a51d0489bb89baf9919ddab12181be2","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.4_1785313668733_0.8515368314825942","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.5","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.5","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"b1b234fe5e94669ae7258f1b28cdefb2b93f6482","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.5.tgz","fileCount":12,"integrity":"sha512-pgfV9jn65mhZRo7Dc3oBg2+WczXO0UuL7qY7Jsd1JSRc1GrJjxR/FeDnjZXAKkQfroFjjcXOUBYuKvbmjAtbvg==","signatures":[{"sig":"MEUCIQDkhtuM1zOrcr0Qgzt3G0zG7SyOjawt+ukMskhVbW/osAIge3agk9NQjzUnsGWRkeMnTUVhYpGbAXltj5UuYBN2by0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73679},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"ce70838713e7d10ead0c4158adbc4226f4350dc5","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3"},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.5_1787219534385_0.7580674480197191","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.6","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.6","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"42e171a4a967736de8b405a41da484a1a831c077","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.6.tgz","fileCount":12,"integrity":"sha512-0pCyCLo8l07PRDkgb/5ZRR/3YCW1MJ+aFsD1FxwIPElV149vmfAtwl/58jf8IeEC67YDx0VdDEuI32ft5yvs+Q==","signatures":[{"sig":"MEQCICk3nxUJiPYNqdE/rui9TiBBrOdVKj3zGUoe4rh2jF6pAiAcloDD6U1Fh4SocjrkfLnfWnWBKzq+jX3dXXXo6Nekbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75794},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"a59126ec5557637dcea2075c3a6b58892dfa800a","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.6_1787814303362_0.24922891536224712","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.7","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.7","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"42ffa7c03481cafecd995b50e6dc689f43f6ae91","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.7.tgz","fileCount":12,"integrity":"sha512-ZinWrp6nnl5rTM1GZhNf+/hRxUBZ6pnvlRxTZvqpJMgAXzEICN1UgMhpshaoX2/gNxUXe++L57Do07zGzAIe/Q==","signatures":[{"sig":"MEQCIGUapgigfdpxu7F4WUODXg+G6+DDevTcBP/VmY4jL1qsAiAZ40Sh3WBvTQ6XxNdDyDNWErayUI9lcQGgXUDXKPx8mw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76817},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"fcc2afa2ad035c7cfdbd6e7bc59d5fecd8f5cde1","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.7_1787817578237_0.07346627823641594","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@asiainfo-sdd/skillshub-mcp","version":"0.0.9","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"author":"","license":"MIT","_id":"@asiainfo-sdd/skillshub-mcp@0.0.9","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"08caaae9437695e79a69b2056b916df07626db35","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.9.tgz","fileCount":12,"integrity":"sha512-QZTHLf/TdP2iWxLDhTojSI+mHRPzOE4d3QbFaVPNFfqx4tCbvJO3NNMYAFx2doIUEsoUVObKhscq4SB0eChN3A==","signatures":[{"sig":"MEYCIQC/ni2XV5DDHnbS+JThOjxAXCYsKEkTHUT4NeFP5znDxAIhAOK2mAup1q2C+xY9PtEABHlr0x3Yi/37FrQPqm3zOjcX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76817},"main":"src/index.js","type":"module","engines":{"node":">=18.17"},"gitHead":"2d02078a9741c2fc6fc201b8dbe6157fc02c6bbb","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js"},"_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/skillshub-mcp_0.0.9_1788403578266_0.12765261386118798","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"_id":"@asiainfo-sdd/skillshub-mcp@0.0.10","bin":{"skillshub-mcp":"src/index.js"},"dist":{"shasum":"9e3be1af92309939e806847f9ede4bd1a668d960","tarball":"https://registry.npmjs.org/@asiainfo-sdd/skillshub-mcp/-/skillshub-mcp-0.0.10.tgz","fileCount":12,"integrity":"sha512-DXif4FAY0YNuHIk9sRrt2kjSkWehZWRTE/7n5TbmSPiYkI8bhbpLJHLiybwKfvhljJq4+ZJ72ZLs3HYQUpmVvw==","signatures":[{"sig":"MEQCIEM9Rx/zWScyJf3RHslmHvkSTRMEo+vIwWdvbN4ATZgYAiBsMbQMGbA9UALmr4+cAd0Fyxj+/ixpc9KXR+JZsCa7nQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDmEvSGyiEw4o1F5P8f3i3+K8UT38gHH4UsMcOWPmPErAiBXi2jkDr5waNKv2atSMlsrpf9T3zfN18+M+MvjmzH4NA=="}],"unpackedSize":75616},"main":"src/index.js","name":"@asiainfo-sdd/skillshub-mcp","type":"module","author":"","engines":{"node":">=18.17"},"gitHead":"934bb267d4a63447140be598f2cc1e9594c4f654","license":"MIT","scripts":{"dev":"node --watch src/index.js","start":"node src/index.js","prepublishOnly":"node scripts/publish-guard.mjs"},"version":"0.0.10","_npmUser":{"name":"asiainfo-tsg","email":"dongqiushu@163.com"},"keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"_npmVersion":"11.9.0","description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","directories":{},"maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","fflate":"^0.8.3","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skillshub-mcp_0.0.10_1789455527985_0.9147925316304995"}}},"time":{"created":"2026-07-08T06:33:21.773Z","modified":"2026-09-15T06:58:48.251Z","0.0.1":"2026-07-08T06:33:22.098Z","0.0.2":"2026-07-09T06:13:21.534Z","0.0.3":"2026-07-09T07:29:28.598Z","0.0.4":"2026-07-29T08:27:48.886Z","0.0.5":"2026-08-20T09:52:14.510Z","0.0.6":"2026-08-27T07:05:03.524Z","0.0.7":"2026-08-27T07:59:38.377Z","0.0.9":"2026-09-03T02:46:18.408Z","0.0.10":"2026-09-15T06:58:48.080Z"},"license":"MIT","keywords":["mcp","model-context-protocol","skill","skillshub","asiainfo","trae","qoder","claude","ai-agent"],"description":"SkillsHub MCP server — 对接亚信 SkillsHub 后台的本地 MCP 客户端，支持技能批量下载到 .trae/.qoder 等智能体目录，token 过期自动续期。","maintainers":[{"name":"asiainfo-tsg","email":"dongqiushu@163.com"}],"readme":"# @asiainfo-sdd/skillshub-mcp\r\n\r\n> 对接亚信 SkillsHub 后台的本地 MCP（Model Context Protocol）客户端。支持**技能批量下载**到 `.trae` / `.qoder` 等智能体目录，token 过期**自动续期并重试**，开箱即用。\r\n\r\n技能平台 token 有效期较短（约 1 小时），本服务在任意接口收到 `401` 时会自动重新获取 token 并**重试一次**，对调用方完全透明，无需手动处理鉴权过期。\r\n\r\n---\r\n\r\n## ✨ 核心能力\r\n\r\n- **技能批量下载**（核心）：按 `skillIds` 精确下载，或按名称/业务类型模糊批量下载，按技能原始目录层级落盘。\r\n- **多智能体目录**：默认写入 `.trae` 与 `.qoder`，可通过 `dirs` 参数扩展到 `.claude` / `.cursor` 等任意智能体目录。\r\n- **token 自动续期**：401 自动刷新 + 重试，并发请求自动去重只刷新一次。\r\n- **只读安全**：仅保留获取 token / 查询 / 下载，共 6 个 MCP 工具，不暴露任何会修改后台技能的接口（无增删改 / 发布 / 导入导出）。\r\n- **零构建**：纯 Node.js ESM，无编译步骤；`npx` 直接运行。\r\n\r\n---\r\n\r\n## 🚀 快速开始\r\n\r\n### 方式一：npx 直接运行（推荐，无需安装）\r\n\r\n> 自 `0.0.4` 起，团队共享凭证（`SKILLHUB_BASIC_AUTH` / `SKILLHUB_TEAM_ID` / `SKILLHUB_INSECURE`）已内置在代码中，**无需在 MCP 配置里再通过 env 传递**。这样在 Trae 等智能体里共享 MCP 配置时，不会再出现敏感值被平台用 `******` 掩码导致团队成员无法使用的问题。\r\n\r\n在智能体的 MCP 配置中加入：\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"skillshub\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@asiainfo-sdd/skillshub-mcp@latest\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n> 不需要任何 `env` 字段，开箱即用。如需覆盖默认的 base URL / 下载目录等可选项，仍可通过 env 设置。\r\n\r\n### 方式二：全局安装\r\n\r\n```bash\r\nnpm install -g @asiainfo-sdd/skillshub-mcp\r\n```\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"skillshub\": {\r\n      \"command\": \"skillshub-mcp\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### 各智能体配置文件位置\r\n\r\n| 智能体 | 配置文件 |\r\n|--------|----------|\r\n| Trae | `.trae/mcp_config.json`（项目级）或设置 → MCP |\r\n| Qoder | Qoder 设置 → MCP Servers |\r\n| Claude Code / Claude Desktop | `claude_desktop_config.json` |\r\n| Cursor | `.cursor/mcp.json` 或 `~/.cursor/mcp.json` |\r\n\r\n> 配置格式均为上面的 `mcpServers` 结构，可通用。\r\n\r\n---\r\n\r\n## ⚙️ 环境变量\r\n\r\n> **凭证类配置已内置**：自 `0.0.4` 起，`SKILLHUB_BASIC_AUTH` / `SKILLHUB_TEAM_ID` / `SKILLHUB_INSECURE` 三项团队共享凭证已直接写入代码（见 [src/config.js](src/config.js)），不再从 env 读取。这样 Trae 等智能体在团队内共享 MCP 配置时，不会再因 `env` 字段被掩码为 `******` 而失效。下表仅列出**可选**覆盖项：\r\n\r\n| 变量 | 说明 | 默认值 |\r\n|------|------|--------|\r\n| `SKILLHUB_BASE_URL` | 技能接口基础地址 | `https://aido.asiainfo.com/maas-mgmt` |\r\n| `SKILLHUB_TOKEN_URL` | OAuth2 取 token 地址 | `https://aido.asiainfo.com/maas-sso/oauth2/token` |\r\n| `SKILLHUB_DOWNLOAD_DIRS` | 默认下载目录，逗号分隔 | `.trae,.qoder` |\r\n| `SKILLHUB_PAGE_SIZE` | 分页默认每页条数 | `100` |\r\n| `SKILLHUB_TIMEOUT_MS` | 单次 HTTP 超时毫秒 | `30000` |\r\n| `SKILLHUB_TOKEN_MARGIN_MS` | token 提前刷新余量毫秒 | `60000` |\r\n\r\n> **内置凭证（不通过 env 读取）**：`basicAuth` = 团队 OAuth2 应用接入密钥；`teamId` = `1851529412143517698`；`insecure` = `true`（内网自签证书，固定开启）。如需更换团队或密钥，请直接修改 [src/config.js](src/config.js) 顶部的常量后重新发布。\r\n\r\n> **关于 TLS**：该后台证书无法被 Node 默认信任库校验（`UNABLE_TO_VERIFY_LEAF_SIGNATURE`）。内网环境可设 `SKILLHUB_INSECURE=1` 快速放通；生产环境更推荐 `NODE_EXTRA_CA_CERTS=/path/to/enterprise-ca.pem` 导入企业 CA。\r\n>\r\n> **关于 base URL**：技能 REST 接口位于 `/maas-mgmt` 网关下（根路径 `/skill/...` 返回 nginx 404，`/maas-skill` 等是 MinIO 对象存储桶而非接口）。默认值已设为 `…/maas-mgmt`。若你的网关前缀不同，用 `SKILLHUB_BASE_URL` 覆盖即可。\r\n>\r\n> **关于后台响应结构**：后台真实响应为 `{ success:true, code:\"bizSuccess\", data:..., count:N }`（`code` 为字符串、分页总数字段为 `count`），与接口文档描述的整数 code / `total` 不同，本服务已做兼容。技能文件以 `fileTrees` 返回，路径带 `skill/<uuid>/` 存储前缀、目录以 `dir:false` + 末尾 `/` 表示——下载时已自动剥离存储前缀并正确识别目录。\r\n\r\n---\r\n\r\n## 🧰 工具一览\r\n\r\n> 本服务**只读**：仅保留获取 token / 查询 / 下载 / token 自动续期，不暴露任何会修改后台技能的接口（无增删改 / 发布 / 导入导出），保证对外安全。\r\n\r\n| 工具 | 类别 | 说明 |\r\n|------|------|------|\r\n| `ping` | 获取 token | 验证连通性，主动取一次 token，返回过期时间。排查鉴权/网络问题首选。 |\r\n| `list_skills` | 查询 | 分页查询技能列表（可按状态/名称/业务类型过滤）。 |\r\n| `list_published_skills` | 查询 | 分页查询**已发布**技能列表。 |\r\n| `get_skill_detail` | 查询 | 按 `skillId` 查询技能详情（含文件树）。 |\r\n| `get_published_skill_detail` | 查询 | 按 `skillId` 查询**已发布**技能详情。 |\r\n| **`download_skills`** | 下载 | ⭐ **批量下载技能到本地智能体目录**（顺序，适合小批量）。 |\r\n| **`download_skills_parallel`** | 下载 | 🚀 **多线程批量下载**（async 并发池，适合大批量）。 |\r\n\r\n> **多线程说明**：`download_skills_parallel` 在接口内启动多个并发任务（`concurrency` 控制并发度，默认 5），每个任务独立完成 拉详情→写盘，技能间真正并行下载。Node 通过 async I/O + libuv 线程池在系统层并行执行 socket 读写，且所有并发请求**共享同一个 TokenManager**——任一请求遇 401 自动续 token 一次，全部受益（若改用 OS worker_threads 反而会破坏统一的 token 管理）。实测 6 技能：顺序 ~1.2s / 并发(6) ~0.2s。\r\n>\r\n> token 过期自动续期不是独立工具，而是内置机制：任意接口收到 401 时自动刷新 token 并重试一次（见 [client.js](src/client.js)），对调用方透明。\r\n\r\n---\r\n\r\n## ⭐ `download_skills` 详解\r\n\r\n**功能**：把一个或多个技能按其原始目录层级，批量写入本地智能体目录。\r\n\r\n**参数**：\r\n\r\n| 参数 | 类型 | 必填 | 说明 |\r\n|------|------|------|------|\r\n| `skillIds` | `string[]` | 二选一 | 要下载的技能 ID 列表 |\r\n| `filter` | `object` | 二选一 | `{ skillName?, busType?, skillStatus?, teamId? }`，自动翻页收集全部匹配项 |\r\n| `dirs` | `string[]` | 否 | 目标智能体目录，默认读配置 `[.trae, .qoder]`，可传 `[\".claude\", \".cursor\"]` 等 |\r\n| `baseDir` | `string` | 否 | 基准目录，默认当前工作目录（智能体工作区根） |\r\n| `subDir` | `string` | 否 | 每个智能体目录下的子目录，默认 `skills`；传 `\"\"` 则直接写到 `<dir>/<skillName>` |\r\n| `overwrite` | `boolean` | 否 | 是否覆盖已存在文件，默认 `false`（跳过） |\r\n| `published` | `boolean` | 否 | 使用已发布技能详情，默认 `false` |\r\n| `dryRun` | `boolean` | 否 | 只预览不落盘，默认 `false` |\r\n\r\n**落地结构**：`<baseDir>/<dir>/<subDir?>/<skillName>/<原始文件层级>`\r\n\r\n### 示例（让 AI 这样调用）\r\n\r\n下载指定技能到默认的 `.trae` / `.qoder`：\r\n\r\n```json\r\n{\r\n  \"skillIds\": [\"101\", \"102\"],\r\n  \"overwrite\": true\r\n}\r\n```\r\n\r\n按名称模糊批量下载，并额外写入 `.claude` 目录：\r\n\r\n```json\r\n{\r\n  \"filter\": { \"skillName\": \"报表\", \"busType\": \"data\" },\r\n  \"dirs\": [\".trae\", \".qoder\", \".claude\"]\r\n}\r\n```\r\n\r\n只预览不写盘：\r\n\r\n```json\r\n{ \"filter\": { \"skillName\": \"登录\" }, \"dryRun\": true }\r\n```\r\n\r\n> 技能名中的文件系统非法字符（`/ \\ : * ? \" < > |` 等）会被清洗为 `_`；所有相对路径都会做**路径穿越拦截**，确保文件不会写到目标目录之外。\r\n\r\n---\r\n\r\n## 🔑 Token 自动续期机制\r\n\r\n```\r\n调用任意接口\r\n   │\r\n   ├─ 200/2xx ──▶ 正常返回\r\n   │\r\n   └─ 401（token 过期）\r\n         │\r\n         ├─ TokenManager 强制刷新（fetchToken）\r\n         │   · 并发请求自动去重，只刷新一次\r\n         │\r\n         └─ 用新 token 重试一次原请求 ──▶ 返回结果\r\n```\r\n\r\n- token 在到期前 `SKILLHUB_TOKEN_MARGIN_MS`（默认 60s）即视为临期，下一次调用前主动刷新。\r\n- 即便如此仍可能撞上 401，此时由 HTTP 客户端兜底：刷新 + 重试一次。\r\n- 对所有工具完全透明，调用方无需感知。\r\n\r\n---\r\n\r\n## 📦 发布到 npm\r\n\r\n本项目为 scoped 包（`@asiainfo-sdd/skillshub-mcp`），首次发布需以 public 可见性发布：\r\n\r\n```bash\r\n# 1. 登录（需要 npm 账号，且对 @asiainfo scope 有权限；若无 scope 权限可改用扁平包名）\r\nnpm login\r\n\r\n# 2. 发布（scoped 包默认私有，必须加 --access public）\r\nnpm publish --access public\r\n```\r\n\r\n发布内容受 `package.json` 的 `files` 字段白名单控制，仅包含 `src/`、`README.md`、`LICENSE`，**不会**带上 `node_modules/` 与 `test/`。可在发布前预览将上传的文件清单：\r\n\r\n```bash\r\nnpm pack --dry-run\r\n```\r\n\r\n升级版本：修改 `package.json` 的 `version` 后再次 `npm publish`。\r\n\r\n---\r\n\r\n## 🛠️ 本地开发与测试\r\n\r\n环境要求：Node.js ≥ 18.17（内置 `fetch` / `FormData` / `Blob`）。\r\n\r\n```bash\r\nnpm install            # 安装依赖\r\nnpm start              # 启动 MCP server（stdio）\r\nnode test/smoke.mjs        # 启动握手 + 工具注册校验（断言恰好 6 个只读工具）\r\nnode test/retry.mjs        # token 自动续期 + 并发去重 + 业务错误\r\nnode test/download.mjs     # 文件落盘 + 多目录复制 + 路径穿越拦截\r\nnode test/parallel.mjs     # 多线程并发下载（真正并行 / 顺序保持 / 错误隔离）\r\nSKILLHUB_INSECURE=1 node test/real-mcp.mjs        # 真实后台：ping + list_skills\r\nSKILLHUB_INSECURE=1 node test/real-readonly.mjs   # 真实后台：只读全链路 ping→list→detail→download\r\n```\r\n\r\n---\r\n\r\n## 🔧 故障排查\r\n\r\n先用 `ping` 工具自检（它会强制取一次 token 并返回过期时间）：\r\n\r\n| 现象 | 原因 | 处理 |\r\n|------|------|------|\r\n| `UNABLE_TO_VERIFY_LEAF_SIGNATURE` / TLS 报错 | 后台证书不被 Node 信任库校验（自签/缺中间证书） | 设 `SKILLHUB_INSECURE=1`；或 `NODE_EXTRA_CA_CERTS` 导入企业 CA |\r\n| `获取 token 失败 (HTTP 401)` | Basic 密钥错 / 过期 | 用 `SKILLHUB_BASIC_AUTH` 覆盖正确的密钥 |\r\n| `HTTP 404 Not Found (nginx)` | base URL 前缀不对（如误用根路径） | 确认 `SKILLHUB_BASE_URL` 为 `…/maas-mgmt` |\r\n| `HTTP 502 Bad Gateway` | 后台技能服务自身宕机（网关上游不可用） | 服务端问题，等待恢复后重试；MCP 侧无需改动 |\r\n| `业务错误 [code=xxx]` | 后台返回的业务错误码 | 看 `message` 字段定位 |\r\n\r\n> **实测结论（2026-07）**：只读全链路打通 ✅。`ping` 取 token 成功（749 字符 Bearer，有效期 3599s）；`list_skills` / `list_published_skills` 返回 `code:\"bizSuccess\"`；通过 MCP 协议走 `ping → list_published_skills → get_published_skill_detail → download_skills`，技能正确落盘到 `.trae` / `.qoder`（下载引擎对含文件技能的落盘由 `test/download.mjs` 覆盖）。团队 ID 等大整数以字符串传输，避免 `Number()` 精度丢失。\r\n\r\n---\r\n\r\n## 📁 项目结构\r\n\r\n```\r\nsrc/\r\n  index.js     # 入口：MCP server + 6 个只读工具注册\r\n  config.js    # 环境变量配置加载（含 SKILLHUB_INSECURE）\r\n  auth.js      # TokenManager：取/缓存/刷新 token\r\n  client.js    # HttpClient：Bearer 鉴权 + 401 自动重试\r\n  api.js       # 技能接口封装（只读：page / publishedPage / detail / publishedDetail）\r\n  download.js  # fileTrees 落盘 + 顺序/多线程批量下载\r\n  util.js      # 响应封装、路径清洗、文件树统计\r\ntest/\r\n  smoke.mjs          # MCP 握手与工具校验（断言恰好 7 个只读工具）\r\n  retry.mjs          # 鉴权续期逻辑\r\n  download.mjs       # 下载引擎（顺序）\r\n  parallel.mjs       # 多线程并发下载验证\r\n  real-mcp.mjs       # 真实后台 ping + list_skills\r\n  real-readonly.mjs  # 真实后台只读全链路\r\n```\r\n\r\n---\r\n\r\n## 📄 License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}