appstore-api-mcp 1.0.0 → 1.0.2
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 +23 -0
- package/README.md +21 -5
- package/docs/AGENT-SETUP.md +64 -0
- package/docs/CLIENTS.md +89 -0
- package/docs/SETUP.md +4 -2
- package/package.json +4 -2
- package/src/index.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,29 @@ 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.2] - 2026-06-02
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Setup instructions for more MCP clients: **Google Antigravity**,
|
|
11
|
+
**Amazon Q Developer CLI**, **Goose**, and a list of others (Kiro, Roo Code,
|
|
12
|
+
Trae, JetBrains AI, Warp, …).
|
|
13
|
+
- **Agent-assisted setup** (`docs/AGENT-SETUP.md`) — a copy-paste prompt so your
|
|
14
|
+
AI agent configures the server from just your Key ID, Issuer ID, and `.p8` path.
|
|
15
|
+
- `.github/workflows/npm-publish.yml` — publish to npm on version-tag push /
|
|
16
|
+
release, with provenance and a version-match guard.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Install docs default to `--scope user` (global) with an opt-out comment for
|
|
20
|
+
project-only installs; fixed stale server aliases.
|
|
21
|
+
|
|
22
|
+
## [1.0.1] - 2026-06-02
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- Setup instructions for **OpenAI Codex CLI** (TOML config) and **Gemini CLI**.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Description and docs reworded to make the client-agnostic support explicit (no longer Claude-centric).
|
|
29
|
+
|
|
7
30
|
## [1.0.0] - 2026-06-02
|
|
8
31
|
|
|
9
32
|
### 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, Cursor, Cline, Windsurf, VS Code (agent mode), Zed, Continue, 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,19 +39,29 @@ 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
|
+
### 🤖 Easiest: let your agent set it up
|
|
43
|
+
|
|
44
|
+
Don't want to touch config files? Paste the prompt in
|
|
45
|
+
**[docs/AGENT-SETUP.md](docs/AGENT-SETUP.md)** into your coding agent, give it
|
|
46
|
+
your Key ID, Issuer ID, and the **path** to your `.p8` file, and it configures
|
|
47
|
+
everything for your client and verifies it. (Give the file *path*, not the key
|
|
48
|
+
contents — that keeps the key off the transcript.)
|
|
49
|
+
|
|
50
|
+
Prefer to do it manually? Continue below.
|
|
51
|
+
|
|
42
52
|
### Claude Code (CLI)
|
|
43
53
|
|
|
44
54
|
```bash
|
|
55
|
+
# --scope user installs it for ALL your projects (recommended).
|
|
56
|
+
# Remove the --scope user line to install for the current project only.
|
|
45
57
|
claude mcp add appstore-api \
|
|
58
|
+
--scope user \
|
|
46
59
|
--env ASC_KEY_ID=YOUR_KEY_ID \
|
|
47
60
|
--env ASC_ISSUER_ID=YOUR_ISSUER_ID \
|
|
48
61
|
--env ASC_PRIVATE_KEY_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
|
|
49
62
|
-- npx -y appstore-api-mcp
|
|
50
63
|
```
|
|
51
64
|
|
|
52
|
-
Add `--scope user` to make it available in **every** project (default is the
|
|
53
|
-
current project only).
|
|
54
|
-
|
|
55
65
|
### Any other MCP client (Cursor, Cline, Windsurf, VS Code, Zed, Continue, …)
|
|
56
66
|
|
|
57
67
|
Almost every client uses this same block (Claude Desktop config path:
|
|
@@ -87,12 +97,18 @@ the same; only each client's config format/location differs.
|
|
|
87
97
|
| --- | --- |
|
|
88
98
|
| **Claude Code** | `claude mcp add …` (see above) |
|
|
89
99
|
| **Claude Desktop** | `claude_desktop_config.json` → `mcpServers` |
|
|
100
|
+
| **OpenAI Codex CLI** | `~/.codex/config.toml` → `[mcp_servers.appstore-api]` |
|
|
90
101
|
| **Cursor** | `.cursor/mcp.json` → `mcpServers` |
|
|
91
102
|
| **Cline** (VS Code) | `cline_mcp_settings.json` → `mcpServers` |
|
|
92
103
|
| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` → `mcpServers` |
|
|
93
104
|
| **VS Code** (agent mode) | `.vscode/mcp.json` → `servers` (note: not `mcpServers`) |
|
|
94
105
|
| **Zed** | `settings.json` → `context_servers` |
|
|
95
106
|
| **Continue** | `~/.continue/config.yaml` → `mcpServers` |
|
|
107
|
+
| **Gemini CLI** | `~/.gemini/settings.json` → `mcpServers` |
|
|
108
|
+
| **Google Antigravity** | MCP settings → `mcpServers` |
|
|
109
|
+
| **Amazon Q Developer CLI** | `~/.aws/amazonq/mcp.json` → `mcpServers` |
|
|
110
|
+
| **Goose** | `~/.config/goose/config.yaml` → `extensions` |
|
|
111
|
+
| **Kiro / Roo Code / Trae / JetBrains AI / Warp / others** | standard `mcpServers` block — see docs |
|
|
96
112
|
| **Custom agent** (MCP SDK / Agents SDK / LangChain) | spawn the stdio command with the env vars |
|
|
97
113
|
|
|
98
114
|
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 \
|
|
@@ -56,6 +58,19 @@ claude mcp add appstore-api \
|
|
|
56
58
|
}
|
|
57
59
|
```
|
|
58
60
|
|
|
61
|
+
## OpenAI Codex CLI
|
|
62
|
+
|
|
63
|
+
Codex uses **TOML**, not JSON. Add to `~/.codex/config.toml`:
|
|
64
|
+
|
|
65
|
+
```toml
|
|
66
|
+
[mcp_servers.appstore-api]
|
|
67
|
+
command = "npx"
|
|
68
|
+
args = ["-y", "appstore-api-mcp"]
|
|
69
|
+
env = { ASC_KEY_ID = "YOUR_KEY_ID", ASC_ISSUER_ID = "YOUR_ISSUER_ID", ASC_PRIVATE_KEY_PATH = "/absolute/path/to/AuthKey.p8" }
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
(You can also manage this with `codex mcp add` if your Codex version supports it.)
|
|
73
|
+
|
|
59
74
|
## Cursor
|
|
60
75
|
|
|
61
76
|
Project-level `.cursor/mcp.json` (or global `~/.cursor/mcp.json`) — same shape:
|
|
@@ -143,6 +158,80 @@ mcpServers:
|
|
|
143
158
|
ASC_PRIVATE_KEY_PATH: /absolute/path/to/AuthKey.p8
|
|
144
159
|
```
|
|
145
160
|
|
|
161
|
+
## Gemini CLI
|
|
162
|
+
|
|
163
|
+
In `~/.gemini/settings.json` — same `mcpServers` shape as Claude Desktop:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"mcpServers": {
|
|
168
|
+
"appstore-api": {
|
|
169
|
+
"command": "npx",
|
|
170
|
+
"args": ["-y", "appstore-api-mcp"],
|
|
171
|
+
"env": {
|
|
172
|
+
"ASC_KEY_ID": "YOUR_KEY_ID",
|
|
173
|
+
"ASC_ISSUER_ID": "YOUR_ISSUER_ID",
|
|
174
|
+
"ASC_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey.p8"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
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
|
+
|
|
146
235
|
## Any other MCP client / custom agent
|
|
147
236
|
|
|
148
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
|
-
|
|
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-
|
|
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.
|
|
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, Cursor, Cline, Windsurf, VS Code, Zed, Continue, and custom agents). Includes a fleet-wide ASO audit and dry-run previews.",
|
|
3
|
+
"version": "1.0.2",
|
|
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"
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
"ios",
|
|
30
30
|
"apple",
|
|
31
31
|
"claude",
|
|
32
|
+
"codex",
|
|
33
|
+
"cursor",
|
|
32
34
|
"keywords",
|
|
33
35
|
"screenshots",
|
|
34
36
|
"metadata"
|
package/src/index.js
CHANGED
|
File without changes
|