Skip to main content
Glama

macOS MCP Servers for Claude Desktop

A collection of Model Context Protocol (MCP) servers that enable Claude Desktop to interact with native macOS applications including Spotify, Apple Music, Notes, Calendar, FaceTime, and Contacts.

Overview

This project provides 6 MCP servers that bridge the gap between Claude Desktop and your macOS native applications, with full GitHub Copilot integration for VS Code users:

  • Spotify MCP Server: Control Spotify playback, search tracks, manage playlists

  • Apple Music MCP Server: Control Apple Music, browse library, manage playlists

  • Notes MCP Server: Create, read, search, and manage Apple Notes

  • Calendar MCP Server: View and create calendar events, manage schedules

  • FaceTime MCP Server: Initiate video/audio calls, manage call settings

  • Contacts MCP Server: Search, create, update, and manage contacts

🚀 NEW: GitHub Copilot Integration

In addition to Claude Desktop, you can now use these servers directly in VS Code through GitHub Copilot Chat! Ask Copilot to control your macOS apps using natural language.

Related MCP server: Music MCP

Prerequisites

  • macOS (tested on macOS 13+)

  • Node.js 18+

  • Claude Desktop app

  • AppleScript permissions for the applications you want to control

Installation

For Claude Desktop

  1. Clone the repository:

    git clone <repository-url>
    cd project-2
  2. Install dependencies:

    npm install
  3. Build the TypeScript code:

    npm run build
  4. Configure Claude Desktop:

    Copy the provided claude_desktop_config.json to your Claude Desktop configuration directory:

    # On macOS, the config file should be placed at:
    cp claude_desktop_config.json ~/Library/Application\ Support/Claude/claude_desktop_config.json

    Or manually add the server configurations to your existing Claude Desktop config file.

For GitHub Copilot (VS Code)

  1. Complete the Claude Desktop installation steps above first

  2. Install the VS Code extension:

    cd vscode-extension
    npm install
    npm run compile
  3. Install the extension in VS Code:

    # Package the extension (run from vscode-extension directory)
    cd vscode-extension
    npx vsce package
    
    # Install in VS Code
    code --install-extension macos-mcp-servers-vscode-1.0.0.vsix
  4. Configure the extension:

    • Open VS Code settings (Cmd+,)

    • Search for "macOS MCP"

    • Set the project path to your compiled dist directory (e.g., /path/to/project-2/dist)

    • Or enable auto-detection if the project is in your workspace

  5. Grant necessary permissions:

    When you first use each server, macOS will prompt you to grant permissions for:

    • System Events (for keyboard shortcuts)

    • Individual apps (Spotify, Music, Notes, Calendar, FaceTime, Contacts)

    Grant these permissions in System Preferences > Security & Privacy > Privacy.

Configuration

The claude_desktop_config.json file contains the configuration for all 6 MCP servers. Make sure the paths point to your built JavaScript files:

{
  "mcpServers": {
    "spotify-mcp-server": {
      "command": "node",
      "args": ["/absolute/path/to/project-2/dist/spotify/index.js"]
    },
    // ... other servers
  }
}

Available Tools

Spotify MCP Server

  • get_current_track - Get information about the currently playing track

  • play_pause - Toggle play/pause

  • next_track / previous_track - Skip tracks

  • set_volume - Control volume (0-100)

  • search_tracks - Search for tracks

  • get_playlists - List user playlists

  • play_playlist - Play a specific playlist

  • toggle_shuffle / toggle_repeat - Control playback modes

  • set_position - Seek to specific position in track

Apple Music MCP Server

  • get_current_track - Get currently playing song info

  • play_pause - Toggle playback

  • next_track / previous_track - Skip tracks

  • set_volume - Control volume

  • search_library - Search Apple Music library

  • search_artist - Find artists

  • get_playlists - List playlists

  • play_playlist - Play specific playlist

  • toggle_shuffle / toggle_repeat - Playback controls

  • get_library_stats - Get library statistics

Notes MCP Server

  • create_note - Create new note with title and content

  • get_note - Retrieve specific note by title

  • search_notes - Search notes by content or title

  • update_note - Modify existing note content

  • delete_note - Remove a note

  • list_notes - Get all notes with basic info

  • get_folders - List note folders

  • create_folder - Create new note folder

Calendar MCP Server

  • get_today_events - Show today's calendar events

  • get_upcoming_events - Show future events (next 7 days)

  • create_event - Create new calendar event

  • search_events - Find events by title or content

  • get_event_details - Get detailed event information

  • list_calendars - Show available calendars

  • get_events_for_date - Get events for specific date

FaceTime MCP Server

  • start_facetime_call - Start video call with contact

  • start_facetime_audio_call - Start audio-only call

  • check_facetime_status - Check FaceTime availability

  • end_current_call - End active call

  • toggle_mute - Mute/unmute microphone

  • toggle_video - Turn camera on/off

Contacts MCP Server

  • search_contacts - Find contacts by name, email, or phone

  • get_contact_details - Get full contact information

  • create_contact - Add new contact

  • update_contact - Modify contact information

  • delete_contact - Remove contact

  • get_all_contacts - List all contacts (limited to 50)

  • get_contact_groups - Show contact groups

  • get_recent_contacts - Show recently added contacts

Usage Examples

Claude Desktop

Once configured, you can interact with your macOS apps through Claude Desktop:

  • "Play my workout playlist on Spotify"

  • "Create a note about today's meeting"

  • "What's on my calendar for tomorrow?"

  • "Start a FaceTime call with John"

  • "Find all contacts from Apple Inc"

  • "Pause the music and turn up the volume"

GitHub Copilot in VS Code

With the VS Code extension installed, you can use GitHub Copilot Chat with the @macos-mcp participant:

Chat Commands

  • @macos-mcp play my favorite playlist on Spotify

  • @macos-mcp create a note called "Meeting Notes"

  • @macos-mcp what's on my calendar today?

  • @macos-mcp call mom on FaceTime

  • @macos-mcp search contacts for John

  • @macos-mcp pause the music

Command Palette

You can also use VS Code's Command Palette (Cmd+Shift+P) to access quick actions:

  • macOS MCP: Get Current Spotify Track

  • macOS MCP: Spotify Play/Pause

  • macOS MCP: Create Apple Note

  • macOS MCP: Get Today's Calendar Events

  • macOS MCP: Search Contacts

  • macOS MCP: Start FaceTime Call

Example Conversations

Music Control:

You: @macos-mcp what's currently playing on Spotify?
Copilot: 🎵 Current Track: "Bohemian Rhapsody" by Queen (4:32 remaining)

You: @macos-mcp pause it and set volume to 50
Copilot: 🎵 Paused playback
         🔊 Volume set to 50%

Notes and Calendar:

You: @macos-mcp create a note about the team meeting and check my calendar
Copilot: 📝 Created note: "Team Meeting Notes"
         📅 Today's Events: Daily Standup (10:00 AM), Team Meeting (2:00 PM)

Development

Building the VS Code Extension

cd vscode-extension
npm run compile

Packaging the Extension

cd vscode-extension
npm install -g vsce
vsce package

Testing Individual Servers

You can test each server individually:

# Test Spotify server
node dist/spotify/index.js

# Test Notes server  
node dist/notes/index.js

Adding New Features

Each server follows the same pattern:

  1. Define Zod schemas for input validation

  2. Implement tool handlers using AppleScript

  3. Register tools with the MCP server

  4. Handle errors gracefully

Troubleshooting

Common Issues

  1. Permission Denied Errors

    • Ensure you've granted the necessary permissions in System Preferences

    • Try running the failing operation manually first

  2. App Not Found Errors

    • Make sure the target application is installed

    • Verify the application name in the AppleScript

  3. Claude Desktop Not Recognizing Servers

    • Check that the config file is in the correct location

    • Verify all file paths are absolute and correct

    • Restart Claude Desktop after configuration changes

  4. VS Code Extension Not Working

    • Ensure the extension is properly installed and activated

    • Check the project path in extension settings

    • Verify the MCP servers are built in the dist directory

    • Restart VS Code after configuration changes

  5. GitHub Copilot Chat Participant Not Available

    • Make sure you have GitHub Copilot subscription

    • Verify the extension is activated (check Extensions view)

    • Try reloading the VS Code window (Cmd+R)

  6. Build Errors

    • Run npm install to ensure all dependencies are installed

    • Check TypeScript compilation with npm run build

Debug Mode

For debugging Claude Desktop servers, you can run servers with additional logging:

DEBUG=* node dist/spotify/index.js

For debugging the VS Code extension:

  1. Open the extension development host (F5 in the extension folder)

  2. Check the Output panel for "macOS MCP Servers" logs

  3. Use Developer Tools (Help > Toggle Developer Tools) for detailed debugging

Security Considerations

  • These servers use AppleScript to control macOS applications

  • All operations require explicit user permission grants

  • No sensitive data is stored or transmitted

  • All interactions are local to your machine

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Test thoroughly on macOS

  5. Submit a pull request

License

This project is provided as-is for educational and personal use. Please respect the terms of service of the applications you're integrating with.

Support

If you encounter issues:

  1. Check the troubleshooting section above

  2. Verify your macOS permissions

  3. Ensure all applications are properly installed

  4. Check Claude Desktop logs for error details


Note: This project requires macOS and uses AppleScript for native app integration. It will not work on other operating systems.

Available Tools

8 tools
create_folderC

Create a new folder in Apple Notes

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the folder to create

TDQS

C2.9/5.0
Behavior2/5

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 states the tool creates a folder, implying a write operation, but lacks details on permissions, error handling, whether the folder name must be unique, or what happens on success/failure. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks critical context such as return values, error conditions, or behavioral nuances (e.g., folder naming rules). Given the complexity of a create operation, this leaves significant gaps for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'name' parameter fully documented in the schema. The description does not add any additional meaning or context beyond what the schema provides, such as naming constraints or examples. Given the high schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new folder') and the target resource ('in Apple Notes'), which is specific and unambiguous. However, it does not explicitly differentiate this tool from its sibling 'list_folders', which handles reading rather than creating folders, leaving room for slight improvement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 does not mention prerequisites (e.g., permissions), when not to use it, or how it relates to siblings like 'list_folders' for checking existing folders, which is a significant gap for effective tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_noteC

Create a new note in Apple Notes

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent/body of the note
folderNoFolder name to store the note (optional)
titleYesTitle of the note

TDQS

C2.9/5.0
Behavior2/5

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 creates a note but doesn't mention what happens on success (e.g., returns a note ID), potential errors (e.g., invalid folder), or side effects (e.g., note becomes immediately accessible). This leaves significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any fluff. It's appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, how errors are handled, or important behavioral details like whether the 'folder' parameter must reference an existing folder. This leaves the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 three parameters thoroughly. The description adds no additional meaning about parameters beyond implying creation, which is redundant with the tool name. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('a new note in Apple Notes'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'update_note' or 'get_note' beyond the basic verb, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'update_note' or 'search_notes'. It lacks any context about prerequisites, such as needing an existing folder for the optional 'folder' parameter, or when creation might fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_noteC

Delete a note by title

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the note to delete

TDQS

C2.9/5.0
Behavior2/5

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 states the tool deletes a note, implying a destructive mutation, but does not describe consequences (e.g., irreversible deletion, no confirmation prompt), permissions required, error handling, or what happens on success/failure. This is a significant gap for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature and lack of annotations or output schema, the description is incomplete. It does not address critical context such as the permanence of deletion, error scenarios (e.g., if the note doesn't exist), or return values, leaving the agent with insufficient information for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the parameter 'title' fully documented in the schema. The description adds no additional meaning beyond what the schema provides (e.g., it does not explain title uniqueness, case sensitivity, or format constraints). Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Delete') and resource ('a note'), specifying the action and target. It distinguishes from siblings like 'create_note' or 'update_note' by focusing on deletion, but does not explicitly differentiate from other destructive operations or note-related tools beyond the verb itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 does not mention prerequisites (e.g., the note must exist), exclusions (e.g., cannot delete protected notes), or suggest alternatives like 'update_note' for modification instead of deletion, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_noteC

Get the content of a specific note by title

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the note to retrieve

TDQS

C2.9/5.0
Behavior2/5

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 'Get' implies a read operation, it doesn't address important aspects like error handling (what happens if the note doesn't exist), authentication requirements, rate limits, or what format the content returns in. The description is minimal and lacks behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just one sentence with no wasted words. It's front-loaded with the core purpose and efficiently communicates the basic functionality without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retrieval tool with no annotations and no output schema, the description is insufficient. It doesn't explain what format the note content returns in, how errors are handled, or any prerequisites for successful execution. Given the lack of structured data, the description should provide more complete context about the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, with the single parameter 'title' clearly documented. The description adds no additional parameter semantics beyond what the schema already provides ('Title of the note to retrieve'), so it meets the baseline for high schema coverage without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('content of a specific note'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'list_notes' or 'search_notes' beyond the basic retrieval concept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'list_notes' or 'search_notes'. It mentions retrieving by title but doesn't specify if this is the only retrieval method or when title-based lookup is appropriate versus other approaches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_foldersB

Get a list of all note folders

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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 states the tool retrieves a list but doesn't describe return format, pagination, sorting, permissions required, or error conditions. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized for a simple tool and front-loaded with the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with no output schema, the description is minimally adequate. It states what the tool does but lacks details on return format, permissions, or behavioral traits. Given the simplicity of the tool, it's complete enough to understand the basic function but leaves gaps in practical usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100%, so there's no need for parameter documentation in the description. The description correctly doesn't mention any parameters, which is appropriate. A baseline of 4 is given since no parameters exist to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get a list') and resource ('all note folders'), making the purpose immediately understandable. It distinguishes from siblings like 'list_notes' by specifying folders rather than notes. However, it doesn't specify whether this includes all folders globally or within a specific scope, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'search_notes' or 'list_notes'. It doesn't mention prerequisites, context, or any exclusions. The agent must infer usage solely from the tool name and description without explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notesB

Get a list of all notes

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires authentication, rate limits, pagination, or what the return format looks like. This leaves significant gaps for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded and appropriately sized for a simple tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters) but lack of annotations and output schema, the description is incomplete. It doesn't explain what 'list' entails (e.g., format, ordering, limits) or behavioral aspects, leaving the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add param info, but that's acceptable here, resulting in a baseline score above minimum viable due to the lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get a list') and resource ('all notes'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'search_notes' or 'list_folders', which would require mentioning scope or filtering capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'search_notes' (for filtered searches) or 'get_note' (for single notes). The description lacks context about use cases or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_notesC

Search for notes containing specific text

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query to find notes

TDQS

C2.9/5.0
Behavior2/5

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 for notes, but doesn't describe key traits like whether it's read-only, how results are returned (e.g., pagination, sorting), error conditions, or performance characteristics. This leaves significant gaps for a search operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action, making it easy to parse, and every part of the sentence contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a search tool with no annotations and no output schema, the description is incomplete. It lacks details on behavior (e.g., result format, limitations), usage context, and how it differs from siblings, making it inadequate for an agent to reliably invoke this tool without additional assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the parameter 'query' fully documented in the schema. The description adds no additional meaning beyond implying text-based search, which aligns with the schema but doesn't provide extra context like query syntax or examples. Baseline 3 is appropriate as the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search for notes') and the target resource ('notes'), specifying the operation as finding notes containing specific text. It distinguishes from siblings like 'list_notes' by implying text-based filtering, but doesn't explicitly differentiate it from other search-related tools (none present in siblings).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'list_notes' or 'get_note'. The description implies it's for text-based searches, but doesn't specify scenarios, prerequisites, or exclusions, leaving the agent to infer usage from context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_noteC

Update the content of an existing note

ParametersJSON Schema
NameRequiredDescriptionDefault
newContentYesNew content for the note
titleYesTitle of the note to update

TDQS

C2.9/5.0
Behavior2/5

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 states the tool updates content, implying a mutation, but fails to describe critical traits: whether it requires specific permissions, if changes are reversible, what happens on failure (e.g., invalid title), or the response format. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded with the core action ('Update'), making it easy to parse. Every part of the sentence earns its place by specifying the resource and scope, achieving optimal conciseness for a basic tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity as a mutation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., error handling, permissions), output expectations, and usage context relative to siblings. While the schema covers parameters well, the overall context for safe and effective use by an agent is insufficient, especially for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with clear descriptions for both parameters ('title' and 'newContent'), so the schema does the heavy lifting. The description adds minimal value by implying 'newContent' replaces existing content, but doesn't elaborate on parameter interactions (e.g., if 'title' is used to identify the note) or constraints beyond what the schema provides. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('content of an existing note'), making the purpose immediately understandable. It distinguishes from siblings like 'create_note' (new vs. existing) and 'delete_note' (modify vs. remove). However, it doesn't specify what aspects of the note are updated beyond 'content' (e.g., title or metadata), which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 prerequisites (e.g., the note must exist), exclusions (e.g., cannot update non-existent notes), or comparisons to siblings like 'create_note' for new notes or 'get_note' for viewing. This lack of contextual direction leaves the agent to infer usage from the tool name alone.

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.

  1. 8 tool updatesv1.0.0
    • First observedcreate_folder
    • First observedcreate_note
    • First observeddelete_note
    • First observedget_note
    • First observedlist_folders
    • First observedlist_notes
    • First observedsearch_notes
    • First observedupdate_note

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Each targets a specific action on a specific resource (e.g., create_folder vs. create_note, get_note vs. list_notes vs. search_notes), making it easy for an agent to select the right tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_folder, list_notes, update_note). This predictability enhances usability and reduces confusion for agents.

Tool Count5/5

With 8 tools, the server is well-scoped for managing Apple Notes. Each tool earns its place by covering essential CRUD operations and utilities like searching, without being too sparse or bloated.

Completeness5/5

The tool surface provides complete CRUD/lifecycle coverage for Apple Notes, including create, read, update, delete, list, and search operations for both notes and folders. There are no obvious gaps that would cause agent failures.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to interact with macOS applications (Finder, Mail, Contacts, Reminders, Notes, Calendar, TextEdit) using AppleScript. Allows AI assistants to perform tasks like searching contacts, managing files, checking email, and creating reminders through natural language.
    24
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to control Apple Music on macOS through AppleScript, providing tools for playback management, library searching, and playlist organization. It supports detailed track metadata retrieval and enhanced queue management for a seamless music experience.
    12 npm
    MIT