Skip to content

MCPBビルドでhoistedな依存レイアウトを使う#16

Open
Sinhalite wants to merge 1 commit into
microcmsio:mainfrom
Sinhalite:codex/fix-mcpb-hoisted-build
Open

MCPBビルドでhoistedな依存レイアウトを使う#16
Sinhalite wants to merge 1 commit into
microcmsio:mainfrom
Sinhalite:codex/fix-mcpb-hoisted-build

Conversation

@Sinhalite

Copy link
Copy Markdown
Contributor

概要

MCPB生成時に、pnpm標準のsymlink layoutではなく、pack前だけproduction依存をhoisted layoutで入れ直すようにしました。あわせて、MCPB CLIを @anthropic-ai/mcpb@2.1.2 に更新しています。

背景

ビルドしたMCP BundleをClaude Desktopに登録すると、initialize 送信後にサーバーtransportが閉じ、MCPサーバーが早期終了する状態になっていました。

ローカルで dist/index.js を直接起動すると問題なく動作しましたが、MCPBを展開したディレクトリから起動すると、以下のように @modelcontextprotocol/sdk の依存解決に失敗しました。

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'ajv-formats'
imported from .../node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js

pnpm標準layoutでは依存の実体が node_modules/.pnpm 配下に置かれ、rootの node_modules/* はsymlinkになります。MCPB pack後に展開するとこの参照関係が崩れ、.pnpm 配下に依存は存在していても、Nodeの通常のmodule resolutionでは ajv-formats などを見つけられない状態になっていました。

変更内容

  • MCPB pack前に node_modules を削除
  • pnpm install --prod --frozen-lockfile --config.node-linker=hoisted でproduction依存をhoisted layoutとして再インストール
  • @anthropic-ai/mcpb1.1.1 から 2.1.2 に更新
  • グローバルinstallをやめ、npx @anthropic-ai/mcpb@2.1.2 pack を直接使うように変更

検証

一時ディレクトリで同等手順を実行し、生成したMCPBを展開したうえで、展開先の dist/index.js をSDKクライアントから起動しました。

microCMS MCP Server starting in single-service mode (service: dummy)
connected
tools 21

また、通常pnpm layoutで生成したMCPBでは約70.7MBだったpackage sizeが、hoisted layoutでは約20.2MBまで小さくなることも確認しています。これは .pnpm 配下とroot側の依存が重複してpackされることを避けられるためです。

@Sinhalite Sinhalite marked this pull request as ready for review June 19, 2026 02:31
@Sinhalite Sinhalite changed the title [codex] MCPBビルドでhoistedな依存レイアウトを使う MCPBビルドでhoistedな依存レイアウトを使う Jun 19, 2026
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