Apple MCP Tools
This server allows AI assistants like Claude to interact with Apple applications and services through the Model Context Protocol (MCP).
Contacts: Search and retrieve contacts
Notes: Search, retrieve, create notes, and manage folders
Messages: Send, read, schedule, and check unread messages
Mail: Read unread emails, search emails, send emails, and list mailboxes/accounts
Reminders: Search, create, list, and open reminders
Calendar: Search, create, list, and open events
Maps: Search locations, manage guides, save favorites, get directions, and manipulate map coordinates
Web Search: Search the web using DuckDuckGo and retrieve content from results
Provides tools for interacting with various Apple applications including Contacts, Notes, Messages, Mail, Reminders, Calendar, and Maps, allowing users to search, create, and manage content within these native macOS applications.
Allows web searches using DuckDuckGo's search engine and retrieval of content from search results.
Enables integration with macOS applications and services, providing access to system features through AppleScript for managing personal information and communication.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple MCP Toolscreate a reminder to call mom tomorrow at 5pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple MCP (Model Context Protocol) Tools
A collection of tools that allow AI assistants like Claude to interact with Apple applications and services through the Model Context Protocol (MCP).
Overview
This package provides MCP tools for interacting with various Apple applications and services, including:
Contacts: Search and retrieve contacts from Apple Contacts app
Notes: Search, retrieve, create notes, and list folders in Apple Notes app
Messages: Send, read, schedule messages and check unread messages
Mail: Read unread emails, search emails, and send emails
Reminders: Search, create, and open reminders in Apple Reminders app
Calendar: Search, create, and open calendar events in Apple Calendar app
Maps: Search locations, manage guides, save favorites, and get directions
Web Search: Search the web using DuckDuckGo and retrieve content from search results
Related MCP server: MCP Personal Assistant Agent
Installation
# Install with npm
npm install @sage/mcp-apple
# Install with yarn
yarn add @sage/mcp-apple
# Install with bun
bun add @sage/mcp-appleRequirements
macOS operating system
Node.js 18+ or Bun runtime
Appropriate permissions for accessing Apple applications (Contacts, Notes, Messages, Mail, etc.)
Usage
Starting the MCP Server
# Using the CLI
npx apple-mcp
# Using bun
bun run devConnecting to Claude
To use these tools with Claude, you'll need to connect the MCP server to Claude. This can be done using the MCP proxy or directly through Claude's interface if available.
# Example using mcp-proxy
mcp-proxy --server "bun run /path/to/apple-mcp/index.ts"Tool Examples
Contacts
// Search for a contact by name
{
"operation": "contacts",
"name": "John Doe"
}
// List all contacts
{
"operation": "contacts"
}Notes
// Search for notes containing specific text
{
"operation": "notes",
"operation": "search",
"searchText": "meeting notes"
}
// Create a new note
{
"operation": "notes",
"operation": "create",
"title": "Shopping List",
"body": "- Milk\n- Eggs\n- Bread",
"folderName": "Personal"
}
// List all notes in a folder
{
"operation": "notes",
"operation": "list",
"folderName": "Work"
}
// List all folders
{
"operation": "notes",
"operation": "listFolders"
}
// Create a new folder
{
"operation": "notes",
"operation": "createFolder",
"folderName": "Projects"
}Messages
// Send a message
{
"operation": "messages",
"operation": "send",
"phoneNumber": "+1234567890",
"message": "Hello, how are you?"
}
// Read messages from a contact
{
"operation": "messages",
"operation": "read",
"phoneNumber": "+1234567890",
"limit": 5
}
// Schedule a message
{
"operation": "messages",
"operation": "schedule",
"phoneNumber": "+1234567890",
"message": "Don't forget our meeting tomorrow!",
"scheduledTime": "2023-12-01T09:00:00Z"
}
// Check unread messages
{
"operation": "messages",
"operation": "unread"
}// Check unread emails
{
"operation": "mail",
"operation": "unread",
"limit": 10
}
// Search emails
{
"operation": "mail",
"operation": "search",
"searchTerm": "invoice",
"limit": 5
}
// Send an email
{
"operation": "mail",
"operation": "send",
"to": "recipient@example.com",
"subject": "Meeting Agenda",
"body": "Here's the agenda for our meeting tomorrow...",
"cc": "colleague@example.com"
}
// List mailboxes
{
"operation": "mail",
"operation": "mailboxes"
}
// List accounts
{
"operation": "mail",
"operation": "accounts"
}Reminders
// List all reminders
{
"operation": "reminders",
"operation": "list"
}
// Search for reminders
{
"operation": "reminders",
"operation": "search",
"searchText": "groceries"
}
// Create a reminder
{
"operation": "reminders",
"operation": "create",
"name": "Buy milk",
"listName": "Shopping",
"notes": "Get organic milk",
"dueDate": "2023-12-01T18:00:00Z"
}
// Open a reminder
{
"operation": "reminders",
"operation": "open",
"searchText": "Buy milk"
}
// List reminders by list ID
{
"operation": "reminders",
"operation": "listById",
"listId": "x-apple-reminder://list/123456"
}Calendar
// Search for events
{
"operation": "calendar",
"operation": "search",
"searchText": "meeting",
"fromDate": "2023-12-01T00:00:00Z",
"toDate": "2023-12-31T23:59:59Z"
}
// List upcoming events
{
"operation": "calendar",
"operation": "list",
"limit": 5
}
// Create an event
{
"operation": "calendar",
"operation": "create",
"title": "Team Meeting",
"startDate": "2023-12-05T14:00:00Z",
"endDate": "2023-12-05T15:00:00Z",
"location": "Conference Room A",
"notes": "Quarterly review meeting",
"isAllDay": false,
"calendarName": "Work"
}
// Open an event
{
"operation": "calendar",
"operation": "open",
"eventId": "x-apple-calendar://event/123456"
}Maps
// Search for locations
{
"operation": "maps",
"operation": "search",
"query": "coffee shops near me",
"limit": 5
}
// Save a location
{
"operation": "maps",
"operation": "save",
"name": "Favorite Coffee Shop",
"address": "123 Main St, Anytown, USA"
}
// Get directions
{
"operation": "maps",
"operation": "directions",
"fromAddress": "123 Main St, Anytown, USA",
"toAddress": "456 Oak Ave, Anytown, USA",
"transportType": "driving"
}
// Drop a pin
{
"operation": "maps",
"operation": "pin",
"name": "Meeting Point",
"address": "Central Park, New York, NY"
}
// List guides
{
"operation": "maps",
"operation": "listGuides"
}
// Create a guide
{
"operation": "maps",
"operation": "createGuide",
"guideName": "Favorite Restaurants"
}
// Add to guide
{
"operation": "maps",
"operation": "addToGuide",
"guideName": "Favorite Restaurants",
"address": "789 Pine St, Anytown, USA"
}
// Get map center coordinates
{
"operation": "maps",
"operation": "getCenter"
}
// Set map center coordinates
{
"operation": "maps",
"operation": "setCenter",
"latitude": 37.7749,
"longitude": -122.4194
}Web Search
// Search the web
{
"operation": "webSearch",
"query": "how to make chocolate chip cookies"
}Architecture
The Apple MCP tool is built with a modular architecture:
index.ts: Main entry point that sets up the MCP server and registers tools
tools.ts: Defines the tool schemas and descriptions
src/handlers/: Contains handler functions for each tool
src/scripts/: Contains AppleScript scripts for interacting with Apple applications
utils/: Contains utility modules for each Apple service
The tool uses lazy loading to improve performance, only loading modules when they are needed.
Security and Permissions
This tool requires access to various Apple applications and services. You will need to grant permissions when prompted by macOS. These permissions can be managed in System Preferences > Security & Privacy > Privacy.
Development
Setup
# Clone the repository
git clone https://github.com/yourusername/apple-mcp.git
cd apple-mcp
# Install dependencies
bun installRunning in Development Mode
bun run devCode Style
Use 2-space indentation
Keep lines under 100 characters
Use explicit type annotations for function parameters and returns
Follow PascalCase for types, interfaces, and Tool constants
Use camelCase for variables and functions
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Available Tools
8 toolscalendarC
Search, create, and open calendar events in Apple Calendar app
| Name | Required | Description | Default |
|---|---|---|---|
| calendarName | No | Name of the calendar to create the event in (optional for create operation, uses default calendar if not specified) | |
| endDate | No | End date/time of the event in ISO format (required for create operation) | |
| eventId | No | ID of the event to open (required for open operation) | |
| fromDate | No | Start date for search range in ISO format (optional, default is today) | |
| isAllDay | No | Whether the event is an all-day event (optional for create operation, default is false) | |
| limit | No | Number of events to retrieve (optional, default 10) | |
| location | No | Location of the event (optional for create operation) | |
| notes | No | Additional notes for the event (optional for create operation) | |
| operation | Yes | Operation to perform: 'search', 'open', 'list', or 'create' | |
| searchText | No | Text to search for in event titles, locations, and notes (required for search operation) | |
| startDate | No | Start date/time of the event in ISO format (required for create operation) | |
| title | No | Title of the event to create (required for create operation) | |
| toDate | No | End date for search range in ISO format (optional, default is 30 days from now for search, 7 days for list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but provides minimal information. It mentions the Apple Calendar app context but doesn't describe what happens during operations (e.g., whether 'create' opens the app, saves automatically, requires confirmation), error conditions, rate limits, or permission requirements. For a multi-operation tool with 13 parameters, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just 8 words, front-loading the core functionality without any wasted words. It efficiently communicates the three main operations and target application in a single, clear phrase.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 13 parameters, 4 distinct operations, and no annotations or output schema, the description is inadequate. It doesn't explain what the tool returns for different operations, how operations differ behaviorally, what happens in the Apple Calendar app, or any system dependencies. The agent would struggle to use this tool effectively based solely on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no parameter-specific information beyond what's already in the schema, which has 100% coverage. While the schema thoroughly documents all 13 parameters with descriptions and requirements, the description doesn't add any additional context about parameter interactions, default behaviors, or usage patterns across different operations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Search, create, and open calendar events in Apple Calendar app', which specifies the actions (search, create, open) and resource (calendar events). It distinguishes from siblings like contacts or mail by focusing on calendar events, though it doesn't explicitly differentiate from other potential calendar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'search' vs 'list' operations, when to use this tool over other calendar management options, or any prerequisites for operations like 'create' that might require specific permissions or app states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contactsB
Search and retrieve contacts from Apple Contacts app
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name to search for (optional - if not provided, returns all contacts). Can be partial name to search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool searches and retrieves contacts, implying a read-only operation, but doesn't specify permissions needed, whether it accesses local or synced data, rate limits, or what the return format looks like (e.g., list of contacts with fields). This leaves significant gaps for a tool interacting with personal data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core purpose ('Search and retrieve contacts') and specifies the source ('from Apple Contacts app'), making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (searching personal contacts), lack of annotations, and no output schema, the description is minimally adequate. It states what the tool does but omits critical context like return format, error handling, or data sensitivity considerations. It relies heavily on the schema for parameter details, leaving behavioral aspects underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the single optional parameter. The description adds no additional parameter semantics beyond what's in the schema (e.g., no examples of search syntax or format). This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Search and retrieve') and resource ('contacts from Apple Contacts app'). It distinguishes itself from siblings like calendar or mail by focusing on contacts, but doesn't explicitly differentiate from potential contact-related tools that might exist in other contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, limitations, or scenarios where other tools might be more appropriate. The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailC
Interact with Apple Mail app - read unread emails, search emails, and send emails
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Email account to use (optional - if not provided, searches across all accounts) | |
| bcc | No | BCC email address (optional for send operation) | |
| body | No | Email body content (required for send operation) | |
| cc | No | CC email address (optional for send operation) | |
| limit | No | Number of emails to retrieve (optional, for unread and search operations) | |
| mailbox | No | Mailbox to use (optional - if not provided, uses inbox or searches across all mailboxes) | |
| operation | Yes | Operation to perform: 'unread', 'search', 'send', 'mailboxes', or 'accounts' | |
| searchTerm | No | Text to search for in emails (required for search operation) | |
| subject | No | Email subject (required for send operation) | |
| to | No | Recipient email address (required for send operation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions three operations but omits two ('mailboxes' and 'accounts') listed in the schema. It doesn't describe authentication requirements, rate limits, error conditions, or what 'interact' entails beyond basic operations. The description is incomplete for a multi-operation tool with 10 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in a single sentence listing three main operations. However, it omits two operations from the schema ('mailboxes' and 'accounts'), making it slightly incomplete despite its brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 10 parameters, 5 operations, and no annotations or output schema, the description is inadequate. It doesn't explain operation differences, return formats, error handling, or prerequisites. The agent would struggle to use this tool correctly without trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 10 parameters. The description adds no parameter-specific information beyond what's in the schema. It mentions operations but doesn't clarify which parameters apply to which operations. Baseline 3 is appropriate when schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Interact with Apple Mail app' with specific verbs (read, search, send) and resources (emails). It distinguishes from siblings by focusing on email functionality rather than calendar, contacts, etc., but doesn't differentiate between email operations within the tool itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use specific operations (unread vs search vs send) or when to choose this tool over sibling tools. It lists capabilities but offers no decision criteria or context for selection among the five operation types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mapsC
Search locations, manage guides, save favorites, and get directions using Apple Maps
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Address of the location (required for save, pin, addToGuide) | |
| fromAddress | No | Starting address for directions (required for directions) | |
| guideName | No | Name of the guide (required for createGuide and addToGuide) | |
| latitude | No | Latitude for the center point (required for setCenter) | |
| limit | No | Maximum number of results to return (optional for search) | |
| longitude | No | Longitude for the center point (required for setCenter) | |
| name | No | Name of the location (required for save and pin) | |
| operation | Yes | Operation to perform with Maps | |
| query | No | Search query for locations (required for search) | |
| toAddress | No | Destination address for directions (required for directions) | |
| transportType | No | Type of transport to use (optional for directions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what the tool can do but fails to describe critical behavioral traits like authentication requirements, rate limits, data persistence for saved items, whether operations are read-only or mutative, or what the return format looks like for different operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that lists all major functions without unnecessary words. It's appropriately sized and front-loaded with the core capabilities, making every word earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 11 parameters, 9 distinct operations, no annotations, and no output schema, the description is insufficient. It doesn't explain how operations differ, what results to expect, error conditions, or behavioral constraints. The description fails to compensate for the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions four functional areas (search, manage guides, save favorites, get directions) which loosely map to some of the 11 parameters, but with 100% schema description coverage, the schema already documents all parameters thoroughly. The description adds minimal value beyond what's in the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs (search, manage, save, get) and resources (locations, guides, favorites, directions) using Apple Maps. However, it doesn't differentiate this multi-function tool from its siblings like webSearch or calendar, which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like webSearch for general searches or other mapping tools. It lists functions but gives no context about appropriate use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
messagesC
Interact with Apple Messages app - send, read, schedule messages and check unread messages
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of messages to read (optional, for read and unread operations) | |
| message | No | Message to send (required for send and schedule operations) | |
| operation | Yes | Operation to perform: 'send', 'read', 'schedule', or 'unread' | |
| phoneNumber | No | Phone number to send message to (required for send, read, and schedule operations) | |
| scheduledTime | No | ISO string of when to send the message (required for schedule operation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions operations like 'send' and 'schedule,' which imply mutations, but doesn't state whether these require user confirmation, have rate limits, or affect device state. For a tool with multiple operations including writes, this is inadequate, as it omits critical behavioral traits like safety or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, stating the core purpose in a single sentence. It efficiently lists the four operations without unnecessary details. However, it could be slightly more structured by grouping related operations or adding brief context, but overall, it avoids waste and is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity with 5 parameters, multiple operations including mutations, no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects, usage contexts, or return values, leaving gaps that could hinder an AI agent's ability to invoke the tool correctly. For a multi-operation tool with no structured safety hints, more detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal meaning beyond the input schema, which has 100% coverage. It implies that parameters are tied to specific operations (e.g., 'message' for 'send'), but doesn't elaborate on semantics like format constraints or dependencies. Since the schema descriptions are comprehensive, the baseline score of 3 is appropriate, as the description doesn't significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Interact with Apple Messages app - send, read, schedule messages and check unread messages.' It specifies the verb ('interact with') and resource ('Apple Messages app'), and lists the four operations. However, it doesn't explicitly differentiate from sibling tools like 'contacts' or 'mail,' which could have overlapping communication functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lists operations but doesn't specify contexts, prerequisites, or exclusions. For example, it doesn't mention if 'schedule' requires specific permissions or if 'read' is limited to recent messages. With sibling tools like 'calendar' and 'reminders' that might handle scheduling, this lack of differentiation is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notesC
Search, retrieve, create notes, and list folders in Apple Notes app
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Content of the note to create (required for create operation) | |
| folderName | No | Name of the folder. Used to scope 'search'/'list', specify target for 'create' (note) or 'createFolder', or name the new folder for 'createFolder'. Optional for search/list/create (defaults to 'Claude' for create note). | |
| operation | Yes | Operation to perform: 'search', 'list', 'create', 'listFolders', or 'createFolder' | |
| searchText | No | Text to search for in notes (required for search operation) | |
| title | No | Title of the note to create (required for create operation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it lists operations, it doesn't describe what 'retrieve' means (is it fetch by ID? get latest?), doesn't mention authentication requirements, rate limits, error conditions, or what happens when creating duplicate folders. The description is functional but lacks important behavioral context for a multi-operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise - a single sentence listing the key operations. It's front-loaded with the most important information (search, retrieve, create, list). While efficient, it could be slightly more structured by separating operations or adding brief context about the Apple Notes integration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation tool (5 operations) with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'retrieve' means, doesn't describe return formats for any operation, and provides no context about error handling or Apple Notes-specific constraints. The complexity of the tool (multiple operations with different parameter requirements) demands more comprehensive description than provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly with clear descriptions of each field's purpose and requirements. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain parameter interactions, default behaviors, or edge cases. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs (search, retrieve, create, list) and resources (notes, folders in Apple Notes app). It distinguishes this tool from siblings like calendar or contacts by specifying the Apple Notes domain, though it doesn't explicitly differentiate from other note-taking tools that might exist in the ecosystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'search' versus 'list', when to create notes versus folders, or how this tool relates to sibling tools like reminders or messages for similar functionality. No explicit when/when-not statements or alternative recommendations are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remindersC
Search, create, and open reminders in Apple Reminders app
| Name | Required | Description | Default |
|---|---|---|---|
| dueDate | No | Due date for the reminder in ISO format (optional for create operation) | |
| listId | No | ID of the list to get reminders from (required for listById operation) | |
| listName | No | Name of the list to create the reminder in (optional for create operation) | |
| name | No | Name of the reminder to create (required for create operation) | |
| notes | No | Additional notes for the reminder (optional for create operation) | |
| operation | Yes | Operation to perform: 'list', 'search', 'open', 'create', or 'listById' | |
| props | No | Properties to include in the reminders (optional for listById operation) | |
| searchText | No | Text to search for in reminders (required for search and open operations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only mentions operations without behavioral details. It doesn't disclose permissions needed, rate limits, whether operations are destructive (e.g., 'create' modifies data), or how 'open' behaves. This leaves critical behavioral traits unspecified for a multi-operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads key operations. It avoids redundancy but could be more structured by clarifying operation distinctions. Every word earns its place, though it's slightly under-specified for a multi-operation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain return values, error conditions, or how operations interact with parameters (e.g., which params are needed for each operation). Given the complexity, more context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond listing operations, which the schema's 'operation' enum already covers. Baseline 3 is appropriate as the schema handles parameter semantics effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool can 'Search, create, and open reminders in Apple Reminders app', which provides a general purpose but lacks specificity about what 'reminders' are or how operations differ. It distinguishes from siblings like 'calendar' or 'notes' by mentioning 'Apple Reminders app', but doesn't clarify functional boundaries between operations (e.g., 'list' vs 'listById').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'notes' or 'calendar', or when to choose between operations (e.g., 'list' vs 'search'). The description lists operations but doesn't provide context for selection, leaving usage decisions to the agent without support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webSearchC
Search the web using DuckDuckGo and retrieve content from search results
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it mentions using DuckDuckGo and retrieving content from search results, it doesn't disclose important behavioral traits like rate limits, authentication requirements, result format, pagination behavior, or whether this is a read-only operation. The description is insufficient for a tool that interacts with external web services.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with a single sentence that efficiently communicates the core functionality. It's front-loaded with the main action ('Search the web') followed by implementation details. There's no wasted verbiage, though it could potentially benefit from slightly more detail given the lack of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of web search operations and the complete lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what kind of content is retrieved, how results are formatted, whether there are limitations on search scope, or what happens with no results. For a tool that interacts with external services and has no structured output documentation, this leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'query' clearly documented in the schema. The description adds no additional parameter semantics beyond what's already in the schema. According to the scoring guidelines, when schema coverage is high (>80%), the baseline is 3 even with no parameter information in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Search the web', 'retrieve content') and identifies the resource (web via DuckDuckGo). It distinguishes itself from sibling tools like calendar or mail by focusing on web search functionality. However, it doesn't explicitly differentiate from potential similar search tools that might exist in other contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, limitations, or specific scenarios where web search is preferred over other information retrieval methods. With sibling tools like notes and reminders available, there's no indication of when web search is the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
calendar - First observed
contacts - First observed
mail - First observed
maps - First observed
messages - First observed
notes - First observed
reminders - First observed
webSearch
TDQS
Scored across 8 tools
Each tool is clearly distinct, targeting a specific Apple app or service (Calendar, Contacts, Mail, Maps, Messages, Notes, Reminders, WebSearch). There is no overlap in purpose; an agent can easily differentiate between searching contacts versus searching the web or sending messages versus creating reminders.
Seven tools use lowercase, single-word names (calendar, contacts, mail, maps, messages, notes, reminders), which is consistent and readable. However, 'webSearch' deviates with camelCase, breaking the pattern and slightly reducing overall consistency.
With 8 tools, the server is well-scoped for its purpose of interacting with Apple apps and services. Each tool covers a distinct domain, and the count is neither too thin nor overwhelming, fitting typical MCP server ranges (3-15 tools).
The tool set provides comprehensive coverage for core Apple apps, including CRUD-like operations (e.g., search, create, read). Minor gaps exist, such as no explicit update or delete functions for some apps, but agents can likely work around this with the available search and create tools.
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
- geoOAuthco.thinair
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
- GoroOAuthai.usegoro
62 real-world tools for agents: search, scraping, social, enrichment, image, video, voice.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables semantic search and retrieval of Apple Notes content, allowing AI assistants to access, search, and create notes using on-device embeddings.2,008 npm2MIT
- FlicenseNot gradedqualityDmaintenanceA versatile Model Context Protocol server that enables AI assistants to manage calendars, track tasks, handle emails, search the web, and control smart home devices.23-
- FlicenseCqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with Apple Reminders on macOS, allowing users to view lists, retrieve, create, complete, and delete reminders through natural language.537-
- AlicenseAqualityDmaintenanceA collection of tools that enables Claude AI and Cursor to access native macOS applications such as Messages, Notes, Contacts, Emails, Reminders, Calendar, and Maps through the Model Context Protocol.7106 npm19MIT