UNPKG

@tgomareli/macos-tools-mcp

Version:

MCP server for advanced macOS system monitoring and file search capabilities

434 lines (344 loc) • 11.8 kB
# macOS Tools MCP Server A comprehensive MCP (Model Context Protocol) server for macOS that provides advanced system monitoring and file search capabilities. ## Table of Contents - [Features](#features) - [System Performance Monitor](#-system-performance-monitor) - [Enhanced File Search](#-enhanced-file-search) - [Installation](#installation) - [Prerequisites](#prerequisites) - [Setup](#setup) - [Permissions](#permissions) - [Usage](#usage) - [Starting the Server](#starting-the-server) - [Claude Desktop Configuration](#claude-desktop-configuration) - [Available Tools](#available-tools) - [system_performance](#system_performance) - [enhanced_search](#enhanced_search) - [Architecture](#architecture) - [Project Structure](#project-structure) - [Key Features](#key-features) - [Troubleshooting](#troubleshooting) - [Testing the Server](#testing-the-server) - [Quick Test Prompts](#quick-test-prompts) - [Comprehensive Test Suite](#comprehensive-test-suite) - [Security Considerations](#security-considerations) - [Contributing](#contributing) - [License](#license) - [Future Enhancements](#future-enhancements) ## Features ### šŸ–„ļø System Performance Monitor - **Real-time Monitoring**: Track CPU, memory, disk I/O, and network statistics - **Process Analysis**: View top resource-consuming processes with detailed metrics - **Historical Tracking**: Store and analyze performance data over time using SQLite - **Optimization Suggestions**: Get intelligent recommendations to improve system performance ### šŸ” Enhanced File Search - **Deep Content Search**: Search within file contents using regex or plain text - **Spotlight Integration**: Leverage macOS Spotlight for fast metadata searches - **Tag Management**: Create, search, and manage custom file tags using extended attributes - **Advanced Features**: Fuzzy matching, boolean operators, and file type filtering ## Installation ### Prerequisites - macOS 10.15 or later - Node.js 18.0.0 or later - npm or yarn package manager ### Setup #### Option 1: NPM Install (Recommended) The easiest way to use this MCP server is through npm/npx: ```bash # No installation needed, just add to Claude Desktop config # See Claude Desktop Configuration section below ``` #### Option 2: From Source 1. Clone the repository: ```bash git clone https://github.com/tornikegomareli/macos-tools-mcp-server.git cd macos-tools-mcp-server ``` 2. Install dependencies: ```bash npm install ``` 3. Build the project: ```bash npm run build ``` 4. Make the script executable: ```bash chmod +x dist/index.js ``` ### Permissions For full functionality, the server requires certain permissions: 1. **Full Disk Access** (recommended for file search): - System Preferences → Security & Privacy → Privacy → Full Disk Access - Add Terminal or your IDE 2. **Developer Tools** (for process monitoring): - Install Xcode Command Line Tools if not already installed: ```bash xcode-select --install ``` ## Usage ### Starting the Server Run the MCP server: ```bash npm start ``` Or use it directly: ```bash node dist/index.js ``` ### Claude Desktop Configuration To use this MCP server with Claude Desktop: 1. Open your Claude Desktop configuration file: - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` - Windows: `%APPDATA%\Claude\claude_desktop_config.json` - Linux: `~/.config/Claude/claude_desktop_config.json` 2. Add the macOS Tools server to your configuration: #### Using NPM (Recommended) ```json { "mcpServers": { "macos-tools": { "command": "npx", "args": [ "@tgomareli/macos-tools-mcp" ], "env": {} } } } ``` #### Using Local Installation If you cloned and built from source: ```json { "mcpServers": { "macos-tools": { "command": "node", "args": [ "/path/to/macos-tools-mcp-server/dist/index.js" ], "env": {} } } } ``` 4. If you already have other MCP servers configured, add the macos-tools configuration to the existing mcpServers object: ```json { "mcpServers": { "existing-server": { // ... existing configuration }, "macos-tools": { "command": "node", "args": [ "/Users/tornikegomareli/Development/macos-tools-mcp/dist/index.js" ], "env": {} } } } ``` 5. Save the configuration file and restart Claude Desktop. 6. You should now see the macOS Tools server available in Claude Desktop with two tools: - `system_performance` - Monitor system resources - `enhanced_search` - Advanced file search and tagging ## Available Tools ### system_performance Monitor and analyze system performance metrics. **Parameters:** - `action` (required): "current" | "history" | "processes" | "optimize" - `timeRange` (optional): Time range for historical data ("1h", "24h", "7d") - `metric` (optional): Specific metric to analyze ("cpu", "memory", "disk", "network", "all") **Examples:** ```typescript // Get current system metrics await callTool("system_performance", { action: "current", metric: "all" }); // View performance history await callTool("system_performance", { action: "history", timeRange: "24h", metric: "memory" }); // List top processes by CPU usage await callTool("system_performance", { action: "processes", metric: "cpu" }); // Get optimization suggestions await callTool("system_performance", { action: "optimize" }); ``` ### enhanced_search Advanced file search with content analysis and tagging capabilities. **Parameters:** - `action` (required): "search" | "tag" | "untag" - `query` (optional): Search query (supports regex) - `searchType` (optional): "content" | "filename" | "tags" | "regex" - `fileTypes` (optional): Array of file extensions to include - `path` (optional): Root directory for search - `maxResults` (optional): Maximum number of results - `tags` (optional): Array of tags to search for or apply **Examples:** ```typescript // Search for TODO comments in code files await callTool("enhanced_search", { action: "search", query: "TODO|FIXME", searchType: "regex", fileTypes: ["js", "ts", "py"], path: "~/Projects" }); // Tag important files await callTool("enhanced_search", { action: "tag", path: "~/Documents/important.pdf", tags: ["urgent", "project-x"] }); // Search by tags await callTool("enhanced_search", { action: "search", searchType: "tags", tags: ["urgent"], path: "~/Documents" }); // Search file contents await callTool("enhanced_search", { action: "search", query: "apiKey", searchType: "content", fileTypes: ["json", "env"], path: "~/Projects", maxResults: 50 }); ``` ## Architecture ### Project Structure ``` macos-tools-mcp/ ā”œā”€ā”€ src/ │ ā”œā”€ā”€ index.ts # MCP server entry point │ ā”œā”€ā”€ tools/ │ │ ā”œā”€ā”€ performance-monitor.ts │ │ ā”œā”€ā”€ spotlight-enhanced.ts │ │ └── types.ts │ └── utils/ │ ā”œā”€ā”€ system-info.ts # macOS system calls │ ā”œā”€ā”€ file-search.ts # File search utilities │ └── cache.ts # Performance caching ā”œā”€ā”€ dist/ # Compiled JavaScript ā”œā”€ā”€ package.json ā”œā”€ā”€ tsconfig.json └── README.md ``` ### Key Features 1. **Native macOS Integration** - Uses native commands (ps, mdfind, xattr) for optimal performance - Leverages Spotlight index for fast searches - Supports macOS extended attributes for tagging 2. **Performance Optimization** - Multi-level caching system - Debounced operations - Rate limiting for system calls - Streaming for large files 3. **Data Persistence** - SQLite database for performance history - Configurable data retention - Efficient time-series queries ## Troubleshooting ### Common Issues 1. **Permission Denied Errors** - Ensure the terminal has Full Disk Access - Some operations may require sudo (temperature monitoring) 2. **Spotlight Not Finding Files** - Check if Spotlight indexing is enabled - Verify the search path is not excluded from Spotlight 3. **High CPU Usage** - Adjust cache TTL values in cache.ts - Limit search depth and file types - Use more specific search queries ### Debug Mode Enable debug logging by setting the environment variable: ```bash DEBUG=macos-tools-mcp node dist/index.js ``` ## Security Considerations - All shell commands are properly escaped to prevent injection - File paths are validated and normalized - Sensitive directories can be excluded via configuration - Rate limiting prevents resource exhaustion ## Contributing Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## License MIT License - see LICENSE file for details ## Testing the Server Once you've configured the server in Claude Desktop, you can use these prompts to test all functionality: ### Quick Test Prompts 1. **Basic Performance Check**: ``` Show me my current system performance metrics ``` 2. **Process Analysis**: ``` What are the top 5 CPU-consuming processes on my system? ``` 3. **File Search**: ``` Search for TODO comments in JavaScript files in my current directory ``` 4. **System Optimization**: ``` Analyze my system and suggest performance optimizations ``` ### Comprehensive Test Suite Use this comprehensive prompt to test all features: ``` I want to test the macOS Tools MCP server. Please help me: 1. **System Performance Testing**: - Show me the current system performance metrics (CPU, memory, disk, network) - Display the top 5 processes consuming the most CPU - Show me memory usage history for the last hour - Analyze my system and provide optimization suggestions - Get the top memory-consuming processes 2. **File Search Testing**: - Search for all JavaScript and TypeScript files containing "TODO" or "FIXME" comments in my home directory - Find all files with "test" in their filename in the current project directory - Search for files containing the word "password" in configuration files (.json, .env, .yml) - Use regex to find all email addresses in text files - Search for files modified in the last 24 hours 3. **Tag Management Testing**: - Tag this file with "important" and "reviewed": /Users/tornikegomareli/Development/macos-tools-mcp/README.md - Search for all files tagged with "important" - Remove the "reviewed" tag from the README file - Tag all TypeScript files in the src directory with "source-code" 4. **Combined Operations**: - Monitor system performance while performing a large file search - Find resource-intensive processes and then search for their log files - Show current disk usage and search for large files (> 100MB) 5. **Edge Cases**: - Search in a non-existent directory - Try to tag a file I don't have permission to modify - Request performance data for an invalid time range - Search with an invalid regex pattern ``` ### Expected Behaviors - **Performance Monitor**: Should return real-time metrics, process lists, historical data, and optimization suggestions - **File Search**: Should find files by content, name, or tags, with support for regex patterns - **Tag Operations**: Should successfully add/remove tags and search by them - **Error Handling**: Should gracefully handle permission errors, invalid paths, and malformed queries ## Future Enhancements - [ ] GPU monitoring support - [ ] Network connection analysis - [ ] Application-specific performance tracking - [ ] Cloud backup for performance data - [ ] Machine learning-based optimization suggestions - [ ] Integration with Time Machine for file version search