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.
- package/README.md +29 -17
- package/build/index.js +22997 -776
- package/docs/AUTOMATION-PERMISSION.md +147 -0
- package/docs/LIMITATIONS.md +145 -0
- package/docs/NODE-RUNTIME-AND-TCC-PERMISSIONS.md +109 -0
- package/package.json +4 -4
- package/scripts/setup.sh +2 -2
- package/src/utils/numbers_reader.py +6 -1
- package/build/index.d.ts +0 -3
- package/build/index.d.ts.map +0 -1
- package/build/index.js.map +0 -1
- package/build/services/fileConfig.d.ts +0 -7
- package/build/services/fileConfig.d.ts.map +0 -1
- package/build/services/fileConfig.js +0 -52
- package/build/services/fileConfig.js.map +0 -1
- package/build/services/numbersManager.d.ts +0 -175
- package/build/services/numbersManager.d.ts.map +0 -1
- package/build/services/numbersManager.js +0 -357
- package/build/services/numbersManager.js.map +0 -1
- package/build/tools/doctor.d.ts +0 -22
- package/build/tools/doctor.d.ts.map +0 -1
- package/build/tools/doctor.js +0 -96
- package/build/tools/doctor.js.map +0 -1
- package/build/tools/resourcesAndPrompts.d.ts +0 -15
- package/build/tools/resourcesAndPrompts.d.ts.map +0 -1
- package/build/tools/resourcesAndPrompts.js +0 -77
- package/build/tools/resourcesAndPrompts.js.map +0 -1
- package/build/tools/respond.d.ts +0 -29
- package/build/tools/respond.d.ts.map +0 -1
- package/build/tools/respond.js +0 -44
- package/build/tools/respond.js.map +0 -1
- package/build/types.d.ts +0 -128
- package/build/types.d.ts.map +0 -1
- package/build/types.js +0 -2
- package/build/types.js.map +0 -1
- package/build/utils/applescript.d.ts +0 -90
- package/build/utils/applescript.d.ts.map +0 -1
- package/build/utils/applescript.js +0 -248
- package/build/utils/applescript.js.map +0 -1
- package/build/utils/python.d.ts +0 -12
- package/build/utils/python.d.ts.map +0 -1
- package/build/utils/python.js +0 -256
- 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
|
[](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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
706
|
-
-
|
|
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.
|