{"_id":"@ktbtw/verify-mcp","_rev":"33-3ff1c32e08ecc3b3315582c6590366f9","name":"@ktbtw/verify-mcp","dist-tags":{"latest":"0.2.34"},"versions":{"0.1.0":{"name":"@ktbtw/verify-mcp","version":"0.1.0","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.1.0","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"2d6c45f51203bdee6deab153b845aa3c587217aa","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.1.0.tgz","fileCount":9,"integrity":"sha512-Vtu3aKDfdRODQkzur3l/ArfGDY9ZjsVATvsCIQ+T3rooZzPwB0zSD/Msdy2hEji9bs3id0eDSYrr0CgjFYYrwA==","signatures":[{"sig":"MEUCIB+4ukJBaFce0pHh7bNKw8LOoStYRqojUYdbSQRmuJURAiEAoFCACA4KfvIdglF3HQACdZ9vSyf14YyUEGHyVKxdAQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35235},"type":"module","engines":{"node":">=20"},"gitHead":"3aa8bdf4553668855aa6a6b23c247cd215146170","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.1.0_1773816060098_0.594842505189735","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ktbtw/verify-mcp","version":"0.1.1","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.1.1","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"af2be33099005c8a78a9b1dbd8375676ed0f1a57","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.1.1.tgz","fileCount":11,"integrity":"sha512-Q0D9ljCupr5QNgBCD+qeZvC6vr8jQHKYpdXTIuEXGZrd8NEPqBwx0yRrJw1fPU7+v3fGamVaJs5k8RdulosJgQ==","signatures":[{"sig":"MEUCIHrhsSxTiwtm+w5uN+O2GcsKgt4/Bhlt8hzO8RmbmQvTAiEAtnLNdjO4ucTGZbgemNTEDbAC6NsVa5HKL3IdQobY7kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68345},"type":"module","_from":"file:ktbtw-verify-mcp-0.1.1.tgz","engines":{"node":">=20"},"gitHead":"a36f8af593df2c23a19e66f11b23a9adc51b18de","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/private/var/folders/7g/csw1lbw93b55w0dw66q942600000gn/T/0d3be82ae25896f9d76b122baba0b12b/ktbtw-verify-mcp-0.1.1.tgz","_integrity":"sha512-Q0D9ljCupr5QNgBCD+qeZvC6vr8jQHKYpdXTIuEXGZrd8NEPqBwx0yRrJw1fPU7+v3fGamVaJs5k8RdulosJgQ==","_npmVersion":"10.8.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.1.1_1777742010627_0.4455281677969192","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ktbtw/verify-mcp","version":"0.2.0","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.0","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"d451702b5bfea3341deea977ee110747ed749262","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.0.tgz","fileCount":13,"integrity":"sha512-O3pWr6HAt0l7UEDpM4izQckV9RtOBsQtBd832gVIyDQWhnU/LDEKmdkMbPsgh1sWM+3gVXmus6GnN5OMGcBFlg==","signatures":[{"sig":"MEQCIELYxWocMPbb4Z9Xh47gTpdnCqp+phsYIKNu7CdhtSueAiAlph7BMUSnUJEOhmpGBcu72CJlsC+Y+WNnbhk3aQkGdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148514},"type":"module","engines":{"node":">=20"},"gitHead":"b769d070b06007a2aa7d4b8a27299f5d052c9e87","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.0_1777803546124_0.6649444874741555","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ktbtw/verify-mcp","version":"0.2.1","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.1","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"d94e08ca717bf9d9b2d0dffd41786c46af938f78","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.1.tgz","fileCount":14,"integrity":"sha512-Qu7XSJFkG6pKPxzhkIMaA1CPt+fh8KRCqzUXJpERj3P8YDVXpM141TrSNFW1moSQpjJLfslOPFc4VP/sqD3o/g==","signatures":[{"sig":"MEUCIEzaEUwPEY0Y04jD+9c2hM1cRb2YQJYBmn0glNjXVNjfAiEA2Q+Yyo8miYXkrhbfeeCsSz3qewlv+YiZGsbzpvI8C9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159973},"type":"module","engines":{"node":">=20"},"gitHead":"8aa129dbe317c4e1876971478594419a715b8654","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.1_1778336091421_0.36744638661165996","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@ktbtw/verify-mcp","version":"0.2.2","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.2","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"45aa309d1a0d659009379f4f5d9b0765e76cd7f2","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.2.tgz","fileCount":14,"integrity":"sha512-//tfOR6iGyysrtdJ3jjRxEYW7MC4erezzZU8KgWvN390jRqW681yprjT73ikBk7lFGcSAECl9JK1qhl16jWldA==","signatures":[{"sig":"MEUCIFpdtwv0HbX2cW3F6sdeKcymZQd7vk5A7LT+rAvlvTgaAiEAjzKCZ36hDKGsFwNgEDQwoEz7sXTSfr0gcFcpmULH8Ew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160323},"type":"module","engines":{"node":">=20"},"gitHead":"ca39675af3373162e27a712bb0315a40c1a5a245","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.2_1778340293649_0.17532993301606403","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@ktbtw/verify-mcp","version":"0.2.3","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.3","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"49d89c7d68bc66b909c8411c2792295317bb3313","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.3.tgz","fileCount":14,"integrity":"sha512-/BhIF/AsCqtt9GxzG6K7agPm0LMhMmVDvBL3WVrEfJU3b6krs0pOarMMtYNTcZDqNtNStPmgDenD7hj6iOjnkA==","signatures":[{"sig":"MEYCIQD+0QH+UUL48moofBSrUOuBSE9rUqe910uY7Ri/C9sCMwIhAM/LfpgVFtwJ79Emo1DfORqTtwbjGc7Cr6TvKLfk2wHX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163575},"type":"module","engines":{"node":">=20"},"gitHead":"f415ad533abcccd21e861425edab338460cca952","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.3_1778408402690_0.9023607439876757","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@ktbtw/verify-mcp","version":"0.2.4","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.4","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"b82d940486a09c7b3f898b578281f69239d28485","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.4.tgz","fileCount":14,"integrity":"sha512-AuSFzjlf+sSDc4D9xTDIXs6HOk11/zF92dc/dv6gyT6vhD1ShnEPmL9NLfYga6kCluq+U/CQVdjUFO3sYhJ5uA==","signatures":[{"sig":"MEUCIEYUuLQJ7uIGNqhUMRhwi4yxYwqy/OQGzB2qBricKRZlAiEAhDB1FnAhz9MXY1vJwkA+ishEFMJaf+xoaIGXIPXtBVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164184},"type":"module","engines":{"node":">=20"},"gitHead":"940c5b57ba9738c85dfc35aecd239cc3ca5e757b","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.4_1778642618663_0.6056919446175149","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@ktbtw/verify-mcp","version":"0.2.5","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.5","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"d154a8f85f76af34ab1ceeb08b3fd805602ed628","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.5.tgz","fileCount":14,"integrity":"sha512-5SDBGuI2TjiV9f4/QDboXwhW9zYo4VesqW0Q8NiVPuMPv9bbqXUnX/QagRHAF3qmzwEOlFabs3K1/trABqaMYw==","signatures":[{"sig":"MEQCIHa9vWk4VdbhUHZomqHZfHPqEGlt7Ol1evxjraGFP+0LAiBtAGTTEwqDfi4sd58p7k7PBvPjO+4m3TKdll2rc8r4iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166599},"type":"module","engines":{"node":">=20"},"gitHead":"7c1107df6450b8c36d621c674aa95c2f3a1c7689","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.5_1778644747549_0.2947714726947639","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@ktbtw/verify-mcp","version":"0.2.6","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.6","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"042f99bdd4ec52b4c0eb04e4449c3a6fa7a8279d","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.6.tgz","fileCount":14,"integrity":"sha512-/cO8UmDIolSOKLtWbWGQD+jb756p/AUhlf0kRRf6vtSHmGJQAm7QxZnJAtXu5wCEOi85kOOM8shZ9HNxGeTG1Q==","signatures":[{"sig":"MEUCIQDH/UocPg9sxahkeP0Xe04x0ghciWbqYILf7q8HDwvZPwIgFRT9iUghl/QBLOpRVrj6+zHH7zRv78yoYSjIlzKC3E8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167636},"type":"module","engines":{"node":">=20"},"gitHead":"8584c56552294c837141ce82ae612695df3d7804","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.6_1778726536997_0.0035114203911918995","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@ktbtw/verify-mcp","version":"0.2.7","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.7","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"bde8534cfbb00b88889c4d023e0e8b8177b9dac4","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.7.tgz","fileCount":15,"integrity":"sha512-XCvUl6EhmC7ZA2TXYBndouJ/jyRV4OpDPQNC1v3Z6laR3kbd+7xoOfQuv4PcEgD255X/skbLaDukgRpqgSlWCA==","signatures":[{"sig":"MEYCIQCYMSWZ+vBDCwJoAo/u3UlIHWgEL8FlgjRdGR5Obno+kAIhANmClkcKPtNI3khQdVG/CTbMpnkuXQ7IuD0gNhZlrnEl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208015},"type":"module","engines":{"node":">=20"},"gitHead":"b683a96c549f93958a31ea3f3c064b11ac33a040","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.7_1780364738772_0.15550561189194845","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@ktbtw/verify-mcp","version":"0.2.8","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.8","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"1867d1b66cb1ead5386bf192db2f28acfcc96e4c","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.8.tgz","fileCount":15,"integrity":"sha512-Njh5ZBYkeWdN6BaK5AGaOEdRldVuFmKFtIyBNSmCDsVobW7g0kuMJzo4C50+AwJBA4a0rOJw8ggaO/cbWiJ+Ng==","signatures":[{"sig":"MEQCIFaGE/g7FBigRifFi7etEWD4DIXv6MvJUWOGzgfdN3JfAiBq+mpxKoP/l/42kR0EztSJ7DwRHoQrF7bYZBJUyStDHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209096},"type":"module","engines":{"node":">=20"},"gitHead":"376c0b57c3c9f2985fd008494427d156c50fafde","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.8_1780371575198_0.33341499982815015","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@ktbtw/verify-mcp","version":"0.2.9","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.9","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"be7a64f539695428d4a72e36964a4a352f78f7dd","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.9.tgz","fileCount":15,"integrity":"sha512-zYteif+BV2ff6Vw6CHP1zKg0ebHQOaq553xOrrTCcM3MK/3WODmbuvPCxn34PGCDY/WV4PKFuqFUaiq4Dbrv3Q==","signatures":[{"sig":"MEYCIQCeBOgx81ROUn2lBWsfzi7xvyOYbwy7oUy+V7bCyXIDeQIhAJfCmMMvu212MEzOwmbMlvjDCLRa7D8X6qz2lOvy6xKD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215100},"type":"module","engines":{"node":">=20"},"gitHead":"ef9cec7bab031060f40f7bb9809f8bf35de0dc6c","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.9_1780456746187_0.6576044986193681","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@ktbtw/verify-mcp","version":"0.2.10","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.10","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"9c18e514501da04f25169285111b2fe4b09be72c","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.10.tgz","fileCount":15,"integrity":"sha512-Zt3Q/UZbVi06vjj0/rMU1wWzUaBxzb6eeQw1cWbfyOFJfH5JPN3GcGwP2HjUT5zaZYEkpYenLfQh+hi5Z28usw==","signatures":[{"sig":"MEUCIEZBgEGKTKeXaVEqkUifQ5fixxmWA5oMJin+0XYkZLDWAiEA2pENv7DWGobpn4RbBRRVMhEZRNQp0xwEvfCjHDI60k4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216241},"type":"module","_from":"file:ktbtw-verify-mcp-0.2.10.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/private/var/folders/7g/csw1lbw93b55w0dw66q942600000gn/T/719e651cc6816aa009ff251608ef6300/ktbtw-verify-mcp-0.2.10.tgz","_integrity":"sha512-Zt3Q/UZbVi06vjj0/rMU1wWzUaBxzb6eeQw1cWbfyOFJfH5JPN3GcGwP2HjUT5zaZYEkpYenLfQh+hi5Z28usw==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.10_1781515978668_0.7336789173733023","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@ktbtw/verify-mcp","version":"0.2.11","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.11","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"6ebc50e65158ba89a388fa1f961287965cfffb4f","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.11.tgz","fileCount":15,"integrity":"sha512-S76UsIW0z0JMydS+e6a4Lpjg4Ydw/ORP3qvrJZmD0ZE0gzCv9H7KRc4G8iPSe4Hz0xiDqhB90spJu35OE4jQuQ==","signatures":[{"sig":"MEUCIDUfO1VRQHJw/DCsFH1Oz09k1BiOnsz8BYAi4D/wGvHqAiEAgK7GBLtCkh4a7d1qNINHeb4/n8468xGoe21Ztx0MHBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223641},"type":"module","_from":"file:ktbtw-verify-mcp-0.2.11.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/private/var/folders/7g/csw1lbw93b55w0dw66q942600000gn/T/b8dd556af2a8b9f8a27c43452d15279c/ktbtw-verify-mcp-0.2.11.tgz","_integrity":"sha512-S76UsIW0z0JMydS+e6a4Lpjg4Ydw/ORP3qvrJZmD0ZE0gzCv9H7KRc4G8iPSe4Hz0xiDqhB90spJu35OE4jQuQ==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.11_1781544338592_0.7950050376084183","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@ktbtw/verify-mcp","version":"0.2.12","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.12","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"8a6e9d7a76d7401cf8e89f56829091a553257ebf","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.12.tgz","fileCount":16,"integrity":"sha512-eu1XpG3zj5k4IrkhCTm/MQtZQiQXccKQ03Fa5TDi/qbT3n3ETXdw1MFIPuhjvxIQN9G9HFuqB2CEAMfLyTckkw==","signatures":[{"sig":"MEYCIQC1zD+etM6TnwKLyoKLE+0mnGzhJ0m4UwFd5AF++u/EjgIhANtuShhvNsqOXC4v05Z3vApci5/edkY+4SWJclpTLozx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230270},"type":"module","_from":"file:ktbtw-verify-mcp-0.2.12.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/private/var/folders/7g/csw1lbw93b55w0dw66q942600000gn/T/dff7f5a7d2da77eb8c8ef31d03e0b511/ktbtw-verify-mcp-0.2.12.tgz","_integrity":"sha512-eu1XpG3zj5k4IrkhCTm/MQtZQiQXccKQ03Fa5TDi/qbT3n3ETXdw1MFIPuhjvxIQN9G9HFuqB2CEAMfLyTckkw==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.12_1781544490861_0.5075185565023577","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"@ktbtw/verify-mcp","version":"0.2.13","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.13","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"17b271be40a8b55e4038eb2667d510d35d34c2bd","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.13.tgz","fileCount":16,"integrity":"sha512-h1p5Uf+z9xwRSDyzl6SXqkE3cx6R5jKls5hpM6+J4LLcEShNIVO6blXBr1aqNI6sJb/y+/rOR05IuTWOmBPj7A==","signatures":[{"sig":"MEUCIQDhw8gwdhejjjJzWgCyyitFez2XhmIU0gDsxh45HEh0iQIgYB/Y0av51IjaqnQCwjC87ZWz+jiMqVFKx3vf+ergUto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234947},"type":"module","engines":{"node":">=20"},"gitHead":"bc7f1dcafe5fe594e9b074833de6f379699c22b9","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.13_1782156708678_0.8728439530829715","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"@ktbtw/verify-mcp","version":"0.2.15","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.15","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"18c017e86d78b125cdec5789b13168287ce62237","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.15.tgz","fileCount":17,"integrity":"sha512-ulQJ229K+P6edgVP1VoUvsJcgxzlzlNt6vgCj/VOmy7LPobHDQfHrd/wDIxtedRjaOfqACYlyNwAMyf5+q6dng==","signatures":[{"sig":"MEUCIQCaVQA5iLrxNoMnLSsFJRaJqSQ3haaC3OaLCo0ROUoBLgIgapj3cvpfYmufyyvbjk9+Rq30+6lH0Bq+fu/ejF8Kaq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243231},"type":"module","engines":{"node":">=20"},"gitHead":"81df1e4d3b5dbcb7dff5af85017ca25204e02e61","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.15_1782835673022_0.12654307282642363","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"@ktbtw/verify-mcp","version":"0.2.16","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.16","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"87b044c379610995984d5c0282906e094daf8167","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.16.tgz","fileCount":18,"integrity":"sha512-G+Ougfrep4P8z8uxQYquqP7lbgjRS7jWH+T5OFO8W8JvWBJkiLgAJIW/b2K6IYV3sXs6X1lIiIynh3BPgO2BPA==","signatures":[{"sig":"MEUCIE5/KYBhhEJ+W8rRINpk9hW8INdOIvv1S+6GdoaoHfbAAiEAzTG9yx1BrDvP7nSpOc4MP/GjWmLVssqYMtu7xHc4JXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253220},"type":"module","engines":{"node":">=20"},"gitHead":"81df1e4d3b5dbcb7dff5af85017ca25204e02e61","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.16_1783059589867_0.4995065725728738","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"@ktbtw/verify-mcp","version":"0.2.17","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.17","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"029a74807bf2afc7e2bf0e4fc5042a15439b7e73","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.17.tgz","fileCount":18,"integrity":"sha512-/TiV41YiVUfokoVuorhtyVRBiqOvlP8lngGSeERFyLLsGJzyVbPr3sc0ku1UHgO+uFJtGij0VMTfzqaI1MVzXg==","signatures":[{"sig":"MEUCIAUWUsJ8umkt6Zj7CUkJYwIjOSweFRp9uK+aUuB6t46dAiEA33gvKiQCT8yfLTYjl4R295nbomKSBrXjWvFdNT0Xfmk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260272},"type":"module","engines":{"node":">=20"},"gitHead":"dbf83519a76e1b5a5c49e0fc92fb68d0ad956278","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.17_1783351592926_0.5114769135611459","host":"s3://npm-registry-packages-npm-production"}},"0.2.18":{"name":"@ktbtw/verify-mcp","version":"0.2.18","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.18","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"496a2663adfc2edca1aa477446924f18304b84e0","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.18.tgz","fileCount":18,"integrity":"sha512-rZy2HCUi6713+rQxTCNVeOCrVSYCNsTxOjF6GwnUd0EiVEKmvoG/R8uzaiVnKlczQg+E1aj+P1j7itp8d9wPiQ==","signatures":[{"sig":"MEUCICQyQMddzIpAVADrTh56NnulQigtusZzpywM+dLDhu2AAiEAtyfgHDPtELSoP6Zrn6KTOaAJR0kfv2YOWfyWraWradU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269064},"type":"module","engines":{"node":">=20"},"gitHead":"fbb0b8c6b34786352583ec2c078c77fc7d245c45","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.18_1783859113704_0.6771660535883333","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"@ktbtw/verify-mcp","version":"0.2.19","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.19","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"fd4180750276e6c5c4153924bb0701f8b363b885","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.19.tgz","fileCount":18,"integrity":"sha512-LUZLuLBSo4a3CbUEZt0wOEqyahj4dZx1k2s3zsFSn+wYe7U2iJKdI5MC9QErvjaWRkXx8HZN65r98CKMgrchuQ==","signatures":[{"sig":"MEUCIG/kq9OBq1JSe04Gn9h8WyD6QU4CizOh/3EDPoIhBF5GAiEA5CwvvS0mjot5+5I5oKGSudp7IMLkEF7ehaWWweRxPjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277046},"type":"module","engines":{"node":">=20"},"gitHead":"fbb0b8c6b34786352583ec2c078c77fc7d245c45","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.19_1783865668122_0.5028016475884369","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"@ktbtw/verify-mcp","version":"0.2.21","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.21","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"e10cb1bb0ff6e1c557ab746630bbb0d29920f4e6","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.21.tgz","fileCount":23,"integrity":"sha512-F1ZIe4iEcYNO0qHY7VGlezGIRxOtAsVDN37asGFlBaC65l0yFfzRmswko0Wj1H49Xzv/X71RArvCOGoAuM5wog==","signatures":[{"sig":"MEUCIQCXBsIFZHitUZxIf+SjbUj5Q7X2eMUFAmKMurQ8KaeumwIgQdyHA/SI9ILloAK/kOms6bOpXVY9rp5LCtHSBaIcBzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372955},"type":"module","_from":"file:ktbtw-verify-mcp-0.2.21.tgz","engines":{"node":">=20"},"gitHead":"a36f8af593df2c23a19e66f11b23a9adc51b18de","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/private/var/folders/7g/csw1lbw93b55w0dw66q942600000gn/T/f81b6ebc8889f8494ef43832732cc1b9/ktbtw-verify-mcp-0.2.21.tgz","_integrity":"sha512-F1ZIe4iEcYNO0qHY7VGlezGIRxOtAsVDN37asGFlBaC65l0yFfzRmswko0Wj1H49Xzv/X71RArvCOGoAuM5wog==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.21_1784393772971_0.8491352746345506","host":"s3://npm-registry-packages-npm-production"}},"0.2.22":{"name":"@ktbtw/verify-mcp","version":"0.2.22","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.22","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"e7c959a06536a2417860ac946aec558a0c60753b","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.22.tgz","fileCount":23,"integrity":"sha512-WVWVoQX7WZJQHN0dMF6vNkOuYbFJADx5WkzMyzLGWHh+Lww81z9jRX+KMCZF7BVqo5NfDZWgRhbFXWv718k7KA==","signatures":[{"sig":"MEUCIQDLu4NSGf/IHLsDho/gqTBSL3rNvLMKTrbF352CnZOIMAIgaBE54z1Rtm9v/88Ar+3sZ72ULrPTeITNZlg5O61/h+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378368},"type":"module","_from":"file:/tmp/ktbtw-verify-mcp-0.2.22.tgz","engines":{"node":">=20"},"gitHead":"a36f8af593df2c23a19e66f11b23a9adc51b18de","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/tmp/ktbtw-verify-mcp-0.2.22.tgz","_integrity":"sha512-WVWVoQX7WZJQHN0dMF6vNkOuYbFJADx5WkzMyzLGWHh+Lww81z9jRX+KMCZF7BVqo5NfDZWgRhbFXWv718k7KA==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.22_1784651820820_0.8153307543226169","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"@ktbtw/verify-mcp","version":"0.2.23","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.23","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"c212fe83409eb447fdb3735eda225a0e84c001fe","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.23.tgz","fileCount":23,"integrity":"sha512-0yxpwPbl7+pB4SMIw5agPK+Q0wn8V2R8hN44JgcStMfQF/bkBxK9Q0c5Z8rypXntC185Gy/rcH8g+AZm8+kN2g==","signatures":[{"sig":"MEQCIGWowCwkS+ZKNakzyGwHiYU/HUFd4odPD4+qb9mBZj6MAiAsYSSrwtVNjBBfpOP8fxYdRJ+Mg1rvkbXVq8bidwJ6oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379335},"type":"module","_from":"file:/tmp/verify-mcp-pack.xyscjx/ktbtw-verify-mcp-0.2.23.tgz","engines":{"node":">=20"},"gitHead":"a36f8af593df2c23a19e66f11b23a9adc51b18de","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/tmp/verify-mcp-pack.xyscjx/ktbtw-verify-mcp-0.2.23.tgz","_integrity":"sha512-0yxpwPbl7+pB4SMIw5agPK+Q0wn8V2R8hN44JgcStMfQF/bkBxK9Q0c5Z8rypXntC185Gy/rcH8g+AZm8+kN2g==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.23_1784699221429_0.8515074238109941","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"name":"@ktbtw/verify-mcp","version":"0.2.24","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.24","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"280898eb9b517fa8991756183150630e2e2c2653","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.24.tgz","fileCount":23,"integrity":"sha512-GGciLmZLIwUs3Mlj8W9hlAdGzd0Zct7XCSKpo08TfAf7MFnXR7yTR1cahQiJk7IV3fsiUJ1sngO/+UomtcxU5A==","signatures":[{"sig":"MEUCICLGe/xqGSmkoqPzP09+s7In6zRG9hMG5xDtFl7ocg/nAiEAlCJFmkjyZhyKmqbXzPg+lx6koCeNVadEGRoZ51j3pig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":387213},"type":"module","engines":{"node":">=20"},"gitHead":"fbb0b8c6b34786352583ec2c078c77fc7d245c45","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"pnpm build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.24_1785609910368_0.5274021585762354","host":"s3://npm-registry-packages-npm-production"}},"0.2.26":{"name":"@ktbtw/verify-mcp","version":"0.2.26","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.26","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"0454e5f773f99e58f7c72477c3b726e8bead86f4","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.26.tgz","fileCount":23,"integrity":"sha512-BZz5SRXceXgulr+nrcCcyQOhVJogPfC6IJC2hbmIu+ZbSjH8ya7iUkPJqDHhWq0MEt1J89p4yNTdrA//zmKF/Q==","signatures":[{"sig":"MEUCIQCGae577SjJii77QpaiHoWP4ILZQtGPB8NfNp9MmTZcxAIgV9/FLoeIAbojiT4iJfxfxPXzbt7iMvJcleWytyQ+DDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":389176},"type":"module","_from":"file:/tmp/ktbtw-verify-mcp-0.2.26.tgz","engines":{"node":">=20"},"gitHead":"a36f8af593df2c23a19e66f11b23a9adc51b18de","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_resolved":"/tmp/ktbtw-verify-mcp-0.2.26.tgz","_integrity":"sha512-BZz5SRXceXgulr+nrcCcyQOhVJogPfC6IJC2hbmIu+ZbSjH8ya7iUkPJqDHhWq0MEt1J89p4yNTdrA//zmKF/Q==","_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.26_1785751352978_0.6050771178136265","host":"s3://npm-registry-packages-npm-production"}},"0.2.27":{"name":"@ktbtw/verify-mcp","version":"0.2.27","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.27","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"c3b55e633094ed75796f9b05def79f69531bcb03","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.27.tgz","fileCount":23,"integrity":"sha512-wJ+tKX4Zjf7QiMhHIs1Ny0oHO3quDdz/yrog/Ist9iWE2FOLulsxEmBX4vrmJXRUv+hGgdLx4sPx3G5jEaMFHg==","signatures":[{"sig":"MEYCIQCbhXwSlQiBOR/uFqgwEWYf/RokmfW6CkluTF6BA2ZmFwIhAPnAtKCpPgZYzxRrSwNRmp3aXb5A0dwfnTRDrg8IUbza","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":394627},"type":"module","engines":{"node":">=20"},"gitHead":"24741d17e00da2985a9d91e888bf5713a2098984","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.27_1786270264087_0.21242270532805496","host":"s3://npm-registry-packages-npm-production"}},"0.2.28":{"name":"@ktbtw/verify-mcp","version":"0.2.28","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.28","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"42d70d13c1a5c3bda3f9c7f119dffc39cb80d68b","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.28.tgz","fileCount":23,"integrity":"sha512-geYOLxLRP2qylrgenFwuJceRyPac3uCuqy53Qi9G4S+5gvd6XNKxmk8ZVjO49E3bHpUj1BLm5jsmJlz5KANNBA==","signatures":[{"sig":"MEUCIDTs0mjOXiRlwMVXFRAI4Got8TzOJ/2K8ebN0G6+n9d3AiEA7ZK8/QPo343vtuk6VTFr3SQrlYLUhqpqI5SDXddccXY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":396357},"type":"module","engines":{"node":">=20"},"gitHead":"48eda3e68a0aba9eecd20f085f8738ddab4d8445","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.28_1786819220074_0.0667645057320414","host":"s3://npm-registry-packages-npm-production"}},"0.2.29":{"name":"@ktbtw/verify-mcp","version":"0.2.29","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.29","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"c5b1b41800eabc0fd158ab9eb6660089b63ad7bd","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.29.tgz","fileCount":23,"integrity":"sha512-zQIIn28b2ood8icSboHLX983TnV05Ls7752UNWQnVmbNV7fh9f/KM35K9wMpH87Uoj5mpYxQvpXa0sOrJJVElA==","signatures":[{"sig":"MEUCIQDqAGXa8YGPbQWR8WkzZg091jmT58RiE7aBGnMo4JZhcQIgemFYSLuQ3/L9Y4DdL3pOWUZsG2nJEtBJail14KgppwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":399392},"type":"module","engines":{"node":">=20"},"gitHead":"1b0f943c02d9d5fd8963dabbc6f8a019a96a374c","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"11.3.0","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.29_1786979790478_0.35725180525015743","host":"s3://npm-registry-packages-npm-production"}},"0.2.31":{"name":"@ktbtw/verify-mcp","version":"0.2.31","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.31","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"b98f54a3785c2d003f904199f3d7fece3bc6dadc","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.31.tgz","fileCount":24,"integrity":"sha512-ko2uHtDlwedhsKtUmIpgAlT5BheK2QpJefpg7WuEvo3pFibIrmUuI1jLURNtPTosyu2vUtlOvMuBMrGcw4MsbQ==","signatures":[{"sig":"MEYCIQD143xOg/yrwwFNzAaNaUHs8Ho3xPON4atMOJO4d0pAGAIhAIUQ01+fCdpkWRo4lpeZVR+FSc22VjMXP/MMZsh2TWe4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416221},"type":"module","engines":{"node":">=20"},"gitHead":"f04f2feb70899dc526ddac65480df7557272e72f","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","test:patch-local":"tsx src/patch-local-apk-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.31_1789034765525_0.2780276056764295","host":"s3://npm-registry-packages-npm-production"}},"0.2.32":{"name":"@ktbtw/verify-mcp","version":"0.2.32","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.32","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"033e13054feead8dd396e7b5088183cab745f5b2","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.32.tgz","fileCount":25,"integrity":"sha512-QupALp6+ONS0/+VSStdO78Luz4zP2hKBw05sUdwa9y+DOYUxrOn0CYEjPQ80PRlgvz4X7ETfsTzynqxkjMGexQ==","signatures":[{"sig":"MEUCIQDxvQss0i9Vi//6eglg1+9wc3IVAXxqJRgFGbTSgtaCZAIgCEB+FipkI0Bsow0LqhFUAL4PREkSXurqOIJx+CgRqQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433105},"type":"module","engines":{"node":">=20"},"gitHead":"8dbff21c3bc75df412858cf0574596a965da49f8","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","test:patch-local":"tsx src/patch-local-apk-test.ts","test:inspect-patched":"tsx src/inspect-patched-apk-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.32_1789038298569_0.12707372506874948","host":"s3://npm-registry-packages-npm-production"}},"0.2.33":{"name":"@ktbtw/verify-mcp","version":"0.2.33","license":"UNLICENSED","_id":"@ktbtw/verify-mcp@0.2.33","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"11a0a373aad12f2657139d4d1eeb29382cd9b56e","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.33.tgz","fileCount":25,"integrity":"sha512-HK4/jZieE3yZDcXJisynaC3RbKESPjs0/3APrSuTx2r/wkm+5I5sg0gnS3qMaQ/C98l484ZZMF1ZvJaJQbluIw==","signatures":[{"sig":"MEYCIQDQxirlKsMy7yT4qlZKwy5OQ8cCB3zIdJG7uhqwU53etQIhAPc/knepSiyA9mq9TiDGodEWxOvqUtDHvP84zh+FVO3T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCQ6n058Lv05XYqi4aSKJkcLFlGpsvS9CbC2o/jcnosWwIgPoaiUsgpGjOVgIGmF+kS08y22Vm/0V5FFS4hlU6Fufw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":437992},"type":"module","engines":{"node":">=20"},"gitHead":"6d291c78f94acf0d8def50a8900363e100a3d302","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","test:apply-batch":"tsx src/apply-compile-batch-test.ts","test:patch-local":"tsx src/patch-local-apk-test.ts","test:inspect-patched":"tsx src/inspect-patched-apk-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"tmp":"tmp/verify-mcp_0.2.33_1789497970243_0.6217514108516693","host":"s3://npm-registry-packages-npm-production"}},"0.2.34":{"_id":"@ktbtw/verify-mcp@0.2.34","bin":{"verify-mcp":"dist/index.js"},"dist":{"shasum":"84d01a16beb67e7baf18d6570b6df9d421b86506","tarball":"https://registry.npmjs.org/@ktbtw/verify-mcp/-/verify-mcp-0.2.34.tgz","fileCount":27,"integrity":"sha512-EKjlBmMyjwZ7TIwspRCqJR5RRvlcSEiw5GViTL5sE6zIbJgkjNw33lVGgBMkTk2y1tXOoMgI9LbBUjl4lrNsxg==","signatures":[{"sig":"MEYCIQDTul9q/JOvaGdgkgW0SXJnBUD+hl2EJ8YP1fgmKBdYjAIhALAmeKPqN6rhKD7L1j9KJ9dzvUiDEEGwQBKjmimAq7V1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICldrmInkZGdEWklKLI18cfS4mF1iM2zL9KhgX/t+e4qAiEAiJKEzuRUmTK42p97QdVFBbpGwGYPj9UZNSb0x1mvtYg="}],"unpackedSize":447148},"name":"@ktbtw/verify-mcp","type":"module","engines":{"node":">=20"},"gitHead":"786a2e8ed9d7427675aa325b2f59cc326515f8c0","license":"UNLICENSED","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","smoke":"tsx src/smoke-test.ts","start":"node dist/index.js","inspect":"mcp-inspector node dist/index.js","prepack":"npm run build","test:menupro":"tsx src/menupro-template-test.ts","test:wifi-adbd":"tsx src/wifi-adbd-installer-test.ts","test:shadowhook":"tsx src/shadowhook-installer-test.ts","test:apply-batch":"tsx src/apply-compile-batch-test.ts","test:patch-local":"tsx src/patch-local-apk-test.ts","test:inspect-patched":"tsx src/inspect-patched-apk-test.ts","build:shadowhook-bridge":"node scripts/build-shadowhook-bridge.mjs"},"version":"0.2.34","_npmUser":{"name":"ktbtw","email":"yu3020769378@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for Verify ApiToken public APIs","directories":{},"maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"_nodeVersion":"22.14.0","dependencies":{"zod":"^4.3.6","dotenv":"^17.3.1","fflate":"^0.8.3","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^25.5.0","@modelcontextprotocol/inspector":"^0.21.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/verify-mcp_0.2.34_1790433293472_0.7950557417701223"}}},"time":{"created":"2026-03-18T06:40:59.941Z","modified":"2026-09-26T14:34:53.739Z","0.1.0":"2026-03-18T06:41:00.242Z","0.1.1":"2026-05-02T17:13:30.752Z","0.2.0":"2026-05-03T10:19:06.323Z","0.2.1":"2026-05-09T14:14:51.648Z","0.2.2":"2026-05-09T15:24:53.790Z","0.2.3":"2026-05-10T10:20:02.879Z","0.2.4":"2026-05-13T03:23:38.802Z","0.2.5":"2026-05-13T03:59:07.708Z","0.2.6":"2026-05-14T02:42:17.141Z","0.2.7":"2026-06-02T01:45:38.917Z","0.2.8":"2026-06-02T03:39:35.327Z","0.2.9":"2026-06-03T03:19:06.318Z","0.2.10":"2026-06-15T09:32:58.823Z","0.2.11":"2026-06-15T17:25:38.727Z","0.2.12":"2026-06-15T17:28:10.994Z","0.2.13":"2026-06-22T19:31:48.848Z","0.2.15":"2026-06-30T16:07:53.289Z","0.2.16":"2026-07-03T06:19:50.042Z","0.2.17":"2026-07-06T15:26:33.093Z","0.2.18":"2026-07-12T12:25:13.852Z","0.2.19":"2026-07-12T14:14:28.290Z","0.2.21":"2026-07-18T16:56:13.097Z","0.2.22":"2026-07-21T16:37:00.992Z","0.2.23":"2026-07-22T05:47:01.608Z","0.2.24":"2026-08-01T18:45:10.553Z","0.2.26":"2026-08-03T10:02:33.112Z","0.2.27":"2026-08-09T10:11:04.219Z","0.2.28":"2026-08-15T18:40:20.220Z","0.2.29":"2026-08-17T15:16:30.614Z","0.2.31":"2026-09-10T10:06:05.714Z","0.2.32":"2026-09-10T11:04:58.708Z","0.2.33":"2026-09-15T18:46:10.345Z","0.2.34":"2026-09-26T14:34:53.581Z"},"license":"UNLICENSED","description":"MCP server for Verify ApiToken public APIs","maintainers":[{"name":"ktbtw","email":"yu3020769378@gmail.com"}],"readme":"# verify_mcp\n\n基于 TypeScript 的 MCP 服务，用于把现有 `ApiToken` 公共接口封装成可供智能体直接调用的 MCP tools。\n\n已发布 npm 包名：\n\n```bash\n@ktbtw/verify-mcp\n```\n\n## 目标\n\n- 运行形态：`stdio`\n- 后端来源：现有 `/api/app-token/*` 公共接口与旧加固提交接口。\n- 鉴权方式：`VERIFY_API_TOKEN` 用于配置/编译工具，`VERIFY_PROTECT_TOKEN` 用于 VMP、混淆、Dex2C、SO、注入等加固工具；两者可以只配置一个，调用未配置 token 的工具时会返回明确错误。\n- 当前已接入：\n  - 上下文查询\n  - 应用列表查询\n  - 应用 `apiKey` / `secretKey` 查询\n  - 验证接口签名规则与调用示例查询\n  - 次数卡幂等消费\n  - 配置列表/详情/创建/更新/删除\n  - dex/zip 文件读取与更新\n  - ShadowHook 运行库、host bridge、资源包与云代码入口一体化安装\n  - Root 设备“持久化 WiFi ADB”模块批量安装、热激活与重连验证\n  - 云端代码读取与推送\n  - 编译配置修改\n  - 云端代码编译\n  - 编译任务列表/详情/下载/删除\n  - 编译配额查询\n  - Xposed 应用专属 `ITHook.apk` 构建预处理与下载\n  - VMP / 混淆 / Dex2C / SO / 注入加固任务提交、列表、详情、下载、删除\n  - 高阶流程工具：从工作区目录推送并编译、编译成功后写回配置、等待编译结果、获取轻量配置快照\n\n## 最近更新\n\n### 0.2.25\n\n- ShadowHook bridge 改为追加到云端入口的 `DexClassLoader`，不再创建独立 bridge loader。\n- Xposed/Inject runtime 会在创建云 loader 时绑定固定的私有 native 目录，校验 Bridge 与云端入口的定义 ClassLoader 相同，并将动态 Jar/SO 设置为只读。\n\n### 0.2.24\n\n- 新增崩溃问题组查询、组内事件详情以及原始报告/事件 JSON/问题组 ZIP 下载。\n- 下载默认落盘到 `~/.cache/verify-mcp/downloads/runtime-crashes`，避免把完整报告 Base64 放进模型上下文。\n\n### 0.2.21\n\n- 新增 `install_wifi_adb_module`，从 Verify 服务器下载并校验“持久化 WiFi ADB”模块后批量安装到在线设备。\n- 支持 Magisk/Alpha/Kitsune、KernelSU/Next/SukiSU 和 APatch，默认单台失败后继续其他设备。\n- 默认无需重启：热激活固定端口、自动连接 `IP:PORT` 并返回逐台健康状态。\n- 修复 MenuPro 模板静态下载链路；下载器会在 SHA-256 前检查响应类型和 ZIP 文件头。\n\n### 0.2.20\n\n- 新增 `install_shadowhook`，支持 Xposed/Inject 配置完整安装 ShadowHook `2.0.1`。\n- 自动校验官方 AAR、合并并保留已有 resource zip、生成 host bridge 加载入口，并包装原业务云代码入口后编译写回。\n- 支持双 ABI、可选自定义 Hook SO、确定性重复安装、`dryRun`、本地回滚 ZIP 和已有 Dex 保护。\n\n### 0.2.19\n\n- 新增 `consume_count_card`，自动调用 `/api/consume` 消费一次次数卡。\n- 普通模式使用 `code + \"\\n\" + requestId` 参与签名；安全模式自动处理 RC4/AES-CBC 请求加密、响应验签和解密。\n- `requestId` 可省略，省略时自动生成 UUID，并在结果或错误信息中返回实际 ID。\n- `get_card_verification_guide` 增加次数卡、`requestId` 幂等和重试规则；`get_verification_examples` 增加 `/api/consume` 三种语言调用示例。\n\n### 0.2.18\n\n- 新增 `unbind_card`，自动读取应用凭据并调用强制签名的公开解绑接口。\n- 自动支持普通签名、RC4、AES-CBC 请求加密、响应验签和解密。\n- `get_verification_examples` 增加 `/api/unbind` 的 curl、JavaScript、Python 示例。\n\n### 0.2.17\n\n- 新增 `prepare_ithook_apk`，可通过 ApiToken 检查并触发 Xposed 应用专属 `ITHook.apk` 构建。\n- 新增 `download_ithook_apk`，可等待构建完成后下载专属 `ITHook.apk`；传 `outputPath` 时直接保存到本地路径。\n- 后端新增 `/api/app-token/ithook-apk/prepare` 与 `/api/app-token/ithook-apk/download`，不再依赖网页登录 Session 的当前应用。\n\n### 0.2.16\n\n- 新增 `download_menupro_java_ui_template`，可直接下载 MenuPro 纯 Java 悬浮菜单 UI 模板源码 zip 到指定本地目录并解压。\n- 默认源码包地址为 `https://www.xyapi.top/downloads/menupro-java-ui-template.zip`，工具内置 sha256 与 ZIP 文件头校验并自动清理临时压缩包。\n- 解压使用 Node 内置的 `fflate`，Windows、macOS、Linux 均不依赖系统 `unzip` 命令。\n- `profile=verify-cloud` 会自动移除演示 Activity/Service，避免 Verify 云代码扫描时引入 AndroidX 或 Manifest 依赖。\n\n### 0.2.15\n\n- 上传类工具不再要求调用方手动准备 Base64。\n- `submit_vmp_protect_task` / `submit_obfuscate_protect_task` / `submit_dex2c_protect_task` / `submit_so_protect_task` / `submit_inject_protect_task` 改为传 `filePath`；mapping 文件改为传 `mappingPath`。\n- `create_config` 与 `update_config_files` 改为传 `dexPath` / `zipPath`，工具内部自动读取、计算 sha256 并转 Base64 后提交。\n- 移除重复的 `create_config_from_paths` 与 `update_config_files_from_paths`，保留 `create_config` / `update_config_files` 作为唯一配置文件上传入口。\n\n### 0.2.14\n\n- 新增运行时 token 切换工具：`set_api_token`、`set_protect_token`、`clear_runtime_tokens`。\n- `server_info` 新增 `tokens` 结构，可查看当前 ApiToken / ProtectToken 来源是 `env`、`runtime` 还是 `missing`。\n- 切换后的 token 只影响当前 MCP 进程；重启后仍以 MCP 配置里的环境变量为准。\n\n### 0.2.8\n\n- `server_info` 默认版本号改为读取 `package.json` 的 `version`，发布后不再依赖源码硬编码。\n- `VERIFY_SERVER_VERSION` 仍可显式覆盖版本号，适合特殊部署或调试场景。\n\n### 0.2.7\n\n- 新增 `publish_cloud_code_from_workspace`：传本地源码目录即可自动扫描 `.java`、生成编辑器文件树、推送、编译，并可选写回配置。\n- 新增 `apply_compile_task_to_config`：把成功编译任务直接下载为 dex 并写入配置，默认只更新 dex，不清已有 zip。\n- 新增 `apply_compile_task_to_configs`：把一份完整编译产物批量绑定到同一应用的多个配置；启用 VMP 时会同步复用 Native Bundle。\n- `publish_cloud_code` 新增 `applyToConfig`，成功后直接返回 `compiled/appliedToConfig/hasDexFile/dexSize/dexHash`。\n- `get_full_config_snapshot` 默认轻量返回，云端源码内容需显式 `includeCloudCodeFiles=true`。\n- `validate_cloud_code_layout` 失败时返回文件数量和差异列表，便于定位漏传。\n\n### 0.2.6\n\n- 新增 `list_apps`，ACCOUNT 级 ApiToken 可列出账号下全部应用，不再依赖配置列表反推应用。\n- `get_app_credentials` 与 `get_verification_examples` 支持 ACCOUNT 级 ApiToken 不传 `appId` 时返回全部应用。\n\n### 0.2.5\n\n- 新增 `get_app_credentials`，通过 ApiToken 权限读取应用 `apiKey` / `secretKey`。\n- 新增 `get_verification_examples`，返回验证接口签名规则和 curl / JavaScript / Python 调用示例。\n- APP 级 Token 可直接读取绑定应用；ACCOUNT 级 Token 需传 `appId`；CONFIG 级 Token 不允许读取应用密钥。\n\n### 0.2.4\n\n- `create_config` 支持账号级 ApiToken 传入 `appId`，用于在“全部应用”Token 下指定新配置归属应用。\n- `get_context` 说明补充账号级 ApiToken 上下文。\n\n### 0.2.2\n\n- 默认 MCP 服务名改为 `verify`，与前端复制出的配置保持一致。\n- 更新 README 与 `.env.example` 中的客户端配置示例，移除 `verify-api-token` 旧命名。\n\n### 0.2.1\n\n- 新增 `VERIFY_PROTECT_TOKEN`，加固工具复用旧加固提交接口，不使用独立 `/api/protect-token/*` 接口。\n- MCP 允许只配置 `VERIFY_API_TOKEN` 或 `VERIFY_PROTECT_TOKEN` 其中一个；调用未配置 token 的工具时返回明确错误。\n- `server_info` 区分返回 `apiTokenMasked` 与 `protectTokenMasked`。\n\n### 0.2.0\n\n- 新增 `list_runtime_api_classes`\n- 新增 `get_runtime_api_doc`\n- 运行时文档按真实源码区分 `xposed` 与 `inject`\n- 可准确识别 `HookHelper.getModuleContext()` 只属于 Xposed，不再把它误判为 `InjectHelper` 可用方法\n- smoke 测试已覆盖新增工具，并验证 `inject` 在 `includeInternal=false` 时不会返回 `getModuleContext`\n- 新增迁移知识层、生命周期、资源与编译语义说明工具\n- 新增 `validate_cloud_runtime`、`simulate_resource_layout`、`validate_cloud_code_layout`\n- `push_cloud_code` / `publish_cloud_code` 改为强校验模式，缺少 `fileTree` 或 `currentFilePath` 会直接拒绝\n\n升级后，如果你希望 MCP 客户端立即使用这版，建议显式指定：\n\n```json\n{\n  \"mcpServers\": {\n    \"verify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ktbtw/verify-mcp@0.2.24\"],\n      \"env\": {\n        \"VERIFY_BASE_URL\": \"https://www.xyapi.top/verfiy\",\n        \"VERIFY_API_TOKEN\": \"vat_xxx_replace_me\",\n        \"VERIFY_PROTECT_TOKEN\": \"vpt_xxx_replace_me\",\n        \"VERIFY_TIMEOUT_MS\": \"30000\"\n      }\n    }\n  }\n}\n```\n\n## 安装\n\n直接给 MCP 客户端使用时，优先走 `npx`，不需要单独安装：\n\n```json\n{\n  \"mcpServers\": {\n    \"verify\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ktbtw/verify-mcp\"],\n      \"env\": {\n        \"VERIFY_BASE_URL\": \"https://www.xyapi.top/verfiy\",\n        \"VERIFY_API_TOKEN\": \"vat_xxx_replace_me\",\n        \"VERIFY_TIMEOUT_MS\": \"30000\"\n      }\n    }\n  }\n}\n```\n\n如果你要本地开发，再使用下面的方式：\n\n```bash\ncd /Users/yuminghao/Downloads/verfiy/verify_mcp\ncp .env.example .env\npnpm install\n```\n\n然后修改 `.env`：\n\n```bash\nVERIFY_BASE_URL=https://www.xyapi.top/verfiy\nVERIFY_API_TOKEN=你的_api_token\nVERIFY_TIMEOUT_MS=30000\n```\n\n## 运行\n\n开发模式：\n\n```bash\npnpm dev\n```\n\n构建：\n\n```bash\npnpm build\n```\n\n生产运行：\n\n```bash\npnpm start\n```\n\n## 回归测试\n\n先构建，再执行 smoke test：\n\n```bash\npnpm build\npnpm -s smoke\n```\n\n`smoke` 会通过 MCP stdio 客户端实际连接当前服务，并验证：\n\n- `list_runtime_api_classes`\n- `get_runtime_api_doc`\n- tools 列表\n- `get_context`\n- `list_apps`\n- `list_configs`\n- `get_compile_quota`\n- `publish_cloud_code`\n- `publish_cloud_code_from_workspace`\n- `apply_compile_task_to_config`\n- `apply_compile_task_to_configs`\n- `wait_compile_result`\n- `get_full_config_snapshot`\n\n## Inspector 调试\n\n```bash\npnpm build\npnpm inspect\n```\n\n## 工具列表\n\n- `list_runtime_api_classes`\n- `get_runtime_api_doc`\n- `get_runtime_migration_guide`\n- `get_runtime_lifecycle_guide`\n- `get_resource_and_native_rules`\n- `get_compile_semantics`\n- `get_card_verification_guide`\n- `validate_cloud_runtime`\n- `simulate_resource_layout`\n- `validate_cloud_code_layout`\n- `server_info`\n- `set_api_token`\n  - 运行时切换配置、应用、卡密、云端代码、编译等工具使用的 ApiToken\n- `set_protect_token`\n  - 运行时切换 VMP、混淆、Dex2C、SO、注入等加固工具使用的 ProtectToken\n- `clear_runtime_tokens`\n  - 清除运行时切换过的 token，恢复使用 MCP 启动时环境变量中的 token\n- `submit_vmp_protect_task`\n  - 传本地 `filePath`，工具自动读取上传；可选 `mappingPath`\n- `submit_obfuscate_protect_task`\n  - 传本地 `filePath`，工具自动读取上传；可选 `mappingPath`\n- `submit_dex2c_protect_task`\n  - 传本地 `filePath`，工具自动读取上传；可选 `mappingPath`\n- `submit_so_protect_task`\n  - 传本地 `filePath`，工具自动读取上传\n- `submit_inject_protect_task`\n  - 传本地 `filePath`，工具自动读取上传\n- `list_protect_tasks`\n- `get_protect_task`\n- `download_protect_task`\n  - 默认保存到 `~/.cache/verify-mcp/downloads/protect`，只返回路径、大小、sha256 和响应元数据\n  - 可传 `outputPath` 指定目录或完整文件路径；仅 `includeBase64=true` 时返回 Base64\n- `delete_protect_task`\n- `get_context`\n- `list_configs`\n- `list_runtime_crashes`\n  - 查询崩溃问题组；支持 `incidentType`、`attribution`、`query`、`days` 和分页\n  - ACCOUNT 级 Token 必须传 `appId`；APP/CONFIG 级 Token 可省略\n- `get_runtime_crash_events`\n  - 按 64 位 `fingerprint` 读取组内事件详情和脱敏栈\n- `download_runtime_crash_report`\n  - `type=raw` 下载单事件原始报告，`type=event` 下载事件 JSON，`type=group` 下载问题组 ZIP\n  - 默认保存到 `~/.cache/verify-mcp/downloads/runtime-crashes`；支持 `outputPath`，Base64 需显式开启\n- `get_app_credentials`\n- `get_verification_examples`\n- `unbind_card`\n  - 参数：`code`、`machine`；ACCOUNT 级 Token 还需传 `appId`\n  - 自动读取应用 `apiKey/effectiveSecret/secure/encryptionAlg`\n  - 普通模式签名源为 `code + \"\\n\" + machine`\n  - 安全模式自动生成 RC4/AES-CBC `payload`，并校验、解密加密响应\n- `consume_count_card`\n  - 参数：`code`；可选 `requestId`；ACCOUNT 级 Token 还需传 `appId`\n  - 普通模式签名源为 `code + \"\\n\" + requestId`\n  - 安全模式自动加密 `{code,requestId}`，并校验、解密加密响应\n  - 同一次业务消费的所有重试必须复用相同 `requestId`\n\n- `download_menupro_java_ui_template`\n  - 下载 MenuPro 纯 Java 悬浮菜单 UI 模板源码 zip 到 `targetDir` 并解压，临时压缩包会自动清理\n  - zip 默认包含 `com/xy/menupro/...`，通常把 `targetDir` 指到 `app/src/main/java` 或 Verify 云代码 `workspace/src`\n  - Verify 云代码接入时建议传 `profile=\"verify-cloud\"`，工具会移除演示 Activity/Service，只保留可复用 UI、控件、主题、验证和悬浮宿主代码\n- `prepare_ithook_apk`\n  - 检查并触发指定 Xposed 应用的专属 `ITHook.apk` 构建；只做预处理，不下载\n  - 需要 ACCOUNT 或 APP 级 `VERIFY_API_TOKEN`；CONFIG 级 Token 不允许下载应用级 APK\n- `download_ithook_apk`\n  - 先执行 prepare；默认等待构建完成后下载指定 Xposed 应用的专属 `ITHook.apk`\n  - 默认保存到 `~/.cache/verify-mcp/downloads/ithook-apk`；可传 `outputPath` 指定位置\n  - 仅 `includeBase64=true` 时返回 Base64\n- `update_app_redeem_extra`\n  - 设置应用级 `/api/redeem` 全局回参，支持 `redeemExtraMode=ALWAYS/SUCCESS_ONLY/FAILURE_ONLY`\n- `update_card_extra`\n  - 设置单卡密验证成功回参，写入 `extra` 并控制 `returnExtra`\n- `get_config`\n- `create_config`\n  - 可传本地 `dexPath/zipPath`，自动计算 sha256 和 Base64 后创建配置；不再需要手动准备 Base64\n  - 可传 `vmDetectionEnabled` / `packetCaptureDetectionEnabled` / `fridaDetectionEnabled`；不传时默认开启\n- `update_config`\n  - 可更新基础字段和三项配置级安全检测开关；不传则保留已有值\n- `delete_config`\n- `get_config_files`\n  - 默认 `includeData=false`，只返回文件存在状态、大小与哈希；需要原始内容时再显式开启\n- `update_config_files`\n  - 只更新 dex 时建议传 `updateDexOnly=true` 或 `preserveExistingZip=true`\n  - 传本地 `dexPath/zipPath`，自动计算 sha256 和 Base64 后更新配置文件；不再需要手动准备 Base64\n- `install_shadowhook`\n  - 固定校验 ShadowHook `2.0.1` 官方 AAR 和内置 host bridge digest\n  - 保留现有 resource zip 与云代码，生成包装入口后完成编译、ZIP 更新和 Dex 应用\n  - 支持 `xposed` / `inject`、双 ABI、可选 Hook SO、`workspacePath`、`dryRun` 和回滚产物\n- `inspect_patched_apk`\n  - 判断 APK 或已安装应用是否被 Verify 本地 Patch，以及是否绑定当前账号的应用\n  - 已安装应用传 `packageName`，走 `dumpsys package` 读 `xyz.patch.owner` 哈希；本地文件传 `apkPath`\n  - 归属哈希为 SHA-256(appId + NUL + appKey)，对得上才返回 appId\n- `patch_local_apk`\n  - 用已安装并登录的 Verify APP，在连接设备上对本地 APK 做 Patch，再拉回 `outputDir`\n  - 必填 `apkPath` / `appId` / `outputDir`；只支持 Xposed 应用\n  - `dryRun=true` 只检查 token、应用类型、设备和 APP 安装\n  - 多设备时必须传 `serial`；可选 `hookEngine`、`runtimeAbis`、`sigBypassLevel`\n  - `embedOwnerHash` 默认 false；为 true 时才写入 `xyz.patch.owner` 归属哈希\n- `install_wifi_adb_module`\n  - 省略 `serials` 时批量处理 `adb devices` 中全部在线设备；也可指定最多 20 个 serial\n  - 支持 Magisk、Magisk Alpha、Kitsune Mask/Delta、KernelSU、KernelSU Next、SukiSU Ultra 与 APatch\n  - 默认端口 `5555`、并发数 `3`、不重启；安装后热激活、自动重连并逐台健康检查\n  - `dryRun=true` 只检查 Root、管理器、Android API、IP 和已有版本，不下载或写入模块\n- `get_cloud_code`\n- `push_cloud_code`\n  - 严格要求同时传 `files`、`fileTree`、`currentFilePath`\n  - 不会自动补树；布局不对会直接拒绝\n- `update_compile_settings`\n- `compile_config`\n- `list_compile_tasks`\n- `get_compile_task`\n- `download_compile_task`\n  - 默认保存到 `~/.cache/verify-mcp/downloads/compile`；支持 `outputPath`，Base64 需显式开启\n- `delete_compile_task`\n- `get_compile_quota`\n- `wait_compile_result`\n  - `includeDownload=true` 时产物保存到本地，返回中不内联 Base64\n- `publish_cloud_code`\n  - 严格要求同时传 `files`、`fileTree`、`currentFilePath`\n  - 会先校验编辑器兼容布局，再推送与编译\n  - 传 `applyToConfig=true` 时，编译成功后自动写回配置 dex，并返回 `appliedToConfig=true`\n- `publish_cloud_code_from_workspace`\n  - 传本地目录，自动扫描 `.java` 并生成 `files/fileTree/currentFilePath`\n  - 适合大文件或多文件项目，避免手工拼 JSON 漏字段\n- `create_module_config`\n- `list_module_configs`\n- `get_source_workspace`\n- `push_source_workspace`\n- `submit_build_task`\n- `wait_build_task`\n  - `includeDownload=true` 时 Artifact 保存到本地，返回中不内联 Base64\n- `download_artifact`\n  - 默认保存到 `~/.cache/verify-mcp/downloads/artifacts`；支持 `outputPath`，Base64 需显式开启\n- `delete_build_task`\n- `publish_native_workspace`\n  - 传本地 Native/C++ 工作区目录，自动扫描并归一化到 `src/native/...`\n  - 自动推送源码工作区、提交构建任务，并可选等待构建完成\n  - 构建成功后返回 `artifact` 与 `artifactLayout`\n  - `.so` 不会直接写入 Hook 配置；它先成为 Native Artifact，产物包内运行时路径通常是 `payload/lib/{abi}/libxxx.so`\n- `apply_compile_task_to_config`\n- `apply_compile_task_to_configs`\n  - 把已成功编译任务写入配置\n  - 默认只更新 dex，不触碰已有 zip\n  - 写入后逐配置复核 `dexHash`，单个配置的复核读取失败会重试并记入 `verificationFailures`，不会把已提交的写入误报成整批失败\n  - 读取 `verified` 判断是否 10 个配置全部复核通过；`snapshots` 与 `configIds` 顺序对齐\n- `get_full_config_snapshot`\n  - 默认轻量返回，不含 dex/zip base64，也不含云端源码内容\n  - 需要云端源码内容时传 `includeCloudCodeFiles=true`\n\n## MCP 公开解绑教程\n\n应用级 ApiToken 已经绑定唯一应用时，直接调用：\n\n```json\n{\n  \"name\": \"unbind_card\",\n  \"arguments\": {\n    \"code\": \"CARD-XXXX-XXXX\",\n    \"machine\": \"DEVICE_ID_001\"\n  }\n}\n```\n\n账号级 ApiToken 可以访问多个应用，必须指定 `appId`：\n\n```json\n{\n  \"name\": \"unbind_card\",\n  \"arguments\": {\n    \"appId\": 60,\n    \"code\": \"CARD-XXXX-XXXX\",\n    \"machine\": \"DEVICE_ID_001\"\n  }\n}\n```\n\n工具执行流程：\n\n1. 调用 `get_app_credentials` 获取目标应用的 `apiKey`、`effectiveSecret`、`secure`、`encryptionAlg`。\n2. 生成当前 Unix 秒时间戳。\n3. 普通模式签名 `md5(secret + timestamp + code + \"\\n\" + machine)`。\n4. 安全模式将 `{code,machine}` 按 RC4 或 AES-CBC 加密为 `payload`，签名 `md5(secret + timestamp + payload)`。\n5. 调用 `/api/unbind`，安全模式下继续校验响应签名并解密响应 payload。\n\n典型返回：\n\n```json\n{\n  \"success\": true,\n  \"message\": \"解绑成功\",\n  \"httpStatus\": 200,\n  \"secure\": true,\n  \"encryptionAlg\": \"AES-256-CBC\"\n}\n```\n\n需要查看手工调用代码时，使用 `get_verification_examples`；返回结果的 `examples.unbind` 包含 curl、JavaScript 和 Python 示例。\n\n## MCP 次数卡消费教程\n\n调用应用级 ApiToken 时可以省略 `requestId`，MCP 会自动生成 UUID：\n\n```json\n{\n  \"name\": \"consume_count_card\",\n  \"arguments\": {\n    \"code\": \"COUNT-XXXX-XXXX\"\n  }\n}\n```\n\n账号级 ApiToken 还需要指定 `appId`；也可以显式传入幂等 ID：\n\n```json\n{\n  \"name\": \"consume_count_card\",\n  \"arguments\": {\n    \"appId\": 60,\n    \"code\": \"COUNT-XXXX-XXXX\",\n    \"requestId\": \"550e8400-e29b-41d4-a716-446655440000\"\n  }\n}\n```\n\n典型返回：\n\n```json\n{\n  \"success\": true,\n  \"code\": 0,\n  \"message\": \"消费成功\",\n  \"cardType\": \"COUNT\",\n  \"totalCount\": 10,\n  \"remainingCount\": 9,\n  \"requestId\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"replayed\": false,\n  \"httpStatus\": 200,\n  \"secure\": true,\n  \"encryptionAlg\": \"AES-256-CBC\"\n}\n```\n\n正常结果始终包含实际使用的 `requestId`。如果调用超时或网络中断，MCP 错误信息也会包含本次生成的 ID；重试时把它作为 `requestId` 显式传回。服务端识别重放后返回同一次消费结果和 `replayed=true`，不会再次扣次。只有下一次真实消费才能省略或改用新的 `requestId`。手工调用示例位于 `get_verification_examples` 返回的 `examples.consume`。\n\n## ShadowHook 完整安装\n\n已有云代码快照的配置只需提供配置 ID 和运行时：\n\n```json\n{\n  \"name\": \"install_shadowhook\",\n  \"arguments\": {\n    \"configId\": 44,\n    \"runtime\": \"xposed\"\n  }\n}\n```\n\n工具会依次完成：\n\n1. 下载或读取 ShadowHook `2.0.1` 官方 AAR，并核对固定 SHA-256。\n2. 读取配置现有 resource zip，保留原条目并写入两种 ABI 的 ShadowHook、nothing 库和 host bridge。\n3. 保留已有云代码，新增 `ShadowHookBootstrap` 与包装入口 `ShadowHookEntry.main()`。\n4. 云 loader 创建时绑定私有 native 目录；资源就绪后复制 SO、追加只读 host bridge Jar，并校验二者 loader 身份一致。\n5. 包装入口调用原来的无参静态入口，重复安装不会形成递归包装。\n6. 云代码编译成功后上传合并 ZIP，再应用 Dex，并复核最终 `zipHash`。\n7. 在本地输出合并 ZIP、安装前 ZIP 和完整云代码工作区，便于检查与回滚。\n\n同时安装自定义 Hook SO 时，每个库必须覆盖所有选择的 ABI：\n\n```json\n{\n  \"name\": \"install_shadowhook\",\n  \"arguments\": {\n    \"configId\": 44,\n    \"runtime\": \"inject\",\n    \"abis\": [\"arm64-v8a\", \"armeabi-v7a\"],\n    \"hookLibraries\": [\n      {\"abi\": \"arm64-v8a\", \"path\": \"/absolute/arm64-v8a/libdemo_hook.so\"},\n      {\"abi\": \"armeabi-v7a\", \"path\": \"/absolute/armeabi-v7a/libdemo_hook.so\"}\n    ],\n    \"recordable\": true,\n    \"debuggable\": false\n  }\n}\n```\n\n`hookLibraries` 会由云端 ClassLoader 中的 host bridge 按数组中的逻辑库顺序执行 `System.load()`。自定义 SO 应在\n`JNI_OnLoad` 中完成 Hook 注册，或自行提供后续 Java 调用入口；native 侧通过\n`dlopen(\"libshadowhook.so\", RTLD_NOW | RTLD_NOLOAD)` 复用已由官方 Java loader 初始化的\nShadowHook。\n\n`libshadowhook_nothing.so` 必须复制到云 loader 构造时绑定的 native 目录，但 Bridge 不得主动加载它。\nShadowHook 初始化会首次 `dlopen` 该探针 SO，用它的构造回调扫描 linker `soinfo`；提前加载会使初始化返回\n`SHADOWHOOK_ERRNO_INIT_LINKER` (`12`)。\n\n配置已经绑定 Dex、但服务端没有云代码编辑快照时，传入原项目源码目录：\n\n```json\n{\n  \"name\": \"install_shadowhook\",\n  \"arguments\": {\n    \"configId\": 44,\n    \"runtime\": \"xposed\",\n    \"workspacePath\": \"/absolute/project/cloud/src\"\n  }\n}\n```\n\n先检查产物且不修改配置时传 `dryRun=true`。结果中的 `localArtifacts.resourceZipPath`、\n`localArtifacts.previousZipPath` 和 `localArtifacts.cloudWorkspacePath` 分别对应合并 ZIP、回滚 ZIP\n和生成后的完整源码目录。\n\n## 持久化 WiFi ADB 模块批量安装\n\n先检查所有在线设备，不下载或写入模块：\n\n```json\n{\n  \"name\": \"install_wifi_adb_module\",\n  \"arguments\": {\n    \"dryRun\": true,\n    \"concurrency\": 3\n  }\n}\n```\n\n确认后批量安装并立即切换到固定端口：\n\n```json\n{\n  \"name\": \"install_wifi_adb_module\",\n  \"arguments\": {\n    \"port\": 5555,\n    \"concurrency\": 3,\n    \"reboot\": false\n  }\n}\n```\n\n工具只下载一次服务端 ZIP，然后为每台设备独立检测 Root、Android API、IPv4 和管理器发行版。\n单台失败会记录在 `devices[].error` 并继续其他设备。完成时重点检查\n`devices[].installed`、`activated`、`verified`、`targetAddress` 和 `rebootRequired`。\n\nMCP 主机默认从 `PATH` 查找 `adb`，也可用 `VERIFY_ADB_PATH` 指定路径。模块服务端制品目录由\n`ROOT_MODULE_STORAGE_DIR` 配置，使用 `root_modules/wifi-adbd/publish.sh` 发布新版本时，ZIP 和版本\n清单先落盘，最后原子切换 `latest.txt`。\n\n## 运行时文档工具\n\n为了让智能体准确区分 Xposed `HookHelper` 和 DEX `InjectHelper` 的真实能力，MCP 里额外提供了两类本地文档工具：\n\n- `list_runtime_api_classes`\n  - 列出 `xposed` / `inject` 各自有哪些运行时工具类\n  - 返回每个类的常用方法名和框架内部公开方法名摘要\n- `get_runtime_api_doc`\n  - 支持按 `runtime`、`className`、`methodName` 精确查询\n  - 例如可查 `HookHelper.getModuleContext`\n  - 也可查 `InjectHelper` 全类说明，确认它并不提供 `getModuleContext`\n\n除此之外，又补了一组“迁移知识层 / 运行时语义层”工具：\n\n- `get_runtime_migration_guide`\n  - 说明入口类/入口方法写法\n  - 说明当前云端代码支持 `files[]` 多文件上传\n  - 说明 Xposed / Inject 在 Helper 能力上的差异\n- `get_runtime_lifecycle_guide`\n  - 说明初始化时机\n  - 说明 `main()` 不等于资源已就绪\n  - 说明 ActivityTask / ResourceTask 的晚提交兜底语义\n- `get_resource_and_native_rules`\n  - 说明 `resHook.zip` 固定命名、解压目录、缓存行为\n  - 说明 `findFileInUnzipDir*` 的真实搜索语义\n  - 说明 native 建议如何结合 `ResourceTaskManager`\n- `get_compile_semantics`\n  - 说明 `hasDexFile`\n  - 说明 `cloudCode.exists`\n  - 说明编译任务 `SUCCESS`\n  - 说明 `downloaded`\n- `get_card_verification_guide`\n  - 说明 `requireCardVerification` / `exitOnVerificationFailure`\n  - 说明平台卡密门禁与业务自带卡密逻辑如何共存\n  - 说明次数卡消费、`requestId` 幂等重试和公开解绑协议\n- `validate_cloud_runtime`\n  - 在编译前静态检查入口方法、运行时 API 混用、资源/native 风险\n- `simulate_resource_layout`\n  - 根据 `resHook.zip` 内部条目模拟 `findFileInUnzipDir*` 会命中什么\n- `validate_cloud_code_layout`\n  - 校验 `files / fileTree / currentFilePath` 是否满足编辑器恢复要求\n  - 只做检查，不会自动补任何字段\n\n推荐调用顺序：\n\n1. 不确定某个运行时有哪些工具类时，先调用 `list_runtime_api_classes`\n2. 确认目标类存在后，再调用 `get_runtime_api_doc`\n3. 需要确认“用户代码能不能直接调”时，`get_runtime_api_doc` 建议加 `includeInternal=false`\n4. 真正开始迁移项目时，再调用 `get_runtime_migration_guide` / `get_runtime_lifecycle_guide`\n5. 涉及图片、配置、`.so` 时，再调用 `get_resource_and_native_rules`\n6. 提交编译前，先调用 `validate_cloud_runtime`\n7. 推送云端代码前，先调用 `validate_cloud_code_layout`\n\n典型调用示例：\n\n1. 列出 DEX Inject 运行时有哪些工具类\n\n```json\n{\n  \"name\": \"list_runtime_api_classes\",\n  \"arguments\": {\n    \"runtime\": \"inject\"\n  }\n}\n```\n\n2. 同时查看 `xposed` 和 `inject` 两边的工具类摘要\n\n```json\n{\n  \"name\": \"list_runtime_api_classes\",\n  \"arguments\": {}\n}\n```\n\n3. 查询 Xposed 下 `HookHelper.getModuleContext()` 是否存在\n\n```json\n{\n  \"name\": \"get_runtime_api_doc\",\n  \"arguments\": {\n    \"runtime\": \"xposed\",\n    \"className\": \"HookHelper\",\n    \"methodName\": \"getModuleContext\"\n  }\n}\n```\n\n4. 查询 DEX 下 `InjectHelper` 的可直接调用方法，并排除框架内部回填方法\n\n```json\n{\n  \"name\": \"get_runtime_api_doc\",\n  \"arguments\": {\n    \"runtime\": \"inject\",\n    \"className\": \"InjectHelper\",\n    \"includeInternal\": false\n  }\n}\n```\n\n5. 查询 `ActivityTaskManager` 的整类说明，确认 `submitTask(...)` 等能力\n\n```json\n{\n  \"name\": \"get_runtime_api_doc\",\n  \"arguments\": {\n    \"runtime\": \"inject\",\n    \"className\": \"ActivityTaskManager\"\n  }\n}\n```\n\n6. 使用完整包名查询也可以\n\n```json\n{\n  \"name\": \"get_runtime_api_doc\",\n  \"arguments\": {\n    \"runtime\": \"inject\",\n    \"className\": \"com.xy.verfiy_inject.Util.InjectHelper\",\n    \"methodName\": \"getHostContext\"\n  }\n}\n```\n\n7. 读取 DEX Inject 的迁移指南\n\n```json\n{\n  \"name\": \"get_runtime_migration_guide\",\n  \"arguments\": {\n    \"runtime\": \"inject\"\n  }\n}\n```\n\n8. 读取 Xposed 的生命周期说明\n\n```json\n{\n  \"name\": \"get_runtime_lifecycle_guide\",\n  \"arguments\": {\n    \"runtime\": \"xposed\"\n  }\n}\n```\n\n9. 编译前静态校验云端入口和资源风险\n\n```json\n{\n  \"name\": \"validate_cloud_runtime\",\n  \"arguments\": {\n    \"runtime\": \"inject\",\n    \"dexClassName\": \"com.example.cloud.Entry\",\n    \"dexMethodName\": \"main\",\n    \"files\": [\n      {\n        \"path\": \"src/com/example/cloud/Entry.java\",\n        \"content\": \"package com.example.cloud;\\\\npublic final class Entry {\\\\n  public static void main() {}\\\\n}\"\n      },\n      {\n        \"path\": \"src/com/example/cloud/Helper.java\",\n        \"content\": \"package com.example.cloud;\\\\npublic final class Helper {}\"\n      }\n    ],\n    \"resourceEntries\": [\n      \"lib/arm64-v8a/libdemo.so\",\n      \"images/logo.png\"\n    ],\n    \"requireCardVerification\": false\n  }\n}\n```\n\n10. 模拟 `resHook.zip` 解压后查找 `libdemo.so`\n\n```json\n{\n  \"name\": \"simulate_resource_layout\",\n  \"arguments\": {\n    \"entries\": [\n      \"lib/arm64-v8a/libdemo.so\",\n      \"images/logo.png\",\n      \"config/app.json\"\n    ],\n    \"exactFileNames\": [\"libdemo.so\"],\n    \"containsFileNames\": [\"logo\"]\n  }\n}\n```\n\n11. 推送前先校验编辑器布局是否完整\n\n```json\n{\n  \"name\": \"validate_cloud_code_layout\",\n  \"arguments\": {\n    \"files\": [\n      {\n        \"path\": \"src/com/example/cloud/Entry.java\",\n        \"content\": \"package com.example.cloud;\\\\npublic final class Entry {\\\\n  public static void main() {}\\\\n}\"\n      },\n      {\n        \"path\": \"src/com/example/cloud/Helper.java\",\n        \"content\": \"package com.example.cloud;\\\\npublic final class Helper {}\"\n      }\n    ],\n    \"fileTree\": {\n      \"name\": \"root\",\n      \"type\": \"folder\",\n      \"path\": \"\",\n      \"children\": [\n        {\n          \"name\": \"src\",\n          \"type\": \"folder\",\n          \"path\": \"src\",\n          \"children\": [\n            {\n              \"name\": \"com\",\n              \"type\": \"folder\",\n              \"path\": \"src/com\",\n              \"children\": [\n                {\n                  \"name\": \"example\",\n                  \"type\": \"folder\",\n                  \"path\": \"src/com/example\",\n                  \"children\": [\n                    {\n                      \"name\": \"cloud\",\n                      \"type\": \"folder\",\n                      \"path\": \"src/com/example/cloud\",\n                      \"children\": [\n                        {\n                          \"name\": \"Entry.java\",\n                          \"type\": \"file\",\n                          \"path\": \"src/com/example/cloud/Entry.java\"\n                        },\n                        {\n                          \"name\": \"Helper.java\",\n                          \"type\": \"file\",\n                          \"path\": \"src/com/example/cloud/Helper.java\"\n                        }\n                      ]\n                    }\n                  ]\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"currentFilePath\": \"src/com/example/cloud/Entry.java\"\n  }\n}\n```\n\n12. 通过校验后再推送/发布；如果 `fileTree` 缺失、`currentFilePath` 不命中真实文件，工具会直接拒绝\n\n推荐方式：从本地工作区目录一键推送、编译并写回配置。\n\n```json\n{\n  \"name\": \"publish_cloud_code_from_workspace\",\n  \"arguments\": {\n    \"configId\": 39,\n    \"workspacePath\": \"/Users/me/verify_cloud_mg/src\",\n    \"currentFilePath\": \"src/com/example/cloud/Entry.java\",\n    \"cacheKey\": \"verify_cloud_mg\",\n    \"compileSettings\": {\n      \"dexClassName\": \"com.example.cloud.Entry\",\n      \"dexMethodName\": \"main\",\n      \"dexMethodParamTypes\": []\n    },\n    \"waitForResult\": true,\n    \"applyToConfig\": true,\n    \"deleteTaskAfterDownload\": true\n  }\n}\n```\n\n返回里重点看：\n\n- `compiled=true`：编译任务成功。\n- `appliedToConfig=true`：dex 已写回配置。\n- `hasDexFile=true`、`dexSize>0`、`dexHash`：配置侧已经能读到 dex。\n\n如果已经有成功任务，也可以单独应用：\n\n```json\n{\n  \"name\": \"apply_compile_task_to_config\",\n  \"arguments\": {\n    \"configId\": 39,\n    \"taskId\": \"compile-task-id\",\n    \"deleteTaskAfterApply\": true\n  }\n}\n```\n\n同一套产物需要发布到多个配置时，使用完整产物批量应用：\n\n```json\n{\n  \"name\": \"apply_compile_task_to_configs\",\n  \"arguments\": {\n    \"configIds\": [39, 40, 41],\n    \"taskId\": \"compile-task-id\",\n    \"deleteTaskAfterApply\": true\n  }\n}\n```\n\n该工具要求目标配置属于编译任务对应的同一应用。它会保留各配置已有资源 ZIP，并在 VMP 开启时将同一个 DEX、`bundleId` 和 `bundleHash` 一起绑定到所有目标配置。\n\n只确认配置状态时使用轻量快照：\n\n```json\n{\n  \"name\": \"get_full_config_snapshot\",\n  \"arguments\": {\n    \"configId\": 39,\n    \"includeFileData\": false,\n    \"includeCloudCodeFiles\": false\n  }\n}\n```\n\n```json\n{\n  \"name\": \"publish_cloud_code\",\n  \"arguments\": {\n    \"configId\": 39,\n    \"cacheKey\": \"verify_mcp_example\",\n    \"files\": [\n      {\n        \"path\": \"src/com/example/cloud/Entry.java\",\n        \"content\": \"package com.example.cloud;\\\\npublic final class Entry {\\\\n  public static void main() {}\\\\n}\"\n      }\n    ],\n    \"fileTree\": {\n      \"name\": \"root\",\n      \"type\": \"folder\",\n      \"path\": \"\",\n      \"children\": [\n        {\n          \"name\": \"src\",\n          \"type\": \"folder\",\n          \"path\": \"src\",\n          \"children\": [\n            {\n              \"name\": \"com\",\n              \"type\": \"folder\",\n              \"path\": \"src/com\",\n              \"children\": [\n                {\n                  \"name\": \"example\",\n                  \"type\": \"folder\",\n                  \"path\": \"src/com/example\",\n                  \"children\": [\n                    {\n                      \"name\": \"cloud\",\n                      \"type\": \"folder\",\n                      \"path\": \"src/com/example/cloud\",\n                      \"children\": [\n                        {\n                          \"name\": \"Entry.java\",\n                          \"type\": \"file\",\n                          \"path\": \"src/com/example/cloud/Entry.java\"\n                        }\n                      ]\n                    }\n                  ]\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"currentFilePath\": \"src/com/example/cloud/Entry.java\",\n    \"compileSettings\": {\n      \"dexClassName\": \"com.example.cloud.Entry\",\n      \"dexMethodName\": \"main\",\n      \"dexMethodParamTypes\": []\n    },\n    \"waitForResult\": false\n  }\n}\n```\n\nAI 调用建议：\n\n- 写 DEX 代码前，优先查 `inject`\n- 写 Xposed 代码前，优先查 `xposed`\n- 如果 AI 不确定 `InjectHelper.getModuleContext()` 这类方法是否真实存在，应先调用 `get_runtime_api_doc`，不要只凭补全文案猜测\n- 开始迁移旧项目前，优先查 `get_runtime_migration_guide`\n- 涉及 `main()` 时序、Activity 可见阶段、native 资源回调时，优先查 `get_runtime_lifecycle_guide` 与 `get_resource_and_native_rules`\n- 编译前先跑 `validate_cloud_runtime`，比等到运行时再猜问题更稳\n- 推送前先跑 `validate_cloud_code_layout`，确保“能编译”和“能完整拉回编辑器树”同时成立\n- 多文件或大文件项目优先用 `publish_cloud_code_from_workspace`，不要手工在 MCP 参数里塞完整源码树\n- 编译成功后需要应用到单个线上配置时，使用 `applyToConfig=true` 或 `apply_compile_task_to_config`\n- 同一产物需要推送到多个配置时，使用 `apply_compile_task_to_configs`，不要逐配置重新编译\n- 只确认配置是否已有 dex 时，`get_full_config_snapshot` 保持 `includeCloudCodeFiles=false`\n- 不要只传 `files`；`push_cloud_code` / `publish_cloud_code` 现在会把缺失的 `fileTree`、错误的 `currentFilePath` 直接判错\n\n## MCP 客户端配置示例\n\n以本地 `npx` 方式为例，客户端配置通常类似：\n\n```json\n{\n  \"mcpServers\": {\n    \"verify\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ktbtw/verify-mcp\"\n      ],\n      \"env\": {\n        \"VERIFY_BASE_URL\": \"https://www.xyapi.top/verfiy\",\n        \"VERIFY_API_TOKEN\": \"vat_xxx_replace_me\",\n        \"VERIFY_TIMEOUT_MS\": \"30000\"\n      }\n    }\n  }\n}\n```\n\n如果你已经把仓库拉到本地，也可以直接指向构建产物：\n\n```json\n{\n  \"mcpServers\": {\n    \"verify\": {\n      \"command\": \"node\",\n      \"args\": [\n        \"/Users/yuminghao/Downloads/verfiy/verify_mcp/dist/index.js\"\n      ],\n      \"env\": {\n        \"VERIFY_BASE_URL\": \"https://www.xyapi.top/verfiy\",\n        \"VERIFY_API_TOKEN\": \"vat_xxx_replace_me\",\n        \"VERIFY_TIMEOUT_MS\": \"30000\"\n      }\n    }\n  }\n}\n```\n","readmeFilename":"README.md"}