UNPKG

@every-env/sparkle-mcp-server

Version:

MCP server for secure Sparkle folder file access with Claude AI, including clipboard history support

316 lines (246 loc) 7.55 kB
# Sparkle MCP Server A powerful Model Context Protocol (MCP) server that provides secure file access and clipboard history management for Claude AI and other MCP-compatible clients. ## Features - **Secure File Access**: Restricted to `~/Sparkle` folder for safe AI file operations - **Advanced File Search**: Pattern matching, content search, and relevance scoring - **Clipboard History**: Search and query clipboard history from `~/Sparkle/Pasteboard/` - **Binary File Support**: Handles PDFs, images, and other binary files (up to 100MB) - **Smart File Indexing**: Automatic file indexing with 50KB content sampling for search - **Multiple File Operations**: Read, write, move, create directories, and get file info ## Installation ### Option 1: NPM Install (Recommended) ```bash npm install -g @every-env/sparkle-mcp-server ``` ### Option 2: From Source ```bash git clone https://github.com/EveryInc/sparkle-mcp-server.git cd sparkle-mcp-server npm install npm run build npm link ``` ## Quick Setup ### Option 1: Zero Install (Recommended) 🚀 Just add this to your Claude Desktop config (`~/.config/claude/config.json`): ```json { "mcpServers": { "sparkle": { "command": "npx", "args": ["-y", "@every-env/sparkle-mcp-server"] } } } ``` That's it! Restart Claude Desktop and you're done. No installation needed! ### Option 2: Traditional Install If you prefer a local installation: ```bash npm install -g @every-env/sparkle-mcp-server ``` Then use this config: ```json { "mcpServers": { "sparkle": { "command": "sparkle-mcp" } } } ``` ## Available Tools ### File Operations - `list_directory` - List files and directories - `search_files` - Search with glob patterns (`*`, `*.txt`, etc.) - `get_relevant_files` - AI-powered file search and ranking - `read_file` - Read file contents (text and binary) - `write_file` - Create or overwrite files - `move_file` - Move or rename files - `create_directory` - Create directories - `get_file_info` - Get file metadata ### Clipboard History - `search_clipboard` - Search clipboard history with filters - `get_clipboard_by_date` - Get clipboard entries for a specific date - `get_recent_clipboard` - Get recent clipboard entries - `clipboard_stats` - Usage statistics and analytics ### System - `health_check` - Server status and diagnostics ## Usage Examples ### Basic File Operations ```javascript // List all files in Sparkle folder list_directory({ path: "" }) // Search for all text files search_files({ path: "", pattern: "*.txt" }) // Find relevant files with AI get_relevant_files({ query: "my tax documents", maxFiles: 5 }) ``` ### Clipboard History ```javascript // Search clipboard for specific text search_clipboard({ query: "password", limit: 20 }) // Get today's clipboard get_clipboard_by_date({ date: "2025-08-05" }) // Recent clipboard history get_recent_clipboard({ days: 7, limit: 50 }) ``` ## Directory Structure ``` ~/Sparkle/ # Main Sparkle directory ├── README.txt # Welcome file (auto-created) ├── Pasteboard/ # Clipboard history ├── 2025-08-05/ # Daily clipboard folders ├── clipboard.json # Clipboard entries └── ... ├── Documents/ # Your documents ├── Images/ # Your images └── ... # Any other files/folders ``` ## Clipboard History Format The server supports multiple clipboard storage formats: ### JSON Format (`clipboard.json`) ```json [ { "timestamp": "2025-08-05T10:30:00Z", "content": "Hello world", "type": "text", "metadata": { "app": "Safari", "size": 11 } } ] ``` ### Text Format (`clipboard.txt`) ``` 2025-08-05 10:30:00 | text | Hello world 2025-08-05 10:31:15 | url | https://example.com ``` ## Swift Integration If you have a Swift Sparkle app, here's how to integrate: ### 1. MCP Server Communication ```swift import Foundation class SparkleManager { private let serverProcess: Process init() { serverProcess = Process() serverProcess.executableURL = URL(fileURLWithPath: "/usr/local/bin/sparkle-mcp") // Configure stdio pipes for MCP communication } func sendMCPRequest(_ request: MCPRequest) async throws -> MCPResponse { // Implement MCP protocol communication } } ``` ### 2. File Operations ```swift // Search files let searchResult = try await sparkleManager.sendMCPRequest( MCPRequest(method: "tools/call", params: [ "name": "search_files", "arguments": ["path": "", "pattern": "*.pdf"] ]) ) // Read file let fileContent = try await sparkleManager.sendMCPRequest( MCPRequest(method: "tools/call", params: [ "name": "read_file", "arguments": ["path": "document.txt"] ]) ) ``` ### 3. Clipboard Integration ```swift // Save clipboard to Pasteboard folder func saveClipboard() { let pasteboard = NSPasteboard.general if let string = pasteboard.string(forType: .string) { let clipboardEntry = ClipboardEntry( timestamp: Date(), content: string, type: "text" ) saveToSparkleFolder(clipboardEntry) } } // Query clipboard history via MCP let recentClipboard = try await sparkleManager.sendMCPRequest( MCPRequest(method: "tools/call", params: [ "name": "get_recent_clipboard", "arguments": ["days": 7, "limit": 50] ]) ) ``` ## Configuration The server uses `~/Sparkle/.mcp-config.json` for configuration: ```json { "version": "1.0.0", "created": "2025-08-05T10:00:00Z", "settings": { "sparkleFolder": "~/Sparkle", "maxFileSize": 104857600, "allowedExtensions": ["*"], "autoIndex": true, "watcherEnabled": true } } ``` ## Security Features - **Sandboxed Access**: Only `~/Sparkle` folder is accessible - **File Size Limits**: 100MB maximum file size - **Path Validation**: Prevents directory traversal attacks - **Rate Limiting**: 100 requests per minute - **Safe File Types**: Blocks executable files by default ## Development ```bash # Clone and setup git clone https://github.com/EveryInc/sparkle-mcp-server.git cd sparkle-mcp-server npm install # Development mode npm run dev # Build npm run build # Test npm test ``` ## Publishing Steps (For Maintainers) 1. **Update version**: `npm version patch|minor|major` 2. **Build**: `npm run build` 3. **Publish**: `npm publish --access public` ## Troubleshooting ### Server Won't Start ```bash # Check if installed correctly which sparkle-mcp # Test server manually sparkle-mcp --help # Check logs tail -f ~/.config/claude/logs/sparkle.log ``` ### File Access Issues - Ensure `~/Sparkle` folder exists and is writable - Check file permissions: `chmod 755 ~/Sparkle` - Verify Claude Desktop has proper permissions ### Clipboard History Not Working - Create `~/Sparkle/Pasteboard/` directory - Ensure your clipboard app saves to the correct format - Check folder permissions ## Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests 5. Submit a pull request ## License MIT License - see [LICENSE](LICENSE) file for details. ## Support - **Issues**: https://github.com/EveryInc/sparkle-mcp-server/issues - **Documentation**: https://github.com/EveryInc/sparkle-mcp-server/wiki - **Discussions**: https://github.com/EveryInc/sparkle-mcp-server/discussions --- Built with ❤️ by [Every Inc](https://github.com/EveryInc)