tdmcp Desktop bundle: .dxt → .mcpb
SkillDev toolsHow to migrate the tdmcp Codex Desktop bundle from legacy .dxt to .mcpb (MCP Bundle) and keep it building — covers the manifest schema (verify against the installed packer, never hardcode), the build-mcpb.mjs packer/zip-fallback flow, the npm scripts, and the full .dxt→.mcpb reference sweep across docs and scripts. Use when packaging or migrating the tdmcp desktop bundle.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the tdmcp Desktop bundle: .dxt → .mcpb skill
What this skill tells your AI
The instructions your AI receives, as published by pantani/tdmcp in .agents/skills/mcpb-bundle/SKILL.md and read by ahel’s review.
Anthropic renamed Desktop Extensions from DXT (.dxt, packer
@anthropic-ai/dxt, manifest key dxt_version) to MCPB (.mcpb, packer
@anthropic-ai/mcpb, manifest key manifest_version). Legacy .dxt still
installs in Codex Desktop, but new directory submissions should ship .mcpb.
What this repo already has
scripts/build-mcpb.mjs is already MCPB-aware: it tries @anthropic-ai/mcpb
first, falls back to legacy @anthropic-ai/dxt, then to a system zip. The
bundle stages manifest.json at the archive root + dist/, recipes/, td/,
README.md, LICENSE, package.json, and a production-only node_modules. So
the migration is mostly renaming the output + the references, not a rewrite.
dxt/manifest.json currently declares "manifest_version": "0.3" — already the
modern MCPB key (not the legacy dxt_version), so the manifest is largely correct.
The migration, concretely
- Manifest — verify, don't guess. Before touching
manifest_version, check what the installed packer accepts:npx --yes @anthropic-ai/mcpb --help(look forpack/validate). If it ships avalidatecommand, run it againstdxt/manifest.jsonand let it tell you. Only changemanifest_versionif validation demands it. A wrong value breaks install — this is why we verify rather than assume a number. - Output filename →
tdmcp.mcpb. Inscripts/build-mcpb.mjs: changeoutFiletotdmcp.mcpband update the log lines (they say.dxt). Keep the packer-preference order and the zip fallback intact — both must still work. Optionally rename the script file tobuild-mcpb.mjs(update the npm script if you do). - npm scripts (
package.json): renamebuild:dxt→build:mcpbpointing at the script. Only keep abuild:dxtalias if something external depends on the old name (grep first); otherwise replace it cleanly — no compatibility cruft. Check theversionscript too (it stagesdxt/manifest.json). - Reference sweep — change user-facing
.dxt→.mcpbin:docs/guide/{install,troubleshooting,glossary}.md+ theirdocs/pt/mirrors,docs/DEPLOYMENT.md,docs/reference/cli.md,scripts/setup.mjs,README.md. Also grep.github/for any release workflow that builds or uploadstdmcp.dxt/ runsbuild:dxt. - Release-asset URLs. Links to
releases/latest/download/tdmcp.dxtpoint at a published asset. After this change the next release shipstdmcp.mcpb; update those links to.mcpband record that a new release must be cut so the asset exists (the current v0.3.0 asset is still.dxt). Note this for the human in migration notes.
Preserve, don't erase
Where docs explain "one-click Desktop Extension", keep the explanation and add
that .dxt still installs (legacy) while .mcpb is current. Don't delete info
that helps users who already downloaded the .dxt.
Verify the build still works
npm run build # populate dist/
npm run build:mcpb # (renamed) → must emit tdmcp.mcpb
unzip -l tdmcp.mcpb # manifest.json at root + dist/ present
The dxt/ directory name and dxt/manifest.json path can stay as-is (internal
paths the script references) — renaming the directory is optional churn and not
required for a valid .mcpb. If you rename it, update build-mcpb.mjs,
package.json's version script, and sync-manifest-version.mjs.
Signals
- GitHub stars
- 41
- Forks
- 9
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
mcpb-bundle- Source
- github.com/pantani/tdmcp