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 +27 -0
- package/README.md +58 -15
- package/docs/AGENT-SETUP.md +64 -0
- package/docs/CLIENTS.md +56 -0
- package/docs/SETUP.md +4 -2
- package/package.json +2 -2
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
|
-
###
|
|
42
|
+
### 🤖 Easiest: let your AI agent set it up (works with any agent)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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
|
-
###
|
|
75
|
+
### Manual setup — any MCP client
|
|
56
76
|
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, 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"
|