apple-notifier-mcp

apple-notifier-mcp

A simple MCP server that can send notifications on mac devices.

turlockmike

OS Automation
Visit Server

Tools

send_notification

Send a notification on macOS using osascript

prompt_user

Display a dialog prompt to get user input

speak

Speak text using macOS text-to-speech

take_screenshot

Take a screenshot using macOS screencapture

select_file

Open native file picker dialog

README

Apple Notifier MCP Server

smithery badge Send native macOS notifications and interact with system dialogs through any MCP-compatible client like Claude Desktop or Cline.

<a href="https://glama.ai/mcp/servers/t1w1dq4wy4"><img width="380" height="200" src="https://glama.ai/mcp/servers/t1w1dq4wy4/badge" alt="apple-notifier-mcp MCP server" /></a>

Prerequisites

  • macOS
  • Node.js >= 18
  • An MCP-compatible client (Claude Desktop, Cline)

Installation

Installing via Smithery

To install Apple Notifier for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install apple-notifier-mcp --client claude

Manual Installation

  1. Install the package globally:
npm install -g apple-notifier-mcp
  1. Add to your MCP configuration file:

For Cline (cline_mcp_settings.json):

{
  "mcpServers": {
    "apple-notifier": {
      "command": "apple-notifier-mcp"
    }
  }
}

For Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "apple-notifier": {
      "command": "apple-notifier-mcp"
    }
  }
}

Features

Send Notifications

Display native macOS notifications with customizable content.

Parameters:

  • title (required): string - The title of the notification
  • message (required): string - The main message content
  • subtitle (optional): string - A subtitle to display
  • sound (optional): boolean - Whether to play the default notification sound (default: true)

Display Prompts

Show interactive dialog prompts to get user input.

Parameters:

  • message (required): string - Text to display in the prompt dialog
  • defaultAnswer (optional): string - Default text to pre-fill
  • buttons (optional): string[] - Custom button labels (max 3)
  • icon (optional): 'note' | 'stop' | 'caution' - Icon to display

Text-to-Speech

Use macOS text-to-speech capabilities.

Parameters:

  • text (required): string - Text to speak
  • voice (optional): string - Voice to use (defaults to system voice)
  • rate (optional): number - Speech rate (-50 to 50, defaults to 0)

Take Screenshots

Capture screenshots using macOS screencapture.

Parameters:

  • path (required): string - Path where to save the screenshot
  • type (required): 'fullscreen' | 'window' | 'selection' - Type of screenshot
  • format (optional): 'png' | 'jpg' | 'pdf' | 'tiff' - Image format
  • hideCursor (optional): boolean - Whether to hide the cursor
  • shadow (optional): boolean - Whether to include window shadow (only for window type)
  • timestamp (optional): boolean - Add timestamp to filename

File Selection

Open native macOS file picker dialog.

Parameters:

  • prompt (optional): string - Prompt message
  • defaultLocation (optional): string - Default directory path
  • fileTypes (optional): object - File type filter (e.g., {"public.image": ["png", "jpg"]})
  • multiple (optional): boolean - Allow multiple file selection

Example Usage

// Send a notification
await client.use_mcp_tool("apple-notifier", "send_notification", {
  title: "Hello",
  message: "World",
  sound: true
});

// Show a prompt
const result = await client.use_mcp_tool("apple-notifier", "prompt_user", {
  message: "What's your name?",
  defaultAnswer: "John Doe",
  buttons: ["OK", "Cancel"]
});

// Speak text
await client.use_mcp_tool("apple-notifier", "speak", {
  text: "Hello, world!",
  voice: "Samantha",
  rate: -20
});

// Take a screenshot
await client.use_mcp_tool("apple-notifier", "take_screenshot", {
  path: "screenshot.png",
  type: "window",
  format: "png"
});

// Select files
const files = await client.use_mcp_tool("apple-notifier", "select_file", {
  prompt: "Select images",
  fileTypes: {
    "public.image": ["png", "jpg", "jpeg"]
  },
  multiple: true
});

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

MIT License - see the LICENSE file for details.

Recommended Servers

Claude Code MCP

Claude Code MCP

An implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.

Featured
Local
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

Model Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.

Featured
Local
JavaScript
Beamlit MCP Server

Beamlit MCP Server

An MCP server implementation that enables seamless integration between Beamlit CLI and AI models using the Model Context Protocol standard.

Official
TypeScript
ThingsPanel MCP

ThingsPanel MCP

An integration server that connects AI models with ThingsPanel IoT platform, allowing AI assistants to interact with IoT devices through natural language for device control, data retrieval, and management operations.

Official
Python
systemd-coredump MCP Server

systemd-coredump MCP Server

Enables MCP-capable applications to access, manage, and analyze system core dumps through integration with systemd-coredump functionality.

Local
JavaScript
Terminal Controller for MCP

Terminal Controller for MCP

An MCP server that enables secure terminal command execution, directory navigation, and file system operations through a standardized interface for LLMs.

Local
Python
Apple Shortcuts Server

Apple Shortcuts Server

An MCP Server Integration with Apple Shortcuts

Local
JavaScript
mac-apps-launcher

mac-apps-launcher

An MCP server to list and launch applications on MacOS

Local
JavaScript
applescript-mcp

applescript-mcp

Enables LLM applications to interact with macOS through AppleScript.

Local
TypeScript
Bazel MCP Server

Bazel MCP Server

A local MCP server that exposes Bazel build system functionality to AI agents, allowing them to build, test, query, and manage Bazel projects through natural language even in environments where Bazel can't be directly accessed.

Local
JavaScript