MCP Marketplace
BrowseHow It WorksFor CreatorsDocs
Sign inSign up
MCP Marketplace

The curated, security-first marketplace for AI tools.

Product

Browse ToolsSubmit a ToolDocumentationHow It WorksBlogFAQ

Legal

Terms of ServicePrivacy PolicyCommunity Guidelines

Connect

support@mcp-marketplace.ioTwitter / XDiscord

MCP Marketplace © 2026. All rights reserved.

Back to Browse

Macos MCP Server

by Aernouddekker
Developer ToolsLow Risk10.0MCP RegistryLocal
Free

Server data from the Official MCP Registry

MCP server for macOS printing — wraps CUPS (lp/lpstat/lpoptions) for printer discovery and printing

About

MCP server for macOS printing — wraps CUPS (lp/lpstat/lpoptions) for printer discovery and printing

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (3 strong, 7 medium validity signals). No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry. Trust signals: trusted author (7/7 approved). 1 finding(s) downgraded by scanner intelligence.

11 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-aernouddekker-printmcp": {
      "args": [
        "-y",
        "@aernoud/printmcp"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

macos-mcp

MCP servers for macOS native apps — gives Claude Code, Claude Desktop, and any MCP client native access to Mail, Numbers, Contacts, Calendar, Reminders, and FaceTime / phone calls.

No API keys, no OAuth, no cloud services. Talks directly to macOS apps via AppleScript and URL schemes (tel://, facetime://). Runs locally on your Mac.

CUPS printing (printmcp) used to live here; it moved to office-mcp since it's a shell wrapper, not an AppleScript bridge.

Servers

Mail (mailappmcp) — 21 tools

Works with every email account configured in Mail.app — iCloud, Gmail, Outlook, Fastmail, you name it.

ToolDescription
list-mailboxesList all mailboxes across all accounts with unread counts
list-accountsList configured mail accounts with email addresses and type
list-signaturesList available email signatures
search-messagesSearch messages by subject or sender (empty query lists all)
read-messageRead the full content of a specific email
get-message-sourceGet raw RFC822 source of a message
list-attachmentsList attachments on a message with name, MIME type, size
save-attachmentSave email attachments to disk
compose-messageCreate a draft in Mail.app (does not send) — supports plain or HTML body via htmlBody, plus attachments
send-messageSend an email immediately (supports from, attachments, plain or HTML body via htmlBody)
reply-to-messageReply or reply-all to a message (supports attachments)
forward-messageForward a message to new recipients
redirect-messageRedirect a message (preserves original sender)
move-messagesMove messages between mailboxes
delete-messagesDelete messages by Message-ID
mark-as-readMark messages as read
mark-as-junkMark/unmark messages as junk
flag-messageFlag/unflag messages with color support
set-message-colorSet background color of messages in the message list
check-for-new-mailTrigger a mail fetch for one or all accounts
extract-email-addressParse "John Doe <jdoe@example.com>" into name and address

Numbers (numbersmcp) — 29 tools

Works with any open Numbers spreadsheet.

ToolDescription
list-spreadsheetsList all open Numbers documents
create-documentCreate a new Numbers document
list-sheetsList sheets and tables in a document
get-active-sheetGet the currently active sheet
read-rangeRead cell values from a range (e.g. "A1:C10")
read-tableRead an entire table as structured data
write-cellWrite a value to a specific cell
write-rangeWrite multiple values to a range
clear-rangeClear contents and formatting of a cell range
get-formulaGet the formula from a cell
set-formulaSet a formula on a cell
add-rowAppend a row to a table
delete-rowDelete a row from a table
add-columnAdd a column to a table
delete-columnDelete a column from a table
resize-row-columnSet row height or column width
add-sheetAdd a new sheet to a document
delete-sheetDelete a sheet from a document
rename-sheetRename a sheet
add-tableAdd a new table to a sheet
delete-tableDelete a table from a sheet
rename-tableRename a table
sort-tableSort a table by a column
transpose-tableSwap rows and columns of a table
merge-cellsMerge a range of cells
unmerge-cellsUnmerge previously merged cells
set-cell-formatSet cell format (number, currency, date, percentage, etc.)
set-cell-styleSet font, color, background, bold, italic, alignment
export-documentExport to PDF, Excel, or CSV

Contacts (@aernoud/contactsmcp) — 15 tools

Works with the system address book — all accounts synced to Contacts.app.

ToolDescription
search-contactsSearch contacts by name, email, or phone
search-by-modification-dateFind contacts modified after a given date
read-contactGet full contact details
get-my-cardGet the user's own contact card
get-vcardExport a contact as vCard 3.0 text
create-contactCreate a new contact
update-contactUpdate contact fields
delete-contactDelete a contact
list-groupsList all contact groups
create-groupCreate a new contact group
rename-groupRename a contact group
delete-groupDelete a contact group
add-to-groupAdd a contact to a group
remove-from-groupRemove a contact from a group
list-group-membersList all contacts in a group

Calendar (calendarmcp) — 25 tools

Works with every calendar configured in Calendar.app — iCloud, Google, Exchange, local, you name it.

ToolDescription
list-calendarsList all calendars with name, writable flag, description
get-calendarGet properties of a single calendar by name (incl. event count)
create-calendarCreate a new calendar
update-calendarRename a calendar or set its description
delete-calendarNot supported by Calendar.app — returns a descriptive error; calendars must be removed from the Calendar.app UI
switch-viewSwitch Calendar.app to day/week/month view, optionally jumping to a date
reload-calendarsForce Calendar.app to refresh from accounts
list-eventsList events in a calendar between two ISO dates
search-eventsSearch events by summary substring within a date window (defaults: −30d to +365d). Scope to a single calendar for speed
get-eventGet full event details by uid
create-eventCreate an event with summary, start, end, optional location/description/url
update-eventPatch any event field by uid
delete-eventDelete an event by uid
move-eventMove an event to another calendar (delete + recreate; new uid)
duplicate-eventDuplicate an event into the same or another calendar
today-eventsList today's events in one calendar or across all
upcoming-eventsList events in the next N days
list-attendeesList attendees on an event
add-attendeeAdd an attendee with email and optional display name
remove-attendeeRemove an attendee by email
list-alarmsList display, mail, and sound alarms on an event
add-display-alarmAdd a display alarm N minutes before event start
add-sound-alarmAdd a sound alarm N minutes before event start
add-mail-alarmAdd a mail alarm N minutes before event start
remove-alarmRemove an alarm by 1-based index from list-alarms output

Reminders (@aernoud/remindersmcp) — 22 tools

Works with every reminder list configured in Reminders.app — iCloud, Exchange, local, you name it.

ToolDescription
list-accountsList all accounts in Reminders.app with name and id
list-listsList every reminder list, optionally scoped to one account
get-listGet properties of a single list (id, account, color, emblem, open + completed counts)
create-listCreate a new list, optionally in a specific account
update-listRename a list
delete-listDelete a list (Reminders.app supports this directly via AppleScript, unlike Calendar.app)
show-listBring a list to the front in Reminders.app
list-remindersList reminders in a named list (excludes completed by default)
search-remindersSearch reminders by name substring; scope to one list for speed
get-reminderGet full reminder details by id
today-remindersList reminders due today, scoped to one list or all
upcoming-remindersList reminders due in the next N days
overdue-remindersList reminders past their due date and not yet completed
create-reminderCreate a reminder with body, due date or all-day due date, remind-me date, priority, flagged
update-reminderPatch any reminder field by id
delete-reminderDelete a reminder by id
complete-reminderMark a reminder as completed (Reminders auto-stamps completion date)
uncomplete-reminderMark a previously completed reminder as not completed
move-reminderMove a reminder to a different list (uses the native move verb — id is preserved)
flag-reminderSet or clear the flagged state
set-prioritySet priority to none / high / medium / low (mapped to Reminders' 0/1/5/9 enum)
show-reminderBring Reminders.app to the front and focus a specific reminder

FaceTime (facetimemcp) — 3 tools

Initiates calls by handing URL schemes to open. Phone calls require an iPhone paired via Continuity (so macOS can route them through your phone).

ToolDescription
call-phonePlace a cellular call via paired iPhone (tel://)
call-facetime-audioStart a FaceTime audio call to a phone number or Apple ID email
call-facetime-videoStart a FaceTime video call to a phone number or Apple ID email

Phone numbers are normalized + validated as E.164 (+15551234567); spaces, dashes, and parens are tolerated. macOS may show a confirmation prompt before dialing — there is no fully silent dial path, by design.

Requirements

  • macOS (uses AppleScript — won't work on Linux/Windows)
  • Node.js 18+

Install

From npm

npm install -g mailappmcp            # Mail server
npm install -g numbersmcp            # Numbers server
npm install -g @aernoud/contactsmcp  # Contacts server
npm install -g @aernoud/calendarmcp  # Calendar server
npm install -g @aernoud/remindersmcp # Reminders server
npm install -g @aernoud/facetimemcp  # FaceTime / phone calls

From source

git clone https://github.com/aernouddekker/macos-mcp.git
cd macos-mcp
npm install
npm run build

Configure

Claude Code

Add to ~/.claude/settings.json or your project's .mcp.json:

{
  "mcpServers": {
    "mailappmcp":   { "command": "npx", "args": ["-y", "mailappmcp"] },
    "numbersmcp":   { "command": "npx", "args": ["-y", "numbersmcp"] },
    "contactsmcp":  { "command": "npx", "args": ["-y", "@aernoud/contactsmcp"] },
    "calendarmcp":  { "command": "npx", "args": ["-y", "@aernoud/calendarmcp"] },
    "remindersmcp": { "command": "npx", "args": ["-y", "@aernoud/remindersmcp"] },
    "facetimemcp":  { "command": "npx", "args": ["-y", "@aernoud/facetimemcp"] }
  }
}

Claude Desktop / Cowork

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "mailappmcp":   { "command": "npx", "args": ["-y", "mailappmcp"] },
    "numbersmcp":   { "command": "npx", "args": ["-y", "numbersmcp"] },
    "contactsmcp":  { "command": "npx", "args": ["-y", "@aernoud/contactsmcp"] },
    "calendarmcp":  { "command": "npx", "args": ["-y", "@aernoud/calendarmcp"] },
    "remindersmcp": { "command": "npx", "args": ["-y", "@aernoud/remindersmcp"] },
    "facetimemcp":  { "command": "npx", "args": ["-y", "@aernoud/facetimemcp"] }
  }
}

How it works

Each server runs locally over stdio. The Mail, Numbers, and Contacts servers build AppleScript strings, execute them via osascript, and parse the structured output back into JSON. The Print server shells out to CUPS (lp, lpstat, lpoptions, cancel); the FaceTime server hands tel:// / facetime:// URLs to open. A shared package (@mailappmcp/shared) provides the AppleScript runner, the generic command runner (runCommand), string escaping, and delimiter-based parsing.

App lifecycle — leave as found

Mail, Calendar, Contacts, and Reminders need their respective app running to respond to AppleScript. Rather than requiring you to keep those apps open, each server auto-launches them on first use and cleans up afterwards:

  • On the first tool call that touches an app, the server checks (via pgrep) whether the app is already running. If not, it launches it in the background (open -g -a) without stealing focus, and waits up to 5 seconds for the app to accept AppleEvents before running the tool.
  • That state is remembered in-process for the lifetime of the MCP server. Subsequent tool calls against the same app skip the probe and reuse the running app — no repeated launch penalty.
  • On server shutdown (SIGTERM / SIGINT / SIGHUP / normal exit — e.g. when Claude Desktop disconnects the server or the chat ends), the server quits only the apps it launched. Apps you had open before the server started are left alone.
  • Edge case: if the server is force-killed (SIGKILL), the exit handler can't run, so any auto-launched apps stay running. Same as if you'd never had the server.

This means you can use the tools without worrying about a pile of half-launched apps lingering after the session, and without the servers killing apps you were actively using.

Safety

  • compose-message opens a visible draft — you review before sending
  • send-message is a separate, explicit action
  • reply-to-message and forward-message default to draft mode (sendImmediately: false)
  • delete-messages moves to Trash (standard Mail.app behavior)

HTML email

compose-message and send-message accept an optional htmlBody parameter. When supplied, the message is created as a rich-text/HTML message and the recipient sees rendered formatting (headings, bold, lists, clickable links) instead of raw tags. body is still required and is used as the plain-text fallback for clients that read plain content. Omit htmlBody for the existing plain-text behavior — fully backward compatible.

// send-message with HTML body
{
  "to": ["alice@example.com"],
  "subject": "Weekly update",
  "body": "Highlights:\n- Shipped feature X\n- Fixed bug Y",
  "htmlBody": "<h2>Highlights</h2><ul><li>Shipped <b>feature X</b></li><li>Fixed bug Y — see <a href=\"https://example.com/issue/42\">#42</a></li></ul>"
}

Under the hood, the HTML path uses JXA (osascript -l JavaScript) and Mail.app's runtime htmlContent setter on outgoing messages. The plain-text path still uses ordinary AppleScript.

Known limitations

General

  • osascript has a 30-second timeout per call
  • Apps are auto-launched on first use and quit on server shutdown if they weren't running beforehand — see App lifecycle

Mail

  • content contains searches in AppleScript can be slow on large mailboxes — Mail server searches subject and sender by default

Numbers

  • Numbers tools require an open document

Calendar

These are limitations of Calendar.app's AppleScript interface itself, not the MCP server:

  • Calendars cannot be deleted via AppleScript. delete calendar raises -10000 (AppleEvent handler failed) on every modern macOS version. The delete-calendar tool checks that the calendar exists and then returns a descriptive error — you must remove calendars manually from the Calendar.app sidebar (right-click → Delete).
  • Calendars have no usable id/uid. Calendar.app's calendar class does not expose a stable id via AppleScript (uid of raises -10000). All calendar tools therefore identify calendars by name — make sure your calendar names are unique.
  • whose filters are O(n) over events. AppleScript scans every event in a calendar to evaluate whose start date ≥ X predicates. On a busy multi-calendar store, even an empty 7-day query across all calendars can take 60+ seconds and exceed the 30 s osascript timeout. Always pass a calendarName to list-events, search-events, today-events, and upcoming-events when possible to scope the scan. search-events additionally enforces a date window (default: −30 days to +365 days).
  • move-event reassigns the uid. Calendar.app cannot reparent an event between calendars. The tool deletes the source event and creates a new one in the target calendar; the new event has a fresh uid (returned as newUid alongside oldUid).
  • Recurrence is exposed as raw RRULE strings (e.g. FREQ=WEEKLY;INTERVAL=1) — read and write only, no parsing or expansion.

License

MIT

Reviews

No reviews yet

Be the first to review this server!

0

installs

New

no ratings yet

Is this your server?

Claim ownership to manage your listing, respond to reviews, and track installs from your dashboard.

Claim with GitHub

Sign up with the GitHub account that owns this repo

Links

Source Codenpm Package

Details

Published April 9, 2026
Version 0.1.2
0 installs
Local Plugin

More Developer Tools MCP Servers

Fetch

Free

by Modelcontextprotocol · Developer Tools

Web content fetching and conversion for efficient LLM usage

80.0K
Stars
3
Installs
5.3
Security
No ratings yet
Local

Toleno

Free

by Toleno · Developer Tools

Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.

137
Stars
473
Installs
8.0
Security
4.8
Local

mcp-creator-python

Free

by mcp-marketplace · Developer Tools

Create, build, and publish Python MCP servers to PyPI — conversationally.

-
Stars
61
Installs
10.0
Security
4.6
Local

MarkItDown

Free

by Microsoft · Content & Media

Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption

120.0K
Stars
20
Installs
6.0
Security
5.0
Local

mcp-creator-typescript

Free

by mcp-marketplace · Developer Tools

Scaffold, build, and publish TypeScript MCP servers to npm — conversationally

-
Stars
16
Installs
10.0
Security
5.0
Local

FinAgent

Free

by mcp-marketplace · Finance

Free stock data and market news for any MCP-compatible AI assistant.

-
Stars
15
Installs
10.0
Security
No ratings yet
Local