{"_id":"@bernierllc/mcp-registry","_rev":"8-4459dc99111f4cae4610973fc31998f4","name":"@bernierllc/mcp-registry","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.1":{"name":"@bernierllc/mcp-registry","version":"1.0.1","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0b71a3010d60c2f9c0d9fbf8117cab7405d7effa","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.0.1.tgz","fileCount":11,"integrity":"sha512-GBaTm2JDY+o1YkqZHQrh9FBdogvkpJ69uJHiqjSFSI137kCz8c4rP/tSj62ygpZNper46hxp19LhsSlJmz3gRQ==","signatures":[{"sig":"MEUCIB94n7VryrUnM7Zwqwp4m9liYM0BnWKzLyHGRCSd5K6yAiEA61P9WycRFk9imVnj55/HVAWP77twnZCZhB41n2i1TCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47461},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.0.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/private/var/folders/r0/wspnzd1s18sfjy10ffyv2qxw0000gn/T/09b41516006525fbc2648d81969ac929/bernierllc-mcp-registry-1.0.1.tgz","_integrity":"sha512-GBaTm2JDY+o1YkqZHQrh9FBdogvkpJ69uJHiqjSFSI137kCz8c4rP/tSj62ygpZNper46hxp19LhsSlJmz3gRQ==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.6.2","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"25.1.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.0.1_1762576284396_0.6596176336367578","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/mcp-registry","version":"1.0.2","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"9c07bc61636fa967130a052b04d9c90fcf98ba23","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.0.2.tgz","fileCount":11,"integrity":"sha512-FWKwTckMiG9S9DLDGVKS4QiWoRUDr85SJM4qJWEDmbp8ebNXZKJ0fnC03DexB3CgflQ5C2Ig6smDkNurYFHAxA==","signatures":[{"sig":"MEYCIQDmDa7rny/hlRFZ9PtoMuys65aqzxgnk5Yk6T9zrfrX8wIhANByEaInctJ/UrMFLQlIzChoiX4ncX6HL8h8h0GS9Hqg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47461},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.0.2.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/private/var/folders/r0/wspnzd1s18sfjy10ffyv2qxw0000gn/T/ae73f17a6fb40145645cf74fae6228df/bernierllc-mcp-registry-1.0.2.tgz","_integrity":"sha512-FWKwTckMiG9S9DLDGVKS4QiWoRUDr85SJM4qJWEDmbp8ebNXZKJ0fnC03DexB3CgflQ5C2Ig6smDkNurYFHAxA==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.6.2","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"25.1.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^1.0.0"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.0.2_1762576318633_0.9307096754268693","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/mcp-registry","version":"1.0.4","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"abc4422872a1c0337885883fad197d716e71d48e","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.0.4.tgz","fileCount":11,"integrity":"sha512-kxyrro+lkwZGEmGNbnT5XTufaG9PwzXLU5izQ9hOqWOV3vveXe2d9PErYeb42s1bgIii8/o3mkC3cukbQrUKBA==","signatures":[{"sig":"MEUCIF1XhRAzbPPbSlCSwc2JM3BwNzyPatfNXMbOHrok6QlXAiEAxv0/yWgU3OsPegOfC7Qj6FJJPw3oR1rvVy/FprOgZus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47544},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.0.4_1767642342995_0.6567382725476134","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bernierllc/mcp-registry","version":"1.0.5","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.0.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"96132ed28f612e8493ecc3eda574501ed5f7f6fc","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.0.5.tgz","fileCount":11,"integrity":"sha512-s8tTKy/7PE2Hr7nVBxv7qhrnmGBHiEEdJlzPlqOQP6IiqsFYQ2IpUJAtLQiTCJjyDhAt0bQAU7avwSYX4Ny6PA==","signatures":[{"sig":"MEUCIQDp0bnfLBk2+QNF4O8jLR+argBua8Bp868NMQieBgyOmwIgArHYyjBxV/rcHjgbl7Goo4pRztAtK1BGWZqTdgn+pdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47486},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.0.5.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"_resolved":"/tmp/3f6fc01b696832a657c048e341570189/bernierllc-mcp-registry-1.0.5.tgz","_integrity":"sha512-s8tTKy/7PE2Hr7nVBxv7qhrnmGBHiEEdJlzPlqOQP6IiqsFYQ2IpUJAtLQiTCJjyDhAt0bQAU7avwSYX4Ny6PA==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.11.0","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.0.5_1773078228625_0.3848643436746677","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bernierllc/mcp-registry","version":"1.0.6","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.0.6","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"9c34255a83075ce8417379ea6666c47189b25085","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.0.6.tgz","fileCount":11,"integrity":"sha512-RoeZP/XIVzuWALoDX3SBEnsvVTV7ebCCrJymYbJuzlYmKBW3uvg5REz+VoYvUa7oQQUa1AbzstyyoG+zcNJSCA==","signatures":[{"sig":"MEYCIQCdMifthNSUiwMmU2303i2JLsjqZ7rfN2NkvbdDcG+SagIhALRlDd60VzmirEkdGQ3X8h8Ben2S0FQoM/yBg71H1DqJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47486},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.0.6.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"_resolved":"/home/runner/work/tools/tools/packages/service/mcp-registry/bernierllc-mcp-registry-1.0.6.tgz","_integrity":"sha512-RoeZP/XIVzuWALoDX3SBEnsvVTV7ebCCrJymYbJuzlYmKBW3uvg5REz+VoYvUa7oQQUa1AbzstyyoG+zcNJSCA==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.11.0","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.0.6_1773163597154_0.6170541683442494","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bernierllc/mcp-registry","version":"1.1.0","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"4a1efcb7462df76820c346a13e269c3e95de2e8a","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.1.0.tgz","fileCount":11,"integrity":"sha512-zSECRJjNHeQDXFoZqJLApfSgAqZ0QiXklu27X4VYi0dqWTo9iQbDDOF6jT0eezScccDGqLaRDozPwwmqazkFYw==","signatures":[{"sig":"MEYCIQCptSOKw54TvbpkgeZMJpD1yHGTg2KTonGbRXQbN+Lj2wIhAKeHkNl/hA5oquEEdBYnZTyDxINU9+KRmm8/1mgbx4pp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47486},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.1.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"_resolved":"/home/runner/work/tools/tools/packages/service/mcp-registry/bernierllc-mcp-registry-1.1.0.tgz","_integrity":"sha512-zSECRJjNHeQDXFoZqJLApfSgAqZ0QiXklu27X4VYi0dqWTo9iQbDDOF6jT0eezScccDGqLaRDozPwwmqazkFYw==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.14.1","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.1.0_1779241743299_0.4000556682590317","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/mcp-registry","version":"1.2.0","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/mcp-registry@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"b450c3f2598c1772eebaa796e849e543029078f7","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-1.2.0.tgz","fileCount":11,"integrity":"sha512-EdIrwUXCPwrrtwKBXKMaIPRrFAy6/CAQKtD9QkiAJnQQI7sPkhsW77m2IFDKByxu2h22LaWLHrW5WnH26QebqQ==","signatures":[{"sig":"MEUCIQCaEgXarLt8xabLMSOT5gTTundqF8aCfST9DvmWftf5VwIgCDYiNHXFER+uUzFCO4AQfW9BmZyq/e1NIc+eSBe7UAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47486},"main":"./dist/index.js","_from":"file:bernierllc-mcp-registry-1.2.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"_resolved":"/home/runner/work/tools/tools/packages/service/mcp-registry/bernierllc-mcp-registry-1.2.0.tgz","_integrity":"sha512-EdIrwUXCPwrrtwKBXKMaIPRrFAy6/CAQKtD9QkiAJnQQI7sPkhsW77m2IFDKByxu2h22LaWLHrW5WnH26QebqQ==","bernierllc":{"integration":{"neverhub":"optional"}},"_npmVersion":"11.14.1","description":"MCP tool registry with service discovery and capability-based querying","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_1.2.0_1779250490700_0.0018379027953852045","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@bernierllc/mcp-registry","version":"3.0.0","description":"MCP tool registry with service discovery and capability-based querying","main":"./dist/index.js","types":"./dist/index.d.ts","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","peerDependencies":{"@bernierllc/neverhub-adapter":"^0.1.1"},"peerDependenciesMeta":{"@bernierllc/neverhub-adapter":{"optional":true}},"devDependencies":{"@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bernierllc":{"integration":{"neverhub":"optional"}},"scripts":{"build":"tsc","test":"jest","test:watch":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","clean":"rm -rf dist"},"_id":"@bernierllc/mcp-registry@3.0.0","_integrity":"sha512-+0gPyJJM97LiMEcmbGPn7Z8MbTu29XzAg075G9D7Ye/YXQiLUnhYDHSZtvCQswk/Mrx++1rN3rkLrXqF/tBbXQ==","_resolved":"/home/runner/work/tools/tools/packages/service/mcp-registry/bernierllc-mcp-registry-3.0.0.tgz","_from":"file:bernierllc-mcp-registry-3.0.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-+0gPyJJM97LiMEcmbGPn7Z8MbTu29XzAg075G9D7Ye/YXQiLUnhYDHSZtvCQswk/Mrx++1rN3rkLrXqF/tBbXQ==","shasum":"4d96c4f8da937c7abfa7601beaf951baf0c3becb","tarball":"https://registry.npmjs.org/@bernierllc/mcp-registry/-/mcp-registry-3.0.0.tgz","fileCount":11,"unpackedSize":49576,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD1j4UQKBOYWt+TeD+2G5XsZjNvw0qV2grQCvHIW/ITiAIhAMHlmbHZBH9YhwWGiv7S9yH+K1ODXMJoPBoBkThS09BM"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:630389f4-dac4-4f69-bb77-5af18a10ea0d"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-registry_3.0.0_1779309358420_0.3723868426743895"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-08T04:31:24.269Z","modified":"2026-05-20T20:35:58.715Z","1.0.1":"2025-11-08T04:31:24.594Z","1.0.2":"2025-11-08T04:31:58.849Z","1.0.4":"2026-01-05T19:45:43.183Z","1.0.5":"2026-03-09T17:43:48.796Z","1.0.6":"2026-03-10T17:26:37.355Z","1.1.0":"2026-05-20T01:49:03.472Z","1.2.0":"2026-05-20T04:14:50.829Z","3.0.0":"2026-05-20T20:35:58.576Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","keywords":["mcp","registry","service-discovery","capability","tools","model-context-protocol"],"description":"MCP tool registry with service discovery and capability-based querying","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/mcp-registry\n\n**MCP tool registry with service discovery and capability-based querying**\n\n## Overview\n\n`@bernierllc/mcp-registry` provides a centralized registry for MCP (Model Context Protocol) tools with powerful service discovery capabilities. Built on top of `@bernierllc/mcp-server-core`, it enables:\n\n- **Tool Registration**: Register MCP tools with rich metadata\n- **Service Discovery**: Find tools by capability, category, or tags\n- **Server Management**: Track multiple MCP servers and their tools\n- **Capability Querying**: Query tools by their capabilities (query, mutation, etc.)\n- **Optional NeverHub Integration**: Publish events and integrate with NeverHub when available\n\n## Installation\n\n```bash\nnpm install @bernierllc/mcp-registry\n```\n\n## Quick Start\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\n// Create registry\nconst registry = new MCPRegistry({\n  name: 'global-mcp-registry',\n  autoCleanup: true,\n  inactivityTimeout: 300000 // 5 minutes\n});\n\n// Register a server\nawait registry.registerServer({\n  id: 'planning-tools-001',\n  name: 'planning-tools',\n  version: '1.0.0',\n  description: 'Universal Planning System tools'\n});\n\n// Register a tool\nawait registry.registerTool({\n  id: 'planning-tools-001:planning.start_session',\n  name: 'planning.start_session',\n  description: 'Start a new planning session',\n  serverId: 'planning-tools-001',\n  serverName: 'planning-tools',\n  serverVersion: '1.0.0',\n  capabilities: [\n    { type: 'mutation', name: 'planning', version: '1.0.0' }\n  ],\n  category: 'planning',\n  tags: ['session', 'create']\n});\n\n// Query by capability\nconst result = await registry.queryByCapability({\n  type: 'mutation',\n  name: 'planning'\n});\n\nconsole.log(`Found ${result.data?.count} tools`);\n```\n\n## Core Concepts\n\n### Capabilities\n\nCapabilities describe what a tool can do:\n\n- **type**: The operation type (e.g., 'query', 'mutation', 'search')\n- **name**: The domain (e.g., 'planning', 'packages', 'users')\n- **version**: Semantic version of the capability\n\n```typescript\n{\n  type: 'query',\n  name: 'packages',\n  version: '1.0.0',\n  description: 'Query package data'\n}\n```\n\n### Tool Registration\n\nTools are registered with complete metadata:\n\n```typescript\nawait registry.registerTool({\n  id: 'server-id:tool-name',\n  name: 'packages.query',\n  description: 'Query packages with filters',\n  serverId: 'packages-server-001',\n  serverName: 'packages-api',\n  serverVersion: '1.0.0',\n  capabilities: [\n    { type: 'query', name: 'packages', version: '1.0.0' }\n  ],\n  category: 'packages',\n  tags: ['query', 'search', 'filter'],\n  version: '1.0.0'\n});\n```\n\n### Service Discovery\n\nQuery tools using flexible filters:\n\n```typescript\n// Query by capability type\nconst queryTools = await registry.queryByCapability({ type: 'query' });\n\n// Query by capability name\nconst packageTools = await registry.queryByCapability({ name: 'packages' });\n\n// Query by category\nconst planningTools = await registry.queryByCapability({ category: 'planning' });\n\n// Query by tags\nconst createTools = await registry.queryByCapability({ tags: ['create'] });\n\n// Combine filters\nconst result = await registry.queryByCapability({\n  type: 'mutation',\n  category: 'packages',\n  tags: ['create']\n});\n```\n\n## API Reference\n\n### MCPRegistry\n\n#### Constructor\n\n```typescript\nnew MCPRegistry(config?: RegistryConfig)\n```\n\n**Config Options:**\n- `name?: string` - Registry name (default: 'mcp-registry')\n- `autoCleanup?: boolean` - Enable automatic cleanup of inactive servers (default: true)\n- `inactivityTimeout?: number` - Timeout in milliseconds (default: 300000 / 5 minutes)\n- `enableNeverHub?: boolean` - Enable NeverHub integration (default: false)\n- `logger?: Logger` - Optional logger instance\n\n#### Server Management\n\n**registerServer()**\n```typescript\nawait registry.registerServer({\n  id: string,\n  name: string,\n  version: string,\n  description?: string,\n  metadata?: Record<string, any>\n}): Promise<RegistryResult<ServerRegistration>>\n```\n\n**unregisterServer()**\n```typescript\nawait registry.unregisterServer(serverId: string): Promise<RegistryResult<void>>\n```\n\n**heartbeat()**\n```typescript\nawait registry.heartbeat(serverId: string): Promise<RegistryResult<void>>\n```\n\n**getServer()**\n```typescript\nregistry.getServer(serverId: string): ServerRegistration | undefined\n```\n\n**getServers()**\n```typescript\nregistry.getServers(): ServerRegistration[]\n```\n\n#### Tool Management\n\n**registerTool()**\n```typescript\nawait registry.registerTool({\n  id: string,\n  name: string,\n  description: string,\n  serverId: string,\n  serverName: string,\n  serverVersion: string,\n  capabilities: Capability[],\n  category?: string,\n  tags?: string[],\n  version?: string,\n  metadata?: Record<string, any>\n}): Promise<RegistryResult<ToolRegistration>>\n```\n\n**unregisterTool()**\n```typescript\nawait registry.unregisterTool(toolId: string): Promise<RegistryResult<void>>\n```\n\n**getTool()**\n```typescript\nregistry.getTool(toolId: string): ToolRegistration | undefined\n```\n\n**getTools()**\n```typescript\nregistry.getTools(): ToolRegistration[]\n```\n\n**getToolsByServer()**\n```typescript\nregistry.getToolsByServer(serverId: string): ToolRegistration[]\n```\n\n#### Capability Querying\n\n**queryByCapability()**\n```typescript\nawait registry.queryByCapability({\n  type?: string,\n  name?: string,\n  version?: string,\n  category?: string,\n  tags?: string[],\n  serverId?: string\n}): Promise<RegistryResult<QueryResult>>\n```\n\nReturns:\n```typescript\n{\n  success: boolean,\n  data?: {\n    tools: ToolRegistration[],\n    count: number,\n    executionTime: number\n  },\n  error?: string\n}\n```\n\n#### Statistics\n\n**getStats()**\n```typescript\nregistry.getStats(): RegistryStats\n```\n\nReturns:\n```typescript\n{\n  serverCount: number,\n  toolCount: number,\n  activeServers: number,\n  capabilityCount: number,\n  toolsByCategory: Record<string, number>,\n  topTags: Array<{ tag: string, count: number }>\n}\n```\n\n#### Lifecycle\n\n**shutdown()**\n```typescript\nawait registry.shutdown(): Promise<void>\n```\n\nStops auto-cleanup and disconnects from NeverHub if connected.\n\n## Types\n\n### Capability\n\n```typescript\ninterface Capability {\n  type: string;\n  name: string;\n  version: string;\n  description?: string;\n  metadata?: Record<string, any>;\n}\n```\n\n### ToolRegistration\n\n```typescript\ninterface ToolRegistration {\n  id: string;\n  name: string;\n  description: string;\n  serverId: string;\n  serverName: string;\n  serverVersion: string;\n  capabilities: Capability[];\n  category?: string;\n  tags?: string[];\n  version?: string;\n  registeredAt: Date;\n  lastActiveAt: Date;\n  metadata?: Record<string, any>;\n}\n```\n\n### ServerRegistration\n\n```typescript\ninterface ServerRegistration {\n  id: string;\n  name: string;\n  version: string;\n  description?: string;\n  toolCount: number;\n  status: 'active' | 'inactive' | 'error';\n  registeredAt: Date;\n  lastHeartbeat: Date;\n  metadata?: Record<string, any>;\n}\n```\n\n## Usage Examples\n\n### Example 1: Multi-Server Registry\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\nconst registry = new MCPRegistry({ name: 'production-registry' });\n\n// Register planning server\nawait registry.registerServer({\n  id: 'planning-001',\n  name: 'planning-tools',\n  version: '1.0.0'\n});\n\n// Register packages server\nawait registry.registerServer({\n  id: 'packages-001',\n  name: 'packages-api',\n  version: '1.0.0'\n});\n\n// Register tools from both servers\nawait registry.registerTool({\n  id: 'planning-001:start_session',\n  name: 'planning.start_session',\n  description: 'Start planning session',\n  serverId: 'planning-001',\n  serverName: 'planning-tools',\n  serverVersion: '1.0.0',\n  capabilities: [{ type: 'mutation', name: 'planning', version: '1.0.0' }],\n  category: 'planning'\n});\n\nawait registry.registerTool({\n  id: 'packages-001:query',\n  name: 'packages.query',\n  description: 'Query packages',\n  serverId: 'packages-001',\n  serverName: 'packages-api',\n  serverVersion: '1.0.0',\n  capabilities: [{ type: 'query', name: 'packages', version: '1.0.0' }],\n  category: 'packages'\n});\n\n// Find all query capabilities\nconst queryTools = await registry.queryByCapability({ type: 'query' });\nconsole.log(`Found ${queryTools.data?.count} query tools`);\n```\n\n### Example 2: Server Heartbeat Management\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\nconst registry = new MCPRegistry({\n  autoCleanup: true,\n  inactivityTimeout: 300000 // 5 minutes\n});\n\n// Register server\nawait registry.registerServer({\n  id: 'worker-001',\n  name: 'worker-service',\n  version: '1.0.0'\n});\n\n// Send heartbeats periodically\nsetInterval(async () => {\n  const result = await registry.heartbeat('worker-001');\n  if (result.success) {\n    console.log('Heartbeat sent successfully');\n  }\n}, 60000); // Every minute\n\n// Registry will automatically mark server as inactive if no heartbeat received\n```\n\n### Example 3: Complex Capability Queries\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\nconst registry = new MCPRegistry();\n\n// ... register servers and tools ...\n\n// Find all mutation tools in the planning category\nconst result1 = await registry.queryByCapability({\n  type: 'mutation',\n  category: 'planning'\n});\n\n// Find tools with specific tags\nconst result2 = await registry.queryByCapability({\n  tags: ['create', 'session']\n});\n\n// Find tools for a specific server\nconst result3 = await registry.queryByCapability({\n  serverId: 'planning-001'\n});\n\n// Combine multiple filters\nconst result4 = await registry.queryByCapability({\n  type: 'query',\n  category: 'packages',\n  tags: ['search']\n});\n```\n\n### Example 4: Registry Statistics\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\nconst registry = new MCPRegistry();\n\n// ... register servers and tools ...\n\n// Get comprehensive statistics\nconst stats = registry.getStats();\n\nconsole.log(`Total servers: ${stats.serverCount}`);\nconsole.log(`Total tools: ${stats.toolCount}`);\nconsole.log(`Active servers: ${stats.activeServers}`);\nconsole.log(`Unique capabilities: ${stats.capabilityCount}`);\n\nconsole.log('Tools by category:');\nObject.entries(stats.toolsByCategory).forEach(([category, count]) => {\n  console.log(`  ${category}: ${count}`);\n});\n\nconsole.log('Top tags:');\nstats.topTags.forEach(({ tag, count }) => {\n  console.log(`  ${tag}: ${count}`);\n});\n```\n\n## NeverHub Integration\n\nThe registry supports optional NeverHub integration for event publishing and service coordination:\n\n```typescript\nimport { MCPRegistry } from '@bernierllc/mcp-registry';\n\n// Enable NeverHub integration\nconst registry = new MCPRegistry({\n  enableNeverHub: true\n});\n\n// When NeverHub is available, events are automatically published:\n// - server.registered\n// - server.unregistered\n// - tool.registered\n// - tool.unregistered\n\n// The registry gracefully degrades if NeverHub is not available\n```\n\n## Configuration\n\n### Environment Variables\n\nThe registry does not require environment variables, but you can configure it programmatically:\n\n```typescript\nconst registry = new MCPRegistry({\n  name: process.env.REGISTRY_NAME || 'default-registry',\n  autoCleanup: process.env.REGISTRY_AUTO_CLEANUP === 'true',\n  inactivityTimeout: parseInt(process.env.REGISTRY_TIMEOUT || '300000'),\n  enableNeverHub: process.env.ENABLE_NEVERHUB === 'true'\n});\n```\n\n## Integration Status\n\n- **Logger**: Optional - Compatible with `@bernierllc/logger`, uses console as fallback\n- **Docs-Suite**: Ready - Complete API documentation with TypeDoc\n- **NeverHub**: Optional - Publishes events when available, graceful degradation\n\n## Error Handling\n\nAll operations return a `RegistryResult<T>` with structured error handling:\n\n```typescript\ninterface RegistryResult<T> {\n  success: boolean;\n  data?: T;\n  error?: string;\n}\n\n// Example usage\nconst result = await registry.registerServer({...});\n\nif (!result.success) {\n  console.error('Registration failed:', result.error);\n} else {\n  console.log('Server registered:', result.data);\n}\n```\n\n## Performance Considerations\n\n- **Query Performance**: O(n) where n is the number of registered tools. Suitable for registries with thousands of tools.\n- **Memory**: Each tool registration uses ~1KB of memory. A registry with 1000 tools uses ~1MB.\n- **Auto-Cleanup**: Runs every 60 seconds. Minimal CPU impact.\n\n## Testing\n\n```bash\n# Run tests\nnpm test\n\n# Run tests once\nnpm run test:run\n\n# Run with coverage\nnpm run test:coverage\n```\n\n## Building\n\n```bash\nnpm run build\n```\n\n## Linting\n\n```bash\nnpm run lint\n```\n\n## Dependencies\n\n- `@bernierllc/mcp-server-core` - Core MCP server framework\n\n### Optional Dependencies\n\n- `@bernierllc/neverhub-adapter` - NeverHub integration (optional)\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\nThis file is licensed to the client under a limited-use license. The client may use and modify this code *only within the scope of the project it was delivered for*. Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n\n## See Also\n\n- [@bernierllc/mcp-server-core](../mcp-server-core) - Generic MCP server framework\n- [@bernierllc/neverhub-adapter](../neverhub-adapter) - NeverHub integration adapter\n","readmeFilename":"README.md"}