apple-mcp-notes 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. apple_mcp_notes-1.0.1/LICENSE +21 -0
  2. apple_mcp_notes-1.0.1/PKG-INFO +146 -0
  3. apple_mcp_notes-1.0.1/README.md +116 -0
  4. apple_mcp_notes-1.0.1/pyproject.toml +61 -0
  5. apple_mcp_notes-1.0.1/setup.cfg +4 -0
  6. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/PKG-INFO +146 -0
  7. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/SOURCES.txt +31 -0
  8. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/dependency_links.txt +1 -0
  9. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/entry_points.txt +3 -0
  10. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/requires.txt +7 -0
  11. apple_mcp_notes-1.0.1/src/apple_mcp_notes.egg-info/top_level.txt +1 -0
  12. apple_mcp_notes-1.0.1/src/apple_notes_mcp/__init__.py +3 -0
  13. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/create_folder.applescript +50 -0
  14. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/create_note.applescript +130 -0
  15. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/delete_folder.applescript +42 -0
  16. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/delete_note.applescript +38 -0
  17. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/get_note.applescript +122 -0
  18. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/list_accounts.applescript +75 -0
  19. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/list_attachments.applescript +61 -0
  20. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/list_folders.applescript +107 -0
  21. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/list_notes.applescript +124 -0
  22. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/move_note.applescript +63 -0
  23. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/rename_folder.applescript +46 -0
  24. apple_mcp_notes-1.0.1/src/apple_notes_mcp/applescripts/update_note.applescript +181 -0
  25. apple_mcp_notes-1.0.1/src/apple_notes_mcp/config.py +43 -0
  26. apple_mcp_notes-1.0.1/src/apple_notes_mcp/models.py +133 -0
  27. apple_mcp_notes-1.0.1/src/apple_notes_mcp/notes_bridge.py +340 -0
  28. apple_mcp_notes-1.0.1/src/apple_notes_mcp/permissions.py +55 -0
  29. apple_mcp_notes-1.0.1/src/apple_notes_mcp/tools.py +542 -0
  30. apple_mcp_notes-1.0.1/tests/test_bridge.py +298 -0
  31. apple_mcp_notes-1.0.1/tests/test_config.py +14 -0
  32. apple_mcp_notes-1.0.1/tests/test_permissions.py +31 -0
  33. apple_mcp_notes-1.0.1/tests/test_tools.py +156 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Apple MCP Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.4
2
+ Name: apple-mcp-notes
3
+ Version: 1.0.1
4
+ Summary: Local Apple Notes MCP server for macOS
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/JonathanRReed/Apple-MCPs
7
+ Project-URL: Repository, https://github.com/JonathanRReed/Apple-MCPs
8
+ Project-URL: Changelog, https://github.com/JonathanRReed/Apple-MCPs/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/JonathanRReed/Apple-MCPs/issues
10
+ Keywords: mcp,model-context-protocol,macos,apple,ai-agent,automation
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: MacOS X
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: apple-mcp-common<2,>=1.0.0
24
+ Requires-Dist: mcp<3,>=2.0.0
25
+ Requires-Dist: pydantic>=2.12.0
26
+ Provides-Extra: dev
27
+ Requires-Dist: pytest<10,>=8; extra == "dev"
28
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
29
+ Dynamic: license-file
30
+
31
+ <!-- mcp-name: io.github.jonathanrreed/apple-mcp-notes -->
32
+
33
+ # Apple Notes MCP
34
+
35
+ MCP server for Apple Notes on macOS.
36
+
37
+ Provides access to notes and folders for creation, organization, and management. Keep Notes as the system of record while enabling agents to read, create, update, move, and delete notes.
38
+
39
+ ## When to use
40
+
41
+ - Notes-only workflows
42
+ - Stronger isolation than the all-in-one server
43
+ - Structured note and folder operations through the native Notes app
44
+
45
+ ## What It Does
46
+
47
+ - List accounts and folders
48
+ - List, search, and manage notes (CRUD)
49
+ - Create, rename, and delete folders
50
+ - List note attachments
51
+ - Tool discovery helpers `search_tools` and `get_tool_info` for context-constrained clients
52
+ - Recent-note resources and organization prompts
53
+ - Health and permission checks: `notes_health`, `notes_permission_guide`, `notes_recheck_permissions`
54
+
55
+ ## Install On This Mac
56
+
57
+ <details>
58
+ <summary>Quick start (uvx, from PyPI)</summary>
59
+
60
+ With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
61
+
62
+ ```bash
63
+ uvx apple-mcp-notes
64
+ ```
65
+
66
+ No clone, no venv management.
67
+
68
+ </details>
69
+
70
+ <details>
71
+ <summary>From a clone</summary>
72
+
73
+ ```bash
74
+ git clone https://github.com/JonathanRReed/Apple-MCPs.git
75
+ cd Apple-MCPs
76
+ uv sync --all-packages
77
+ ```
78
+
79
+ This builds one workspace environment with every server's entry point in `.venv/bin` (for example `.venv/bin/apple-notes-mcp`). You can also point an MCP client at `AppleNotes-MCP/start.sh`, which prefers `uv run` and falls back to a plain venv bootstrap (Python 3.11+ required).
80
+
81
+ </details>
82
+
83
+ ## Install In AI Agents
84
+
85
+ <details>
86
+ <summary>Generic MCP client config</summary>
87
+
88
+ ```json
89
+ {
90
+ "mcpServers": {
91
+ "apple-notes": {
92
+ "command": "uvx",
93
+ "args": ["apple-mcp-notes"],
94
+ "env": {
95
+ "APPLE_NOTES_MCP_SAFETY_MODE": "full_access"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ Running from a clone instead? Use `/path/to/Apple-MCPs/AppleNotes-MCP/start.sh` as the command with empty `args`.
103
+
104
+ </details>
105
+
106
+ <details>
107
+ <summary>Claude Code example</summary>
108
+
109
+ ```bash
110
+ claude mcp add --transport stdio --scope project apple-notes -- uvx apple-mcp-notes
111
+ ```
112
+
113
+ </details>
114
+
115
+ ## Safety Modes
116
+
117
+ - `safe_readonly`
118
+ - `safe_manage`
119
+ - `full_access`
120
+
121
+ ## Transport
122
+
123
+ `stdio` is the default and recommended transport. Set `APPLE_NOTES_MCP_TRANSPORT=streamable-http` (with optional `APPLE_NOTES_MCP_HOST` and `APPLE_NOTES_MCP_PORT`) to serve Streamable HTTP instead.
124
+
125
+ ## macOS Permissions
126
+
127
+ - Automation access to Notes is required
128
+
129
+ ## Launch Checklist
130
+
131
+ - Add `uvx apple-mcp-notes` (or a clone's `AppleNotes-MCP/start.sh`) to your MCP client
132
+ - Reload or reconnect the client so the Notes tool surface is loaded into context
133
+ - Call `notes_health` first
134
+ - If Notes automation is blocked, call `notes_permission_guide`
135
+ - After changing macOS permissions, call `notes_recheck_permissions`
136
+
137
+ ## Prompting Notes
138
+
139
+ - `tools/list` returns the full Notes tool surface. Context-constrained clients can use `search_tools` first, then `get_tool_info` for the Notes tool they need.
140
+ - Multiple accounts may each contain a Notes folder. Identify available accounts and folders on first use and set a default.
141
+ - Use Notes for reference material and saved context.
142
+ - Time-sensitive items should go to Reminders or Calendar instead.
143
+
144
+ ## Related
145
+
146
+ - [Apple-Tools-MCP](../Apple-Tools-MCP/README.md)
@@ -0,0 +1,116 @@
1
+ <!-- mcp-name: io.github.jonathanrreed/apple-mcp-notes -->
2
+
3
+ # Apple Notes MCP
4
+
5
+ MCP server for Apple Notes on macOS.
6
+
7
+ Provides access to notes and folders for creation, organization, and management. Keep Notes as the system of record while enabling agents to read, create, update, move, and delete notes.
8
+
9
+ ## When to use
10
+
11
+ - Notes-only workflows
12
+ - Stronger isolation than the all-in-one server
13
+ - Structured note and folder operations through the native Notes app
14
+
15
+ ## What It Does
16
+
17
+ - List accounts and folders
18
+ - List, search, and manage notes (CRUD)
19
+ - Create, rename, and delete folders
20
+ - List note attachments
21
+ - Tool discovery helpers `search_tools` and `get_tool_info` for context-constrained clients
22
+ - Recent-note resources and organization prompts
23
+ - Health and permission checks: `notes_health`, `notes_permission_guide`, `notes_recheck_permissions`
24
+
25
+ ## Install On This Mac
26
+
27
+ <details>
28
+ <summary>Quick start (uvx, from PyPI)</summary>
29
+
30
+ With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
31
+
32
+ ```bash
33
+ uvx apple-mcp-notes
34
+ ```
35
+
36
+ No clone, no venv management.
37
+
38
+ </details>
39
+
40
+ <details>
41
+ <summary>From a clone</summary>
42
+
43
+ ```bash
44
+ git clone https://github.com/JonathanRReed/Apple-MCPs.git
45
+ cd Apple-MCPs
46
+ uv sync --all-packages
47
+ ```
48
+
49
+ This builds one workspace environment with every server's entry point in `.venv/bin` (for example `.venv/bin/apple-notes-mcp`). You can also point an MCP client at `AppleNotes-MCP/start.sh`, which prefers `uv run` and falls back to a plain venv bootstrap (Python 3.11+ required).
50
+
51
+ </details>
52
+
53
+ ## Install In AI Agents
54
+
55
+ <details>
56
+ <summary>Generic MCP client config</summary>
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "apple-notes": {
62
+ "command": "uvx",
63
+ "args": ["apple-mcp-notes"],
64
+ "env": {
65
+ "APPLE_NOTES_MCP_SAFETY_MODE": "full_access"
66
+ }
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ Running from a clone instead? Use `/path/to/Apple-MCPs/AppleNotes-MCP/start.sh` as the command with empty `args`.
73
+
74
+ </details>
75
+
76
+ <details>
77
+ <summary>Claude Code example</summary>
78
+
79
+ ```bash
80
+ claude mcp add --transport stdio --scope project apple-notes -- uvx apple-mcp-notes
81
+ ```
82
+
83
+ </details>
84
+
85
+ ## Safety Modes
86
+
87
+ - `safe_readonly`
88
+ - `safe_manage`
89
+ - `full_access`
90
+
91
+ ## Transport
92
+
93
+ `stdio` is the default and recommended transport. Set `APPLE_NOTES_MCP_TRANSPORT=streamable-http` (with optional `APPLE_NOTES_MCP_HOST` and `APPLE_NOTES_MCP_PORT`) to serve Streamable HTTP instead.
94
+
95
+ ## macOS Permissions
96
+
97
+ - Automation access to Notes is required
98
+
99
+ ## Launch Checklist
100
+
101
+ - Add `uvx apple-mcp-notes` (or a clone's `AppleNotes-MCP/start.sh`) to your MCP client
102
+ - Reload or reconnect the client so the Notes tool surface is loaded into context
103
+ - Call `notes_health` first
104
+ - If Notes automation is blocked, call `notes_permission_guide`
105
+ - After changing macOS permissions, call `notes_recheck_permissions`
106
+
107
+ ## Prompting Notes
108
+
109
+ - `tools/list` returns the full Notes tool surface. Context-constrained clients can use `search_tools` first, then `get_tool_info` for the Notes tool they need.
110
+ - Multiple accounts may each contain a Notes folder. Identify available accounts and folders on first use and set a default.
111
+ - Use Notes for reference material and saved context.
112
+ - Time-sensitive items should go to Reminders or Calendar instead.
113
+
114
+ ## Related
115
+
116
+ - [Apple-Tools-MCP](../Apple-Tools-MCP/README.md)
@@ -0,0 +1,61 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "apple-mcp-notes"
7
+ version = "1.0.1"
8
+ description = "Local Apple Notes MCP server for macOS"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ requires-python = ">=3.11"
13
+ keywords = ["mcp", "model-context-protocol", "macos", "apple", "ai-agent", "automation"]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Environment :: MacOS X",
17
+ "Intended Audience :: Developers",
18
+ "Operating System :: MacOS",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Programming Language :: Python :: 3.14",
23
+ "Topic :: Software Development :: Libraries :: Python Modules",
24
+ ]
25
+ dependencies = [
26
+ "apple-mcp-common>=1.0.0,<2",
27
+ "mcp>=2.0.0,<3",
28
+ "pydantic>=2.12.0",
29
+ ]
30
+
31
+ [project.urls]
32
+ Homepage = "https://github.com/JonathanRReed/Apple-MCPs"
33
+ Repository = "https://github.com/JonathanRReed/Apple-MCPs"
34
+ Changelog = "https://github.com/JonathanRReed/Apple-MCPs/blob/main/CHANGELOG.md"
35
+ Issues = "https://github.com/JonathanRReed/Apple-MCPs/issues"
36
+
37
+ [project.scripts]
38
+ apple-notes-mcp = "apple_notes_mcp.tools:main"
39
+ apple-mcp-notes = "apple_notes_mcp.tools:main"
40
+
41
+ [project.optional-dependencies]
42
+ dev = [
43
+ "pytest>=8,<10",
44
+ "ruff>=0.12,<1",
45
+ ]
46
+
47
+ [tool.setuptools]
48
+ package-dir = {"" = "src"}
49
+
50
+ [tool.setuptools.package-data]
51
+ apple_notes_mcp = ["applescripts/*.applescript"]
52
+
53
+ [tool.setuptools.packages.find]
54
+ where = ["src"]
55
+
56
+ [tool.pytest.ini_options]
57
+ pythonpath = ["src"]
58
+ testpaths = ["tests"]
59
+
60
+ [tool.uv.sources]
61
+ apple-mcp-common = { workspace = true }
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.4
2
+ Name: apple-mcp-notes
3
+ Version: 1.0.1
4
+ Summary: Local Apple Notes MCP server for macOS
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/JonathanRReed/Apple-MCPs
7
+ Project-URL: Repository, https://github.com/JonathanRReed/Apple-MCPs
8
+ Project-URL: Changelog, https://github.com/JonathanRReed/Apple-MCPs/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/JonathanRReed/Apple-MCPs/issues
10
+ Keywords: mcp,model-context-protocol,macos,apple,ai-agent,automation
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: MacOS X
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: apple-mcp-common<2,>=1.0.0
24
+ Requires-Dist: mcp<3,>=2.0.0
25
+ Requires-Dist: pydantic>=2.12.0
26
+ Provides-Extra: dev
27
+ Requires-Dist: pytest<10,>=8; extra == "dev"
28
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
29
+ Dynamic: license-file
30
+
31
+ <!-- mcp-name: io.github.jonathanrreed/apple-mcp-notes -->
32
+
33
+ # Apple Notes MCP
34
+
35
+ MCP server for Apple Notes on macOS.
36
+
37
+ Provides access to notes and folders for creation, organization, and management. Keep Notes as the system of record while enabling agents to read, create, update, move, and delete notes.
38
+
39
+ ## When to use
40
+
41
+ - Notes-only workflows
42
+ - Stronger isolation than the all-in-one server
43
+ - Structured note and folder operations through the native Notes app
44
+
45
+ ## What It Does
46
+
47
+ - List accounts and folders
48
+ - List, search, and manage notes (CRUD)
49
+ - Create, rename, and delete folders
50
+ - List note attachments
51
+ - Tool discovery helpers `search_tools` and `get_tool_info` for context-constrained clients
52
+ - Recent-note resources and organization prompts
53
+ - Health and permission checks: `notes_health`, `notes_permission_guide`, `notes_recheck_permissions`
54
+
55
+ ## Install On This Mac
56
+
57
+ <details>
58
+ <summary>Quick start (uvx, from PyPI)</summary>
59
+
60
+ With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
61
+
62
+ ```bash
63
+ uvx apple-mcp-notes
64
+ ```
65
+
66
+ No clone, no venv management.
67
+
68
+ </details>
69
+
70
+ <details>
71
+ <summary>From a clone</summary>
72
+
73
+ ```bash
74
+ git clone https://github.com/JonathanRReed/Apple-MCPs.git
75
+ cd Apple-MCPs
76
+ uv sync --all-packages
77
+ ```
78
+
79
+ This builds one workspace environment with every server's entry point in `.venv/bin` (for example `.venv/bin/apple-notes-mcp`). You can also point an MCP client at `AppleNotes-MCP/start.sh`, which prefers `uv run` and falls back to a plain venv bootstrap (Python 3.11+ required).
80
+
81
+ </details>
82
+
83
+ ## Install In AI Agents
84
+
85
+ <details>
86
+ <summary>Generic MCP client config</summary>
87
+
88
+ ```json
89
+ {
90
+ "mcpServers": {
91
+ "apple-notes": {
92
+ "command": "uvx",
93
+ "args": ["apple-mcp-notes"],
94
+ "env": {
95
+ "APPLE_NOTES_MCP_SAFETY_MODE": "full_access"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ Running from a clone instead? Use `/path/to/Apple-MCPs/AppleNotes-MCP/start.sh` as the command with empty `args`.
103
+
104
+ </details>
105
+
106
+ <details>
107
+ <summary>Claude Code example</summary>
108
+
109
+ ```bash
110
+ claude mcp add --transport stdio --scope project apple-notes -- uvx apple-mcp-notes
111
+ ```
112
+
113
+ </details>
114
+
115
+ ## Safety Modes
116
+
117
+ - `safe_readonly`
118
+ - `safe_manage`
119
+ - `full_access`
120
+
121
+ ## Transport
122
+
123
+ `stdio` is the default and recommended transport. Set `APPLE_NOTES_MCP_TRANSPORT=streamable-http` (with optional `APPLE_NOTES_MCP_HOST` and `APPLE_NOTES_MCP_PORT`) to serve Streamable HTTP instead.
124
+
125
+ ## macOS Permissions
126
+
127
+ - Automation access to Notes is required
128
+
129
+ ## Launch Checklist
130
+
131
+ - Add `uvx apple-mcp-notes` (or a clone's `AppleNotes-MCP/start.sh`) to your MCP client
132
+ - Reload or reconnect the client so the Notes tool surface is loaded into context
133
+ - Call `notes_health` first
134
+ - If Notes automation is blocked, call `notes_permission_guide`
135
+ - After changing macOS permissions, call `notes_recheck_permissions`
136
+
137
+ ## Prompting Notes
138
+
139
+ - `tools/list` returns the full Notes tool surface. Context-constrained clients can use `search_tools` first, then `get_tool_info` for the Notes tool they need.
140
+ - Multiple accounts may each contain a Notes folder. Identify available accounts and folders on first use and set a default.
141
+ - Use Notes for reference material and saved context.
142
+ - Time-sensitive items should go to Reminders or Calendar instead.
143
+
144
+ ## Related
145
+
146
+ - [Apple-Tools-MCP](../Apple-Tools-MCP/README.md)
@@ -0,0 +1,31 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ src/apple_mcp_notes.egg-info/PKG-INFO
5
+ src/apple_mcp_notes.egg-info/SOURCES.txt
6
+ src/apple_mcp_notes.egg-info/dependency_links.txt
7
+ src/apple_mcp_notes.egg-info/entry_points.txt
8
+ src/apple_mcp_notes.egg-info/requires.txt
9
+ src/apple_mcp_notes.egg-info/top_level.txt
10
+ src/apple_notes_mcp/__init__.py
11
+ src/apple_notes_mcp/config.py
12
+ src/apple_notes_mcp/models.py
13
+ src/apple_notes_mcp/notes_bridge.py
14
+ src/apple_notes_mcp/permissions.py
15
+ src/apple_notes_mcp/tools.py
16
+ src/apple_notes_mcp/applescripts/create_folder.applescript
17
+ src/apple_notes_mcp/applescripts/create_note.applescript
18
+ src/apple_notes_mcp/applescripts/delete_folder.applescript
19
+ src/apple_notes_mcp/applescripts/delete_note.applescript
20
+ src/apple_notes_mcp/applescripts/get_note.applescript
21
+ src/apple_notes_mcp/applescripts/list_accounts.applescript
22
+ src/apple_notes_mcp/applescripts/list_attachments.applescript
23
+ src/apple_notes_mcp/applescripts/list_folders.applescript
24
+ src/apple_notes_mcp/applescripts/list_notes.applescript
25
+ src/apple_notes_mcp/applescripts/move_note.applescript
26
+ src/apple_notes_mcp/applescripts/rename_folder.applescript
27
+ src/apple_notes_mcp/applescripts/update_note.applescript
28
+ tests/test_bridge.py
29
+ tests/test_config.py
30
+ tests/test_permissions.py
31
+ tests/test_tools.py
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ apple-mcp-notes = apple_notes_mcp.tools:main
3
+ apple-notes-mcp = apple_notes_mcp.tools:main
@@ -0,0 +1,7 @@
1
+ apple-mcp-common<2,>=1.0.0
2
+ mcp<3,>=2.0.0
3
+ pydantic>=2.12.0
4
+
5
+ [dev]
6
+ pytest<10,>=8
7
+ ruff<1,>=0.12
@@ -0,0 +1 @@
1
+ apple_notes_mcp
@@ -0,0 +1,3 @@
1
+ __all__ = ["__version__"]
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,50 @@
1
+ on run argv
2
+ set folderName to item 1 of argv
3
+ set accountName to item 2 of argv
4
+ set parentFolderId to item 3 of argv
5
+ tell application "Notes"
6
+ set targetAccount to account accountName
7
+ if parentFolderId is not "" then
8
+ set targetFolder to folder id parentFolderId
9
+ set newFolder to make new folder at targetFolder with properties {name:folderName}
10
+ else
11
+ set newFolder to make new folder at targetAccount with properties {name:folderName}
12
+ end if
13
+ return "{" & quote & "folder" & quote & ":" & my folder_json(newFolder, targetAccount) & "}"
14
+ end tell
15
+ end run
16
+
17
+ on folder_json(fld, acc)
18
+ set folderId to my safe_text(id of fld)
19
+ set folderName to my safe_text(name of fld)
20
+ set accountId to my safe_text(id of acc)
21
+ set accountName to my safe_text(name of acc)
22
+ return "{" & quote & "folder_id" & quote & ":" & my json_string(folderId) & "," & quote & "name" & quote & ":" & my json_string(folderName) & "," & quote & "account_id" & quote & ":" & my json_string(accountId) & "," & quote & "account_name" & quote & ":" & my json_string(accountName) & "," & quote & "parent_folder_id" & quote & ":null," & quote & "parent_folder_name" & quote & ":null," & quote & "shared" & quote & ":false}"
23
+ end folder_json
24
+
25
+ on safe_text(valueText)
26
+ try
27
+ return valueText as text
28
+ on error
29
+ return ""
30
+ end try
31
+ end safe_text
32
+
33
+ on json_string(valueText)
34
+ set backslash to ASCII character 92
35
+ set escapedText to my replace_text(valueText as text, backslash, backslash & backslash)
36
+ set escapedText to my replace_text(escapedText, quote, backslash & quote)
37
+ set escapedText to my replace_text(escapedText, return, backslash & "n")
38
+ set escapedText to my replace_text(escapedText, linefeed, backslash & "n")
39
+ return quote & escapedText & quote
40
+ end json_string
41
+
42
+ on replace_text(sourceText, findText, replaceText)
43
+ set originalDelimiters to AppleScript's text item delimiters
44
+ set AppleScript's text item delimiters to findText
45
+ set sourceItems to text items of sourceText
46
+ set AppleScript's text item delimiters to replaceText
47
+ set resultText to sourceItems as text
48
+ set AppleScript's text item delimiters to originalDelimiters
49
+ return resultText
50
+ end replace_text