{"_id":"@creeperhost/modlens-mcp","_rev":"27-70c2695d0db6b961e0defd2e79cab699","name":"@creeperhost/modlens-mcp","dist-tags":{"latest":"1.6.29"},"versions":{"1.6.0":{"name":"@creeperhost/modlens-mcp","version":"1.6.0","_id":"@creeperhost/modlens-mcp@1.6.0","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"8513ce2c998262eacc122509004190dcdf01d02f","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.0.tgz","fileCount":382,"integrity":"sha512-7e6AzaRmYp66jqV/Ai2kAnBxjnyutPSkmgke8VgcIoOjigpQfjHfWFjfnee065K5bGDk4a5ZiKWaXtAdmMsygg==","signatures":[{"sig":"MEYCIQCOj1CBD164FdQot/4LmKZzDgJTzQYqmf7wcJ17iXJJ1QIhAJsNYYhHWjaQdSXApkCntKtz8bU2ut8M43cUvz6BqEm2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3607422},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","gitHead":"0fb61665c4e9d68676bc3dd77250b8d1b93bb436","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"},"_npmVersion":"11.6.2","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^9.0.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.0_1782165856145_0.9887301580239443","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@creeperhost/modlens-mcp","version":"1.6.1","_id":"@creeperhost/modlens-mcp@1.6.1","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"d2f39bec05ee779ccc9178a8c40fc077b7f6ddf8","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.1.tgz","fileCount":326,"integrity":"sha512-CYaOVc5RZmlfNVcGpJaYa6Vg8qXs0+h9SZU0gmplrIPQe0/YJcatymY86IWygN+p5+/MHIqnjTxbXFILveLbgw==","signatures":[{"sig":"MEQCIH14nIzy5TNkfM9A/PV681VXFXvBAoIwsjtikrf5lowUAiBfKPAMWepCac0dFbcGfY1CUBUERWrrV/mSqwbLRNxx9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3326977},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","gitHead":"d8b4b456e80519d394bf798ad53843480f7d3eb6","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a4ce7ed3-693c-40aa-8dc6-08b59a0dae88"}},"repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.1_1782168490887_0.9066458600870531","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@creeperhost/modlens-mcp","version":"1.6.4","_id":"@creeperhost/modlens-mcp@1.6.4","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"d23e9561fe18a6a4cd9d2674393170a29df6cd09","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.4.tgz","fileCount":326,"integrity":"sha512-JIvBtq3/i3683GcvUdd88Hh+gq3LYrXSBbNruP5TBnjdrlgBz4jMGO//7Pih42kntagMcPyIxncjdl5Z7uEtiA==","signatures":[{"sig":"MEQCIDzbGyD7xSnfSY6bwOfWG5SVpXjPvfd/nLPC/LqrAX6LAiAlVihUEBpbjcO7ZEr01Gg6n2r605kAcD5bEwOZpmoaLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3342819},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.4.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.4.tgz","_integrity":"sha512-JIvBtq3/i3683GcvUdd88Hh+gq3LYrXSBbNruP5TBnjdrlgBz4jMGO//7Pih42kntagMcPyIxncjdl5Z7uEtiA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.4_1782240809550_0.30762341385403924","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"@creeperhost/modlens-mcp","version":"1.6.5","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.5","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"fc3ee2bf82e489553ff51b5809571d13297d2873","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.5.tgz","fileCount":328,"integrity":"sha512-0knprnbUye8zE9u+x4sI7McbDNYbUFeSKiLw7072F5ohJ6Mvg54Npf9vQ+YB4pFWBA9QnK6slf7sBVjK8fF/YQ==","signatures":[{"sig":"MEQCIBDeU2IHDAOVCP3aBi8rYmw0lPWexne7FJ5w+1zKCZi3AiBX8IUuPc448pbV2qiCl++NwT3qxdmUaRQ92fZ2MV1JSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3344356},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.5.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.5.tgz","_integrity":"sha512-0knprnbUye8zE9u+x4sI7McbDNYbUFeSKiLw7072F5ohJ6Mvg54Npf9vQ+YB4pFWBA9QnK6slf7sBVjK8fF/YQ==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.5_1782241825693_0.9157366558769435","host":"s3://npm-registry-packages-npm-production"}},"1.6.6":{"name":"@creeperhost/modlens-mcp","version":"1.6.6","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.6","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"27bb2081d87ac57ae8723110c885b77065a2e9d6","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.6.tgz","fileCount":328,"integrity":"sha512-EsrY9Je63SqYuNg45gNLwrPmrbFj81wErQF6gZfA+X7HT4kjbsKL7GEeVbPgG4iBkssf6rnmVq6x9H4gYFpzhg==","signatures":[{"sig":"MEUCIBTtjVWULDCi1/H8OTl4UQmdqCKGP+DeJYr9rp7Rw1EvAiEA4Y+IxxbtyiZcMZcT+DSpoN/b48ScFZBFRnQ+6DCT7zE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3347878},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.6.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.6.tgz","_integrity":"sha512-EsrY9Je63SqYuNg45gNLwrPmrbFj81wErQF6gZfA+X7HT4kjbsKL7GEeVbPgG4iBkssf6rnmVq6x9H4gYFpzhg==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.6_1782402553084_0.3663340342434802","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"@creeperhost/modlens-mcp","version":"1.6.7","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.7","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"b9dad1b6268b10285595efeecac31e6a2706b9f2","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.7.tgz","fileCount":328,"integrity":"sha512-ztS0UMVIIBrKCulk7CzX5ZXqSmbo4OCrpc8T+QuNdAjgnwpj4OH+6C99E5KAL9MYUwAwCnuXOgd/8dK5QzOn1Q==","signatures":[{"sig":"MEUCIQC3fEYR1etLWODSkRdLU59rEErgJ6JuwOxoXZ57kYLINAIgVN4zFQnoQ1j4aXp/icWFulSuwkIrAUJjF0ac2uaIU/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3349366},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.7.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.7.tgz","_integrity":"sha512-ztS0UMVIIBrKCulk7CzX5ZXqSmbo4OCrpc8T+QuNdAjgnwpj4OH+6C99E5KAL9MYUwAwCnuXOgd/8dK5QzOn1Q==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.7_1782407440986_0.7515714042528523","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"@creeperhost/modlens-mcp","version":"1.6.8","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.8","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"c2b195d9343265cd3b5c6cf72569a92bd28b3e09","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.8.tgz","fileCount":328,"integrity":"sha512-s7ebq90Sj6wCrx+Niv+LKoJOZZXv1AGMLZyJubzwsgIOVD6a/JdoGxzn2JBeQ25IY1PxDGxzONlXJkHrkeUxvg==","signatures":[{"sig":"MEUCIQCWMGyEjTNeLdphVhh4LFzb/1Obdj6smfzm0IU2carG7QIgZTIlKiTZUbgKqtcQRt3edfa2Fxuw0rH0CnNv60jRw1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3350043},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.8.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.8.tgz","_integrity":"sha512-s7ebq90Sj6wCrx+Niv+LKoJOZZXv1AGMLZyJubzwsgIOVD6a/JdoGxzn2JBeQ25IY1PxDGxzONlXJkHrkeUxvg==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.8_1782414872960_0.7433117285871365","host":"s3://npm-registry-packages-npm-production"}},"1.6.9":{"name":"@creeperhost/modlens-mcp","version":"1.6.9","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.9","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"538f9130e1ce11c916b3b3e2aeb5bd2bc3e6d8b7","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.9.tgz","fileCount":328,"integrity":"sha512-ENAQBZWenJfT8GzpY/Pdp5H95y2M/cO6VlN4raFyGMN2H0pUyGNE3S9FRIR5krauqatU0Y8TKmI06fm6wzmS4w==","signatures":[{"sig":"MEQCIFujj5aI40OnjTizoSU/AY7SBmLoBGPouvf4w9oabqHEAiB6Uobw8zXU1inzd3SJoj514wNJ8Ke6cR1DrXZMtSMzgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3353869},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.9.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.9.tgz","_integrity":"sha512-ENAQBZWenJfT8GzpY/Pdp5H95y2M/cO6VlN4raFyGMN2H0pUyGNE3S9FRIR5krauqatU0Y8TKmI06fm6wzmS4w==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.9_1782416732695_0.05487878423205528","host":"s3://npm-registry-packages-npm-production"}},"1.6.10":{"name":"@creeperhost/modlens-mcp","version":"1.6.10","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.10","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"774ab81742bfc987f56e8f5bd7bf7e933b69eae7","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.10.tgz","fileCount":328,"integrity":"sha512-z8MrA95JVHXL2xFmMUCFXDczJVu6ovx0V/u+vJRnzrkkQBK0qvtGzoyDZrfH5zIXUsrQGvhiQfXGi7QGZaTGRg==","signatures":[{"sig":"MEUCIGjRNkP0+NOPTHGHwb98II+VrpvRavWNyYr5X7aMbE0KAiEAh3b5Qkcz5s5Q7e6cEaeCfCCBamrlMowaWsxPfzRAPdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3354330},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.10.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.10.tgz","_integrity":"sha512-z8MrA95JVHXL2xFmMUCFXDczJVu6ovx0V/u+vJRnzrkkQBK0qvtGzoyDZrfH5zIXUsrQGvhiQfXGi7QGZaTGRg==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.10_1782418601937_0.5599246309516286","host":"s3://npm-registry-packages-npm-production"}},"1.6.11":{"name":"@creeperhost/modlens-mcp","version":"1.6.11","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.11","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"ef76424fcd610afb0bdefd880252e27c79d7de0e","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.11.tgz","fileCount":328,"integrity":"sha512-sB4Mwm/NP0gc6b1zVHhqj3sUPiPomYjgRzCIO0qqHRU7/JC9+UBplNFcqZiHs9ao4t3IXwVft+BSjeYttCCYeA==","signatures":[{"sig":"MEUCICjBRahI85L5FN30p6RS09vaKQUWszJIC5TMAmHLsQDRAiEAgGGkbOB6ngXu+/+dZsHL3/BFlGR9D4HhwaB6FF2MhHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3354330},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.11.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.11.tgz","_integrity":"sha512-sB4Mwm/NP0gc6b1zVHhqj3sUPiPomYjgRzCIO0qqHRU7/JC9+UBplNFcqZiHs9ao4t3IXwVft+BSjeYttCCYeA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.11_1782421765504_0.31962775790458164","host":"s3://npm-registry-packages-npm-production"}},"1.6.12":{"name":"@creeperhost/modlens-mcp","version":"1.6.12","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.12","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"08091268791b4cb68c002f56920303daba88b2a4","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.12.tgz","fileCount":328,"integrity":"sha512-oHXxKM9Zu1he3f5BD/R9k/IIROphRp3qxFYq8r1kwIYyZiYrqc4wacH865rEgxKixhCUGMbPmZYJIhoPm4k1FA==","signatures":[{"sig":"MEUCIQCh6LCdYT27xTVwMRZ+O2P8LZCHDCnIpwUK5qDp1x3+sQIgb/qZA13+43lO3jC0MJZQRad3qCuT9WAFHqdEz8ONvqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3356588},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.12.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.12.tgz","_integrity":"sha512-oHXxKM9Zu1he3f5BD/R9k/IIROphRp3qxFYq8r1kwIYyZiYrqc4wacH865rEgxKixhCUGMbPmZYJIhoPm4k1FA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.12_1782476947440_0.7636575088358297","host":"s3://npm-registry-packages-npm-production"}},"1.6.13":{"name":"@creeperhost/modlens-mcp","version":"1.6.13","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.13","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"78e37560a93a525dd59bfa831ea70dc8f17a4a16","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.13.tgz","fileCount":328,"integrity":"sha512-l16uGwzrvfioN2I/lBZm2QEnlkCpWdiWuwPTnfbPn2kGj6Me3HLpBt+xhHBn5puGW5dwt5ct1hTsmnTUOf+4NQ==","signatures":[{"sig":"MEQCICVglVefGNHwSndkeCbd8diy01Vm+xTRGQI0KeUmk8gBAiBfXnlMyXE8ZF/TpP8qBBGik3vK9GMQrNtuKd49PdG3uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3359738},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.13.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.13.tgz","_integrity":"sha512-l16uGwzrvfioN2I/lBZm2QEnlkCpWdiWuwPTnfbPn2kGj6Me3HLpBt+xhHBn5puGW5dwt5ct1hTsmnTUOf+4NQ==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.13_1782495904210_0.3255537603618721","host":"s3://npm-registry-packages-npm-production"}},"1.6.14":{"name":"@creeperhost/modlens-mcp","version":"1.6.14","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.14","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"94f366d429a94cdf2976f2c8a6c8cff919ab6b0f","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.14.tgz","fileCount":340,"integrity":"sha512-jcCljm/ednLHqFZwXIn9e6V7Y6etqEElzymiXFCdGBrqHX1D5+PzjHm/oTHWzxY6i+L2ilXCdPyd62XErouUIA==","signatures":[{"sig":"MEUCIQDPxH/XNlk3JHiC1oXyBDtND8W6/OHg6UlP74uVBtl0bgIgeOrb+eO7noujP7DEPd7dmzTcufWH/xf876ecVnvtNFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3756521},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.14.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.14.tgz","_integrity":"sha512-jcCljm/ednLHqFZwXIn9e6V7Y6etqEElzymiXFCdGBrqHX1D5+PzjHm/oTHWzxY6i+L2ilXCdPyd62XErouUIA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.14_1783371538807_0.3900711309477354","host":"s3://npm-registry-packages-npm-production"}},"1.6.15":{"name":"@creeperhost/modlens-mcp","version":"1.6.15","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.15","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"bc50a9882438d5c8216af74e69f40a19734b8342","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.15.tgz","fileCount":340,"integrity":"sha512-nEFww2SdjXJiJfNv0vKB+gGhsPxrwT163LcoFqLbbXklabOAATXdbciT81t7LHS6/Nbse8mfhy3HWbPQADl7yw==","signatures":[{"sig":"MEYCIQCm/doJWPV1lYTAGZzEgshoZSR5+7cXieMvZonqA9vxmwIhALbFIgVffbBB66fRx16IoUgF3uzLBjsF8LgRm54pKGLW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3799447},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.15.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.15.tgz","_integrity":"sha512-nEFww2SdjXJiJfNv0vKB+gGhsPxrwT163LcoFqLbbXklabOAATXdbciT81t7LHS6/Nbse8mfhy3HWbPQADl7yw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.15_1783389270107_0.032319270595768224","host":"s3://npm-registry-packages-npm-production"}},"1.6.16":{"name":"@creeperhost/modlens-mcp","version":"1.6.16","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.16","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"0de7e0bf295e7eb67ac6e0d82ee427a22c890611","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.16.tgz","fileCount":340,"integrity":"sha512-jNKgBnpAAJT0NpgjtDEMaSna9U+Ny++evhawfY1VZrV9Rkx98ToGawgt57k+GBIqcc6EUYbLKp8fsiaeXxGHTQ==","signatures":[{"sig":"MEUCIQDTygLuQXWRIWy7vtVkiOr05e5DNHFVKfSywos+82fCsgIgOss9BP9u5xHK+lqYSnP+mK0QPiWhnPrfetblrI0yMMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3805346},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.16.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.16.tgz","_integrity":"sha512-jNKgBnpAAJT0NpgjtDEMaSna9U+Ny++evhawfY1VZrV9Rkx98ToGawgt57k+GBIqcc6EUYbLKp8fsiaeXxGHTQ==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.16_1783392272895_0.41771230912005963","host":"s3://npm-registry-packages-npm-production"}},"1.6.17":{"name":"@creeperhost/modlens-mcp","version":"1.6.17","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.17","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"00792e5c92128c57fec96544ada5f1a81ebf6336","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.17.tgz","fileCount":340,"integrity":"sha512-5RrPDdO0ysegTLJiWy+6MMbzYIC/6E9YnQ7x0h3x4BAOnYncsSX4atmNeNTSMbSSswfa6GDXy1ofCtEy93EeAA==","signatures":[{"sig":"MEUCIAo3LnKC+0xR7oiOdRnn6DZ9XM3/K9kLpQnaVnQIPIRRAiEAwobdcXNvd/NyNmkxVl1PGcDwVsahqPs2OjD8pkp7clc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3809948},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.17.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.17.tgz","_integrity":"sha512-5RrPDdO0ysegTLJiWy+6MMbzYIC/6E9YnQ7x0h3x4BAOnYncsSX4atmNeNTSMbSSswfa6GDXy1ofCtEy93EeAA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"11.18.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^11.9.0","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.17_1783393586956_0.6645726489098502","host":"s3://npm-registry-packages-npm-production"}},"1.6.18":{"name":"@creeperhost/modlens-mcp","version":"1.6.18","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.18","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"a5f2a432d1cc95460a07e512e3d021a180f5438d","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.18.tgz","fileCount":341,"integrity":"sha512-jhB0GZinmNOLCXAmnCidDrc9X+Hu3jzPFMPwXEKwfN8PSjJKjaTNgjCi40PRGh4Mz+iDAHkoDLWdyOQ4o+3PEw==","signatures":[{"sig":"MEUCIQCnvbRRpSjo5q7Z91PTRECpiJLyzrwWqbV8M+lzXTczzQIgUYNwpt64awpD8cifcmR98PJTUDJvNF0NtletgvUH900=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3820785},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.18.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.18.tgz","_integrity":"sha512-jhB0GZinmNOLCXAmnCidDrc9X+Hu3jzPFMPwXEKwfN8PSjJKjaTNgjCi40PRGh4Mz+iDAHkoDLWdyOQ4o+3PEw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.18_1788615392946_0.5235706523282306","host":"s3://npm-registry-packages-npm-production"}},"1.6.19":{"name":"@creeperhost/modlens-mcp","version":"1.6.19","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.19","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"a15a893438aee5f2ef42ab8141dc839cf00172aa","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.19.tgz","fileCount":380,"integrity":"sha512-Y4zv46h0xTwmJPaS6SOs4TUCSjmTsE2j8lVyKq3XrbX1j56w288m8gusymxwRIuoOdKQMOS/yYXfuwoPgU6FVA==","signatures":[{"sig":"MEUCIQC9c3IS7Kq+2M4JHUD5oOVD+iZNv/ufFrV9dj+aTqgmkQIgSgp98sHCp7TPvzT6ZDdDZbsVbuEu2nzvGWlokiv7MvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4169660},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.19.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.19.tgz","_integrity":"sha512-Y4zv46h0xTwmJPaS6SOs4TUCSjmTsE2j8lVyKq3XrbX1j56w288m8gusymxwRIuoOdKQMOS/yYXfuwoPgU6FVA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.19_1789335287717_0.5136838556286667","host":"s3://npm-registry-packages-npm-production"}},"1.6.20":{"name":"@creeperhost/modlens-mcp","version":"1.6.20","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.20","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"ba51d7eca3d7e682124a3e3f26e985ad47e2f90a","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.20.tgz","fileCount":389,"integrity":"sha512-J7X99hjFaLF+KojFRvAXQmsEBP9KLxxRF6T6lCrEM5/N3n4HvuzfYIu/eCerTtaI2YXlWmsscjn6B7YwS7M61Q==","signatures":[{"sig":"MEYCIQDfn6P0UiAe8Ke92TPl8/1lu1AbjF17nGs1p9xCt8PYdQIhAM7Fyh7uaSksM1CISPYyDQa4+0w3HpZl1qw3lQoeznRq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFQfzpiqNorQasqWiKv2tG3lePSJW1aalhApPzpsiozLAiEAjlDLW4eXLTzEKV+YwjR6D3hiQ4DjYGZ4ZnMKDhQ08DQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4233832},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.20.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.20.tgz","_integrity":"sha512-J7X99hjFaLF+KojFRvAXQmsEBP9KLxxRF6T6lCrEM5/N3n4HvuzfYIu/eCerTtaI2YXlWmsscjn6B7YwS7M61Q==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.0.2","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.20_1789417639581_0.5481822341415001","host":"s3://npm-registry-packages-npm-production"}},"1.6.21":{"name":"@creeperhost/modlens-mcp","version":"1.6.21","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.21","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"9a1833fb98bea98d97916d5005ef00b549b887f2","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.21.tgz","fileCount":462,"integrity":"sha512-+l5KlEB7E7pH3oVCX/yREznML0GDZIvDSkKA8nSI/i+wNVGsyJpkEMmF+3djaaKc4wA1r82mAAqUhNtRmYnabw==","signatures":[{"sig":"MEQCID7eYmlqpL1xqx6QE4F7IvQFUaKy/o1E9fZDNo5GHMcqAiBuZD7L7Y8T8QwpmZf0tLWHvJ8AGqq8Z7jOQ4wP79P9YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCJ7cR7P4tVnGOSlxhx55xKKnS29uwl5o7DfRIHP55raAIhALX4Li2b5zg12CEm0GndUzy8+Lyt4PZ65+VnmxTfYNZP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4757371},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.21.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.21.tgz","_integrity":"sha512-+l5KlEB7E7pH3oVCX/yREznML0GDZIvDSkKA8nSI/i+wNVGsyJpkEMmF+3djaaKc4wA1r82mAAqUhNtRmYnabw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.21_1790178939173_0.35902174115614693","host":"s3://npm-registry-packages-npm-production"}},"1.6.22":{"name":"@creeperhost/modlens-mcp","version":"1.6.22","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.22","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"038e7bbd02f204366f5aee7259450bf32395837d","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.22.tgz","fileCount":471,"integrity":"sha512-n5gSuYuBD86mOPtog6uOfqUUJwTdAOsGj16ExKgkyYq1+IZPlcaqmtuSqXukJ7yV2H3X3R4vTsX/JFP+QMoUhQ==","signatures":[{"sig":"MEUCIGjaQJj0grgSZipK/62cqSOtmP6BxZMW6/pfGGn0Nrt7AiEAuMoz7OFHhCLQcV/u2bDSLE1Sd36cYc9CbmpfnNYywrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID8M+QQr5H9IqAbnjB6r91McuQ4VTveMIzKIO7hboZL/AiBnHsFrkd8zf0z9b+FSYeLMbEFgbT5OwTdx0rbh/ss+Tw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4881384},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.22.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.22.tgz","_integrity":"sha512-n5gSuYuBD86mOPtog6uOfqUUJwTdAOsGj16ExKgkyYq1+IZPlcaqmtuSqXukJ7yV2H3X3R4vTsX/JFP+QMoUhQ==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.22_1790260463585_0.9637817886626465","host":"s3://npm-registry-packages-npm-production"}},"1.6.23":{"name":"@creeperhost/modlens-mcp","version":"1.6.23","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.23","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"b8ed1e0cbb2b5ff7d46416f25c391d7e9dbb181c","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.23.tgz","fileCount":471,"integrity":"sha512-516YClAkD9JtvpaEXD1JQqKl4IkbnekF+xZnyieKXxteS5q6tIXtufmnw4ReM+Srq3VNpQl3gbCMV6WYuxACHw==","signatures":[{"sig":"MEUCIQCcIiz2vfbBpI2Kjzjpv7K/RRMfOxrzFh5T/0hNWbvSHwIgGvSXUqXlqiYk98aDiR/WtSwBD5Q7U7Ev3qaMgk8jjo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC2+b67Ac0zIeF29XKvc7gWlQWu8TXCpGLcG9bfs+mZ0AIgWz0xoSKaOqQdd+Ihw34P2VPE0RHJVbgMqbDM4yQFNMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4900594},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.23.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.23.tgz","_integrity":"sha512-516YClAkD9JtvpaEXD1JQqKl4IkbnekF+xZnyieKXxteS5q6tIXtufmnw4ReM+Srq3VNpQl3gbCMV6WYuxACHw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.23_1790264390537_0.5592513181660719","host":"s3://npm-registry-packages-npm-production"}},"1.6.24":{"name":"@creeperhost/modlens-mcp","version":"1.6.24","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.24","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"eb268edf1318fbbf845fb5ace9cd8f928027cf5b","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.24.tgz","fileCount":475,"integrity":"sha512-1okcpDet07RX9U8BD8Fs2muSVyTfqNlPVbFdG5DunaEltShWqjREEMumqEDGOwLBdeTFvJNI7lYsgG3u04dcSA==","signatures":[{"sig":"MEUCIB/iw3Gyoh+iK4dT50EcnCsJRaL6oN8kM+XavEKd3OebAiEAvog3//eolX8FhWbNhVrEJa1aPq0+qFCDxv72gPWE/N8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDo7+i3npYztqRWqZWDX01Rsl2td1tH6Yu1pElpye03UAIhAIdpooMGcMAecxL9kEoaLrxGv9L1gW9oF8T3WcQy+D9I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4910470},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.24.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.24.tgz","_integrity":"sha512-1okcpDet07RX9U8BD8Fs2muSVyTfqNlPVbFdG5DunaEltShWqjREEMumqEDGOwLBdeTFvJNI7lYsgG3u04dcSA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.24_1790264638925_0.9128498187026228","host":"s3://npm-registry-packages-npm-production"}},"1.6.26":{"name":"@creeperhost/modlens-mcp","version":"1.6.26","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.26","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"2dfa585d083b0cc158558af27aa2c3c1749ed1e5","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.26.tgz","fileCount":482,"integrity":"sha512-WDPwshvKC5/5vXsnJDLh0TfMCFL/abArFbUPML2225jDxvUGI5UxLdYFqWG0xMBih0g8CKXGyyhDjHd+j4L8vg==","signatures":[{"sig":"MEQCIFsavDvJoS3VayA7EUuwbHIm1ZS+V9QQW/UAcsydaHkxAiB9U6Te9U+2qkibA6dz3nfBMWZ8srwf8Wi2aINSXjFaLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBHIgd+Hzmc814IGOOz08ofh7hTB4mzT8zg3FO0ytTU8AiBhYu1KsyjDnatg0vCL/REwv5FHEyYUg6HMtdt6VB3Rcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5123076},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.26.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","test:runtime:glfw":"node scripts/test-runtime-glfw.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:legacy":"node scripts/test-runtime-legacy.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs","test:runtime:lwjgl2-real":"node scripts/test-runtime-lwjgl2-real.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.26.tgz","_integrity":"sha512-WDPwshvKC5/5vXsnJDLh0TfMCFL/abArFbUPML2225jDxvUGI5UxLdYFqWG0xMBih0g8CKXGyyhDjHd+j4L8vg==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.26_1790275884585_0.7220021503085647","host":"s3://npm-registry-packages-npm-production"}},"1.6.27":{"name":"@creeperhost/modlens-mcp","version":"1.6.27","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.27","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"63bbb81855a8a94bddeb1f0c25376d01e66e0071","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.27.tgz","fileCount":482,"integrity":"sha512-dsGISxoB71zgDi2cvTjYmbFLUjdq6SfACkpt3SsorM/vEltwF2TYNiLELsdHr6/uhwh2cpcc/wHwAD5X5Jznfw==","signatures":[{"sig":"MEQCIF7TrezXe03l8eP/GIBl6bqS6CNMQLP+E3Ks0HUYrhGQAiBYvBaw9XDnuFZbfBJls54yXRVzId7RWd/0VFUCN9eXlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC2bAT9rNwp3KLJXPf19bOScmcUMxNr0zem63HuVzxzAAIhAIfMNnxdRrthoV+EOhYIpBbMYDt24awcZXjSjmpyL0kR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5131167},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.27.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","test:runtime:glfw":"node scripts/test-runtime-glfw.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:legacy":"node scripts/test-runtime-legacy.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs","test:runtime:lwjgl2-real":"node scripts/test-runtime-lwjgl2-real.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.27.tgz","_integrity":"sha512-dsGISxoB71zgDi2cvTjYmbFLUjdq6SfACkpt3SsorM/vEltwF2TYNiLELsdHr6/uhwh2cpcc/wHwAD5X5Jznfw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.27_1790332832970_0.6241670242581157","host":"s3://npm-registry-packages-npm-production"}},"1.6.28":{"name":"@creeperhost/modlens-mcp","version":"1.6.28","license":"MIT","_id":"@creeperhost/modlens-mcp@1.6.28","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"bin":{"modlens-mcp":"dist/launcher.js"},"dist":{"shasum":"3b02af5229c58c110c80b36a53e78be45d9cd702","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.28.tgz","fileCount":486,"integrity":"sha512-rCY6hJdyasnzZ1By0eiJ9QyGiHQedWLyjYa+e7AZvacSPbznXWs+YIqHf6Tx1LMiUrobI7FoMONmVV/NHAMWkw==","signatures":[{"sig":"MEYCIQDdxDpo6ACOc8UCTS0jOOgN6uKFoeTgWdz125iMlWnLbAIhAOhGMYdx4E2FRRHymSdnaGcQVqjFcMtqrxIK4K5cxEYg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDYalr1Gi6n3+XKhxi7WDHjpSLOpfAOG9LfcFdsdaxWsgIgdSPAEGsoPSraRUMfWN0O7hyYCM10yUYvxw+nXnEvJ1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5181814},"main":"dist/server.js","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.28.tgz","types":"./dist/server.d.ts","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","test:runtime:glfw":"node scripts/test-runtime-glfw.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:legacy":"node scripts/test-runtime-legacy.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs","test:runtime:lwjgl2-real":"node scripts/test-runtime-lwjgl2-real.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.28.tgz","_integrity":"sha512-rCY6hJdyasnzZ1By0eiJ9QyGiHQedWLyjYa+e7AZvacSPbznXWs+YIqHf6Tx1LMiUrobI7FoMONmVV/NHAMWkw==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modlens-mcp_1.6.28_1790332849622_0.6927932056028763","host":"s3://npm-registry-packages-npm-production"}},"1.6.29":{"_id":"@creeperhost/modlens-mcp@1.6.29","bin":{"modlens-mcp":"dist/launcher.js"},"bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"dist":{"shasum":"3c17fcd0c808f6bd0776452b7e4c4dbf7267c0e4","tarball":"https://registry.npmjs.org/@creeperhost/modlens-mcp/-/modlens-mcp-1.6.29.tgz","fileCount":486,"integrity":"sha512-7qYbMAIn1e27D2401CcuGmxH80UfCy/XeKhEuFrjnJ+jvkiQSUEyOTsMzCSciZQxLVJWCwlBCYTojSeb7aCmNA==","signatures":[{"sig":"MEYCIQDPE53bMKqS86Pgi2v5vHOWoM+qgD1GszIp1YqX5r70awIhAKA1U+K+JjVDw78rxNLjFmNpBfU8BVHNNej/GkWG3nfu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGNaiFZeWWHAa70nrmnm4vk82NeY5CkvP8x/CpeZ0uDEAiEAwSBRJ1WetHEm5qWR4/VXVHhUKtNjUs948/vkFd4chRg="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@creeperhost%2fmodlens-mcp@1.6.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5209838},"main":"dist/server.js","name":"@creeperhost/modlens-mcp","type":"module","_from":"file:dist-pack/creeperhost-modlens-mcp-1.6.29.tgz","types":"./dist/server.d.ts","license":"MIT","scripts":{"dev":"tsc --watch","test":"vitest run","build":"npm run db:generate:sqlite && tsc && node scripts/build-template-db.mjs","setup":"npm run build && node dist/setup.js","start":"node dist/server.js","update":"git pull && npm install && npm run build && node scripts/post-update.mjs","db:push":"prisma db push","db:setup":"prisma migrate deploy && node scripts/create-fts-index.mjs && node scripts/migrate-mod-source-files.mjs","db:backup":"node scripts/backup.mjs","db:studio":"prisma studio","db:vector":"node scripts/enable-pgvector.mjs","db:migrate":"prisma migrate dev","test:watch":"vitest","build:agent":"node scripts/build-runtime-agent.mjs","db:generate":"prisma generate","postinstall":"prisma generate","test:package":"node scripts/test-package.mjs","db:push:pglite":"prisma db push","db:push:sqlite":"prisma db push --schema prisma/backends/schema.sqlite.prisma","db:vector:pglite":"node scripts/enable-pgvector.mjs","db:vector:sqlite":"node scripts/enable-sqlite-vec.mjs","test:hosted:oauth":"node scripts/test-hosted-oauth.mjs","test:primers:live":"node scripts/test-primers-live.mjs","test:project:http":"node scripts/test-project-http.mjs","test:runtime:glfw":"node scripts/test-runtime-glfw.mjs","db:generate:sqlite":"prisma generate --schema prisma/backends/schema.sqlite.prisma","test:minecraft:eras":"node scripts/test-minecraft-eras.mjs","test:project:gradle":"node scripts/test-project-gradle.mjs","test:runtime:legacy":"node scripts/test-runtime-legacy.mjs","test:runtime:native":"node scripts/test-runtime-native.mjs","test:runtime:lwjgl2-real":"node scripts/test-runtime-lwjgl2-real.mjs"},"version":"1.6.29","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d26d152-34d5-4127-a834-c459326eb11b"}},"homepage":"https://github.com/CreeperHost/modlens-mcp#readme","_resolved":"/home/runner/work/modlens-mcp/modlens-mcp/dist-pack/creeperhost-modlens-mcp-1.6.29.tgz","_integrity":"sha512-7qYbMAIn1e27D2401CcuGmxH80UfCy/XeKhEuFrjnJ+jvkiQSUEyOTsMzCSciZQxLVJWCwlBCYTojSeb7aCmNA==","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"_npmVersion":"12.1.0","description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","directories":{},"maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","prisma":"^6.0.0","adm-zip":"^0.5.16","turndown":"^7.2.4","smol-toml":"^1.6.1","@clack/prompts":"^1.4.0","@prisma/client":"^6.0.0","better-sqlite3":"^12.11.1","turndown-plugin-gfm":"^1.0.2","@modelcontextprotocol/sdk":"^1.10.0","@prisma/adapter-better-sqlite3":"7.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.6.0","@types/node":"^22.0.0","@types/adm-zip":"^0.5.7","@types/turndown":"^5.0.6","@types/better-sqlite3":"^7.0.0"},"optionalDependencies":{"sqlite-vec":"^0.1.0","@electric-sql/pglite":"^0.2.0","@prisma/adapter-pglite":"^6.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/modlens-mcp_1.6.29_1790343414714_0.6253929310244191"}}},"time":{"created":"2026-06-22T22:04:15.973Z","modified":"2026-09-25T13:36:55.163Z","1.6.0":"2026-06-22T22:04:16.320Z","1.6.1":"2026-06-22T22:48:11.150Z","1.6.4":"2026-06-23T18:53:29.734Z","1.6.5":"2026-06-23T19:10:25.860Z","1.6.6":"2026-06-25T15:49:13.280Z","1.6.7":"2026-06-25T17:10:41.156Z","1.6.8":"2026-06-25T19:14:33.149Z","1.6.9":"2026-06-25T19:45:32.933Z","1.6.10":"2026-06-25T20:16:42.120Z","1.6.11":"2026-06-25T21:09:25.715Z","1.6.12":"2026-06-26T12:29:07.608Z","1.6.13":"2026-06-26T17:45:04.460Z","1.6.14":"2026-07-06T20:58:58.953Z","1.6.15":"2026-07-07T01:54:30.300Z","1.6.16":"2026-07-07T02:44:33.096Z","1.6.17":"2026-07-07T03:06:27.147Z","1.6.18":"2026-09-05T13:36:33.101Z","1.6.19":"2026-09-13T21:34:47.883Z","1.6.20":"2026-09-14T20:27:19.748Z","1.6.21":"2026-09-23T15:55:39.269Z","1.6.22":"2026-09-24T14:34:23.677Z","1.6.23":"2026-09-24T15:39:50.660Z","1.6.24":"2026-09-24T15:43:59.038Z","1.6.26":"2026-09-24T18:51:24.711Z","1.6.27":"2026-09-25T10:40:33.145Z","1.6.28":"2026-09-25T10:40:49.816Z","1.6.29":"2026-09-25T13:36:54.843Z"},"bugs":{"url":"https://github.com/CreeperHost/modlens-mcp/issues"},"license":"MIT","homepage":"https://github.com/CreeperHost/modlens-mcp#readme","repository":{"url":"git+https://github.com/CreeperHost/modlens-mcp.git","type":"git"},"description":"MCP server for browsing, decompiling, and analyzing Minecraft mod JARs","maintainers":[{"name":"cloudypsp","email":"npm@cloudhunter.co.uk"}],"readme":"# modlens-mcp\n\nMCP server and CLI for browsing, decompiling, and analyzing Minecraft mod JARs.\n\nStore mod metadata, class indexes, mixin targets, AT/AW entries, and decompiled source in a local database — **embedded SQLite by default** (zero setup), or PostgreSQL/PGlite if you want them. Query everything via AI (MCP) or command line (CLI).\n\n## Optional live development client\n\nThe `runtime` MCP tool can prepare and launch a Minecraft development client,\ndetect IntelliJ launches, monitor JVM failures and memory pressure, capture\nscreenshots, and control game input. It uses SDL on Minecraft 26.3, GLFW on\n1.13–1.21, and LWJGL2 on 1.7.10–1.12.2. Ask the AI\nto call `runtime` with `action:\"help\"` or set it up\nfor your mod project. With remote MCP, Codex runs the local `--runtime` helper;\nwith local stdio MCP, the tools execute directly. No second MCP connection is needed.\nSee [runtime setup, examples, and compatibility limits](RUNTIME.md).\n\n## Reporting an issue from your coding agent\n\nAsk your agent to **report a ModLens issue on GitHub**. The `report_issue` MCP tool\nworks locally and remotely: `action:\"help\"` explains the workflow, and\n`action:\"prepare\"` produces a draft from a title, summary, reproduction steps,\nexpected/actual behavior, environment and an optional sanitized diagnostic excerpt.\nIt includes the ModLens server version automatically.\n\nThe tool directs the agent to check for duplicates and submit to\n[CreeperHost/modlens-mcp](https://github.com/CreeperHost/modlens-mcp/issues) using\nits existing GitHub connector or `gh issue create --body-file`. Without GitHub\naccess, it returns a draft and a manual submission link. ModLens needs no GitHub\ncredentials and does not publish the report itself; `executed:false` means only\nthe draft was prepared. Remove credentials, private source and personal details\nbefore supplying diagnostic excerpts. Reports are submitted when the user requests\nit, rather than automatically for every error.\n\n## Installation\n\n### Option A — npx (recommended, no clone required)\n\n```bash\nnpx @creeperhost/modlens-mcp\n```\n\nOn first run it works with **zero configuration** — an embedded SQLite database is created automatically at `~/.modlens/data/modlens.db` (no Docker, no external services). Settings are stored in `~/.modlens/.env` and survive updates.\n\nAdd it to your MCP client config to start using it:\n```json\n{\n  \"mcpServers\": {\n    \"modlens\": { \"command\": \"npx\", \"args\": [\"-y\", \"@creeperhost/modlens-mcp\"] }\n  }\n}\n```\n\n**Optional — switch backends or enable semantic search:**\n```bash\nnpx @creeperhost/modlens-mcp --setup\n```\nThe setup wizard lets you move to PostgreSQL/PGlite, configure Ollama for semantic search, and auto-write your MCP client config. Re-run it any time to reconfigure.\n\n**Update to the latest version:**\n```bash\nnpx @creeperhost/modlens-mcp@latest --setup\n```\nThis pins the new version in your MCP client config. Your database and settings in `~/.modlens/` are untouched.\n\n---\n\n### Option B — git clone (for contributors / advanced users)\n\n```bash\ngit clone https://github.com/CreeperHost/modlens-mcp\ncd modlens-mcp\nnpm install\nnpm run setup   # interactive setup wizard\nnpm run start   # start the server\n```\n\n---\n\n## Gradle project environments\n\nModLens can import the **actual compile classpath** of a Gradle project. The ModDevGradle adapter also exports the matching prepared Minecraft sources and hashes of the AT files used by its artifact task. This lets the AI see project-specific access changes, loader patches and mapped names.\n\nImports are private, immutable snapshots, separate from the shared vanilla/mod caches and database. Re-export and import after changing ATs, dependencies or mappings. The returned `environmentId` selects the new snapshot; earlier IDs still describe their original inputs. This is compile-time context, not a simulation of runtime mixins/coremods.\n\n### Export from Gradle\n\nIn a checkout, run your mod project's wrapper with the supplied init script:\n\n```bash\n./gradlew -I /path/to/modlens-mcp/scripts/gradle/modlens.init.gradle :modlensExport\n```\n\nFor an installed package, locate its script first:\n\n```bash\nnpx @creeperhost/modlens-mcp --gradle-init-script\n# Pass the printed path to your project's ./gradlew -I command.\n```\n\nOn Windows, use `gradlew.bat -I \"H:\\Git\\modlens-mcp\\scripts\\gradle\\modlens.init.gradle\" :modlensExport`.\n\nThe task produces `build/modlens/main/environment.zip` and creates a persistent private key at `.gradle/modlens/project-key.txt` in the selected project. The key is not included in the bundle or printed. Keep it out of source control and share it only with clients that should access this project.\n\nUse `:subproject:modlensExport` for a module, and `-PmodlensSourceSet=client` to select a different source set. The task runs the classpath's prerequisite tasks, including Minecraft artifact preparation, without launching the game. Referenced project/source-set outputs may need compilation. It does not support Gradle's configuration cache; use `--no-configuration-cache` if necessary.\n\nSupported adapter: **ModDevGradle 2.x**, exercised with 2.0.141 / NeoForge 21.1.209 / Minecraft 1.21.1 and Gradle 8.14. Other Java projects can export their resolved compile classpath, including directory dependencies. Automatic source discovery for ForgeGradle/NeoGradle/Loom is not implemented; absent supplied sources, individual classes are decompiled from the exported binaries on demand. Do not interpret generic exports as proof that runtime-only transformations have been applied.\n\nOptional metadata overrides: `-PmodlensMinecraftVersion=...`, `-PmodlensMappings=...`. The exporter also reads the common `minecraft_version`, `neo_version` and `forge_version` properties. It exports artifact names/content hashes and selected version metadata, not the project's entire Gradle configuration, repository credentials or absolute dependency paths.\n\n### Import locally or remotely\n\nLocal import and query examples:\n\n```bash\nnpx @creeperhost/modlens-mcp --project import-local build/modlens/main/environment.zip --key-file=.gradle/modlens/project-key.txt\nnpx @creeperhost/modlens-mcp --project list --key-file=.gradle/modlens/project-key.txt\nnpx @creeperhost/modlens-mcp --project members --environment-id=<returned-id> --class-name=net.minecraft.world.level.Level --key-file=.gradle/modlens/project-key.txt\n```\n\nFrom a checkout, the equivalent is `node dist/cli.js project ...`.\n\nFor a remote server, run the uploader **on the developer's machine**, where the bundle exists:\n\n```bash\nnpx @creeperhost/modlens-mcp --project-upload https://modlens.example/mcp build/modlens/main/environment.zip .gradle/modlens/project-key.txt\n# Checkout equivalent:\nnode /path/to/modlens-mcp/scripts/project-upload.mjs https://modlens.example/mcp build/modlens/main/environment.zip .gradle/modlens/project-key.txt\n```\n\nSet `MODLENS_AUTH_TOKEN` if the deployment's reverse proxy requires a bearer token. Remote uploads require HTTPS; loopback HTTP is supported for local testing. The uploader transfers 1 MiB chunks, verifies the full bundle hash, retries acknowledged chunks safely and prints the imported snapshot metadata. The remote server never runs Gradle or needs the developer's local paths. Host-local import is disabled when `MCP_PORT` is set.\n\nConfigure the AI to use the MCP **`project` tool** with `projectKey` (the key file's contents) and `environmentId`. Use `project` source/member/search queries for this environment; the existing `mc_source` and `mod` tools continue to describe their shared inputs. Key possession grants access to that project's snapshots; use the deployment's normal authentication to control access to the service and its upload resources.\n\n| Action | Additional arguments | Result |\n| --- | --- | --- |\n| `list` | none | Snapshots belonging to this project key only |\n| `info` | `environmentId` | Versions, artifacts, counts and snapshot provenance |\n| `classes` | `environmentId`, optional `query`, `offset`, `limit` | Classes in compile classpath order of precedence |\n| `source` | `environmentId`, `className`, optional `startLine`, `maxLines` | Supplied Gradle source or an on-demand binary decompile |\n| `members` / `bytecode` | `environmentId`, `className` | Inspection of the project's prepared binary |\n| `search` | `environmentId`, `query`, optional `limit` | Literal, case-insensitive search of supplied sources and cached decompiles |\n| `import_local` | `bundlePath` | Import an absolute host-local ZIP path (stdio only) |\n| `upload_begin` | `size`, `sha256` | Upload ID and chunk size |\n| `upload_chunk` | `uploadId`, `offset`, `data` | Next offset; `data` is base64 |\n| `upload_finish` / `upload_abort` | `uploadId` | Commit a complete upload or remove upload state |\n\nSearch reports its coverage: a missing match does not prove absence from binaries without sources. Duplicate classes follow the first compile classpath entry; sources from shadowed dependencies are excluded. Multi-release JARs use the compile Java release, with stale base sources excluded when a versioned class overrides them. Limits are 512 MiB per bundle, 1 GiB expanded content, 2 MiB per Java source, and four unfinished uploads per project. Abandoned uploads expire after 24 hours and are cleaned up when the next upload begins. Snapshot files live under `MODLENS_CACHE_ROOT/projects` and work with all database backends.\n\nContributor validation: `npm run test:project:http` exercises the real uploader and HTTP transport. Set `JAVA_HOME` and `MODLENS_TEST_GRADLE_HOME`, then run `npm run test:project:gradle` for a Java dependency fixture, or `npm run test:project:gradle -- moddev` for a real AT before/after check. The Gradle tests use disposable projects and may download build dependencies; they never launch Minecraft.\n\nMinecraft compatibility validation: `npm run test:minecraft:eras` exercises the local MCP server across Beta 1.7.3 through 26.1.2, plus real legacy Forge, Fabric and NeoForge mods, using temporary databases and caches. See [TESTING.md](TESTING.md) for the version matrix, offline format coverage and upstream gaps.\n\n## Prerequisites\n\n| Requirement | Notes |\n|-------------|-------|\n| **Node.js 22+** | Runtime for the MCP server |\n| **Docker** | *Optional* — only for the PostgreSQL backend (`docker compose`). Not needed for the default embedded SQLite. |\n| **JDK 21+** | Required for decompilation (Vineflower) and bytecode analysis (`javap`). Eclipse Adoptium recommended — auto-discovered at `C:/Program Files/Eclipse Adoptium`, `C:/Program Files/Java`, `C:/Program Files/Microsoft`, or via `JAVA_HOME` |\n| **Vineflower** | Decompiler JAR — **auto-downloaded** from Maven Central on first use |\n| **mcsrc-indexer.jar** | JAR bytecode indexer — **auto-downloaded** from the modlens-mcp GitHub release on first use |\n\n**Optional environment variables:**\n\n| Variable | Purpose |\n|----------|---------|\n| `CURSEFORGE_API_KEY` | Optional direct fingerprint lookup and authenticated CurseForge downloads; normal metadata/sync uses modpacks.ch |\n| `MODRINTH_TOKEN` | Modrinth API — increases rate limit for batch operations |\n| `JAVA_HOME` | Override Java discovery (falls back to PATH if not set) |\n\n---\n\n## Docker — PostgreSQL Setup\n\n> Only needed if you choose the **PostgreSQL** backend. The default embedded SQLite backend requires none of this.\n\nThe included `docker-compose.yml` starts a PostgreSQL 16 container on port **5433**.\n\n```bash\n# Start (detached)\ndocker compose up -d\n\n# Check it's healthy\ndocker compose ps\n\n# Stop (data is preserved in the named volume)\ndocker compose down\n\n# Stop and wipe all data\ndocker compose down -v\n```\n\n> **⚠ Dev credentials warning:** `docker-compose.yml` uses `modlens:modlens` as the username/password. This is fine for a local dev tool that only binds to `localhost:5433`. If you expose the port externally or run this on a shared machine, change `POSTGRES_USER`, `POSTGRES_PASSWORD`, and `POSTGRES_DB` in `docker-compose.yml` **and** update your `.env` accordingly.\n\n---\n\n## Setup\n\n```bash\ngit clone https://github.com/CreeperHost/modlens-mcp\ncd modlens-mcp\nnpm install\nnpm run build\n\n# Interactive setup wizard — handles Docker, Ollama, schema, MCP config:\nnpm run setup\n```\n\nThe wizard will ask about semantic search (Ollama), start the containers, apply the schema, optionally seed docs/primers, and write your MCP client config. Run it again any time to reconfigure.\n\n**Manual setup (if you prefer):**\n\n```bash\n# 1. Start PostgreSQL\ndocker compose up -d\n\n# 2. Create .env\necho DATABASE_URL=postgresql://modlens:modlens@localhost:5433/modlens > .env\n# Optional — add a CurseForge key for sync_curseforge:\n# echo CURSEFORGE_API_KEY=<your key> >> .env\n# Optional — add a Modrinth token for higher rate limits:\n# echo MODRINTH_TOKEN=<your token> >> .env\n\n# 3. Apply the Prisma schema to the DB\nnpx prisma db push\n\n# 4. Build\nnpm run build\n```\n\n> **Note:** Both Vineflower and mcsrc-indexer.jar are downloaded automatically to `~/.modlens-cache/tools/` on first use — no manual steps needed.\n\n---\n\n## Semantic Search (optional)\n\nSemantic (vector) search lets you find docs, primers, and MC source by meaning rather than keywords — e.g. *\"how do I attach data to a block?\"* instead of the exact class name.\n\n**Requirements:** [Ollama](https://ollama.com) installed and running locally.\n\n```bash\n# 1. Install Ollama and pull the embedding model\nollama pull nomic-embed-text\n\n# 2. Enable pgvector in your Postgres container and add embedding columns\nnpm run db:vector\n\n# 3. Add Ollama config to .env (optional — http://localhost:11434 is the default)\necho OLLAMA_URL=http://localhost:11434 >> .env\n\n# 4. Embed all existing docs and primers\nnode dist/cli.js backfill-embeddings\n\n# Embed a specific MC source version (large — takes a while)\nnode dist/cli.js backfill-embeddings --type source --version 26.1.2\n```\n\nAfter this, the `docs` and `primers` MCP tools provide `semantic_search`, and `mc_source` provides `search_semantic` and `index_semantic`. Semantic search requires a reachable Ollama service and the configured embedding model. Keyword search remains available separately. SQLite uses the bundled `sqlite-vec` dependency; `db:vector` above is for PostgreSQL.\n\n> **Note:** The `npm run db:vector` script is safe to re-run. It creates the `pgvector` extension and `embedding` columns using `IF NOT EXISTS` guards.\n\n## Data sources and shared bundles\n\nModLens uses [modpacks.ch](https://modpacks.ch/api/openapi.json) for supported mod and pack searches, provider records, release histories, hash lookups, parsed pack manifests and loader versions. Maven artifacts and metadata come from [CreeperHost Maven](https://maven.creeperhost.net/). Download URLs supplied by modpacks.ch may point to the original provider's CDN. An API failure or missing result does not silently switch to another metadata service.\n\nWhen a mod file has no loader label, loader-filtered searches, version listings and update checks automatically download and inspect its JAR. Existing modpacks.ch labels take precedence. Inspection supports Forge/FML, Fabric, Quilt and NeoForge, including multiple loader declarations in one JAR; unknown or mismatched loaders are excluded. Recovered labels report `loaderSource: \"jar\"`. The first lookup can download several candidate files; subsequent queries and ingestion reuse the artifact cache. `mod_info` defaults to the latest 20 matches and reports `versionLimit`; increase `limit` (CLI: `--limit`) for more history. Download, checksum and unreadable-JAR failures are reported as errors.\n\nExisting sources remain for capabilities these services do not cover: Mojang manifests, game files and official mappings; mcmeta's extracted data and history; RetroMCP legacy mappings; Adoptium runtime provisioning; the ModLens indexer release; metadata-provided source repositories; and the selected GitHub graph and embedding registries. Existing local Java installations are preferred.\n\n`mod graph_build` can build a class and inheritance graph directly from the mod JAR, without Graphify or an AI service. Set `backend=ast-only` to select this mode explicitly. `graph_enrich_next` and `graph_enrich_submit` add relationships supplied by the client. Automatic semantic extraction still needs a configured Graphify backend.\n\n`graph_export` and `embed_export` produce portable gzip bundles. Pass the resulting `bundlePath` to `graph_submit` or `embed_submit` to propose the bundle and its index entry together in a draft pull request. The defaults are [Mattabase/modlens-graphs](https://github.com/Mattabase/modlens-graphs) and [Mattabase/modlens-embeddings](https://github.com/Mattabase/modlens-embeddings). Submissions require `MODLENS_REGISTRY_TOKEN` or `GITHUB_TOKEN` with access to write the branch and open the pull request; a personal fork is used when the account cannot push to the registry. Submission does not merge the pull request.\n\nCustom registries use `MODLENS_GRAPH_REGISTRY_URL` or `MODLENS_EMBED_REGISTRY_URL`. For submission, the corresponding `MODLENS_GRAPH_REGISTRY_REPO` / `MODLENS_EMBED_REGISTRY_REPO`, `_BRANCH` and `_INDEX_PATH` settings override the destination inferred from a GitHub raw-content URL.\n\n---\n\n## MCP Configuration\n\nThe server uses stdio transport — it works with any MCP client (VS Code Copilot, Claude Desktop, Claude CLI, Cursor, etc.) as long as Docker is running and `DATABASE_URL` is set.\n\n### VS Code Copilot (`mcp.json`)\n\n```json\n{\n  \"servers\": {\n    \"modlens\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"/path/to/modlens-mcp/dist/server.js\"],\n      \"env\": {\n        \"DATABASE_URL\": \"postgresql://modlens:modlens@localhost:5433/modlens\"\n      }\n    }\n  }\n}\n```\n\n### Claude Desktop (`claude_desktop_config.json`)\n\nLocation: `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)\n\n```json\n{\n  \"mcpServers\": {\n    \"modlens\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/modlens-mcp/dist/server.js\"],\n      \"env\": {\n        \"DATABASE_URL\": \"postgresql://modlens:modlens@localhost:5433/modlens\"\n      }\n    }\n  }\n}\n```\n\n### Claude CLI\n\n```bash\nclaude mcp add modlens node /path/to/modlens-mcp/dist/server.js \\\n  --env DATABASE_URL=postgresql://modlens:modlens@localhost:5433/modlens\n```\n\nOr manually edit `~/.claude/mcp.json` (same format as VS Code above).\n\n> **Important:** Replace `/path/to/modlens-mcp` with the actual absolute path where you cloned the repo. On Windows use forward slashes or escaped backslashes, e.g. `C:/Users/you/modlens-mcp/dist/server.js`.\n\n---\n\n## Updating\n\n```bash\nnpm run update\n```\n\nThis runs `git pull`, reinstalls dependencies, rebuilds, and applies any new DB migrations — all in one command. After it finishes, **restart your MCP client** (reload VS Code window, restart Claude Desktop, etc.) to pick up the new server build.\n\n> **First-time update (before `npm run update` existed)?** Run the steps manually once:\n> ```bash\n> git pull && npm install && npm run build && node scripts/post-update.mjs\n> ```\n> After this you'll have `npm run update` available for all future updates.\n\n---\n\n### 💡 Token overhead — disable tools you don't need\n\nModLens ships **22 tools**. Every tool's name, description, and parameter schema is sent to the model on **every request**, whether you use that tool or not. This adds a fixed overhead of ~3,400 tokens per turn.\n\n**Recommendation:** disable any tool groups you don't regularly use. Common profiles:\n\n| If you primarily… | Keep | Disable |\n|---|---|---|\n| Browse vanilla MC source | `mc_source`, `mc_data`, `mc_files`, `mc_registry`, `mappings` | `platform`, `mixin_scan`, `gradle`, `kubejs`, `pack_tools` |\n| Analyze a modpack | `mod`, `mod_mixins`, `mixin_scan`, `reports`, `pack_tools` | `mc_files`, `mappings`, `docs`, `primers`, `gradle` |\n| Mod development | `mod`, `mod_bytecode`, `mc_source`, `mappings`, `docs`, `primers` | `pack_tools`, `kubejs`, `platform`, `mixin_scan` |\n\n**VS Code:** In `mcp.json` you can disable individual tools using the `disabled` list under the server entry:\n```json\n{\n  \"servers\": {\n    \"modlens\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"/path/to/modlens-mcp/dist/server.js\"],\n      \"env\": { \"DATABASE_URL\": \"postgresql://modlens:modlens@localhost:5433/modlens\" },\n      \"disabled\": [\"kubejs\", \"platform\", \"gradle\", \"docs\", \"primers\"]\n    }\n  }\n}\n```\n\n**Claude Desktop / CLI:** Toggle tools off in the MCP settings UI, or maintain separate config files for different workflows.\n\n---\n\n## CLI\n\nAll MCP tools are available from the command line:\n\n```\nnode dist/cli.js <command> [args] [--flags]\n```\n\nRun without arguments (or `--help`) to print the full command list. Every MCP tool action has a CLI equivalent.\n\n### Quick Reference\n\n**Database & Catalog**\n\n| Command | Description |\n|---------|-------------|\n| `stats` | DB statistics |\n| `list` | List all mods |\n| `get <modId>` | Get mod metadata |\n| `search <query>` | Search mods |\n| `deps <modId>` | List dependencies |\n| `dep-graph` | Full dependency graph |\n| `version-conflicts` | Duplicate modIds + unsatisfied deps |\n| `source-urls [query]` | List GitHub/GitLab source URLs |\n\n**Ingest**\n\n| Command | Description |\n|---------|-------------|\n| `ingest <jarPath>` | Ingest a mod JAR (WSL paths auto-converted) |\n| `ingest-neoforge <version>` | Download + ingest NeoForge |\n| `ingest-fabric-api <version>` | Download + ingest Fabric API |\n| `batch-ingest <dir>` | Ingest all JARs in a directory |\n| `batch-decompile` | Decompile all un-decompiled mods |\n| `batch-sync` | Bulk sync from Modrinth/CurseForge |\n| `reindex` | Index class names for un-indexed mods |\n\n**Decompile & Source**\n\n| Command | Description |\n|---------|-------------|\n| `decompile <dbId>` | Decompile entire mod JAR |\n| `decompile-status <dbId>` | Poll decompilation progress |\n| `decompile-class <dbId> <class>` | Decompile a single class |\n| `source <dbId> [path]` | Browse decompiled source |\n| `search-source <query>` | Search decompiled source |\n| `get-paths <dbId>` | JAR + decomp paths for native grep |\n| `index-fts <dbId>` | Index mod source for BM25 search (no Ollama) |\n| `search-indexed <dbId> <query>` | Fast BM25 FTS over mod source |\n\n**Bytecode Analysis**\n\n| Command | Description |\n|---------|-------------|\n| `search-class <dbId> <query>` | Search for a class by name |\n| `members <dbId> <class>` | List methods and fields |\n| `bytecode <dbId> <class>` | Raw javap bytecode |\n| `refs <dbId> <target>` | Find references |\n| `inheritance <dbId> <class>` | Inheritance chain |\n| `diff <dbIdA> <dbIdB>` | Compare two mod versions |\n| `diff-detailed <dbIdA> <dbIdB>` | AST-level diff with breaking-change flags |\n| `cross-refs <target>` | Cross-mod references to a target |\n| `find-implementors <target>` | Classes implementing an interface |\n| `scan-registrations <dbId>` | Registry object registrations |\n| `annotated-by <annotation>` | Classes with a given annotation |\n| `event-listeners <event>` | Event listener registrations |\n| `optional-integrations <dbId>` | Soft dependency integrations |\n| `network-payloads <dbId>` | Network packet types |\n| `config-schema <dbId>` | Configuration class schemas |\n\n**Mixin Analysis**\n\n| Command | Description |\n|---------|-------------|\n| `mixin-targets <modId>` | MC classes this mod injects into |\n| `resolve-mixins <dbId>` | Parse `@Mixin` bytecode → update DB |\n| `mixin-conflicts <targetClass>` | Mods injecting into the same class |\n| `at-entries <dbId>` | Access Transformer entries |\n| `aw-entries <dbId>` | Access Widener entries |\n| `targets-in-package <pkg>` | Mods targeting classes in a package |\n| `at-conflicts` | AT/AW entries conflicting across mods |\n| `batch-resolve-mixins` | Resolve `@Mixin` targets for all mods |\n\n**Mixin Scan (cross-mod matrix)**\n\n| Command | Description |\n|---------|-------------|\n| `mixin-scan list` | List mods with mixins |\n| `mixin-scan conflict-matrix` | Full conflict matrix |\n| `mixin-scan class-detail <class>` | All mixins targeting one MC class |\n| `mixin-scan hotspots` | Most-targeted MC classes |\n| `mixin-scan batch-resolve` | Resolve targets for all mixin mods |\n\n**Platform**\n\n| Command | Description |\n|---------|-------------|\n| `sync-modrinth <dbId>` | Look up on Modrinth |\n| `sync-curseforge <dbId>` | Look up on CurseForge |\n| `check-updates <dbId>` | Check for newer versions |\n| `download-source <dbId>` | Download GitHub/GitLab source |\n\n**Versions**\n\n| Command | Description |\n|---------|-------------|\n| `mc-versions` | List Minecraft versions |\n| `neoforge-versions` | List NeoForge versions |\n| `fabric-api-versions` | List Fabric API versions |\n\n**Vanilla MC Source**\n\n| Command | Description |\n|---------|-------------|\n| `mc-source search-class <ver> <q>` | Find a vanilla class by name |\n| `mc-source get-source <ver> <class>` | Read decompiled source |\n| `mc-source bytecode <ver> <class>` | Raw javap bytecode |\n| `mc-source class-members <ver> <c>` | Methods and fields |\n| `mc-source find-refs <ver> <target>` | References to a target |\n| `mc-source inheritance <ver> <c>` | Inheritance tree |\n| `mc-source diff <verA> <verB>` | High-level class diff |\n| `mc-source diff-detailed <A> <B>` | AST-level method/field diff |\n| `mc-source decompile <ver>` | Decompile MC JAR |\n| `mc-source decompile-status <ver>` | Poll decompilation progress |\n| `mc-source search-code <ver> <q>` | Full-text search over vanilla source |\n| `mc-source index <ver>` | Index vanilla source for BM25 |\n| `mc-source search-indexed <ver> <q>` | BM25 FTS over vanilla source |\n| `mc-source search-events <ver>` | Browse event classes |\n| `mc-source validate-aw <ver> <file>` | Validate an `.accesswidener` file |\n| `mc-source analyze-mixin <ver> <file>` | Analyze a mixin source file |\n| `mc-source search-semantic <ver> <q>` | Semantic search (requires Ollama) |\n| `mc-source get-paths <ver>` | On-disk jar/decomp/index paths |\n\n**Mappings**\n\n| Command | Description |\n|---------|-------------|\n| `mappings find <sym> <ver> <src> <tgt>` | Translate between namespaces |\n| `mappings remap <in> <out> <ver> <mapping>` | Remap a JAR |\n| `mappings parchment <class> <mcVer>` | Parchment parameter docs |\n| `mappings list-parchment <mcVer>` | Available Parchment versions |\n| `mappings parchment-summary <mcVer>` | Parchment coverage stats |\n\n**Documentation & Primers**\n\n| Command | Description |\n|---------|-------------|\n| `docs seed` | Seed built-in docs |\n| `docs get <query>` | Look up by title/class |\n| `docs search <query>` | Keyword search |\n| `docs list` | List all entries |\n| `docs delete <id>` | Delete by ID |\n| `docs semantic-search <query>` | Semantic search (requires Ollama) |\n| `primers seed` | Seed built-in primers |\n| `primers get <id>` | Get by ID |\n| `primers by-version <from> <to>` | Guides for a version range |\n| `primers search <query>` | Keyword search |\n| `primers list` | List all primers |\n| `primers delete <id>` | Delete by ID |\n| `primers semantic-search <query>` | Semantic search (requires Ollama) |\n\n**MC Registry / Data / Files**\n\n| Command | Description |\n|---------|-------------|\n| `mc-registry <action>` | blocks, commands, registries, sounds, item-components, registry-entries, mcmeta-versions |\n| `mc-data <action>` | tags, find-tags-for, recipes, get-recipe, biomes, enchantments, lang, model, structures, particles, entity-attributes, and more |\n| `mc-files <action>` | get-data, get-asset, list-files, diff, atlas, raw, compare, changelog |\n\n**Mod JAR & Mod Data**\n\n| Command | Description |\n|---------|-------------|\n| `mod-jar <action> <modId>` | list-files, get-file, lang, sounds, atlas, registry-entries, manifest, list-configs, get-config |\n| `mod-data <action> <modId>` | list, get, diff, trace-item — with type: recipe, loot_table, advancement, model, biome, data_tag, enchantment, and more |\n\n**Mod Tags, Gradle, Reports, Pack Tools**\n\n| Command | Description |\n|---------|-------------|\n| `mod-tags <action>` | index, index-all, namespaces, contributors, expand, mod-list, find-conflicts, search |\n| `gradle <action>` | get-files, search, compare-deps |\n| `report <type>` | mixin-conflicts, tag-conflicts, version-conflicts, mod-overview, gradle-deps, pack-compat, dep-graph, sidedness, mod-complexity, pack-changelog |\n| `pack-tools <action>` | asset-conflicts, vanilla-overrides, sidedness, pack-sidedness, complexity, pack-changelog, data-conflicts |\n\n**KubeJS & Modpacks**\n\n| Command | Description |\n|---------|-------------|\n| `kubejs index <dir>` | Index a kubejs/ scripts directory |\n| `kubejs search <dir> <query>` | Search indexed scripts |\n| `modpacks search <query>` | Search modpacks.ch packs |\n| `modpacks featured` | Featured packs |\n| `modpacks info <packId>` | Pack metadata |\n| `modpacks manifest <packId> <verId>` | Pack manifest |\n| MCP `modpacks_ch action=resolve_pack` | Resolve FTB/CurseForge/Modrinth/Feed The Beast pack names, IDs, version IDs, or version names |\n| MCP `modpacks_ch action=list_versions` | List remote pack versions and optionally mark matches for a short `versionRef` like `7.1` |\n| MCP `modpacks_ch action=ingest_pack` | Resolve metadata through modpacks.ch, then download and ingest the selected pack version |\n| `modpacks list-versions` | Pack version list |\n| `modpacks list-files` | Pack file list |\n| `modpacks mod-info <modId>` | Mod metadata from modpacks.ch (`ftb-mod-info` remains an alias) |\n| `modpacks find-mod` | Find a mod across packs |\n\n**Diagnostics**\n\n| Command | Description |\n|---------|-------------|\n| `crash-log <logPath>` | Analyze a crash log file |\n| `missing-deps` | Find unsatisfied declared dependencies |\n| `compat-check <jarPath>` | Pre-flight compatibility check |\n\n**Semantic Search (requires Ollama)**\n\n| Command | Description |\n|---------|-------------|\n| `backfill-embeddings` | Embed docs + primers |\n| `backfill-embeddings --type=source --version=<ver>` | Embed MC source |\n| `backfill-embeddings --type=mod --db-id=<n>` | Embed mod source |\n\n---\n\n## MCP Tools Reference\n\nAll tool actions have been consolidated into **24 grouped tools** to stay within MCP client tool-count limits. Each tool takes a required `action` parameter that selects the operation, plus optional params specific to that action.\n\n### Tool Index\n\n| # | Tool | Actions | Description |\n|---|------|---------|-------------|\n| 1 | `mod` | 22 | Mod DB, decompile, source, FTS/semantic search |\n| 2 | `mod_bytecode` | 16 | Mod JAR class/bytecode analysis |\n| 3 | `mod_mixins` | 7 | Mixin targets, AT/AW entries, package scan |\n| 4 | `platform` | 5 | Modrinth/CurseForge sync |\n| 5 | `mc_versions` | 5 | MC + loader version listing/ingest |\n| 6 | `mc_source` | 19 | Vanilla MC source, decompile, validate |\n| 7 | `mappings` | 5 | Name mappings + Parchment |\n| 8 | `docs` | 8 | Documentation CRUD + semantic search |\n| 9 | `primers` | 9 | Version migration guides + semantic search |\n| 10 | `mc_registry` | 7 | MC registries, blocks, commands, sounds |\n| 11 | `mc_data` | 23 | Vanilla data browser (tags, recipes, biomes, …) |\n| 12 | `mc_files` | 8 | MC file access via misode/mcmeta |\n| 13 | `mod_jar` | 9 | Mod JAR file browser, lang, sounds, configs |\n| 14 | `mod_data` | list+get × 22 types | Mod structured data (recipes, loot tables, …) |\n| 15 | `mod_tags` | 8 | Cross-mod tag indexing + conflict detection |\n| 16 | `mixin_scan` | 5 | Cross-mod mixin conflict analysis |\n| 17 | `gradle` | 3 | Gradle build file analysis |\n| 18 | `reports` | 10 report types | Markdown report generation |\n| 19 | `pack_tools` | 7 | Modpack asset/data conflict analysis |\n| 20 | `kubejs` | 2 | KubeJS script indexing + search |\n| 21 | `modpacks_ch` | 15 | modpacks.ch / FTB / CurseForge / Modrinth / Feed The Beast pack browsing and ingest |\n| 22 | `analyze_crash_log` | — | Triage crash logs against mod class index |\n| 23 | `find_missing_deps` | — | Find mods with missing declared dependencies |\n| 24 | `check_mod_compat` | — | Pre-flight compatibility check for a candidate JAR |\n\n---\n\n### 1. `mod` — Mod Database, Decompile & Source\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `ingest` | jarPath, skipSource | Add a JAR to the database. Accepts Windows paths (`C:\\mods\\foo.jar`) and WSL paths (`/mnt/c/mods/foo.jar`) |\n| `list` | loader, mcVersion, hasMixins, decompiled, limit | List mods |\n| `get` | modId | Full metadata for a mod |\n| `search` | query, loader, mcVersion, limit | Search by name/description |\n| `stats` | — | DB statistics |\n| `dependencies` | modId, recursive | Dependency list |\n| `dep_graph` | mcVersion | Full requires/requiredBy graph |\n| `version_conflicts` | — | Detect duplicate modIds + unsatisfied deps |\n| `source_urls` | query | GitHub/GitLab URLs from manifests |\n| `decompile` | dbId, force | Bulk decompile JAR via Vineflower (background) |\n| `decompile_status` | dbId | Poll background decompile job |\n| `decompile_class` | modId or dbId, className, sha1? | Resolve the exact JAR and decompile a single class on demand |\n| `source` | dbId, path | Browse or read decompiled source tree |\n| `search_source` | query, dbId?, isRegex, limit | Text/regex search across decompiled source — omit `dbId` to search **all** decompiled mods (results include `modId` + `modVersion`) |\n| `reindex` | dbId? | Re-index class names |\n| `batch_ingest` | directory, skipSource, indexClasses, replace | Ingest all JARs in a directory. `replace=true` deletes any existing DB row for the same `modId` before inserting — keeps DB in sync with disk |\n| `batch_decompile` | — | Decompile all not-yet-decompiled mods with concurrency control |\n| `index_fts` | dbId | Index decompiled mod source into BM25/FTS. Works for all loaders — NeoForge, Fabric, Forge, Quilt. **No Ollama required.** |\n| `search_indexed` | dbId, query, limit? | Fast BM25-ranked FTS search over indexed mod source |\n| `index_semantic` | dbId, batchSize? | Embed decompiled source into pgvector (batched, resumable — requires Ollama). Also populates FTS index as a side-effect. |\n| `search_semantic` | dbId, query, limit? | Semantic source search using Ollama + pgvector (requires Ollama) |\n| `get_paths` | dbId | Return `jarPath`, `decompPath` (null if not yet decompiled), and `cacheRoot` so the agent can grep/search files natively |\n\n### 2. `mod_bytecode` — Mod JAR Class Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `search_class` | dbId, query | Find class by name (CamelCase/prefix/substring) |\n| `class_members` | dbId, className | Methods/fields with mixin targets, AT/AW strings |\n| `bytecode` | dbId, className | Raw `javap` output |\n| `find_refs` | dbId, target | All classes referencing a class/method/field |\n| `inheritance` | dbId, className | Superclass, interfaces, subclasses |\n| `diff` | dbIdA, dbIdB | Added/removed classes between two versions |\n| `find_implementors` | target, modId?, limit | Find mod classes extending/implementing a target across DB |\n\n### 3. `mod_mixins` — Mixin & Access Transformer Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `targets` | modId | MC classes a mod injects into |\n| `resolve` | dbId | Parse `@Mixin` bytecode → update DB |\n| `conflicts` | targetClass | All mods injecting into the same MC class |\n| `at_entries` | dbId | NeoForge/Forge AT entries |\n| `aw_entries` | dbId | Fabric/Quilt AW entries |\n\n### 4. `platform` — Modrinth/CurseForge Sync\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `sync_modrinth` | dbId | Resolve a known project or JAR SHA-1 through modpacks.ch; store project ID and source URL |\n| `sync_curseforge` | dbId | Resolve a known project or JAR SHA-1 through modpacks.ch; no CurseForge API key required |\n| `check_updates` | dbId | Check both platforms for newer version |\n| `batch_sync` | syncModrinth, syncCurseforge, downloadSources, modIdFilter, limit | Bulk sync all unmatched mods |\n| `download_source` | dbId | Download GitHub/GitLab source ZIP |\n\n### 5. `mc_versions` — Loader Version Management\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `list_mc` | type=release\\|snapshot\\|all | MC versions from Mojang Piston Meta |\n| `list_neoforge` | mcVersion, limit | NeoForge versions from Maven |\n| `list_fabric` | mcVersion, limit | Fabric API versions from Modrinth |\n| `ingest_neoforge` | version, skipIndex | Download + ingest a NeoForge JAR |\n| `ingest_fabric` | version, skipIndex | Download + ingest a Fabric API JAR |\n\n### 6. `mc_source` — Vanilla MC Source & Validation\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `search_class` | version, query | Find class by name |\n| `get_source` | version, className, startLine, endLine, maxLines | Read decompiled source locally or for enabled teams; public HTTP prepares a private class index and returns status only |\n| `bytecode` | version, className | Raw `javap` output |\n| `class_members` | version, className | Methods/fields with mixin target strings |\n| `find_refs` | version, target | Classes referencing a target |\n| `inheritance` | version, className | Superclass/interfaces/subclasses |\n| `diff` | versionA, versionB | Added/removed classes between MC versions |\n| `decompile` | version, force | Bulk decompile MC JAR (background) |\n| `decompile_status` | version | Poll bulk decompile job |\n| `search_code` | version, query, searchType, isRegex, limit | Regex/text search across MC source; public HTTP returns file and line only |\n| `source_info` | version, className | Cached class availability and total line count, without source text |\n| `index_status` | version | Full-version source index status, without source text |\n| `index` | version, force | Index decompiled MC into PostgreSQL FTS |\n| `search_indexed` | version, query, limit | Fast FTS search |\n| `search_events` | version, query?, modloader? | Find Event subclasses in decompiled source |\n| `validate_aw` | content, mcVersion | Validate Access Widener against MC JAR |\n| `analyze_mixin` | source, mcVersion | Parse + validate a Mixin class |\n\n### 7. `mappings` — Name Mappings & Parchment\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `find` | symbol, version, sourceNs, targetNs | Translate between namespaces, including version-specific Forge SRG members to Mojmap |\n| `remap` | inputJar, outputJar, version, toMapping | Remap mod JAR using TinyRemapper |\n| `parchment` | className, mcVersion | Community parameter names/javadocs for a class |\n| `list_parchment` | mcVersion | Available Parchment builds |\n| `parchment_summary` | mcVersion | Parchment coverage summary |\n\nFor Forge 1.16–1.20.4 crash names, use `sourceNs=srg`, `targetNs=mojmap`, and the exact Minecraft version. Symbols such as `Mob.m_20183_()`, `f_77313_`, and `net.minecraft.world.level.pathfinder.FlyNodeEvaluator.m_8086_` return a human-readable member name only when MCPConfig and Mojang mappings agree. Results include the JVM descriptor, owner information, version, and mapping sources. Ambiguous or unavailable entries return `found=false` with a note.\n\n### 8. `docs` — Documentation Database\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `ingest` | entries[] | Add/update doc entries |\n| `seed` | — | Populate built-in defaults |\n| `get` | query | Look up by class name or keyword |\n| `search` | query, category, namespace | Full-text search |\n| `list` | category, namespace, tag, limit | List all entries |\n| `delete` | id | Remove by DB id |\n\n### 9. `primers` — Version Migration Guides\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `ingest` | entries[] | Add migration guide entries |\n| `seed` | fetchContent=true | Populate the official Minecraft/Forge/NeoForge primer catalogue and cache missing guide bodies |\n| `get` | id, startLine=1, maxLines=400, fetchContent=true, refresh=false | Read cached Markdown; fetch missing content automatically |\n| `by_version` | fromVersion, toVersion, modloader, includeContent=false, maxChars=60000, cursor, fetchContent=true | Ordered migration steps; optionally bundle their Markdown, including vanilla changes for the selected loader |\n| `search` | query, modloader, fromVersion, toVersion, limit | Full-text search |\n| `list` | modloader, limit | List all primers |\n| `delete` | id | Remove by DB id |\n\nStart with `{\"action\":\"seed\"}` on a fresh database, then use `{\"action\":\"by_version\",\"fromVersion\":\"1.21.1\",\"toVersion\":\"1.21.5\",\"modloader\":\"neoforge\"}`. This returns the vanilla and NeoForge guides for the intervening transitions. Call `{\"action\":\"get\",\"id\":<returned id>}` for each guide, following `nextStartLine` until it is null. Guides retain headings, tables, links and code blocks; pagination does not truncate the cached document. The catalogue contains the steps published upstream, so a result is not a guarantee of coverage for every release or loader.\n\nTo read a whole migration range, request `{\"action\":\"by_version\",\"fromVersion\":\"1.21.1\",\"toVersion\":\"26.1\",\"modloader\":\"neoforge\",\"includeContent\":true}`. The server fetches missing bodies and returns the original Markdown with each guide's ID, title, source URL, loader and version boundaries. Small ranges fit in one response. Larger ranges return `nextCursor`; repeat the same request with `cursor` set to that value until it is null. `count` is the total number of matching guides; `primers` contains the current page. Existing calls without `includeContent` retain their metadata-only response.\n\nBundled pages share a `maxChars` text budget (1,000–200,000, default 60,000) and contain at most 20 guides. Long guides may span pages: concatenate `content` chunks for the same ID directly, without inserting separators. `startOffset`, `endOffset` (exclusive), `totalChars` and `contentChars` count UTF-16 code units; pagination preserves Unicode characters. Each guide reports `contentStatus` and `truncated`; the outer `truncated` reports whether another page remains. Cursors detect changes to the selected catalogue or partly read content and ask you to restart. `fetchContent:false` reads only cached bodies and reports missing ones with `contentStatus:\"missing\"` and a page-level `missing` count. Fetch failures retain successful guides, report `contentStatus:\"fetch_failed\"` and an error per failed guide, and set the page-level `failed` count and MCP error flag. Retry those IDs with `get`. The CLI equivalent is `primers by-version 1.21.1 26.1 --modloader=neoforge --include-content`, with optional `--max-chars=`, `--cursor=` and `--fetch-content=false`; fetch failures set a nonzero exit code after printing the page.\n\n`get` and `seed` fetch missing content on the MCP server and store it in its configured database, so this also works with a remote server. Cached reads work without Internet access. Use `fetchContent:false` for metadata-only reads/seeding, or `refresh:true` on `get` to replace cached content. Fetch failures return an error; failed refreshes preserve the previous content. `ingest` still accepts supplied content or an explicit `entries[].fetchContent:true`, and reports failed entries without saving them. The CLI equivalents are `primers seed --fetch-content=false` and `primers get <id> --refresh --start-line=401`.\n\nExisting installations repair the old built-in placeholder URLs on the first primer operation; no database reset is needed. IDs are retained where possible, and obsolete duplicates or placeholders are marked superseded with replacement guides. Custom entries and existing content are preserved.\n\n### 10. `mc_registry` — MC Registry & Meta Data\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `blocks` | version | Block state property definitions |\n| `commands` | version | Full Brigadier command tree |\n| `registries` | version, registry? | All registry keys, or entries for one registry |\n| `sounds` | version | sounds.json — all sound events |\n| `item_components` | version | Data-driven item component definitions |\n| `registry_entries` | registry, version | Full entry list from registries branch |\n| `mcmeta_versions` | filter=release\\|snapshot\\|all | All MC versions tracked by misode/mcmeta |\n\n### 11. `mc_data` — Vanilla Data Browser\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `tags` | version, registry, tagId, namespace | Browse vanilla tags |\n| `find_tags_for` | entry, registry, version, namespace | Reverse tag lookup |\n| `recipes` | version, type, outputItem | List recipes |\n| `get_recipe` | recipeId, version | Recipe JSON |\n| `find_recipes_for` | item, version | Reverse recipe lookup by output item |\n| `loot_tables` | version, category | List loot tables |\n| `get_loot_table` | path, version | Loot table JSON |\n| `lang` | version, filter, limit | Search en_us.json |\n| `blockstate` | block, version | Blockstate variant/model mapping |\n| `model` | modelPath, version, resolveParents | Model JSON with parent chain |\n| `model_tree` | modelPath, version | Full model inheritance with merged textures |\n| `biomes` | version | List all biomes |\n| `get_biome` | biomeId, version | Biome worldgen JSON |\n| `damage_types` | version | All damage types with JSON |\n| `enchantments` | version | List all enchantments |\n| `get_enchantment` | id, version | Enchantment JSON |\n| `advancements` | version, category | List advancements |\n| `get_advancement` | id, version | Advancement JSON |\n| `structures` | version | List worldgen structures |\n| `get_structure` | id, version | Structure JSON |\n| `particles` | version | List particle types |\n| `get_particle` | id, version | Particle description JSON |\n| `entity_attributes` | entity, version, modId? | Default attributes for vanilla or modded entity |\n\n### 12. `mc_files` — MC File Access (misode/mcmeta)\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `get_data` | filePath, version, jsonOnly | Fetch a data pack file |\n| `get_asset` | filePath, version, jsonOnly | Fetch a resource pack file |\n| `list_files` | dirPath, version, branch | List files in a directory |\n| `diff` | filePath, versionA, versionB, branch | Compare a file between two MC versions |\n| `atlas` | version, atlas? | Texture atlas definitions |\n| `raw` | ref, filePath | Fetch any file by git ref + path |\n| `compare` | versionA, versionB, branch | GitHub compare API between two MC versions |\n| `changelog` | version, branch | Files changed in a specific MC version |\n\n### 13. `mod_jar` — Mod JAR File & Registry Access\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `list_files` | modId, prefix? | List JAR contents under an optional path prefix |\n| `get_file` | modId, path | Read any file from the JAR |\n| `lang` | modId, filter, limit | Translation strings from en_us.json |\n| `sounds` | modId, namespace? | sounds.json — registered sound events |\n| `atlas` | modId, atlas?, namespace? | Texture atlas JSON |\n| `registry_entries` | modId, type, filter, limit | Items/blocks/entities via lang key inspection — no decompilation needed |\n\n### 14. `mod_data` — Mod Structured Data\n\n`action=list` or `action=get` combined with a `type` parameter:\n\n| type | list returns | get returns |\n|------|-------------|-------------|\n| `recipe` | All recipe ids | Recipe JSON |\n| `loot_table` | All loot table ids | Loot table JSON |\n| `advancement` | All advancement ids | Advancement JSON |\n| `blockstate` | All blockstate files | Blockstate JSON |\n| `model` | All model files | Model JSON |\n| `biome` | All biome ids | Biome JSON |\n| `structure` | All structure ids | Structure JSON |\n| `data_tag` | All tag files (+ registry param) | Tag entries JSON |\n| `particle` | All particle ids | Particle JSON |\n| `damage_type` | All damage type ids | Damage type JSON |\n| `enchantment` | All enchantment ids | Enchantment JSON |\n\nCommon params: `modId` (required), `namespace` (optional scope), `filter` (list), `id` (get), `modelPath` (get model), `registry` (data_tag only).\n\n### 15. `mod_tags` — Cross-Mod Tag Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `index` | modId | Scan + index tag files for one mod |\n| `index_all` | — | Scan + index tags for all mods |\n| `namespaces` | — | All tag namespaces + registries present |\n| `contributors` | tagPath, registry? | Every mod contributing to a tag path |\n| `mod_list` | modId, registry? | All tags a specific mod registers |\n| `find_conflicts` | registry? | replace:true conflicts across mods |\n| `search` | query, registry, limit | Substring search across tag paths |\n\n### 16. `mixin_scan` — Cross-Mod Mixin Conflict Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `list_mods` | loader, mcVersion | All mixin mods with target class lists |\n| `conflict_matrix` | loader, mcVersion, minConflicts | Classes targeted by 2+ mods |\n| `class_detail` | targetClass | Every mod injecting into one class |\n| `hotspots` | top, loader | Top-N most contested classes |\n| `batch_resolve` | loader, mcVersion | Resolve @Mixin targets for all mixin mods |\n\n### 17. `gradle` — Gradle Build File Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `get_files` | modId | Parsed build.gradle with deps, plugins, repos |\n| `search` | query, modIdFilter, limit | Cross-mod grep with context |\n| `compare_deps` | groupFilter, modIdFilter | Dependency comparison — version conflicts, embed vs compileOnly |\n\n### 18. `reports` — Markdown Report Generation\n\n| report | Key params | Description |\n|--------|-----------|-------------|\n| `mixin_conflicts` | loader, mcVersion, minConflicts | Cross-mod mixin conflict report |\n| `tag_conflicts` | registry | replace:true tag conflict report |\n| `version_conflicts` | — | Duplicate modId + unsatisfied deps |\n| `mod_overview` | modId | Full overview for one mod |\n| `gradle_deps` | groupFilter, modIdFilter | Gradle dependency comparison |\n| `pack_compat` | mcVersion, loader | One-shot pack audit: mixin conflicts + AT/AW shared targets + tag conflicts + dep issues |\n| `dep_graph` | mcVersion, modId? | Full dependency graph with Mermaid diagram |\n| `sidedness` | mcVersion, loader | Classify all mods as client_only / client_optional / common / server_only |\n| `mod_complexity` | mcVersion, loader | Rank mods by class count + mixin + AT/AW footprint |\n| `pack_changelog` | oldIds[], newIds[] | Diff two pack snapshots — added/removed/updated mods |\n\nAll reports accept an optional `savePath` to write the `.md` file to disk.\n\n### 19. `pack_tools` — Modpack Asset & Data Conflict Analysis\n\n| action | Key params | Description |\n|--------|-----------|-------------|\n| `asset_conflicts` | mcVersion?, loader?, limit | Resource pack path collisions across all mods |\n| `data_conflicts` | dataType?, mcVersion?, loader?, limit | Data pack path collisions (recipes, loot tables, advancements, …) |\n| `vanilla_overrides` | type=asset\\|data\\|both, mcVersion?, loader? | Paths where mods override vanilla files |\n| `complexity` | mcVersion?, loader?, limit | Rank mods by JAR entry count (complexity proxy) |\n| `pack_sidedness` | mcVersion?, loader? | Classify mods by presence of client/server entry points |\n| `missing_assets` | mcVersion?, loader?, limit | Mod JAR entries referencing textures/models that don't exist |\n| `at_conflicts` | mcVersion?, loader? | AT/AW entries targeted by multiple mods |\n\n### 20. `analyze_crash_log` — Crash Log Triage\n\nPaste a NeoForge/Forge/Fabric crash log. Cross-references stack frames against the `ModClass` index and returns suspects ranked by frame count, plus coverage warning if the class index is sparse.\n\nFor versioned Forge SRG names, `crashFacts.mappedMembers` records verified method and field translations with owner and descriptor context. `crashFacts.mappedException` and `frames[].mappedMethod` show readable names when resolved. Member names explain the symbols in a report; they do not establish what caused the crash.\n\n| param | Description |\n|-------|-------------|\n| `logText` | Full text of the crash report or log snippet |\n\n### 21. `find_missing_deps` — Missing Dependency Detection\n\nReads all ingested mods' declared dependencies and checks each dep ID against the ingested modId set. Skips known platform-provided deps (minecraft, neoforge, forge, fabric-api, java).\n\n| param | Description |\n|-------|-------------|\n| `mcVersion` | Filter to a specific MC version |\n| `loader` | Filter to a specific loader |\n\n### 22. `check_mod_compat` — Pre-flight JAR Compatibility Check\n\nRuns a candidate JAR through 5 checks without requiring it to be ingested first:\n1. Mixin target conflicts with existing mods\n2. AT/AW entry overlaps\n3. Asset path conflicts\n4. Missing declared dependencies\n5. Sidedness detection\n\n| param | Description |\n|-------|-------------|\n| `jarPath` | Absolute path to the candidate mod JAR |\n| `mcVersion` | Filter comparison pool to this MC version |\n| `loader` | Filter comparison pool to this loader |\n\n---\n\n## Typical Workflows\n\n### Ingest a modpack\n\n```bash\n# Remote MCP one-shot from modpacks.ch using CurseForge pack ID and latest/resolved version name:\nmodpacks_ch  action=ingest_pack  namespace=curseforge  packRef=925200  versionRef=4.8\n\n# Or resolve names first, then ingest the returned packId/versionId:\nmodpacks_ch  action=resolve_pack  namespace=curseforge  packRef=\"All the Mods 10\"  versionRef=4.8\nmodpacks_ch  action=ingest_pack    namespace=curseforge  packId=<resolved packId>  versionId=<resolved versionId>\n\n# For fuzzy user input like \"7.1\", list versions first and use the matching row:\nmodpacks_ch  action=list_versions  namespace=curseforge  packRef=\"All the Mods 10\"  versionRef=7.1\n\n# Modrinth packs use the same flow with a slug, project ID, name, version ID, version number,\n# modrinth.com URL, api.modrinth.com URL, CDN .mrpack URL, or direct HTTPS .mrpack URL:\nmodpacks_ch  action=list_versions  namespace=modrinth  packRef=<slug-or-project-id-or-name>  versionRef=<version-number>\nmodpacks_ch  action=ingest_pack  namespace=modrinth  packRef=<slug-or-project-id-or-name>  versionRef=<version-id-or-version-number>\nmodpacks_ch  action=ingest_pack  namespace=modrinth  packRef=\"https://modrinth.com/modpack/fabulously-optimized\"  versionRef=6.4.0\n\n# Official Feed The Beast API packs use namespace=feedthebeast.\n# Both use modpacks.ch: namespace=ftb selects /modpack; feedthebeast selects /ftb.\nmodpacks_ch  action=list_versions  namespace=feedthebeast  packRef=\"Architect's\"  versionRef=1.1\nmodpacks_ch  action=ingest_pack  namespace=feedthebeast  packRef=\"Architect's\"  versionRef=1.1\n\n# Existing local-folder fallback if you already have a mods/ directory:\nnode dist/cli.js batch-ingest /path/to/mods --index --replace\n\n# 2. Resolve mixin targets (enables conflict detection)\nnode dist/cli.js batch-resolve-mixins\n\n# 3. Sync Modrinth/CurseForge metadata\n# (via MCP: platform action=batch_sync)\n\n# 4. Index mod-shipped tags\n# (via MCP: mod_tags action=index_all)\n\n# 5. Ingest the loader for cross-reference\nnode dist/cli.js ingest-neoforge 21.1.228\n```\n\n### Run a full pack compatibility audit\n\n```bash\n# via MCP — generates a Markdown report scoped to your pack\nreports  report=pack_compat  loader=neoforge  mcVersion=1.21.1  savePath=C:/reports/pack-compat.md\n```\n\nThe scorecard covers: duplicate mod IDs, unsatisfied deps, mixin-conflicted classes, and tag hard conflicts. AT/AW shared targets are shown separately as informational (they can only widen access, never cause crashes).\n\n### Pre-flight check a new mod before adding it\n\n```bash\n# via MCP — checks against all mods currently in DB, no ingestion needed\ncheck_mod_compat  jarPath=/path/to/newmod-1.0.jar  loader=neoforge  mcVersion=1.21.1\n```\n\n### Triage a crash log\n\n```bash\n# If the pack is not already in ModLens, ingest it first so class/mod lookups\n# are grounded in the exact modpack version:\nmodpacks_ch  action=list_versions  namespace=curseforge  packRef=\"All the Mods 10\"  versionRef=7.1\nmodpacks_ch  action=ingest_pack    namespace=curseforge  packRef=\"All the Mods 10\"  versionRef=7.1\n\n# via MCP — paste the crash report, get ranked suspect mods\nanalyze_crash_log  logText=\"<paste full crash log here>\"\n```\n\n### Find missing dependencies\n\n```bash\n# via MCP\nfind_missing_deps  loader=neoforge  mcVersion=1.21.1\n```\n\n### Cross-mod source search\n\n```bash\n# via MCP — grep across ALL decompiled mod sources at once\nmod  action=search_source  query=LivingEntity  isRegex=false\nmod  action=search_source  query=\"@Mixin.*LivingEntity\"  isRegex=true\n# Results include modId + modVersion so you know which mod each hit came from\n```\n\n### Detect mixin conflicts\n\n```bash\n# via CLI (single class)\nnode dist/cli.js mixin-conflicts net/minecraft/world/entity/LivingEntity\n\n# via MCP (full matrix)\nmixin_scan  action=conflict_matrix\nreports  report=mixin_conflicts  savePath=C:/reports/mixin_conflicts.md\n```\n\n### Explore tag conflicts\n\n```bash\n# via MCP\nmod_tags  action=index_all\nmod_tags  action=find_conflicts\nmod_tags  action=contributors  tagPath=c:ores/iron\n```\n\n### Explore a mod\n\n```bash\nnode dist/cli.js get apotheosis\nnode dist/cli.js mixin-targets apotheosis\nnode dist/cli.js at-entries 2\nnode dist/cli.js decompile-class 2 com/shadows/apotheosis/mixin/LivingEntityMixin\n```\n\n### Check for updates\n\n```bash\nnode dist/cli.js sync-modrinth 2\nnode dist/cli.js check-updates 2\n```\n\n---\n\n## Hosted access limits\n\nHTTP MCP (`MCP_PORT`) enables hosted limits by default; local stdio retains full access. Direct HTTP connections from RFC 1918 IPv4 peers (`10/8`, `172.16/12`, `192.168/16`) also get full tool access by default, including whole-mod and whole-Minecraft decompilation, without gateway or OAuth authentication. Set `MODLENS_RFC1918_BYPASS=0` to require normal hosted authentication and limits for these clients. Loopback and IPv6 addresses do not match this bypass.\n\nThe check uses the TCP peer address, including IPv4-mapped IPv6 addresses, and ignores claimed client IP headers. Requests carrying `Forwarded`, `X-Forwarded-For`, `X-Real-IP`, or ModLens gateway identity headers follow normal hosted access. If a reverse proxy reaches the server from an RFC 1918 address, configure it to send a forwarding header for **every** request or disable the bypass; otherwise its public clients may appear to be private peers. Private clients must connect directly to use this allowance.\n\nPublic HTTP returns Minecraft class locations, members, references, mixin and version analysis, and source metadata, without Minecraft source text or bytecode. `source_info` reports cached line counts; `search_code` reports matching files and lines (`0` when no exact line is available). Line numbers may differ from a client's local decompilation.\n\nThe first hosted Minecraft request for a version queues private full-version decompilation and indexing. Public `get_source` prioritizes that class and returns preparation status instead of source; `index_status` reports full-version progress. Bulk commands, exports, raw JAR reads, host paths, filesystem administration, and KubeJS directory access remain unavailable to public hosted clients.\n\n| Setting | Default | Scope |\n| --- | --- | --- |\n| `MODLENS_RFC1918_BYPASS` | enabled | Set to `0` to disable private-peer full access |\n| `MODLENS_HOSTED_SOURCE_LINES` | 200 | Source/bytecode lines per response, shared across search snippets |\n| `MODLENS_HOSTED_RESPONSE_BYTES` | 131072 (128 KiB) | Serialized text content per tool response |\n| `MODLENS_HOSTED_DAILY_BYTES` | 5242880 (5 MiB) | Delivered tool content per account per UTC day |\n| `MODLENS_HOSTED_PERIOD_BYTES` | 52428800 (50 MiB) | Delivered tool content per account per fixed 30-day period |\n| `MODLENS_HOSTED_DAILY_REQUESTS` | 1000 | Tool calls per account per UTC day |\n| `MODLENS_HOSTED_MINUTE_REQUESTS` | 120 | Tool calls per account per minute |\n\nThe byte allowance includes all successful tool content, including metadata, search snippets and bytecode. It measures UTF-8 JSON content before transport compression. Cached files and inbound upload bytes are excluded. Each source text field has a 32 KiB cap. Searches with `limit`/`top` are capped at 50 results; responses exceeding the byte limit require a narrower query.\n\nUse `startLine` (1-based) and `maxLines` for team `mc_source get_source/bytecode`, `mod source/decompile_class`, `mod_bytecode bytecode`, and `project source/bytecode`. A range may start anywhere; the hosted cap bounds its length. Minecraft source indexes populate automatically after the first hosted request for a version. A hosted mod reader can fetch a missing JAR from modpacks.ch when it resolves one exact artifact; provide `sha1` to select a particular release. Hosted source and bytecode are checked against that JAR's licence before any content is returned. Hosted clients can upload their own Gradle environment through `project`.\n\nTo allow Minecraft source for specific teams, set `MODLENS_HOSTED_MC_SOURCE=1` and `MODLENS_HOSTED_MC_SOURCE_TEAMS` to comma-separated team IDs. This requires `MODLENS_HOSTED_PROXY_SECRET`; the authenticated gateway must inject `x-modlens-team-id` for verified members and remove caller-provided `x-modlens-*` headers. Other users retain metadata-only Minecraft access. Team access uses the same source and usage limits above. Local stdio is unaffected.\n\n### Mod source access\n\nHosted mod source responses include licence and attribution notices. Use `mod_license` with `action=check` and `modId`/`dbId` to check availability. For uploaded projects, supply `projectKey`, `environmentId` and `className` instead.\n\nBefore deploying this resolver against an existing PostgreSQL or PGlite database, run `npx prisma db push` with that database's `DATABASE_URL`. This adds the nullable `mods.sha1` column and index before the new server starts. Existing SQLite databases add them during startup without replacing mod rows.\n\nWhen hosted source is unavailable, `action=local_plan` provides instructions for decompiling your local JAR with your explicit consent. Run the returned request on your computer:\n\n```bash\nnpx -y @creeperhost/modlens-mcp --local-mod --request-file local-request.json\n```\n\n### Bind allowances to authenticated accounts\n\nFor built-in OAuth sign-in, set `MODLENS_HOSTED_AUTH=oauth` and configure `MODLENS_OAUTH_PUBLIC_URL` (the public `/mcp` URL), `MODLENS_OAUTH_ISSUER`, `MODLENS_OAUTH_CLIENT_ID`, `MODLENS_OAUTH_SCOPES`, and a stable base64-encoded 32-byte `MODLENS_OAUTH_STORAGE_KEY`. Set `MODLENS_OAUTH_PROFILE_URL` unless provider discovery supplies a userinfo endpoint. The provider must support authorization code with S256 PKCE and refresh tokens for persistent sign-in. Register `<public origin>/oauth/upstream/callback` as the provider client's redirect URI. `MODLENS_OAUTH_CLIENT_SECRET` is optional. `MODLENS_OAUTH_SUBJECT_FIELD` defaults to `sub`; optional `MODLENS_OAUTH_REQUIRED_FIELD` and `MODLENS_OAUTH_REQUIRED_VALUE` restrict access using a profile field. The OAuth routes and well-known metadata must be reachable through the public HTTPS origin. OAuth mode does not enable hosted Minecraft source.\n\nDynamic client registration accepts the optional `client_name` metadata field. The consent page displays this self-reported name alongside the registered callback origin. Existing clients must register again to supply a name; clients without one appear as \"Unnamed application\".\n\nOAuth clients, authorization state, grants, and token hashes are stored in the configured database. `MODLENS_OAUTH_CODEX_REFRESH_WORKAROUND` defaults to `1`, issuing 30-day ModLens access tokens to avoid frequent client-side refresh-token rotation while [Codex's stale-credential issue](https://github.com/openai/codex/issues/17265) remains. Set it to `0` to restore short-lived access tokens without changing the upstream refresh implementation; this immediately rejects previously issued long-lived tokens, so connected clients must refresh or sign in again. The temporary long-lived branch in `issue()` can then be removed. A leaked 30-day ModLens bearer token remains usable for longer unless revoked. ModLens refreshes its upstream provider token server-side as needed and still checks the account profile on every authenticated request. A multi-replica deployment must point every replica at the same persistent database and use the same `MODLENS_OAUTH_STORAGE_KEY`; the embedded SQLite default is suitable only for a single replica. Upstream token refreshes are coalesced within a process, so use one replica when the upstream provider rotates refresh tokens.\n\nSet `MODLENS_OAUTH_LOG=1` to write structured OAuth lifecycle events to stderr; they are disabled by default. Failures include an `incident` reference shown on browser-facing error pages, which can be matched to a server log when diagnostics are enabled. These events include the stage, route, status, error code, hashed client reference, and redirect origin where relevant; authorization codes, state values, PKCE material, tokens, provider profiles, and subjects are never logged. Unexpected server errors remain logged independently of this switch.\n\nFor gateway authentication (the default HTTP mode), put an authenticated HTTPS gateway in front of the server. Set `MODLENS_HOSTED_PROXY_SECRET` to a random secret of at least 32 characters. The gateway must remove caller-provided `x-modlens-*` headers and inject:\n\n- `x-modlens-proxy-secret`: the server's secret, never sent to clients.\n- `x-modlens-user-id`: a stable, verified account identifier selected by the gateway. Reconnecting, rotating tokens, or using another client must retain this ","readmeFilename":"README.md"}