Skip to main content
Glama
santiago-migoni

mcp-apple-notes

mcp-apple-notes

An MCP (Model Context Protocol) server that exposes Notes.app on macOS as tools for LLM agents — list, read, create, update, delete, and search notes.

Requirements

  • macOS (uses JXA/osascript to automate Notes.app — there's no other public API for Notes)

  • Node.js 18+

  • A single iCloud account in Notes.app (multi-account is not supported)

Related MCP server: mcp-apple-notes

Install

npm install
npm run build

Tools

Tool

Description

list_notes

List notes (id, title, modification date), no body. Optional limit.

read_note

Read a note's full content (Markdown) by id.

create_note

Create a note from Markdown content. The first line becomes the title (that's how Notes.app derives it). Optional folder (defaults to "Notes").

update_note

Replace a note's entire content by id.

delete_note

Delete a note by id. Moves it to "Recently Deleted", same as the UI — recoverable for ~30 days.

search_notes

Case-insensitive substring search over title + content. Optional limit.

Notes:

  • Content is exchanged as Markdown, not HTML. Notes.app stores bodies as HTML internally; this server converts both ways.

  • Images embedded in a note's body are replaced with a [imagen adjunta] placeholder instead of being inlined as base64 — attachments are out of scope.

  • "Recently Deleted" is excluded from list_notes/search_notes results.

Running it from Claude Desktop

Add it to your Claude Desktop MCP config with a local path (this package isn't published to npm):

{
  "mcpServers": {
    "apple-notes": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-apple-notes/dist/index.js"]
    }
  }
}

The first call that touches Notes.app triggers a macOS Automation permission prompt. If it's denied or the process runs non-interactively, grant access manually in System Settings → Privacy & Security → Automation, then retry.

Development

npm run build   # compile TypeScript (tsc) to dist/
npm test        # run unit tests (node --test) against dist/**/*.test.js
npm start       # run the compiled server directly (stdio transport)

Only pure logic (Markdown↔HTML conversion, error formatting) has automated tests. Anything that touches Notes.app itself is verified manually, since it requires real macOS automation and mutates real data.

See CLAUDE.md for architecture notes.

License

GNU AGPLv3 — see LICENSE for details.

Available Tools

6 tools
create_noteA

Crea una nueva nota en Notes.app. El contenido es Markdown; la primera línea se convierte en el título de la nota (así es como Notes.app deriva el título del cuerpo).

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContenido en Markdown. La primera línea será el título.
folderNoCarpeta destino dentro de la cuenta iCloud (default: "Notes"). Debe existir.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It explains the creation and title derivation but does not disclose permissions, side effects, or error handling. Adequate but not rich.

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?

Two efficient sentences, front-loaded with the action, no unnecessary words. Every sentence earns its place.

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

Completeness4/5

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

For a simple tool with 2 params and no output schema, the description covers core behavior and a key nuance (title from first line). It misses mention of return value or multi-account handling, but is largely complete.

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 baseline is 3. The description's parameter info (Markdown, title derivation) largely repeats the schema, adding no new value beyond the schema.

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

Purpose5/5

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

The description clearly states it creates a new note in a specific app (Notes.app) and explains how the title is derived from the first line of content, distinguishing it from sibling tools like update_note or delete_note.

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

Usage Guidelines3/5

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

No explicit guidance on when to use vs alternatives, but the creation action is self-explanatory among siblings like list, read, update, delete, search. Implied usage.

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

delete_noteA

Elimina una nota de Notes.app. Igual que borrar desde la UI: la nota se mueve a 'Recently Deleted' y es recuperable ahí por ~30 días, no se borra instantáneamente.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId de la nota a eliminar.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses the non-instantaneous deletion behavior—soft delete to 'Recently Deleted' with a ~30-day recovery window. This is critical behavioral context that the agent needs to know.

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 two sentences, front-loaded with the action, then briefly explaining the consequence. No wasted words, efficient and clear.

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

Completeness5/5

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

For a simple delete operation with one required parameter and no output schema, the description provides complete context: what the tool does, the soft-delete behavior, and recovery window. No gaps.

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 coverage is 100% with a clear description for the single 'id' parameter. The description adds no extra meaning beyond the schema, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Elimina una nota de Notes.app' (deletes a note from Notes.app). It uses a specific verb and resource, and is distinct from sibling tools (create, list, read, search, update).

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

Usage Guidelines4/5

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

The description explains that the deletion mimics UI behavior: note moves to 'Recently Deleted' with ~30-day recovery. This provides context for the tool's effect, helping the agent decide when to use it, though no explicit alternatives or exclusions are given.

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

list_notesA

Lista las notas de Notes.app (id, título y fecha de modificación), sin el contenido completo. No incluye notas en Recently Deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCantidad máxima de notas a devolver (default 50, máximo 200).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return format (id, title, modification date), excludes full content, and excludes deleted notes. This provides key behavioral context beyond the schema, but lacks details on auth, rate limits, or pagination.

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?

Two sentences, concise and front-loaded with the main purpose. Every sentence adds value: first states what it does and the output fields, second clarifies what is excluded. No wasted words.

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

Completeness5/5

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

For a simple list tool with one optional parameter and no output schema, the description is complete. It clearly outlines the output scope and important exclusions (no full content, no deleted notes). No additional information is needed.

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 only parameter 'limit' is fully documented in the input schema (type, range, default, max). The description does not add any additional semantic meaning beyond what the schema provides. Baseline 3 is appropriate as schema coverage is 100%.

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

Purpose5/5

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

The description clearly states the verb 'list', the resource 'notes', and specifies the returned fields (id, title, modification date) while excluding full content and Recently Deleted notes. This distinguishes it from siblings like read_note (full content) and search_notes (filtered results).

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

Usage Guidelines4/5

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

The description implies usage context by stating what is returned and excluded, but does not explicitly state when to use this tool versus alternatives. Sibling names (read_note, search_notes) provide implicit guidance. A clear 'use this when you need a summary list' would improve it.

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

read_noteA

Lee el contenido completo de una nota de Notes.app por su id, en formato Markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId de la nota, obtenido de list_notes o search_notes.

TDQS

A4.3/5.0
Behavior4/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. It accurately describes a non-destructive read operation and specifies the output format. It could mention error behavior or idempotency, but the simplicity of the tool makes this sufficient.

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, concise sentence that contains all necessary information with no extraneous words.

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

Completeness5/5

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

Given the tool's simplicity (one required parameter, no output schema), the description fully covers what the tool does and what it returns. It is complete for an agent to understand and invoke correctly.

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 coverage is 100% and the description does not add extra meaning beyond what the schema already provides for the 'id' parameter. The baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the action as reading the full content of a note by its id and specifies the output format (Markdown). It distinguishes from siblings like list_notes and search_notes by focusing on retrieval of a single note's complete content.

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

Usage Guidelines4/5

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

The description implies use when the user has the note's id and needs the full content. However, it does not explicitly state when not to use it (e.g., for listing all notes) or provide comparison with alternative tools.

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

search_notesA

Busca notas por texto (case-insensitive, substring) en título y contenido. No incluye notas en Recently Deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesTexto a buscar.
limitNoCantidad máxima de resultados (default 50, máximo 200).

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility. It discloses key behaviors: case-insensitive substring search, scope (title and content), and exclusion of Recently Deleted. Missing details like ordering or pagination are minor gaps.

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 sentence, front-loaded with the core action, and contains no unnecessary words. It efficiently conveys purpose and key constraints.

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?

The description covers basic purpose and behavioral traits but lacks details expected in search tools (e.g., result ordering, pagination, return format). Given no output schema, it leaves some ambiguity for an agent.

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 coverage is 100%, so parameters are documented in the schema. The description adds no new semantic information beyond the schema; it reiterates the search text and limit. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool searches notes by text with case-insensitive substring matching in title and content, and excludes Recently Deleted. This distinguishes it from siblings like list_notes (which lists all) and read_note (single note).

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

Usage Guidelines3/5

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

The description implies usage for text search but does not explicitly state when to use this tool versus alternatives (e.g., list_notes, read_note). No guidance on when not to use or prerequisites is provided.

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

update_noteA

Reemplaza el contenido completo de una nota existente. El contenido es Markdown; la primera línea se convierte en el título.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId de la nota a actualizar.
contentYesNuevo contenido completo en Markdown, reemplaza el anterior.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description must convey behavioral traits. It adds one key detail (first line of content becomes title) but does not disclose other aspects like whether the update is reversible, permissions needed, or side effects. The replacement nature is implied but not explicitly labeled as destructive.

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?

Two short sentences, no redundant information, efficient delivery of core purpose and key behavior. Every word serves a purpose.

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

Completeness4/5

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

For a simple update tool with no output schema and two well-described parameters, the description provides necessary context (Markdown, title extraction). It lacks mention of success/error responses or idempotency, but is sufficient for basic 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?

Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that content is Markdown and explaining the first-line-to-title behavior, which is not in the schema.

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

Purpose5/5

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

The description clearly states the action ('reemplazar el contenido completo') and the resource ('nota existente'), and distinguishes itself from sibling tools (create, delete, read, list, search) by focusing on replacement of existing content.

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 explicit guidance is provided on when to use this tool versus alternatives, no when-not-to-use conditions, and no mention of prerequisites or context. The sibling tools are listed but not compared.

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. 6 tool updatesv0.1.0
    • First observedcreate_note
    • First observeddelete_note
    • First observedlist_notes
    • First observedread_note
    • First observedsearch_notes
    • First observedupdate_note

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clear and distinct purpose: create, delete, list, read, search, and update notes. No overlapping functionalities.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., create_note, list_notes), with only a minor variation in pluralization (list_notes vs others singular).

Tool Count5/5

6 tools is well-scoped for a note-taking server, covering basic CRUD operations plus search without unnecessary redundancy.

Completeness4/5

Covers all core note operations (create, read, update, delete, list, search). Missing a tool to restore from 'Recently Deleted' or manage folders, but not critical for basic usage.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables AI assistants like Claude to access and manipulate Apple Notes on macOS, allowing for retrieving, creating, and managing notes through natural language interactions.
    82
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Apple Notes with semantic search (on-device embeddings via all-MiniLM-L6-v2), full-text search, complete CRUD operations, folder management, and fuzzy title matching. 10 tools. Runs fully locally on macOS — no API keys required.
    10
    13
    12
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for macOS that enables creating, reading, and searching Apple Notes programmatically through tools like find, get by title or ID, and create.
    1,440
    MIT