Skip to content

v1.1.5

Choose a tag to compare

@yaniv-golan yaniv-golan released this 03 Apr 06:14
· 22 commits to main since this release

🎯 What's New

Full MCPB manifest spec coverage β€” the bundler now supports all optional fields from the MCPB manifest specification. Extension stores and clients can display richer listings with themed icons, screenshots, pre-install tool/prompt previews, and per-platform configuration β€” all driven from server.meta.json.

βœ… MCPB Manifest Enhancements

Static tools and prompts arrays β€” the bundler scans tools/*/tool.meta.json and prompts/*/prompt.meta.json at bundle time and emits static tools and prompts arrays in manifest.json. Clients like Claude Desktop use these for pre-install previews ("this extension offers: search_files, read_file, ..."). Without them, the store listing was a blank box with just tools_generated: true.

icons array passthrough β€” when server.meta.json defines an icons array with {src, size, theme} objects, the bundler passes it through and copies referenced files into the bundle. Supports light/dark theme variants for proper dark mode rendering in extension stores.

screenshots passthrough β€” screenshot paths from server.meta.json are passed through and files are auto-copied into the bundle for store listings.

platform_overrides passthrough β€” per-platform command, args, and env overrides from server.meta.json are merged into server.mcp_config.platform_overrides. Enables cross-platform bundles that need .exe suffixes on Windows or DYLD_LIBRARY_PATH on macOS.

_meta passthrough β€” platform-specific client integration metadata with reverse-DNS keys (e.g., Windows Store package_family_name, static initialize/tools/list responses for faster cold starts).

localization passthrough β€” {resources, default_locale} for i18n of user-facing manifest fields.

All seven fields are emitted only when present in server.meta.json β€” no empty objects or nulls when absent.

πŸ› Bug Fixes

Registry cache epoch-boundary race β€” load_cache_if_empty in tools, resources, resource templates, and prompts called date +%s independently of the caller's captured timestamp. When the epoch second rolled over between the two calls, LAST_SCAN could exceed now, producing a negative cache age that satisfied any TTL check β€” silently skipping the disk scan. This caused intermittent failures where newly added tools weren't discovered until the next refresh cycle. Each function now uses the caller's timestamp to guarantee LAST_SCAN <= now.

πŸ“š Documentation

  • docs/MCPB.md updated with all new optional fields, examples, and explanations
  • Manifest example expanded with localization, platform_overrides, icons, screenshots, tools, and prompts sections
  • Changelog updated for 1.1.5

πŸ“¦ Upgrading

No breaking changes. Drop-in patch release for 1.1.4.

# Upgrade mcp-bash
curl -fsSL "https://raw.githubusercontent.com/yaniv-golan/mcp-bash-framework/v1.1.5/install.sh" | bash -s -- --yes --version "v1.1.5"

# Or via mcp-bash doctor
mcp-bash doctor --fix

Full Changelog: v1.1.4...v1.1.5