{"_id":"@github/mcp-registry","_rev":"10-5075a0ad7fccbb54c7677cf04e00fffb","name":"@github/mcp-registry","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.2":{"name":"@github/mcp-registry","version":"0.1.2","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","_id":"@github/mcp-registry@0.1.2","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"dustin.greif","email":"dustin.greif@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"}],"homepage":"https://github.com/github/mcp-registry#readme","bugs":{"url":"https://github.com/github/mcp-registry/issues"},"dist":{"shasum":"7c9c72bfc8beb9ceaadc2d2b1b39c55064a0c3df","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.2.tgz","fileCount":24,"integrity":"sha512-KrnstwDwKrdIdrksaZ67lqEMD+7izNu4iW2wieTcQkSD6h4kvQ8BTzE6E+W2bQV5FHrFzJN85G4w3y8gW6NW7g==","signatures":[{"sig":"MEUCICL0V21O4StKYPV/2esOS9YVOsp9tm9MaYXVg0DbmqMzAiEAuYE5hxAOcYo4JOOl0PKR2ZlDdz/tkPc3axtdhFY8vm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43543},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.19.0"},"gitHead":"e3cc9511b6214fdab1b2704ff1e4d7cf58930614","scripts":{"test":"vitest run --exclude '**/**.integration.test.ts'","build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","clean":"rm -rf dist","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build","test:integration":"vitest run src/client.integration.test.ts"},"_npmUser":{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},"repository":{"url":"git+https://github.com/github/mcp-registry.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"10.9.4","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.0","esbuild":"^0.27.0","typescript":"^5.7.0","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_0.1.2_1775043573928_0.8494846274814225","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@github/mcp-registry","version":"0.1.3","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","_id":"@github/mcp-registry@0.1.3","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"dustin.greif","email":"dustin.greif@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"}],"homepage":"https://github.com/mcp","dist":{"shasum":"d43b024ec15b059cb8c075d4b390b8e77bbbbdfb","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.3.tgz","fileCount":24,"integrity":"sha512-g3X7Hgb91eMDQXpIe7w4p0+bouo8WxepY23WTtZBK3WCtAK17VYjYqwsph37e6rWfYnCX72lXoRnPOEzqlE26g==","signatures":[{"sig":"MEQCIAeluA3/2gDM7crrE/rSjmn3PIIhqTlRnjDDrTaHB9HcAiBlILmbMrsuoYOOI85YFROHKGdV6vTF1BLtdFWTZkVa5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37713},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.19.0"},"gitHead":"b9aa461af28d7c9155c95e1bee0941d64c36c784","scripts":{"test":"vitest run --exclude '**/**.integration.test.ts'","build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","clean":"rm -rf dist","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build","test:integration":"vitest run src/client.integration.test.ts"},"_npmUser":{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},"_npmVersion":"10.9.4","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.0","esbuild":"^0.27.0","typescript":"^5.7.0","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_0.1.3_1775046637657_0.7381847754519559","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@github/mcp-registry","version":"0.1.4","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","_id":"@github/mcp-registry@0.1.4","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"dustin.greif","email":"dustin.greif@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"}],"homepage":"https://github.com/mcp","dist":{"shasum":"9d7b6feeac019b3f391af92b0bcb8f82dbdfcee9","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.4.tgz","fileCount":24,"integrity":"sha512-oY7uTa417IHsV0ca2wJZOvmlbwNl19aWJR9EdQsP99UgNzpLF5k/3WuX1CkHo79ecTdCwrwsaMA/Tf+SN33pVQ==","signatures":[{"sig":"MEYCIQCRZAHK0dbFTZ6wbUvpNKNGdnhX9cvqduYREyJTFWZT4wIhAI68QOWHJtt+deKZJReaMwQNyQ9EEc8lyDDzb4ggCKPB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37608},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.19.0"},"gitHead":"fd442f8d8b8cbf3980e42cbbd8a58272f8f84b98","scripts":{"test":"vitest run --exclude '**/**.integration.test.ts'","build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","clean":"rm -rf dist","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build","test:integration":"vitest run src/client.integration.test.ts"},"_npmUser":{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},"_npmVersion":"10.9.7","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.0","esbuild":"^0.27.0","typescript":"^5.7.0","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_0.1.4_1775552677471_0.418486274956942","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@github/mcp-registry","version":"0.1.5","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","_id":"@github/mcp-registry@0.1.5","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"dustin.greif","email":"dustin.greif@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"}],"homepage":"https://github.com/mcp","dist":{"shasum":"3239c6500f956c0038ecfb0071614bc6b8968927","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.5.tgz","fileCount":36,"integrity":"sha512-teQo8AUQdJfVDmzIurUZgt0s2zaZnHTxPBufLLXnbXic4qLNrs8RRdR7P1kuyZfXiPurqc0XujzFyeki9rHCPA==","signatures":[{"sig":"MEYCIQCFSnwRu5+LpBB3sQGKPOzBBBqzH8Cmb8sw7xb6bkMREgIhAMVE9YzxxTL1NwShwVoap4MTEZJSRhk7HwhkFkyq6zAI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88190},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.19.0"},"gitHead":"cd9a59f4e7abaa15ae5fd48073febe8803bb0798","scripts":{"test":"vitest run --exclude '**/**.integration.test.ts'","build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","clean":"rm -rf dist","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build","test:integration":"vitest run tests/client.integration.test.ts"},"_npmUser":{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},"_npmVersion":"10.9.7","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"~4.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.0","esbuild":"^0.27.0","typescript":"^5.7.0","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_0.1.5_1775740067093_0.33685731801333607","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@github/mcp-registry","version":"0.1.6","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","_id":"@github/mcp-registry@0.1.6","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"dustin.greif","email":"dustin.greif@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"}],"homepage":"https://github.com/mcp","dist":{"shasum":"dcd541cd467db51f7c1369ae6483377f696fb110","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.6.tgz","fileCount":36,"integrity":"sha512-pFRxf+z5/sUBMdRsUsLf638FssRax/TRodkloHKoZ6JzLiaIM+YyLnZuvYeqEkbbAehlYFt5HzEkLl2XaKEzIA==","signatures":[{"sig":"MEYCIQCfS25MMmGBaLyLBwmC89EiPXcHMDfFQfH2NZLGfyMe5QIhANpu0KSW/avTFBHgxvI12U6ZauV4q47Nn/naDevHOLMY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93772},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.19.0"},"gitHead":"09c6b8c0342284a3b2051f3edb4914f3ff7dd110","scripts":{"test":"vitest run --exclude '**/**.integration.test.ts'","build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","clean":"rm -rf dist","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build","test:integration":"vitest run tests/client.integration.test.ts"},"_npmUser":{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},"_npmVersion":"10.9.7","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"~4.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.0","esbuild":"^0.27.0","typescript":"^5.7.0","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry_0.1.6_1776341665836_0.8712152549852272","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@github/mcp-registry","version":"0.1.7","description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsc && npx esbuild dist/*.js dist/fingerprint/*.js --minify --outdir=dist --allow-overwrite","build:goja":"npx esbuild src/fingerprint/goja-entry.ts --bundle --format=iife --global-name=FP --platform=neutral --outfile=../../pkg/fingerprint/bundle.js","clean":"rm -rf dist","test":"vitest run --exclude '**/**.integration.test.ts'","test:integration":"vitest run tests/client.integration.test.ts","test:watch":"vitest --exclude '**/*.integration.test.ts'","prepublishOnly":"npm run clean && npm run build"},"keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"license":"MIT","homepage":"https://github.com/mcp","engines":{"node":">=20.19.0"},"devDependencies":{"@types/node":"^25.5.0","esbuild":"^0.28.1","tsx":"^4.21.0","typescript":"^5.7.0","vitest":"^4.1.0"},"dependencies":{"zod":"~4.3.6"},"repository":{"type":"git","url":"git+https://github.com/github/mcp-registry.git"},"_id":"@github/mcp-registry@0.1.7","gitHead":"0cf0250eb83cc90ca426e8e87ff3929966494826","bugs":{"url":"https://github.com/github/mcp-registry/issues"},"_nodeVersion":"22.23.2","_npmVersion":"11.5.1","dist":{"integrity":"sha512-OXgxweEi1ZlniLh9tZe/JvaOvW+IkzkslAp6hkkdkBKd1x/I63DJKfVzuDXAkAU+/iTEHCRWN2/GqPHDgZfqtw==","shasum":"205e48cf6faa78907ef28b041eabb8dc0675420c","tarball":"https://registry.npmjs.org/@github/mcp-registry/-/mcp-registry-0.1.7.tgz","fileCount":38,"unpackedSize":113298,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLJt43Ny6qpPCgiNtQHK8SQnmDirpyVFKNa9uCfni+egIhAKzgFtW1gJZWGTiaAqCi0mOP8ymGmvkhh8RIDenk8MdU"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:65549cb7-e585-427b-b46f-05590d241a2e"}},"directories":{},"maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"joycezhu","email":"joycezhu@github.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"},{"name":"alaingoga","email":"alaingoga@gmail.com"},{"name":"andreiig","email":"andrei.girip99@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-registry_0.1.7_1788786353035_0.7228018414487767"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T11:39:33.821Z","modified":"2026-09-07T13:05:53.365Z","0.1.2":"2026-04-01T11:39:34.054Z","0.1.3":"2026-04-01T12:30:37.793Z","0.1.4":"2026-04-07T09:04:37.635Z","0.1.5":"2026-04-09T13:07:47.265Z","0.1.6":"2026-04-16T12:14:25.988Z","0.1.7":"2026-09-07T13:05:53.181Z"},"license":"MIT","homepage":"https://github.com/mcp","keywords":["mcp","registry","types","typescript","openapi","fingerprint","sha256","enterprise","allowlist"],"description":"TypeScript SDK for the MCP Registry API — includes types, a ready-to-use client, and deterministic fingerprint computation for enterprise allowlist enforcement.","maintainers":[{"name":"manuelpuyol","email":"manuelpuyol@github.com"},{"name":"jonrohan","email":"yes@jonrohan.codes"},{"name":"primer-css","email":"design-systems@github.com"},{"name":"gracepark","email":"lugraciecy@gmail.com"},{"name":"jibrangarcia","email":"jibrang@github.com"},{"name":"arelia","email":"arelia.jones@gmail.com"},{"name":"tylerthedev","email":"tylerjdev@github.com"},{"name":"smockle","email":"clay@smockle.com"},{"name":"simurai","email":"sim@simurai.com"},{"name":"khiga8","email":"katehiga8@gmail.com"},{"name":"srt32","email":"simon.taranto@gmail.com"},{"name":"githubbot","email":"dgreif+githubbotnpm@github.com"},{"name":"jfuchs","email":"jonathan.fuchs@gmail.com"},{"name":"andrialexandrou","email":"andri.j.alexandrou@gmail.com"},{"name":"joycezhu","email":"joycezhu@github.com"},{"name":"bteng22","email":"bteng22@gmail.com"},{"name":"dustin.savery","email":"dustin.savery@gmail.com"},{"name":"ncalteen","email":"ncalteen@github.com"},{"name":"alaingoga","email":"alaingoga@gmail.com"},{"name":"andreiig","email":"andrei.girip99@gmail.com"}],"readme":"# @github/mcp-registry\n\nTypeScript SDK for the [MCP Registry](https://github.com/mcp) — includes a registry API client, generated types, and deterministic fingerprint computation for enterprise allowlist enforcement.\n\n## Installation\n\n```bash\nnpm install @github/mcp-registry\n```\n\n## Registry Client\n\n```typescript\nimport { RegistryClient } from '@github/mcp-registry';\n\nconst client = new RegistryClient();\n\n// Search for servers\nconst servers = await client.searchServers({ query: 'github', limit: 5 });\nfor (const s of servers) {\n  console.log(`${s.server.name}@${s.server.version}`);\n}\n\n// Get a specific server\nconst server = await client.getServer({ name: 'io.github.user/repo' });\n\n// Get a specific version\nconst pinned = await client.getServer({\n  name: 'io.github.user/repo',\n  version: '1.2.0',\n});\n\n// Parse \"name@version\" format\nconst entry = await client.getDsl('io.github.user/repo@1.2.0');\n```\n\n### Configuration\n\n```typescript\nconst client = new RegistryClient({\n  baseUrl: 'https://api.mcp.github.com/v0.1', // default\n  cacheTtlMs: 5 * 60 * 1000,                  // 5 minutes (default)\n  timeoutMs: 30_000,                           // 30 seconds (default)\n  fetch: customFetch,                          // optional custom fetch\n});\n```\n\n### Error Handling\n\nThe client returns `null` for 404s and throws `RegistryError` for other HTTP errors:\n\n```typescript\nimport { RegistryClient, RegistryError } from '@github/mcp-registry';\n\nconst server = await client.getServer({ name: 'example/server' });\nif (!server) {\n  console.log('Not found');\n}\n```\n\n## Fingerprint Computation\n\nDeterministic SHA-256 fingerprints for enterprise allowlist enforcement — computes the same fingerprints as the registry backend.\n\n```typescript\nimport { computeFingerprint, verifyFingerprint, commandToRegistryType } from '@github/mcp-registry';\n\n// Remote server\nconst fp = computeFingerprint({\n  remotes: [{ url: 'https://mcp.example.com/sse' }],\n});\n\n// Local package\nconst registryType = commandToRegistryType('npx'); // → \"npm\"\nconst fp2 = computeFingerprint({\n  packages: [{ registryType: registryType!, identifier: '@playwright/mcp' }],\n});\n\n// Verify against the enterprise allowlist\nconst matches = verifyFingerprint(\n  { packages: [{ registryType: 'npm', identifier: '@playwright/mcp' }] },\n  allowlistEntry.server.fingerprints ?? {},\n);\n```\n\n### Command Mapping\n\n| Command | Registry Type |\n| ------- | ------------- |\n| `npx`, `npm` | `npm` |\n| `uvx`, `pip` | `pypi` |\n| `dotnet` | `nuget` |\n| `docker` | `docker` |\n| `brew` | `homebrew` |\n\n## DSL Engine\n\nThe DSL engine extracts configurable fields from server definitions, validates user-provided configuration, and computes launch plans (the command + env + headers needed to start a server).\n\n### Quick Start — Registry Client + DSL Engine\n\n```typescript\nimport { RegistryClient, DslEngine } from '@github/mcp-registry';\n\n// 1. Fetch a server definition from the registry\nconst client = new RegistryClient();\nconst response = await client.getServer({ name: 'io.github.user/repo' });\nif (!response) throw new Error('Server not found');\n\n// 2. Create a DSL engine from the response\nconst engine = DslEngine.fromServerResponse(response);\n\n// 3. Discover what configuration the server needs\nconst requiredFields = engine.getRequiredFields();\nfor (const field of requiredFields) {\n  console.log(`${field.key} (${field.type})${field.isSecret ? ' [secret]' : ''}`);\n}\n\n// 4. Validate user-provided configuration\nconst validation = engine.validate({\n  environmentVariables: { API_KEY: 'sk-...' },\n});\nif (!validation.valid) {\n  console.log('Missing:', validation.missingFields.map(f => f.key));\n}\n\n// 5. Resolve a launch plan\nconst result = engine.resolve({\n  environmentVariables: { API_KEY: 'sk-...' },\n});\n\nif (result.complete && result.plan) {\n  if (result.plan.type === 'package') {\n    // Start a local process\n    console.log('Command:', result.plan.command.join(' '));\n    console.log('Env:', result.plan.env);\n  } else {\n    // Connect to a remote server\n    console.log('Endpoint:', result.plan.endpoint);\n    console.log('Headers:', result.plan.headers);\n  }\n}\n```\n\n### Extracting Fields\n\nUse `extractConfigurableFields` directly when you don't need the full engine:\n\n```typescript\nimport { extractConfigurableFields } from '@github/mcp-registry';\nimport type { ServerDetail } from '@github/mcp-registry';\n\nconst fields = extractConfigurableFields(server);\n// fields: FieldSpec[] — key, type, required, isSecret, enumValues, etc.\n\n// Extract fields for a specific remote instead of the default package\nconst remoteFields = extractConfigurableFields(server, { remoteIndex: 0 });\n```\n\n### Resolving Launch Plans\n\n```typescript\nimport { resolveLaunchPlan } from '@github/mcp-registry';\n\n// Package-based (local process)\nconst plan = resolveLaunchPlan({\n  spec: server,\n  config: { environmentVariables: { API_KEY: 'sk-...' } },\n});\n// plan.type === 'package'\n// plan.command → ['npx', '-y', '@scope/mcp-server@1.0.0']\n// plan.env → { API_KEY: 'sk-...' }\n\n// Remote-based (HTTP connection)\nconst remotePlan = resolveLaunchPlan({\n  spec: server,\n  config: { headers: { Authorization: 'Bearer token' } },\n  remoteIndex: 0,\n});\n// remotePlan.type === 'remote'\n// remotePlan.endpoint → 'https://api.example.com/mcp'\n// remotePlan.headers → { Authorization: 'Bearer token' }\n```\n\n### Enumerating Installation Choices\n\nUse one engine call to inspect every advertised package and remote without\nconstructing an engine for each array index:\n\n```typescript\nconst result = engine.enumerateInstallChoices(\n  { headers: { Authorization: 'Bearer ...' } },\n  {\n    policy: choice => choice.transport === 'sse'\n      ? { decision: 'denied', code: 'sse-disabled', reason: 'SSE is disabled by policy' }\n      : { decision: 'allowed' },\n  },\n);\n\n// Packages first, then remotes, preserving each source array's order.\nfor (const choice of result.advertisedChoices) {\n  console.log(choice.choiceId, choice.transport, choice.validation, choice.policy);\n  if (choice.eligible) {\n    console.log(choice.configurableFields, choice.launchPlan);\n  } else {\n    console.log(choice.ineligibility);\n  }\n}\n\nconsole.log(result.eligibleChoices);\n```\n\nThe exact method signature is:\n\n```typescript\nenumerateInstallChoices(\n  config?: ConfigValues,\n  options?: EnumerateInstallChoicesOptions,\n): InstallChoicesResult\n```\n\nChoice IDs are deterministic for a descriptor: `package:<index>` and\n`remote:<index>`. Supply remote URL template values through\n`ConfigValues.urlVariables`. Configuration errors do not hide structurally\neligible choices, so callers can present required fields while retaining the\ninert launch plan. Invalid, unsupported, and policy-denied advertisements\nremain in `advertisedChoices` with typed explanations.\n\n## License\n\nMIT\n","readmeFilename":"README.md","repository":{"type":"git","url":"git+https://github.com/github/mcp-registry.git"},"bugs":{"url":"https://github.com/github/mcp-registry/issues"}}