feat(mcp): add npm wrapper and MCP Registry metadata - #339
Conversation
Bomly ships a Go binary, and the official MCP Registry only accepts npm, PyPI, NuGet, Cargo, OCI, or MCPB packages. That gap is the only thing keeping Bomly out of the registry and out of the community MCP directories that key off an `npx` install line. Adds a thin `bomly-mcp` npm package whose postinstall downloads the release archive for the host platform, verifies it against that release's SHA256SUMS, and unpacks the binary. `bin/bomly-mcp.js` execs `bomly mcp serve` with stdio inherited, so stdout stays pure JSON-RPC. A checksum mismatch fails the install; there is no unverified fallback. Adds `server.json` (schema 2025-12-11) naming the package, and a `mcp-registry` job that publishes both after the release is published — draft-release assets are not publicly downloadable, so an earlier npm publish would ship a package that cannot install. The job is inert until NPM_TOKEN and the PUBLISH_MCP_REGISTRY variable are set. Registry auth is GitHub OIDC and needs no secret. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Bomly Diff SummaryCompared Overview
Dependency Changes✅ No dependency changes. Vulnerabilities✅ No vulnerability changes. License Changes✅ No license changes. Project Posture✅ No project posture changes ( Policy Findings✅ No policy differences were identified. |
Glama clones the repo and indexes tools and schemas from it. glama.json controls the display name, description, and keywords it shows, instead of letting it infer them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Unblocks L3-1 in the marketing listings tracker: publishing Bomly to the official MCP Registry.
Why
The registry accepts only npm, PyPI, NuGet, Cargo, OCI, or MCPB packages. Bomly ships a Go binary, so there was nothing to point a registry entry at. The same gap blocks the community MCP directories (mcpservers.org, PulseMCP, Glama, MCP.so), which all expect a one-line
npxinstall.Of the eligible paths, npm gives the best install story for MCP clients. OCI would force users to volume-mount the project being scanned; MCPB would mean one bundle carrying every platform's binary, with narrower client support.
What
npm/— a thinbomly-mcppackage, zero dependencies.scripts/postinstall.jsdownloadsbomly_<version>_<goos>_<goarch>.{tar.gz,zip}from the matching release, verifies it against that release'sSHA256SUMS, and unpacks the binary intovendor/. A mismatch fails the install — there is no unverified fallback.bin/bomly-mcp.jsexecsbomly mcp servewith stdio inherited and forwards SIGINT/SIGTERM/SIGHUP, so stdout stays pure JSON-RPC and the child never orphans.BOMLY_MCP_VERSIONpins a version;BOMLY_MCP_SKIP_DOWNLOAD=1skips the download for lint/CI installs.server.json— registry metadata, schema2025-12-11, namingio.github.bomly-dev/bomly-cliand thebomly-mcpnpm package.release.yml— a newmcp-registryjob that publishes npm, waits for the version to be resolvable, then runsmcp-publisher publish.auto-version.yml— bumps the version innpm/package.jsonandserver.jsonalongsidecmd/bomly/main.go.npxpath indocs/MCP.mdand the README's AI-agents section.Ordering, and why it matters
mcp-registryrunsneeds: publish. Releases stay drafts until thepublishjob finalizes them, and draft-release assets are not publicly downloadable — so publishing npm any earlier would ship a package whose postinstall 404s. The job also waits for npm's CDN before callingmcp-publisher, because the registry verifies ownership by fetching the package.Before this can run — needs you
The job is gated on
vars.PUBLISH_MCP_REGISTRY == 'true'and does nothing until you enable it:Registry auth is GitHub OIDC, so it needs no secret of its own; the
io.github.bomly-dev/*namespace comes from this repo's identity.bomly-mcpis unclaimed on npm.Verified locally
npm pack, then a clean install of the tarball into a scratch project: the binary downloaded, checksum verified, andbomly versionreported0.20.1../node_modules/.bin/bomly-mcp:initializereturnedserverInfo {"name":"bomly","version":"0.20.1"},tools/listreturned all four tools, and abomly_scancall returned aschema_version: "mcp/1"result. stdout carried only JSON-RPC; the banner stayed on stderr.server.jsonvalidates against the registry's2025-12-11schema (ajv).make generateproduces no drift.Not yet exercised: the
mcp-registryjob itself, which cannot run until the secret and variable above exist.🤖 Generated with Claude Code