macOS MCP Server
# macOS MCP Server
An MCP (Model Context Protocol) server for macOS system operations: file dialogs, clipboard, notifications, and Finder integration.
## Features
- **File Dialogs**: Open file/folder pickers, save dialogs, multiple selection
- **Clipboard**: Read and write text to system clipboard
- **System**: Notifications, open URLs, get system info
- **Finder**: Reveal files, open with default app, get current selection
## Tools
### File Dialogs
| Tool | Description |
|------|-------------|
| `macos_pick_file` | Open file picker, return selected path |
| `macos_pick_folder` | Open folder picker, return selected path |
| `macos_pick_files` | Multiple file selection |
| `macos_save_dialog` | Save file dialog with default name |
### Clipboard
| Tool | Description |
|------|-------------|
| `macos_clipboard_read` | Get clipboard text content |
| `macos_clipboard_write` | Set clipboard text content |
### System
| Tool | Description |
|------|-------------|
| `macos_notify` | Display system notification |
| `macos_open_url` | Open URL in default browser |
| `macos_system_info` | Get macOS version, hostname, username |
| `macos_screen_resolution` | Get screen dimensions and scale factor |
### Finder
| Tool | Description |
|------|-------------|
| `macos_reveal_in_finder` | Reveal path in Finder |
| `macos_open_with_default` | Open file with default app |
| `macos_get_finder_selection` | Get currently selected files in Finder |
| `macos_quick_look` | Open file with Quick Look preview |
### Screenshot
| Tool | Description |
|------|-------------|
| `macos_screenshot` | Take screenshot (full screen, region, or window) |
| `macos_screenshot_clipboard` | Screenshot to clipboard |
### Image Tools (sips)
| Tool | Description |
|------|-------------|
| `macos_image_info` | Get image metadata (dimensions, format, etc.) |
| `macos_image_resize` | Resize image (width, height, or max size) |
| `macos_image_convert` | Convert between formats (jpeg, png, gif, tiff, bmp, heic) |
### PDF Tools
| Tool | Description |
|------|-------------|
| `macos_pdf_page_count` | Get number of pages in PDF |
| `macos_pdf_merge` | Merge multiple PDFs into one |
### Notes App
| Tool | Description |
|------|-------------|
| `macos_note_create` | Create a new note |
| `macos_note_folders` | List all folders |
| `macos_note_list` | List notes in a folder |
| `macos_note_read` | Read note content by ID |
## Installation
Clone and build:
```bash
git clone https://github.com/alexlock1/macos-mcp-server.git
cd macos-mcp-server
npm install
npm run build
```
## Configuration
Add to your MCP settings (e.g., `.mcp.json` or Claude Desktop config):
```json
{
"mcpServers": {
"macos": {
"command": "node",
"args": ["/path/to/macos-mcp-server/dist/index.js"]
}
}
}
```
## Usage Examples
### Pick a file
```
macos_pick_file({
prompt: "Select a document",
fileTypes: ["pdf", "doc", "docx"]
})
```
### Copy to clipboard
```
macos_clipboard_write({ text: "Hello, World!" })
```
### Show notification
```
macos_notify({
title: "Task Complete",
message: "Your file has been processed",
sound: "Glass"
})
```
### Get system info
```
macos_system_info({})
// Returns: { computerName, userName, homeDirectory, osVersion }
```
### Reveal in Finder
```
macos_reveal_in_finder({ path: "/Users/me/Documents/report.pdf" })
```
### Take a screenshot
```
macos_screenshot({
path: "/tmp/screenshot.png",
fullScreen: true
})
```
### Resize an image
```
macos_image_resize({
inputPath: "/path/to/image.png",
outputPath: "/path/to/resized.png",
maxSize: 800
})
```
### Get PDF page count
```
macos_pdf_page_count({ path: "/path/to/document.pdf" })
```
### Create a note
```
macos_note_create({
name: "Meeting Notes",
body: "Discussion points...",
folder: "Work"
})
```
## Requirements
- Node.js 18+
- macOS (uses AppleScript for all operations)
## How It Works
All operations use AppleScript via `osascript` to interact with macOS system features. This provides native dialog appearances and full system integration.
## License
MIT
TDQS
Scored across 25 tools
Each tool has a clearly distinct purpose with no significant overlap. Tools are organized by functional domains like clipboard, images, notes, PDFs, file operations, and system utilities, making it easy for an agent to select the right tool. For example, macos_screenshot and macos_screenshot_clipboard serve different output destinations, and macos_pick_file, macos_pick_files, and macos_pick_folder handle distinct selection types.
All tool names follow a consistent 'macos_' prefix with snake_case and a clear verb_noun pattern, such as macos_clipboard_read, macos_image_convert, and macos_note_list. This uniformity enhances readability and predictability, allowing agents to easily understand and navigate the toolset without confusion from mixed conventions.
With 25 tools, the count is on the higher side for a macOS utility server, bordering on heavy. While it covers many common macOS operations comprehensively, it might feel overwhelming or redundant in some areas, such as multiple screenshot and file picker variants. A more streamlined set could improve usability without losing core functionality.
The toolset provides complete coverage for macOS automation tasks, including CRUD operations for notes, image and PDF manipulation, file system interactions, clipboard management, and system information. There are no obvious gaps; agents can perform end-to-end workflows like creating notes, processing images, and handling files without dead ends.