-
Notifications
You must be signed in to change notification settings - Fork 99
MCP Server: numerous QoL improvements to MCP Desktop Bundle #3298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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>
…ectories are accessed. [skip ci]
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
There was a problem hiding this 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.
There was a problem hiding this 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.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
per GH Copilot review
No description provided.