mcpb/test
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Bryan Thompson ccf9470979
feat: add comprehensive icon validation to mcpb validate command
Implements icon validation to catch common issues that prevent icons from
displaying in Claude Desktop. Uses a non-blocking warning approach for
remote URLs to maintain flexibility for MCPB's evolving multi-platform
ecosystem.

## Changes

### Core Implementation (src/node/validate.ts)
- Add `isPNG()` helper to validate PNG file signatures via magic bytes
- Add `validateIcon()` function with comprehensive checks:
  - **Warn** about remote URLs (non-blocking, best practice guidance)
  - **Reject** ${__dirname} variable usage in icon field (doesn't work)
  - **Reject** absolute paths (not portable)
  - Verify icon file exists at specified path
  - Verify icon file is valid PNG format
  - Recommend 512×512 size for Claude Desktop
- Integrate icon validation into `validateManifest()` after schema validation

### Test Coverage
- Update `test/icon-validation.test.ts` - Remote URL test now expects warning
- Update `test/cli.test.ts` - Integration test updated for warnings
- All 109 tests passing

### Documentation Updates
- Update examples/hello-world-node/manifest.json to v0.3

## Validation Behavior

**Remote URLs (WARNING - non-blocking):**
```
Icon path uses a remote URL. Best practice for local MCP servers:
Use local files like "icon": "icon.png" for maximum compatibility.
Claude Desktop currently only supports local icon files in bundles.
```
**Result:** Validation passes, developer is informed

**Other Issues (ERROR - blocking):**
- ${__dirname} usage: Rejects (doesn't work)
- Absolute paths: Rejects (not portable)
- Missing files: Rejects (broken reference)
- Non-PNG files: Rejects (wrong format)

## Rationale

**Non-Blocking Approach:**
- Doesn't prevent valid bundles from being created
- Educates developers about best practices
- Maintains flexibility as MCPB evolves beyond Claude Desktop
- Future-proof if remote URL support is added

**Still Protective:**
- Blocks truly broken configurations (missing files, wrong formats)
- Provides actionable error messages for fixable issues

Based on real-world findings from investigating icon display issues in
Claude Desktop with production MCPB bundles.
2025-10-28 09:14:12 -05:00
..
cli.test.ts feat: add comprehensive icon validation to mcpb validate command 2025-10-28 09:14:12 -05:00
config.test.ts Add localization/theming feature to 0.3 version 2025-10-24 15:48:46 -07:00
icon-validation.test.ts feat: add comprehensive icon validation to mcpb validate command 2025-10-28 09:14:12 -05:00
init.test.ts fix linting 2025-10-27 14:06:11 -07:00
invalid-manifest.json Revert "feat: replace manifest_version with $schema field" 2025-08-27 11:24:18 -07:00
mcpbignore.test.ts rename dxt -> mcpb 2025-08-21 14:56:54 -07:00
schemas.test.ts fix: lint errors - remove unused import and format files 2025-10-29 16:51:27 -07:00
sign.e2e.test.ts lint 2025-08-21 15:28:01 -07:00
valid-manifest-0.2.json fix: lint errors - remove unused import and format files 2025-10-29 16:51:27 -07:00
valid-manifest.json fix: lint errors - remove unused import and format files 2025-10-29 16:51:27 -07:00