Skip to content

chore: Add MCPB packaging files for cross-platform Claude Desktop bundle#30

Open
bryan-anthropic wants to merge 1 commit intozscaler:masterfrom
bryan-anthropic:add-mcpb-packaging
Open

chore: Add MCPB packaging files for cross-platform Claude Desktop bundle#30
bryan-anthropic wants to merge 1 commit intozscaler:masterfrom
bryan-anthropic:add-mcpb-packaging

Conversation

@bryan-anthropic
Copy link

Summary

Adds MCPB packaging files to enable building a cross-platform .mcpb bundle for the Claude Desktop MCP Directory. No existing code is modified — this PR only adds packaging metadata.

File Size Purpose
manifest.json ~40 KB MCPB v0.4 manifest — 265 tools, user config, compatibility, privacy policy
.mcpbignore ~300 B Excludes non-runtime files from the bundle
icon.png ~23 KB Zscaler cloud icon for the MCP Directory listing

Why server.type: "uv" instead of server.type: "python"?

Python MCP servers that bundle dependencies via pip install --target embed platform-specific compiled extensions (.so/.pyd files from packages like pydantic-core, cryptography, orjson). These binaries are locked to the OS and CPU architecture where the bundle was built.

The uv-native approach (server.type: "uv") solves this by deferring dependency resolution to runtime. When a user installs the bundle, uv reads pyproject.toml, resolves the correct platform-specific wheels for their system, and caches them locally.

pip --target bundle uv-native bundle
Bundle size ~58 MB ~222 KB
Cross-platform No (platform-locked .so files) Yes
macOS (Intel + ARM) Only if built on matching arch Works
Windows Only if built on Windows Works
Linux Only if built on Linux Works

How it works

The manifest declares server.type: "uv" with this config:

{
  "command": "uv",
  "args": ["run", "python", "-m", "zscaler_mcp.server"],
  "env": {
    "PYTHONPATH": "${__dirname}",
    ...
  }
}

At runtime, uv run reads pyproject.toml, resolves dependencies into a cached virtual environment with platform-correct wheels, then executes the server. The bundle only needs to contain source code + pyproject.toml — no pre-compiled binaries.

Building the bundle

npx @anthropic-ai/mcpb@latest pack

This produces a zscaler-mcp-server-0.6.2.mcpb file (~222 KB) containing the source code, pyproject.toml, manifest, icon, license, and README.

What's in the manifest

  • 265 tools across 10 services (ZIA, ZPA, ZDX, ZCC, ZTW, ZIdentity, EASM, Z-Insights, plus 2 core utilities)
  • 11 user-configurable fields (authentication, service selection, write-mode controls)
  • Privacy policy: https://www.zscaler.com/privacy-policy
  • Compatibility: macOS, Windows, Linux — Python >=3.11

Test plan

  • npx @anthropic-ai/mcpb@latest pack succeeds from repo root
  • Bundle size is ~222 KB (not ~58 MB)
  • Extracted bundle contains no .so, .pyd, or __pycache__ files
  • Bundle contains pyproject.toml (required for uv dependency resolution)
  • Install in Claude Desktop — server starts and reports 265 tools

Adds three files to enable building a cross-platform .mcpb bundle for
the Claude Desktop MCP Directory. No existing code is modified.

- manifest.json: MCPB v0.4 manifest with 265 tools, user config, privacy policy
- .mcpbignore: Excludes non-runtime files (~875KB → ~222KB bundle)
- icon.png: Zscaler cloud icon for the MCP Directory listing

Uses server.type "uv" so dependencies are resolved at runtime via
pyproject.toml rather than bundling platform-specific compiled
extensions. This produces a ~222KB cross-platform bundle instead of
a ~58MB platform-locked bundle.

Build with: npx @anthropic-ai/mcpb@latest pack

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
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