ml-lubich

inotes — Apple Notes CLI

Community ml-lubich
Updated

macOS Apple Notes CLI for agents (+ MCP via apple-notes-mcp)

inotes — Apple Notes CLI

inotes is a fast, scriptable command line for Apple Notes — list, search,show, and create notes from your terminal, with a --json flag for scriptsand agents. Part of the imsg / imail / inotes / wa local-first toolfamily.

inotes list --limit 20
inotes search "standup" --json
inotes create --title "Idea" --body "…"

macOS only

inotes drives Notes.app through AppleScript (osascript), which onlyexists on macOS. There is no Linux or Windows build, and none is planned —the tool has nothing to talk to without Notes.app.

Install

# Homebrew
brew install ml-lubich/tap/inotes

# pip
pip install inotes-mcp

# from a clone
git clone https://github.com/ml-lubich/inotes-mcp.git
cd inotes-mcp
uv tool install .

The PyPI/Homebrew package is inotes-mcp; the installed command is alwaysinotes.

Permissions

inotes needs Automation access to Notes.app. The first time it runs acommand, macOS will prompt you to allow it — or grant it up front inSystem Settings → Privacy & Security → Automation (allow your terminalapp to control Notes). Verify it's working with:

inotes doctor

Quick start

inotes doctor                                        # verify Notes.app access
inotes list --limit 20                               # recent note titles
inotes list --json                                    # {"notes": [...]}
inotes search "standup" --limit 10 --json             # search titles + bodies
inotes show "My Note"                                 # exact-title lookup
inotes create --title "Idea" --body "…"               # new note
inotes create --title "Work" --body "…" --folder "Projects"
inotes version
inotes -h                                             # help at every level

show requires an exact note title match. create --folder targets a namedfolder; omit it to use the default account.

Commands

Command Description
doctor Verify Notes.app Automation access
list List recent note titles (--limit, --json)
search Search note titles and bodies (--limit, --json)
show Show a note by exact title
create Create a note (--title, --body, --folder)
version Print the installed version
mcp Run the built-in MCP server over stdio
agent schema Print a JSON command contract (version, tool, params per command)
agent guide Print a markdown playbook for LLM agents

Help is available at every level: inotes -h, inotes <command> -h,inotes agent -h.

Using inotes from an agent

inotes is CLI-first by design — cheaper on tokens than a full MCP roundtrip for the common case of list/search/show/create. inotes agent schemagives an agent a machine-readable contract of every command and itsparameters; inotes agent guide gives it a short playbook (the same rulesdocumented above: run doctor first, --json on list/search, exit code0 on success).

Built-in MCP server

inotes mcp runs a stdio MCP server exposing the same five operations(doctor, list_notes, search_notes, show_note, create_note) as MCPtools — no separate package needed. Point any MCP client at the installedinotes command:

{
  "mcpServers": {
    "inotes": {
      "command": "inotes",
      "args": ["mcp"]
    }
  }
}

For richer CRUD than this CLI's surface covers, pair inotes withsweetrb/apple-notes-mcp, a fullthird-party MCP server for Apple Notes.

Development

git clone https://github.com/ml-lubich/inotes-mcp.git
cd inotes-mcp
python3 -m pip install -e ".[dev]"
pytest -q
inotes -h

A legacy bash implementation is preserved as inotes.bash.bak for reference.

MIT License · Copyright (c) 2026 Misha Lubich (ml-lubich)

MCP Server · Populars

MCP Server · New