NoteAgent
NoteAgent connects AI coding agents to Apple Notes for note-taking, code snippets, and developer workflows.
Note Operations
Create, read, update, delete, and list notes – Full CRUD on Apple Notes by title or ID; update supports replace, append, or prepend
Move notes – Relocate a note to a different folder
Folder Management
Create, delete, and list folders (with note counts) across all accounts
Search & Discovery
Search notes – Find notes by keyword in titles, optionally scoped to a folder or account
List accounts – View available Notes accounts (iCloud, On My Mac, etc.)
Recent notes – Retrieve notes modified within the last N hours
Developer Workflows
Templates (
create_dev_note) – Generate structured notes for standups (yesterday/today/blockers), debug sessions (issue/steps/root cause/fix), or commit logs (message/files/context)Code snippets (
create_snippet_note) – Save code with language tags and file path context
Diagnostics
Health check (
doctor) – Verify Notes.app installation, automation permissions, and connectivity
Allows AI coding agents to interact with Apple Notes to create, read, update, delete notes, manage folders, search, and capture developer workflows like debug sessions, standups, and code snippets.
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., "@NoteAgentSave this code snippet from src/utils.ts to my notes."
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.
NoteAgent
Your AI coding agent's secondary brain.
NoteAgent is an MCP (Model Context Protocol) server that connects AI coding agents — Claude Code, Cursor, OpenCode — with Apple Notes. Use it to capture debug sessions, log commit context, save code snippets, and manage notes without leaving your terminal.
Built for developers who think in code and organize in notes.
Quick Start
# Run directly (no install needed)
npx apple-notes-agent-mcp
# Or install globally
npm install -g apple-notes-agent-mcp
apple-notes-agent-mcpRelated MCP server: Bruin
Why NoteAgent?
Existing Apple Notes MCP servers are generic note managers. NoteAgent is built for developers:
Developer workflows — Pre-built templates for standups, debug sessions, commit logs
Code snippet capture — Save language-aware snippets with file path context
Zero config —
npx apple-notes-agent-mcpjust works on macOSHealth checks —
doctortool verifies Notes.app permissions and connectivityError recovery — Automatic retries with exponential backoff and clear error messages
Installation
Requirements
macOS with Apple Notes.app
Node.js >= 18
Terminal/IDE with automation permissions (System Settings → Privacy & Security → Automation)
npm (recommended)
npx apple-notes-agent-mcpLocal development
git clone https://github.com/jayprajapati/apple-notes-agent-mcp.git
cd apple-notes-agent-mcp
npm install
npm run build
node dist/index.jsMCP Client Configuration
Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"noteagent": {
"command": "npx",
"args": ["apple-notes-agent-mcp"]
}
}
}Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"noteagent": {
"command": "npx",
"args": ["apple-notes-agent-mcp"]
}
}
}OpenCode
Add to your MCP configuration file:
{
"mcpServers": {
"noteagent": {
"command": "npx",
"args": ["apple-notes-agent-mcp"]
}
}
}Tools (15 total)
Note Operations
Tool | Description |
| Create a new note with title and content |
| Get a note's content by title or ID |
| Update a note (replace, append, or prepend) |
| Delete a note by title or ID |
| List notes in a folder or account |
| Move a note to a different folder |
Folder Operations
Tool | Description |
| Create a new folder |
| Delete a folder |
| List all folders with note counts |
Search & Account
Tool | Description |
| Search notes by keyword |
| List available Notes accounts |
| Get notes modified in last N hours/days |
Developer Workflows
Tool | Description |
| Create a developer-formatted note (standup, debug, commit) |
| Save a code snippet with language and context |
| Run diagnostics on Notes.app connectivity and permissions |
Usage Examples
Create a note
Create a note titled "Meeting Notes" in the "Work" folder with today's action items.The agent will use create_note with your content. Folders are created automatically if they don't exist.
Debug session logging
Log this debugging session as a dev note. The issue was a race condition in the auth middleware.
Steps to reproduce: send two concurrent login requests.
Root cause: shared mutable state in session store.
Fix: use atomic operations.The agent will use create_dev_note with the debug template.
Save a code snippet
Save this code snippet to my notes — it's a TypeScript utility function from src/utils.tsThe agent will use create_snippet_note with the file path and language context.
Search notes
Search my notes for anything about "deployment pipeline"Health check
Check if Notes.app is working properly with NoteAgentThe agent will run doctor to verify permissions and connectivity.
Daily standup
Create a standup note for today. I finished the auth module and started on the API layer.The agent will use create_dev_note with the standup template.
Developer Templates
Daily Standup (standup)
Pre-formatted with:
What I did yesterday
What I'll do today
Blockers
Debug Session (debug)
Pre-formatted with:
Issue description
Steps to reproduce
Root cause analysis
Fix applied
Commit Log (commit)
Pre-formatted with:
Commit message
Files changed
Context notes
Code Snippet (snippet)
Includes:
Language tag
File path context
Formatted code block
Troubleshooting
"Apple Notes access denied"
Grant automation permissions:
Open System Settings
Go to Privacy & Security → Automation
Enable access for your terminal app (Terminal, iTerm2, VS Code, etc.)
"Apple Notes is not running"
Open Notes.app before using NoteAgent. The MCP server communicates with Notes via AppleScript.
Notes not found
NoteAgent searches by exact title match. Use list_notes or search_notes to find the correct title.
Connection issues
Run the diagnostic tool:
Run the doctor tool to check NoteAgent statusThis verifies Notes.app is installed, running, and accessible.
Architecture
src/
├── index.ts # MCP server entry point
├── types.ts # TypeScript interfaces
├── services/
│ ├── applescript.ts # AppleScript executor with retry logic
│ └── notes-manager.ts # High-level Notes operations
├── tools/
│ ├── note-tools.ts # 6 note CRUD tools
│ ├── folder-tools.ts # 3 folder management tools
│ ├── search-tools.ts # 3 search/account tools
│ └── developer-tools.ts # 3 developer workflow tools
└── utils/
├── helpers.ts # Shared utilities
└── parsing.ts # AppleScript output parsingDevelopment
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Run integration tests (requires Notes.app)
npm run test:integration
# Type check
npm run lintLicense
MIT
Available Tools
15 toolscreate_dev_noteB
Create a developer-formatted note from a template (standup, debug, commit)
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Custom title (defaults to template name + date) | |
| folder | No | Target folder | |
| account | No | Account | |
| content | No | Initial content for the primary section | |
| template | Yes | Note template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description fails to disclose behavioral traits such as whether the tool overwrites existing notes, required authentication, or side effects. The description alone is insufficient for an agent to understand the tool's behavior.
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 concise sentence front-loading the core purpose and key differentiator (templates). No wasted words.
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?
With 5 parameters, no output schema, and no annotations, the description is too minimal. It lacks details on what 'developer-formatted' entails, the interaction between content and template, and expected output, making the tool under-specified.
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 coverage is 100%, so the description adds minimal extra meaning beyond the schema. The description mentions templates matching the enum, but does not elaborate on other parameters.
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 action 'Create' the resource 'developer-formatted note' and specifies the templates (standup, debug, commit), distinguishing it from siblings like create_note and create_snippet_note.
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 implies usage for templated dev notes but does not explicitly state when to use this tool versus alternatives like create_note, nor provides exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderB
Create a new folder in Apple Notes
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Folder name | |
| account | No | Account name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fails to disclose behavioral traits like handling duplicate names, default account behavior, or required permissions.
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?
Single sentence with no wasted words, efficient and front-loaded.
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?
Adequate for a simple creation tool, but lacks context on error conditions or prerequisites; adequate but not comprehensive.
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 covers both parameters with descriptions ('Folder name', 'Account name'), so baseline is 3; description adds no extra semantics.
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?
Description clearly states the verb 'create' and resource 'folder' in Apple Notes, distinguishing it from sibling tools like create_note or delete_folder.
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 vs alternatives, such as checking existing folders with list_folders or prerequisites like account existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteB
Create a new note in Apple Notes
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Note title | |
| folder | No | Target folder name (created if missing) | |
| account | No | Target account name | |
| content | Yes | Note content (HTML or plain text) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description should fully disclose behavior. It only states the basic action with no mention of side effects, permissions, or constraints (e.g., content format, app interaction). This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with 7 words, no fluff. Perfectly concise and front-loaded.
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 no annotations, no output schema, and presence of sibling tools, the description is too minimal. It lacks usage context, behavioral details, and return value information. However, for a simple creation tool, it meets minimum viability.
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 already documented. The description adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate.
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 specifies the verb 'Create', the resource 'note', and the domain 'Apple Notes'. It distinguishes from sibling tools like 'create_dev_note' and 'create_snippet_note' which are more specialized.
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 explicit guidance on when to use this tool vs alternatives (e.g., create_dev_note, create_snippet_note). No prerequisites mentioned, though the schema implies folder can be created if missing. The description lacks context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_snippet_noteB
Save a code snippet as a note with language tag and context
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Code snippet to save | |
| title | No | Custom title | |
| folder | No | Target folder | |
| account | No | Account | |
| context | No | Where this snippet came from (file path, error message, etc.) | |
| language | Yes | Programming language (e.g., typescript, python, rust) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states 'Save a code snippet as a note,' but fails to clarify side effects (e.g., overwriting, duplication), required permissions, idempotency, or postconditions. For a creation tool, this lacks sufficient transparency.
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, well-structured sentence of 10 words with no redundant information. It front-loads the core purpose and omits filler, making it quick to parse.
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?
Despite a simple purpose, the tool has six parameters and no output schema or annotations. The description does not explain parameter usage, expected input formats (e.g., code snippet length), or return behavior. It is insufficient for an agent to use the tool reliably without additional context.
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 has 100% coverage of parameters, achieving the baseline of 3. The description merely echoes 'language tag and context' without adding syntactic constraints, valid formats, or relationships beyond what the schema already documents.
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 'Save a code snippet as a note with language tag and context' clearly specifies the action (save), resource (code snippet as a note), and key attributes (language tag and context). It effectively distinguishes this tool from siblings like create_note and create_dev_note by focusing on code snippets.
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 explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or suggest other tools for different scenarios. With multiple note creation tools, this omission hinders correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_folderB
Delete a folder and all its notes from Apple Notes
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Folder name to delete | |
| account | No | Account name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully describe behavior. It implies destructiveness but does not state irreversibility, what happens to nested notes, or error conditions. 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 a single concise sentence, front-loading the primary action. However, it omits critical details that could be added without verbosity.
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?
The tool has a simple input schema and no output schema, but the description lacks context on side effects, prerequisites (e.g., account required), and post-conditions, making it incomplete.
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 coverage is 100%, with descriptions already explaining parameters. The tool description adds no extra meaning beyond the schema, meeting the baseline for covered parameters.
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 verb 'Delete' and the resource 'folder and all its notes', specifying the scope. It distinguishes from siblings like create_folder and delete_note, which have different actions.
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 (e.g., deleting a note individually). No mention of prerequisites like folder existence or confirmation requirements.
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 or ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note ID | |
| title | No | Note title | |
| account | No | Account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits fully. It only says 'delete', implying destruction but not detailing permanence, authorization needs, 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 extremely concise—one sentence with no filler. Front-loaded with the action and resource, it earns 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?
Given no annotations, no output schema, and three parameters, the description is far from complete. It omits critical details like whether deletion is permanent, if confirmation is needed, or if account context is required.
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?
All parameters are described in the schema (100% coverage), so the description adds minimal extra meaning. It clarifies that either title or ID can be used, but does not address the 'account' parameter's role.
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 action 'delete' and the resource 'note', with specific identification methods 'by title or ID'. It is concise and unambiguous, but does not explicitly distinguish from sibling tool 'delete_folder'.
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 is provided on when to use this tool versus alternatives like 'delete_folder' or 'update_note'. There is no mention of prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Check Notes.app health: installation, permissions, and access
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the tool checks health but lacks details on what actions are performed (e.g., reads, writes), side effects, or required permissions. The description is minimal and does not fully compensate for missing annotations.
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?
A single sentence that is concise and front-loaded with no wasted words. Every word adds value.
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 simple nature and no output schema, the description tells what is checked but not the return format or behavior. Could briefly describe typical output (e.g., status object) for completeness.
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 input schema has zero parameters and 100% coverage, so schema already fully documents parameters. The description confirms no arguments needed, adding no conflict. Baseline 4 for no parameters.
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 checks Notes.app health, covering installation, permissions, and access. It uses a specific verb (check) and resource, and is distinct from sibling CRUD 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 implies usage for health verification but does not provide explicit context on when to use versus alternatives or when not to use. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteA
Get a note's content by title or ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note ID (x-coredata://...) | |
| title | No | Note title (exact match) | |
| account | No | Account to search in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description is the sole source. It implies a read-only operation by saying 'Get', but does not explicitly state safety, error behavior (e.g., if note not found), or permission requirements. Adequate but lacks depth.
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?
Single, front-loaded sentence. No redundant phrases. Every word contributes value.
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?
No output schema exists, so the description should clarify return format (e.g., plain text, JSON). It only says 'content', leaving ambiguity. Also missing precedence when both id and title are provided. Adequate for a simple retrieval but incomplete.
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 coverage is 100%, providing descriptions for all three parameters. The tool description adds the 'by title or ID' context but does not significantly enhance schema information (e.g., disambiguation when both are provided). Baseline 3 is appropriate.
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 verb 'Get', the resource 'note's content', and the search criteria 'by title or ID'. This distinguishes it from siblings like search_notes (list) and get_recent_notes (recent).
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 search_notes or get_recent_notes. No mention of prerequisites, required parameters, or context for choosing between id and title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_notesA
Get notes modified in the last N hours
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Number of hours to look back (default: 24) | |
| account | No | Account name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It indicates a read operation but lacks disclosure of pagination, limits, sorting, or whether full content vs. metadata is returned. No mention of side effects or performance traits.
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?
Single sentence is highly concise and front-loaded with core purpose. No redundant words or information.
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 simple 2-parameter tool with no output schema, the description covers core functionality but omits details about output format, sorting, or whether account is optional. Adequate but with notable 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?
Schema coverage is 100% with descriptions for both 'hours' (with default) and 'account'. The description aligns with the hours parameter but adds no extra meaning beyond schema; both are clear.
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 'Get notes modified in the last N hours' clearly specifies the action (get) and resource (notes), with a precise time-based scope. It distinguishes from sibling tools like list_notes (likely all notes) and search_notes (likely query-based).
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 implies usage for time-filtered retrieval but does not explicitly state when to use this tool versus alternatives like search_notes or list_notes. With 15 siblings, explicit guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List available Apple Notes accounts (iCloud, On My Mac, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only, non-destructive operation, which is appropriate. However, it does not explicitly state that it is safe to call or describe error scenarios. Without annotations, this is adequate but could be improved.
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, concise sentence with no unnecessary words. It delivers the essential information efficiently.
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 simple list operation with no parameters and no output schema, the description is mostly complete. It lacks details about the output format (e.g., list of account names and IDs) 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% coverage, so the description cannot add parameter details. It adds value by providing examples of account types, which helps the agent understand the output context.
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 verb 'List' and the resource 'Apple Notes accounts' with specific examples (iCloud, On My Mac). It distinguishes from sibling tools like list_notes and list_folders which operate on different entities.
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 explicit guidance on when to use this tool versus alternatives or any prerequisites. Usage is implied by the operation itself, but no context is given about when to call it (e.g., before creating a note).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersB
List all folders in Apple Notes
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account name (omit for all accounts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must bear full burden. It does not disclose that this is a safe, read-only operation, nor does it mention authentication, rate limits, or response structure. The name implies read-only, but more explicit behavioral context is needed.
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?
Description is a single, concise sentence with no wasted words. It efficiently communicates the core function. Ideal for a simple 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?
Given no output schema, the description should describe the return format (e.g., list of folder names or IDs). It does not, leaving the agent without crucial context. For a simple tool with one parameter, this is a notable gap.
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 coverage is 100% with one optional parameter 'account' clearly described. The tool description adds no additional meaning beyond what the schema already provides, so baseline of 3 is appropriate.
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?
Description 'List all folders in Apple Notes' uses a specific verb ('List') and resource ('folders'), clearly distinguishing from sibling tools like 'list_notes' and 'list_accounts'. The purpose is immediately obvious.
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 explicit guidance on when to use this tool vs alternatives (e.g., creating or deleting folders). However, the description implies the primary use case: retrieving folder list. Minimal but adequate for a straightforward listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesB
List notes in a folder or account
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Folder name (omit for all notes) | |
| account | No | Account name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'list notes' without mentioning pagination, sorting, side effects (though likely none), or any constraints. This leaves important behavior unclear.
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 sentence, very concise. It could be slightly more informative without being wordy, but it is not overly brief.
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 no output schema and no annotations, the description is too minimal. It does not explain the return format, default behavior when no parameters are provided, or how it differs from similar tools like search_notes.
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% with clear parameter descriptions. The description adds minimal extra meaning beyond the schema, just contextualizing the parameters. Baseline 3 is appropriate.
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 action 'list notes' and the parameters 'in a folder or account'. It distinguishes from siblings like search_notes, get_note, and get_recent_notes by specifying the scope.
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 says when to use (list notes in folder/account) but does not provide guidance on when not to use, alternatives, or prerequisites. For instance, it doesn't distinguish from search_notes or mention that omitting folder lists all notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_noteC
Move a note to a different folder
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note ID | |
| title | No | Note title | |
| folder | Yes | Target folder name | |
| account | No | Account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. 'Move' implies mutation but no details on side effects, permissions, or return values. Lacks transparency on what happens to the original note.
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?
Single sentence with 7 words, very concise and front-loaded. However, it may be too brief given the tool's complexity and lack of other context.
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 4 parameters, no output schema, and no annotations, the description is inadequate. It does not explain return values, error conditions, or behavior after moving. Sibling tools like update_note hint at possible overlaps but not addressed.
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 coverage is 100% with descriptions for all 4 parameters. Description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
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?
Description clearly states the action (move) and resource (note) and destination (different folder). It distinguishes from sibling tools like create_note, delete_note, and update_note, but could specify that the note is moved from its current folder.
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 move_note vs update_note or other alternatives. No prerequisites (e.g., note must exist) or when-not conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesB
Search notes by keyword in title
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches against note titles) | |
| folder | No | Restrict search to this folder | |
| account | No | Restrict search to this account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only mentions basic functionality. It does not disclose behaviors like case sensitivity, partial matching, pagination, return format, or lack of results handling.
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?
Single sentence, no wasted words, front-loaded with the action. Perfectly concise for the information provided.
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?
Despite simple structure and high schema coverage, the description lacks details on return value, sorting, or error states. For a search tool with no output schema, this information would be valuable for proper invocation.
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 coverage is 100% with clear descriptions for all three parameters. The tool description adds no extra meaning beyond the schema, so baseline of 3 applies.
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 verb 'search' and the resource 'notes' along with the scope 'by keyword in title', making it distinct from sibling tools like list_notes or get_note.
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 explicit guidance on when to use this tool versus alternatives (e.g., list_notes) or when not to use it. The description only implies usage for title keyword searches but lacks exclusionary or comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteC
Update a note's content (replace, append, or prepend)
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note ID | |
| mode | No | Update mode | replace |
| title | No | Note title | |
| account | No | Account | |
| content | Yes | New content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as auth requirements, partial vs full update behavior, or what happens to unspecified fields like title or account.
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?
Extremely concise single sentence that is front-loaded with the key action and modes, no wasted words.
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?
No output schema, and the description fails to explain return values, error cases, or even that the id parameter is essential for updates (though not required in schema). Significant gaps remain for a mutation tool.
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 has 100% parameter description coverage; the description adds value by explaining the mode enum (replace, append, prepend), but adds no semantics for other parameters.
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 it updates a note's content with three modes (replace, append, prepend), but it doesn't distinguish from sibling tools like move_note or delete_note and fails to mention that title and account fields are also updatable per the schema.
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, no prerequisites mentioned, and no context on when to choose each mode.
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.
15 tool updates
v0.1.0- First observed
create_dev_note - First observed
create_folder - First observed
create_note - First observed
create_snippet_note - First observed
delete_folder - First observed
delete_note - First observed
doctor - First observed
get_note - First observed
get_recent_notes - First observed
list_accounts - First observed
list_folders - First observed
list_notes - First observed
move_note - First observed
search_notes - First observed
update_note
TDQS
Scored across 15 tools
Each tool targets a distinct action: general note creation, developer note creation, snippet creation, folder operations, note CRUD, search, move, and a health check. No overlapping purposes.
Most tools follow verb_noun snake_case pattern (e.g., create_note, delete_folder). The 'doctor' tool is the only outlier, but it's a health check command and still clear.
15 tools is appropriate for an Apple Notes assistant, covering note creation, management, organization, search, and system health. Not excessive or insufficient.
Covers CRUD for notes and folders, plus listing, search, move, and recent notes. Minor gaps: no folder rename or undo/trash support, but core workflows are present.
Maintenance
Related MCP Connectors
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
MCP server for AI agent profiles and smart notes. 60+ coding prompt packs with expert personas.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn 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.82MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.4 npm2MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables LLM agents to list, read, create, update, delete, and search Apple Notes on macOS.67 npmAGPL 3.0
- AlicenseNot gradedqualityAmaintenanceMCP server enabling ChatGPT to search, read, and write Apple Notes via a local Mac agent with a privacy-preserving relay.MIT