appstore-api-mcp 1.0.1 → 1.0.3

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/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ All notable changes to this project are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/) and the project uses
5
5
  [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [1.0.3] - 2026-06-02
8
+
9
+ ### Changed
10
+ - README Quick start reworked to be agent-agnostic: the **agent-setup prompt is
11
+ now shown inline**, and manual setup leads with the universal config block
12
+ (Claude Code is presented as one shortcut among equals, not the default).
13
+
14
+ ### Fixed
15
+ - Publish workflow now triggers on tag push **only** (removed the duplicate
16
+ `release: published` trigger that caused a second, failing publish run), and
17
+ skips publishing if the version is already on npm.
18
+
19
+ ## [1.0.2] - 2026-06-02
20
+
21
+ ### Added
22
+ - Setup instructions for more MCP clients: **Google Antigravity**,
23
+ **Amazon Q Developer CLI**, **Goose**, and a list of others (Kiro, Roo Code,
24
+ Trae, JetBrains AI, Warp, …).
25
+ - **Agent-assisted setup** (`docs/AGENT-SETUP.md`) — a copy-paste prompt so your
26
+ AI agent configures the server from just your Key ID, Issuer ID, and `.p8` path.
27
+ - `.github/workflows/npm-publish.yml` — publish to npm on version-tag push /
28
+ release, with provenance and a version-match guard.
29
+
30
+ ### Changed
31
+ - Install docs default to `--scope user` (global) with an opt-out comment for
32
+ project-only installs; fixed stale server aliases.
33
+
7
34
  ## [1.0.1] - 2026-06-02
8
35
 
9
36
  ### Added
package/README.md CHANGED
@@ -10,7 +10,7 @@ versions — plus a raw-request tool that reaches the **entire**
10
10
  > *"show the English description for MyApp"*, or
11
11
  > *"upload these screenshots to the 6.7-inch set"* — the agent calls the right tools.
12
12
 
13
- - 🤖 **Works with any MCP client** — Claude Code/Desktop, OpenAI Codex CLI, Cursor, Cline, Windsurf, VS Code (agent mode), Zed, Continue, Gemini CLI, and custom agents on the MCP SDKs. Standard stdio server, no client-specific code. → [docs/CLIENTS.md](docs/CLIENTS.md)
13
+ - 🤖 **Works with any MCP client** — Claude Code/Desktop, OpenAI Codex CLI, Cursor, Cline, Windsurf, VS Code (agent mode), Zed, Continue, Gemini CLI, Google Antigravity, Amazon Q, Goose, JetBrains AI, Warp, and custom agents on the MCP SDKs. Standard stdio server, no client-specific code. → [docs/CLIENTS.md](docs/CLIENTS.md)
14
14
  - ✅ **One-line install** via `npx` — no clone, no build
15
15
  - ✅ **Credentials stay on your machine** — calls go straight to Apple, nothing is proxied
16
16
  - ✅ **Slim, well-described tool set** + a `raw_request` escape hatch for the whole API
@@ -22,7 +22,7 @@ versions — plus a raw-request tool that reaches the **entire**
22
22
 
23
23
  ## Table of contents
24
24
 
25
- - [Quick start](#quick-start)
25
+ - [Quick start](#quick-start) — incl. [agent-assisted setup](docs/AGENT-SETUP.md)
26
26
  - [Supported clients](#supported-clients) → full guide in [docs/CLIENTS.md](docs/CLIENTS.md)
27
27
  - [Getting your API key](#getting-your-api-key) → full guide in [docs/SETUP.md](docs/SETUP.md)
28
28
  - [Configuration](#configuration)
@@ -39,23 +39,45 @@ versions — plus a raw-request tool that reaches the **entire**
39
39
  **Requirements:** Node.js ≥ 18 and an Apple Developer account with an
40
40
  [App Store Connect API key](#getting-your-api-key).
41
41
 
42
- ### Claude Code (CLI)
42
+ ### 🤖 Easiest: let your AI agent set it up (works with any agent)
43
43
 
44
- ```bash
45
- claude mcp add appstore-api \
46
- --env ASC_KEY_ID=YOUR_KEY_ID \
47
- --env ASC_ISSUER_ID=YOUR_ISSUER_ID \
48
- --env ASC_PRIVATE_KEY_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
49
- -- npx -y appstore-api-mcp
44
+ Don't want to touch config files? Paste this into your coding agent (Claude,
45
+ Codex, Cursor, Windsurf, Antigravity, Gemini CLI, …), fill in your three values,
46
+ and it will configure your client and verify it:
47
+
48
+ ```text
49
+ Set up the "appstore-api-mcp" App Store Connect MCP server for me.
50
+
51
+ My App Store Connect API credentials:
52
+ - Key ID: <YOUR_KEY_ID>
53
+ - Issuer ID: <YOUR_ISSUER_ID>
54
+ - Path to my .p8 private key file: <ABSOLUTE_PATH_TO_AuthKey_XXXX.p8>
55
+
56
+ Please:
57
+ 1. Detect which MCP client I'm using and add the server to its config. Run it
58
+ with: npx -y appstore-api-mcp
59
+ 2. Pass these env vars: ASC_KEY_ID, ASC_ISSUER_ID, and ASC_PRIVATE_KEY_PATH
60
+ (point ASC_PRIVATE_KEY_PATH at my .p8 path — reference the PATH, do not
61
+ inline the key contents).
62
+ 3. Install it at user/global scope (for Claude Code use `--scope user`).
63
+ 4. Do NOT print, echo, log, or commit the key. Keep the .p8 outside any git repo.
64
+ 5. When done, verify by listing my App Store apps and report the result.
65
+
66
+ Config formats per client: https://github.com/fil-technology/appstore-api-mcp/blob/main/docs/CLIENTS.md
50
67
  ```
51
68
 
52
- Add `--scope user` to make it available in **every** project (default is the
53
- current project only).
69
+ > Give the file **path**, not the key contents — that keeps the private key off
70
+ > the chat transcript. More detail + a remote/cloud variant in
71
+ > [docs/AGENT-SETUP.md](docs/AGENT-SETUP.md).
72
+
73
+ Prefer to do it manually? See below.
54
74
 
55
- ### Any other MCP client (Cursor, Cline, Windsurf, VS Code, Zed, Continue, …)
75
+ ### Manual setup — any MCP client
56
76
 
57
- Almost every client uses this same block (Claude Desktop config path:
58
- `~/Library/Application Support/Claude/claude_desktop_config.json`):
77
+ This is a standard stdio MCP server, so **every** MCP client uses the same
78
+ command (`npx -y appstore-api-mcp`) and the same three `ASC_*` env vars. Most
79
+ clients (Cursor, Cline, Windsurf, Claude Desktop, Gemini CLI, Antigravity, …)
80
+ take this exact block — just put it in that client's config file:
59
81
 
60
82
  ```json
61
83
  {
@@ -73,7 +95,24 @@ Almost every client uses this same block (Claude Desktop config path:
73
95
  }
74
96
  ```
75
97
 
76
- Restart the client, then ask it to *"list my App Store apps"* to confirm it works.
98
+ A few clients differ (VS Code uses `servers`, Codex uses TOML, Zed uses
99
+ `context_servers`) — see the [Supported clients](#supported-clients) table and
100
+ [docs/CLIENTS.md](docs/CLIENTS.md) for each exact format/location.
101
+
102
+ **Claude Code** has a one-line CLI shortcut instead of editing a file:
103
+
104
+ ```bash
105
+ # --scope user installs it for ALL your projects (recommended).
106
+ # Remove the --scope user line to install for the current project only.
107
+ claude mcp add appstore-api \
108
+ --scope user \
109
+ --env ASC_KEY_ID=YOUR_KEY_ID \
110
+ --env ASC_ISSUER_ID=YOUR_ISSUER_ID \
111
+ --env ASC_PRIVATE_KEY_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
112
+ -- npx -y appstore-api-mcp
113
+ ```
114
+
115
+ After configuring, restart the client and ask it to *"list my App Store apps"* to confirm it works.
77
116
 
78
117
  ---
79
118
 
@@ -95,6 +134,10 @@ the same; only each client's config format/location differs.
95
134
  | **Zed** | `settings.json` → `context_servers` |
96
135
  | **Continue** | `~/.continue/config.yaml` → `mcpServers` |
97
136
  | **Gemini CLI** | `~/.gemini/settings.json` → `mcpServers` |
137
+ | **Google Antigravity** | MCP settings → `mcpServers` |
138
+ | **Amazon Q Developer CLI** | `~/.aws/amazonq/mcp.json` → `mcpServers` |
139
+ | **Goose** | `~/.config/goose/config.yaml` → `extensions` |
140
+ | **Kiro / Roo Code / Trae / JetBrains AI / Warp / others** | standard `mcpServers` block — see docs |
98
141
  | **Custom agent** (MCP SDK / Agents SDK / LangChain) | spawn the stdio command with the env vars |
99
142
 
100
143
  Copy-paste config snippets for each are in **[docs/CLIENTS.md](docs/CLIENTS.md)**.
@@ -0,0 +1,64 @@
1
+ # Let an AI agent set it up for you
2
+
3
+ You don't have to edit config files by hand. Paste the prompt below into your
4
+ coding agent (Claude Code, Cursor, Codex, Windsurf, etc.), fill in your three
5
+ credentials, and it will detect your client and wire everything up.
6
+
7
+ ## ✅ Copy-paste prompt
8
+
9
+ ```text
10
+ Set up the "appstore-api-mcp" App Store Connect MCP server for me.
11
+
12
+ My App Store Connect API credentials:
13
+ - Key ID: <YOUR_KEY_ID>
14
+ - Issuer ID: <YOUR_ISSUER_ID>
15
+ - Path to my .p8 private key file: <ABSOLUTE_PATH_TO_AuthKey_XXXX.p8>
16
+
17
+ Please:
18
+ 1. Detect which MCP client I'm using and add the server to that client's
19
+ correct config file/command. Run it with: npx -y appstore-api-mcp
20
+ 2. Pass these env vars to the server:
21
+ ASC_KEY_ID = my Key ID
22
+ ASC_ISSUER_ID = my Issuer ID
23
+ ASC_PRIVATE_KEY_PATH = the path to my .p8 file (reference the PATH; do not
24
+ inline the key contents)
25
+ 3. Install it at user/global scope so it's available in all my projects
26
+ (for Claude Code, use `claude mcp add ... --scope user`).
27
+ 4. Do NOT print, echo, log, or commit the key. Keep the .p8 outside any git repo.
28
+ 5. When done, verify it works by listing my App Store apps, then tell me the
29
+ result (or any error and how to fix it).
30
+
31
+ Config formats per client are documented here:
32
+ https://github.com/fil-technology/appstore-api-mcp/blob/main/docs/CLIENTS.md
33
+ ```
34
+
35
+ ## Why give the *path*, not the key contents
36
+
37
+ Pasting the raw `.p8` contents into a chat sends your private key through the
38
+ model/provider. Giving the **file path** instead keeps the key on your disk —
39
+ the MCP config only stores a path, and the server reads the file locally at
40
+ runtime. Same convenience, much smaller exposure.
41
+
42
+ > If your agent runs in a remote/cloud sandbox that can't see your local disk,
43
+ > you'll need the key available there. In that case prefer
44
+ > `ASC_PRIVATE_KEY_BASE64` injected as a secret rather than committing the file.
45
+
46
+ ## Is this safe / good practice?
47
+
48
+ - ✅ **Simple:** the user provides 3 values; the agent handles client detection
49
+ and the exact config format.
50
+ - ✅ **Low exposure:** with the path approach, the secret never enters the
51
+ transcript and is never committed.
52
+ - ✅ **Least privilege still applies:** use an **App Manager** API key, not Admin
53
+ (see [SECURITY.md](SECURITY.md)).
54
+ - ⚠️ **Review what the agent writes:** confirm the key path is correct and that
55
+ no credential was echoed back. A good agent will say "configured" without
56
+ reprinting your key.
57
+
58
+ ## After setup
59
+
60
+ Ask your agent things like:
61
+
62
+ - "List my App Store apps."
63
+ - "Audit all my apps for ASO gaps."
64
+ - "Show the current keywords and description for <app> (dry-run a new set)."
package/docs/CLIENTS.md CHANGED
@@ -27,6 +27,8 @@ with these three env vars (see [SETUP.md](SETUP.md) to get them):
27
27
  ## Claude Code (CLI)
28
28
 
29
29
  ```bash
30
+ # --scope user installs it for ALL your projects (recommended).
31
+ # Remove the --scope user line to install for the current project only.
30
32
  claude mcp add appstore-api \
31
33
  --scope user \
32
34
  --env ASC_KEY_ID=YOUR_KEY_ID \
@@ -176,6 +178,60 @@ In `~/.gemini/settings.json` — same `mcpServers` shape as Claude Desktop:
176
178
  }
177
179
  ```
178
180
 
181
+ ## Google Antigravity
182
+
183
+ Antigravity is Google's agentic IDE and supports MCP servers. Open its **MCP
184
+ settings** ("Manage MCP servers" → edit the JSON config) and add the standard
185
+ `mcpServers` block:
186
+
187
+ ```json
188
+ {
189
+ "mcpServers": {
190
+ "appstore-api": {
191
+ "command": "npx",
192
+ "args": ["-y", "appstore-api-mcp"],
193
+ "env": {
194
+ "ASC_KEY_ID": "YOUR_KEY_ID",
195
+ "ASC_ISSUER_ID": "YOUR_ISSUER_ID",
196
+ "ASC_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey.p8"
197
+ }
198
+ }
199
+ }
200
+ }
201
+ ```
202
+
203
+ ## Amazon Q Developer CLI
204
+
205
+ `~/.aws/amazonq/mcp.json` — same `mcpServers` shape as Claude Desktop.
206
+
207
+ ## Goose (Block)
208
+
209
+ `~/.config/goose/config.yaml`, under `extensions` (type `stdio`):
210
+
211
+ ```yaml
212
+ extensions:
213
+ appstore-api:
214
+ type: stdio
215
+ cmd: npx
216
+ args: ["-y", "appstore-api-mcp"]
217
+ envs:
218
+ ASC_KEY_ID: YOUR_KEY_ID
219
+ ASC_ISSUER_ID: YOUR_ISSUER_ID
220
+ ASC_PRIVATE_KEY_PATH: /absolute/path/to/AuthKey.p8
221
+ ```
222
+
223
+ ## More MCP-compatible clients
224
+
225
+ The following also speak MCP and use the **same** `mcpServers` JSON block shown
226
+ above (consult each client's MCP docs for the exact config file/UI):
227
+
228
+ - **Kiro** (AWS agentic IDE) — `.kiro/settings/mcp.json`
229
+ - **Roo Code** (VS Code) — MCP settings
230
+ - **Trae** (ByteDance IDE)
231
+ - **JetBrains AI Assistant / Junie** — Settings → Tools → MCP
232
+ - **Warp** terminal — MCP servers settings
233
+ - **BoltAI**, **LibreChat**, **Witsy**, **Tome**, **5ire** — desktop MCP clients
234
+
179
235
  ## Any other MCP client / custom agent
180
236
 
181
237
  Point your client at a stdio server with:
package/docs/SETUP.md CHANGED
@@ -41,7 +41,9 @@ chmod 600 ~/.appstoreconnect/AuthKey_XXXXXXXXXX.p8
41
41
  ### Claude Code
42
42
 
43
43
  ```bash
44
- claude mcp add appstore-connect \
44
+ # --scope user installs it for ALL your projects (recommended).
45
+ # Remove the --scope user line to install for the current project only.
46
+ claude mcp add appstore-api \
45
47
  --scope user \
46
48
  --env ASC_KEY_ID=YOUR_KEY_ID \
47
49
  --env ASC_ISSUER_ID=YOUR_ISSUER_ID \
@@ -58,7 +60,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
58
60
  ```json
59
61
  {
60
62
  "mcpServers": {
61
- "appstore-connect": {
63
+ "appstore-api": {
62
64
  "command": "npx",
63
65
  "args": ["-y", "appstore-api-mcp"],
64
66
  "env": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "appstore-api-mcp",
3
- "version": "1.0.1",
4
- "description": "MCP server for Apple App Store Connect — manage apps, keywords, descriptions, titles, screenshots, versions and the full API from any MCP client (Claude, Codex, Cursor, Cline, Windsurf, VS Code, Zed, Continue, Gemini CLI, and custom agents). Includes a fleet-wide ASO audit and dry-run previews.",
3
+ "version": "1.0.3",
4
+ "description": "MCP server for Apple App Store Connect — manage apps, keywords, descriptions, titles, screenshots, versions and the full API from any MCP client (Claude, Codex, Cursor, Cline, Windsurf, VS Code, Zed, Continue, Gemini CLI, Google Antigravity, Amazon Q, Goose, and custom agents). Includes a fleet-wide ASO audit and dry-run previews.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "appstore-api-mcp": "src/index.js"