apple-numbers-mcp 1.1.4 → 1.1.6

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 (43) hide show
  1. package/README.md +29 -17
  2. package/build/index.js +22997 -776
  3. package/docs/AUTOMATION-PERMISSION.md +147 -0
  4. package/docs/LIMITATIONS.md +145 -0
  5. package/docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md +109 -0
  6. package/package.json +4 -4
  7. package/scripts/setup.sh +2 -2
  8. package/src/utils/numbers_reader.py +6 -1
  9. package/build/index.d.ts +0 -3
  10. package/build/index.d.ts.map +0 -1
  11. package/build/index.js.map +0 -1
  12. package/build/services/fileConfig.d.ts +0 -7
  13. package/build/services/fileConfig.d.ts.map +0 -1
  14. package/build/services/fileConfig.js +0 -52
  15. package/build/services/fileConfig.js.map +0 -1
  16. package/build/services/numbersManager.d.ts +0 -175
  17. package/build/services/numbersManager.d.ts.map +0 -1
  18. package/build/services/numbersManager.js +0 -357
  19. package/build/services/numbersManager.js.map +0 -1
  20. package/build/tools/doctor.d.ts +0 -22
  21. package/build/tools/doctor.d.ts.map +0 -1
  22. package/build/tools/doctor.js +0 -96
  23. package/build/tools/doctor.js.map +0 -1
  24. package/build/tools/resourcesAndPrompts.d.ts +0 -15
  25. package/build/tools/resourcesAndPrompts.d.ts.map +0 -1
  26. package/build/tools/resourcesAndPrompts.js +0 -77
  27. package/build/tools/resourcesAndPrompts.js.map +0 -1
  28. package/build/tools/respond.d.ts +0 -29
  29. package/build/tools/respond.d.ts.map +0 -1
  30. package/build/tools/respond.js +0 -44
  31. package/build/tools/respond.js.map +0 -1
  32. package/build/types.d.ts +0 -128
  33. package/build/types.d.ts.map +0 -1
  34. package/build/types.js +0 -2
  35. package/build/types.js.map +0 -1
  36. package/build/utils/applescript.d.ts +0 -90
  37. package/build/utils/applescript.d.ts.map +0 -1
  38. package/build/utils/applescript.js +0 -248
  39. package/build/utils/applescript.js.map +0 -1
  40. package/build/utils/python.d.ts +0 -12
  41. package/build/utils/python.d.ts.map +0 -1
  42. package/build/utils/python.js +0 -256
  43. package/build/utils/python.js.map +0 -1
package/README.md CHANGED
@@ -12,7 +12,7 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that e
12
12
  [![MCP](https://img.shields.io/badge/MCP-server-blue)](https://modelcontextprotocol.io)
13
13
 
14
14
  <p align="center">
15
- <img src="codex/assets/screenshot.png" alt="Apple Numbers MCP — read, write, search, and format spreadsheets from Codex, Claude, and other AI assistants" width="680">
15
+ <img src="https://raw.githubusercontent.com/sweetrb/apple-numbers-mcp/main/codex/assets/screenshot.png" alt="Apple Numbers MCP — read, write, search, and format spreadsheets from Codex, Claude, and other AI assistants" width="680">
16
16
  </p>
17
17
 
18
18
  ## What is This?
@@ -41,6 +41,12 @@ Install the sweetrb/apple-numbers-mcp MCP server so you can help me work with my
41
41
 
42
42
  Claude will handle the installation and configuration automatically. After install, you'll need to install `numbers-parser` (Python) — see [Requirements](#requirements) below.
43
43
 
44
+ Or register it yourself in one deterministic line (no clone needed):
45
+
46
+ ```bash
47
+ claude mcp add apple-numbers -s user -- npx -y apple-numbers-mcp
48
+ ```
49
+
44
50
  ### Using the Plugin Marketplace
45
51
 
46
52
  Install as a Claude Code plugin for automatic configuration and enhanced AI behavior:
@@ -52,6 +58,8 @@ Install as a Claude Code plugin for automatic configuration and enhanced AI beha
52
58
 
53
59
  This method also installs a **skill** that teaches Claude when and how to use Apple Numbers effectively.
54
60
 
61
+ The plugin runs straight from its marketplace clone under `~/.claude/plugins/` (the clone lives at `~/.claude/plugins/marketplaces/apple-numbers-mcp/`). On the **first tool call** the server auto-bootstraps a project-local Python venv inside that directory with `numbers-parser` — a one-time setup that takes about a minute and **requires Python >= 3.11 on PATH** (stock macOS ships 3.9 — `brew install python@3.12` first). To pre-warm it instead of waiting on the first call, run `scripts/setup.sh` inside that install directory.
62
+
55
63
  ### Using the Codex Marketplace
56
64
 
57
65
  Install the same public marketplace in Codex:
@@ -71,14 +79,14 @@ numbers-parser`); see [Requirements](#requirements).
71
79
 
72
80
  Configuration for two more hosts is included — each registers the same `apple-numbers` MCP server (`npx -y apple-numbers-mcp`). All paths still need the `numbers-parser` Python sidecar available; see [Requirements](#requirements).
73
81
 
74
- - **[Hermes Agent](https://hermes-agent.nousresearch.com/)** (NousResearch) — Hermes has no plugin/marketplace drop-in. Add the server with `hermes mcp add apple-numbers --command npx --args -y apple-numbers-mcp`, or merge [`.hermes-plugin/config.yaml`](.hermes-plugin/config.yaml) into `~/.hermes/config.yaml`. Details: [`.hermes-plugin/README.md`](.hermes-plugin/README.md).
75
- - **[Antigravity](https://antigravity.google/)** (Google) — add the server entry from [`.antigravity-plugin/mcp_config.json`](.antigravity-plugin/mcp_config.json) to `~/.gemini/config/mcp_config.json` (or via Antigravity's MCP settings).
82
+ - **[Hermes Agent](https://hermes-agent.nousresearch.com/)** (NousResearch) — Hermes has no plugin/marketplace drop-in. Add the server with `hermes mcp add apple-numbers --command npx --args -y apple-numbers-mcp`, or merge [`.hermes-plugin/config.yaml`](https://github.com/sweetrb/apple-numbers-mcp/blob/main/.hermes-plugin/config.yaml) into `~/.hermes/config.yaml`. Details: [`.hermes-plugin/README.md`](https://github.com/sweetrb/apple-numbers-mcp/blob/main/.hermes-plugin/README.md).
83
+ - **[Antigravity](https://antigravity.google/)** (Google) — add the server entry from [`.antigravity-plugin/mcp_config.json`](https://github.com/sweetrb/apple-numbers-mcp/blob/main/.antigravity-plugin/mcp_config.json) to `~/.gemini/config/mcp_config.json` (or via Antigravity's MCP settings).
76
84
 
77
85
  ### Manual Installation
78
86
 
79
- **1. Install the server:**
87
+ **1. Install the server** (from the npm registry):
80
88
  ```bash
81
- npm install -g github:sweetrb/apple-numbers-mcp
89
+ npm install -g apple-numbers-mcp
82
90
  ```
83
91
 
84
92
  **2. Install numbers-parser** (the Python library this server depends on):
@@ -130,10 +138,10 @@ The entrypoint is written as:
130
138
 
131
139
  ## Requirements
132
140
 
133
- - **macOS or Linux** — `numbers-parser` reads the file format directly, so most tools work anywhere. **Formatting and formula tools require macOS with Numbers.app.**
141
+ - **macOS** — the npm package is macOS-only (it declares `os: ["darwin"]`). Reads go through `numbers-parser` directly (no Numbers.app needed); **formatting and formula tools additionally require Numbers.app.**
134
142
  - **Node.js 20+** — Required for the MCP server
135
143
  - **Python 3.11+** — the `numbers-parser` library installs automatically into a project-local venv on first use (or pre-warm with `pnpm run setup`). numbers-parser requires Python ≥ 3.10; macOS ships 3.9, so install a newer Python first (e.g. `brew install python@3.12`).
136
- - **Automation permission (writes only)** — Reads and exports need no special permission, but write/format tools drive Numbers.app via AppleScript and require the host app to have Automation permission for Numbers, granted on first use. See the [Automation Permission guide](docs/AUTOMATION-PERMISSION.md). Run the **`doctor`** tool to verify your setup.
144
+ - **Automation permission (writes only)** — Reads and exports need no special permission, but write/format tools drive Numbers.app via AppleScript and require the host app to have Automation permission for Numbers, granted on first use. See the [Automation Permission guide](https://github.com/sweetrb/apple-numbers-mcp/blob/main/docs/AUTOMATION-PERMISSION.md). Run the **`doctor`** tool to verify your setup.
137
145
 
138
146
  ## Features
139
147
 
@@ -179,7 +187,7 @@ The entrypoint is written as:
179
187
  |---------|-------------|
180
188
  | **Import CSV/TSV/JSON** | Convert a tabular file into a new `.numbers` spreadsheet |
181
189
  | **Health Check** | Verify Python 3 and numbers-parser are installed |
182
- | **Doctor** | Richer setup diagnostic — read sidecar, Numbers.app, and Automation permission, each reported ok / warn / fail with actionable advice |
190
+ | **Doctor** | Richer setup diagnostic — Python interpreter (path + version), read sidecar, Numbers.app, and Automation permission, each reported ok / warn / fail with actionable advice |
183
191
 
184
192
  All tools also return **structured JSON** (`structuredContent`) alongside the human-readable text, so agents can consume results without parsing prose.
185
193
 
@@ -210,11 +218,11 @@ Verify Python 3 and `numbers-parser` are installed and reachable from the server
210
218
 
211
219
  #### `doctor`
212
220
 
213
- Run a full setup diagnostic with three separate checks: `numbers_parser` (the read sidecar — required for all reads/exports), `numbers_app` (Numbers.app present — required for write/format tools), and `automation_permission` (an informational reminder that write tools need Automation permission for Numbers.app). Each is reported as ok / warn / fail with actionable advice. This is the richer counterpart to `health-check`; reach for it first when a tool returns a permission or setup error.
221
+ Run a full setup diagnostic with four separate checks: `python_interpreter` (the resolved Python's path and version — warns when it's older than 3.11, the most common setup failure since stock macOS ships 3.9), `numbers_parser` (the read sidecar — required for all reads/exports), `numbers_app` (Numbers.app present — required for write/format tools), and `automation_permission` (an informational reminder that write tools need Automation permission for Numbers.app). Each is reported as ok / warn / fail with actionable advice. This is the richer counterpart to `health-check`; reach for it first when a tool returns a permission or setup error.
214
222
 
215
223
  **Parameters:** None
216
224
 
217
- **Returns:** A per-check report. The `structuredContent` carries the raw `{ healthy, checks[] }`, where each check has `name`, `status` (`ok`/`warn`/`fail`), and `detail`. Reads don't need Automation permission, but writes do — see [docs/AUTOMATION-PERMISSION.md](docs/AUTOMATION-PERMISSION.md).
225
+ **Returns:** A per-check report. The `structuredContent` carries the raw `{ healthy, checks[] }`, where each check has `name`, `status` (`ok`/`warn`/`fail`), and `detail`. Reads don't need Automation permission, but writes do — see [docs/AUTOMATION-PERMISSION.md](https://github.com/sweetrb/apple-numbers-mcp/blob/main/docs/AUTOMATION-PERMISSION.md).
218
226
 
219
227
  ---
220
228
 
@@ -595,7 +603,7 @@ AI: [calls import-csv with inputPath, outputPath]
595
603
  ### npm (Recommended)
596
604
 
597
605
  ```bash
598
- npm install -g github:sweetrb/apple-numbers-mcp
606
+ npm install -g apple-numbers-mcp
599
607
  pip3 install numbers-parser
600
608
  ```
601
609
 
@@ -609,6 +617,8 @@ pnpm run setup # creates ./venv and installs numbers-parser
609
617
  pnpm run build
610
618
  ```
611
619
 
620
+ Installing the repo directly from GitHub (`npm install -g github:sweetrb/apple-numbers-mcp`) also counts as a from-source install: it runs the repo's build on your machine and **requires pnpm**. Prefer the published npm package above unless you specifically want unreleased code.
621
+
612
622
  If installed from source, use this configuration:
613
623
  ```json
614
624
  {
@@ -683,7 +693,7 @@ This is the same Python-sidecar pattern used by [apple-photos-mcp](https://githu
683
693
  ## Known Limitations
684
694
 
685
695
  For the full rundown — the read-vs-write split, AppleScript-only formulas/styles,
686
- indexing, dates, format lag, and concurrent edits — see **[docs/LIMITATIONS.md](docs/LIMITATIONS.md)**.
696
+ indexing, dates, format lag, and concurrent edits — see **[docs/LIMITATIONS.md](https://github.com/sweetrb/apple-numbers-mcp/blob/main/docs/LIMITATIONS.md)**.
687
697
  The summary below is the quick version.
688
698
 
689
699
  | Limitation | Reason |
@@ -702,8 +712,10 @@ These are tracked for future releases. The underlying `numbers-parser` library h
702
712
 
703
713
  ## Troubleshooting
704
714
 
705
- ### "numbers-parser not installed. Run: npm run setup"
706
- - Run `pip3 install numbers-parser` (global) or `npm run setup` (project-local venv).
715
+ ### "numbers-parser not installed"
716
+ - **Most common cause: your `python3` is older than 3.11** — stock macOS ships Python 3.9, which `numbers-parser` can't run on. Install a newer Python (`brew install python@3.12`), then simply retry the tool call: the venv rebuilds automatically.
717
+ - Otherwise, install the library directly: `pip3 install numbers-parser` (global Python), or run `scripts/setup.sh` from a repo checkout (`pnpm run setup`) to build the project-local venv.
718
+ - Run the **`doctor`** tool — it reports the resolved Python interpreter path and version, so a too-old stock Python is visible at a glance.
707
719
  - If you used a virtualenv, make sure it's the one at `./venv/` in the project directory.
708
720
 
709
721
  ### `apple-numbers` server fails to connect when run from a clone
@@ -719,7 +731,7 @@ These are tracked for future releases. The underlying `numbers-parser` library h
719
731
  ### Formatting / formula tools fail with "Numbers.app not running" or "Not authorized to send Apple events to Numbers"
720
732
  - Open Numbers.app at least once. macOS will prompt for automation permission — accept it.
721
733
  - Verify in **System Settings → Privacy & Security → Automation**, or reset with `tccutil reset AppleEvents`.
722
- - Run the **`doctor`** tool to confirm your setup — it reports the Numbers.app and Automation-permission checks separately. See the [Automation Permission guide](docs/AUTOMATION-PERMISSION.md). Reads don't need this permission; only writes do.
734
+ - Run the **`doctor`** tool to confirm your setup — it reports the Numbers.app and Automation-permission checks separately. See the [Automation Permission guide](https://github.com/sweetrb/apple-numbers-mcp/blob/main/docs/AUTOMATION-PERMISSION.md). Reads don't need this permission; only writes do.
723
735
 
724
736
  ### Output looks wrong (dates as ISO, floats with decimals)
725
737
  - The server normalizes dates to ISO 8601 and rounds floats that are within `1e-9` of an integer. If you want raw values, file an issue.
@@ -766,7 +778,7 @@ A software consulting, contracting, and development company.
766
778
 
767
779
  ## License
768
780
 
769
- MIT License - see [LICENSE](LICENSE) for details. This project is not affiliated with Apple Inc. or the [numbers-parser](https://pypi.org/project/numbers-parser/) project.
781
+ MIT License - see [LICENSE](https://github.com/sweetrb/apple-numbers-mcp/blob/main/LICENSE) for details. This project is not affiliated with Apple Inc. or the [numbers-parser](https://pypi.org/project/numbers-parser/) project.
770
782
 
771
783
  ## Contributing
772
784
 
@@ -783,4 +795,4 @@ Part of a family of macOS MCP servers:
783
795
 
784
796
  ## Recurring macOS permission prompts
785
797
 
786
- If macOS keeps re-prompting for Full Disk Access or Automation for `node` (often after a `brew upgrade`), see [docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md](docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md) — the fix is to run this server under the official, Developer-ID-signed Node so the grant survives Node updates.
798
+ If macOS keeps re-prompting for Full Disk Access or Automation for `node` (often after a `brew upgrade`), see [docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md](https://github.com/sweetrb/apple-numbers-mcp/blob/main/docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md) — the fix is to run this server under the official, Developer-ID-signed Node so the grant survives Node updates.