Skip to content

Conversation

@jqnatividad
Copy link
Collaborator

No description provided.

jqnatividad and others added 7 commits January 7, 2026 15:49
Fixed "Invalid manifest: Invalid input" error by conforming to the
official MCPB specification from github.com/modelcontextprotocol/mcpb.

Changes:
1. Changed mcpb_version → manifest_version and "0.1" → "0.3"
2. Removed invalid fields: capabilities, features, requirements
3. Changed documentation from object to single URL string
4. Removed "order" fields from user_config (not in spec)
5. Changed "minimum/maximum" → "min/max" for number validation
6. Replaced custom "platforms" structure with proper "platform_overrides"
   in mcp_config (Windows-specific overrides only)
7. Added "tools" array with sample tools and "tools_generated: true"
8. Added "compatibility" object with supported platforms array
9. Moved custom metadata to "_meta" object using reverse-DNS namespace
   (com.dathere.qsv)

The manifest now validates successfully in Claude Desktop.

Regenerated qsv-mcp-server.mcpb with corrected manifest.

Refs: https://github.com/modelcontextprotocol/mcpb/blob/main/MANIFEST.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fixed issue where paths like ${HOME}/Downloads were used literally
instead of being expanded to actual home directory paths.

Changes to config.ts:
- Added expandTemplateVars() function to expand template variables:
  * ${HOME} → User's home directory (Unix/Mac)
  * ${USERPROFILE} → User's home directory (Windows)
  * ${DESKTOP} → Desktop directory
  * ${DOCUMENTS} → Documents directory
  * ${DOWNLOADS} → Downloads directory
  * ${TEMP}, ${TMPDIR} → Temporary directory
- Updated getStringEnv() to expand variables in single paths
- Updated getStringArrayEnv() to expand variables in path arrays

This allows Claude Desktop extension configuration values like
"${HOME}/Downloads" to properly resolve to "/Users/username/Downloads"
at runtime.

Also updated manifest.json author from personal to company name.

Regenerated qsv-mcp-server.mcpb with fixes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…estricted access

Changed user_config fields to use 'directory' type to:
1. Provide directory picker UI instead of text fields
2. Signal to Claude Desktop that filesystem access is limited
3. Make restrictions explicit in field descriptions

Changes to manifest.json:
- working_dir: Changed type from 'string' to 'directory'
  * Required field (users must select a working directory)
  * Description now explicitly states access is restricted
  * Default changed to ${DOWNLOADS} variable
- allowed_dirs: Changed type from 'string' to 'directory'
  * Added 'multiple: true' to allow selecting multiple directories
  * Description clarifies extension access is restricted to these dirs
  * No default (users explicitly choose additional access)

Changes to config.ts:
- Updated allowedDirs parsing to handle both:
  * JSON array format (from directory type with multiple: true)
  * Delimited string format (legacy MCP mode)
- Maintains backward compatibility with colon/semicolon separated paths

This improves transparency about the restricted filesystem access scope,
though the "grant access to everything" warning may still appear as it's
controlled by Claude Desktop, not the manifest.

Regenerated qsv-mcp-server.mcpb.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
there is no way to suppress the scary warning on the installer.
Asked @claude to draft a feature request and filed it here
modelcontextprotocol/mcpb#177

[skip ci]
Added two interactive prompts that users can select in Claude Desktop:

1. **Welcome Prompt** - Provides:
   - Introduction to qsv and its capabilities
   - Privacy & security assurances (100% local processing)
   - Quick start examples
   - Common commands reference
   - Getting started guidance

2. **Examples Prompt** - Shows:
   - Data exploration patterns
   - Data cleaning workflows
   - Data transformation examples
   - Complex multi-step pipelines
   - Format conversion usage

How it works:
- Users can select prompts from Claude Desktop's UI
- Prompts appear as pre-formatted conversations
- Provides onboarding for new users
- Reference guide for common tasks

Changes to manifest.json:
- Added "prompts" array with welcome and examples prompts

Changes to mcp-server.ts:
- Added ListPromptsRequestSchema and GetPromptRequestSchema imports
- Added "prompts" capability to server
- Implemented registerPromptHandlers() method
- Added handlers for prompts/list and prompts/get requests
- Created rich markdown content for both prompts

Updated description to clarify restricted filesystem access.

Regenerated qsv-mcp-server.mcpb.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
**Prompt to Tool Conversion:**
  - Convert MCP prompts (welcome, examples) to tools (qsv_welcome, qsv_examples)
  - Fix issue where prompts appeared as JSON file attachments in Claude Desktop
  - Tools now display text directly in chat interface
  - Add tool handlers in mcp-server.ts for qsv_welcome and qsv_examples
  - Create handleWelcomeTool() and handleExamplesTool() in mcp-tools.ts
  - Update manifest.json: set prompts_generated=false
  - Comment out deprecated registerPromptHandlers() method

  **qsv Binary Validation:**
  - Add auto-detection of qsv binary path using which/where commands
  - Implement version validation with minimum version check (13.0.0)
  - Add validateQsvBinary() and detectQsvBinaryPath() functions
  - Add startup logging for qsv binary validation status
  - Provide helpful error messages when qsv not found or version too old

  **Desktop Extension Config Fixes:**
  - Fix template variable expansion issues in manifest.json
  - Change working_dir to optional field (required=false)
  - Add detection of unexpanded ${user_config.*} template variables
  - Handle empty config fields gracefully with intelligent defaults
  - Treat unexpanded templates as empty values, falling back to ${DOWNLOADS}
  - Update getStringEnv() to detect literal "${user_config.*}" strings
  - Fix allowedDirs handling for unexpanded template variables

  **Icon Support:**
  - Add qsv-75x91.png icon to package
  - Fix manifest icons array to use correct MCPB v0.3 spec (size vs sizes)
  - Update package-mcpb.js to include icon file

  **Files Modified:**
  - src/mcp-server.ts - Add tool handlers, remove prompt handlers
  - src/mcp-tools.ts - Add welcome/examples tool definitions and handlers
  - src/config.ts - Add binary validation, fix template var handling
  - manifest.json - Update for tools, fix template variables, add icon
  - scripts/package-mcpb.js - Include icon in archive

  🤖 Generated with Claude Code
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request introduces numerous quality-of-life improvements to the MCP Desktop Bundle for the qsv data-wrangling toolkit. The changes focus on enhancing user experience through better error messages, automatic configuration, welcome messages, and improved file metadata handling.

Key Changes

  • Adds fuzzy file name matching with Levenshtein distance algorithm to provide helpful suggestions when files are not found
  • Implements automatic qsv binary detection, validation, and version checking with clear error messages
  • Introduces qsv_welcome and qsv_examples tools to help users get started
  • Adds CSV file metadata caching (row count, column count, column names) for improved performance
  • Implements template variable expansion for paths (${HOME}, ${DOWNLOADS}, etc.) for better cross-platform configuration

Reviewed changes

Copilot reviewed 8 out of 10 changed files in this pull request and generated 21 comments.

Show a summary per file
File Description
.claude/skills/src/utils.ts Adds Levenshtein distance calculation and fuzzy file matching utilities
.claude/skills/src/types.ts Adds FileMetadata interface and extends FilesystemProviderExtended with listFiles method
.claude/skills/src/mcp-tools.ts Enhances error messages with file suggestions, adds welcome and examples tools
.claude/skills/src/mcp-server.ts Adds qsv binary validation logging and registers new welcome/examples tools
.claude/skills/src/mcp-filesystem.ts Implements metadata caching and qsv command execution for file introspection
.claude/skills/src/config.ts Adds template variable expansion, qsv binary auto-detection, and version validation
.claude/skills/scripts/package-mcpb.js Updates icon filename from icon.png to qsv-75x91.png
.claude/skills/qsv-75x91.png Adds new icon image file
.claude/skills/manifest.json Adds comprehensive manifest for MCP Desktop Bundle with user configuration schema

 Security & Configuration:
  - Security: Replace execSync with execFileSync to prevent command injection
  - Detect and handle unexpanded ${user_config.*} template variables
  - Require fully qualified paths in Extension Mode (file/directory pickers)
  - Auto-detect qsv binary from PATH with version validation (>= 13.0.0)

  Bug Fixes:
  - Fix tool schema: remove duplicate 'input' parameter (conflicted with 'input_file')
  - Add METADATA_CACHE_TTL_MS and QSV_VALIDATION_TIMEOUT_MS constants
  - Improve version regex to support pre-release versions (e.g., 13.0.0-mimalloc)

  Extension Mode Enhancements:
  - Validate qsv binary path on every config change (server restart)
  - Provide Extension Mode-specific error messages and fix instructions
  - Enhanced initialization logging with clear success/failure indicators

  Testing:
  - Add comprehensive integration tests (tests/qsv-integration.test.ts)
  - 10 tests covering qsv commands: count, headers, select, search, stats, sort, frequency
  - Test filesystem metadata caching and error handling

  All 27 MCP tools now working correctly in Claude Desktop Extension.
@jqnatividad jqnatividad requested a review from Copilot January 9, 2026 11:52
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 11 changed files in this pull request and generated 3 comments.

jqnatividad and others added 2 commits January 9, 2026 06:58
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
per GH Copilot review
@jqnatividad jqnatividad merged commit 7e8ee61 into master Jan 9, 2026
12 of 13 checks passed
@jqnatividad jqnatividad deleted the mcp-bundle-distro branch January 9, 2026 12:11
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.

2 participants