8000 Add .mcpb bundle generation and attach to GitHub Releases by dominion525 · Pull Request #11 · dominion525/familiar · GitHub
[go: up one dir, main page]

Skip to content

Add .mcpb bundle generation and attach to GitHub Releases - #11

Merged
dominion525 merged 1 commit into
mainfrom
feat/mcpb-bundle
Jun 22, 2026
Merged

dominion525 merged 1 commit into
mainfrom
feat/mcpb-bundle

Conversation

@dominion525
Copy link
Copy Markdown
Owner

Summary

Add mcp/manifest.json (mcpb v0.3 spec) and extend .github/workflows/release.yml so each v* tag push also produces a .mcpb bundle and attaches it to the corresponding GitHub Release.

Why

.mcpb (formerly .dxt) is the official MCP Bundle format. Claude Desktop, Cursor's MCP install flows, Smithery, and similar MCP hosts can install a stdio MCP server by double-clicking / pointing at a .mcpb file (a zip containing the manifest, compiled JS, and production node_modules).

Changes

  • mcp/manifest.json — declares familiar-mcp as a Node stdio server, darwin-only, entry_point: dist/index.js. Schema-validated by mcpb validate.
  • mcp/.mcpbignore — keeps src/, tests, build / lint configs, and coverage/ out of the bundle.
  • .gitignore — ignore *.mcpb so locally-built bundles never get committed.
  • .github/workflows/release.yml — after npm publish, the workflow runs npm prune --omit=dev then npx @anthropic-ai/mcpb pack . familiar-mcp.mcpb, creates the GitHub Release, then uploads the bundle as a release asset.

Distribution policy

The .mcpb is not included in the npm tarball. It is only attached to GitHub Releases. The npm tarball already ships dist/; consumers using npx @dominion525/familiar-mcp@latest do not need a redundant zip.

Local verification

  • npm prune --omit=dev && npx @anthropic-ai/mcpb pack . familiar-mcp.mcpb → 2.7MB packed / 8.2MB unpacked / 1959 files. Coverage and dev configs excluded as expected.
  • unzip of the bundle has manifest.json at the root and dist/index.js at the declared entry_point.
  • node dist/index.js < /dev/null from inside the unpacked bundle loads the server and exits 0 on EOF (normal MCP stdio graceful shutdown).

- Add mcp/manifest.json (mcpb v0.3 spec) declaring familiar-mcp as a Node stdio server with darwin-only compatibility
- Add mcp/.mcpbignore to keep src/ tests configs and coverage/ out of the bundle
- Extend .github/workflows/release.yml: after npm publish prune dev deps, run mcpb pack . familiar-mcp.mcpb, then upload the resulting bundle as a GitHub Release asset
- Ignore *.mcpb in .gitignore so locally-built bundles do not get committed
- Verified locally: bundle is 2.7MB packed / 8.2MB unpacked / 1959 files (dist + production node_modules + manifest + LICENSE + README), entry_point dist/index.js loads cleanly under node and exits 0 on stdin EOF (normal MCP stdio shutdown)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dominion525
dominion525 merged commit 10a3f85 into main Jun 22, 2026
3 checks passed
@dominion525
dominion525 deleted the feat/mcpb-bundle branch June 22, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0