app-publish-mcp 0.1.0
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.ja.md +120 -0
- package/README.ko.md +120 -0
- package/README.md +120 -0
- package/README.zh.md +120 -0
- package/dist/apple/client.d.ts +23 -0
- package/dist/apple/client.d.ts.map +1 -0
- package/dist/apple/client.js +74 -0
- package/dist/apple/client.js.map +1 -0
- package/dist/apple/tools.d.ts +11 -0
- package/dist/apple/tools.d.ts.map +1 -0
- package/dist/apple/tools.js +1183 -0
- package/dist/apple/tools.js.map +1 -0
- package/dist/google/client.d.ts +29 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +135 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/tools.d.ts +11 -0
- package/dist/google/tools.d.ts.map +1 -0
- package/dist/google/tools.js +332 -0
- package/dist/google/tools.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
package/README.ja.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
[English](README.md) | [한국어](README.ko.md) | [中文](README.zh.md) | **日本語**
|
|
2
|
+
|
|
3
|
+
# app-publish-mcp
|
|
4
|
+
|
|
5
|
+
**App Store Connect**と**Google Play Console**のための統合[MCP (Model Context Protocol)](https://modelcontextprotocol.io)サーバー。アプリのリスティング、スクリーンショット、リリース、レビュー、申請をAIアシスタントから管理できます。
|
|
6
|
+
|
|
7
|
+
## 機能
|
|
8
|
+
|
|
9
|
+
### Apple App Store Connect (29ツール)
|
|
10
|
+
| カテゴリ | ツール |
|
|
11
|
+
|----------|-------|
|
|
12
|
+
| アプリ管理 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
|
|
13
|
+
| Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
|
|
14
|
+
| バージョン | `apple_list_versions`, `apple_create_version` |
|
|
15
|
+
| バージョンローカライゼーション | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
|
|
16
|
+
| アプリ情報ローカライゼーション | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
|
|
17
|
+
| スクリーンショット | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
|
|
18
|
+
| ビルド | `apple_list_builds`, `apple_assign_build` |
|
|
19
|
+
| 年齢制限 | `apple_get_age_rating`, `apple_update_age_rating` |
|
|
20
|
+
| レビュー情報 | `apple_update_review_detail` |
|
|
21
|
+
| 申請 | `apple_submit_for_review`, `apple_cancel_submission` |
|
|
22
|
+
| 価格設定 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
|
|
23
|
+
| カスタマーレビュー | `apple_list_reviews`, `apple_respond_to_review` |
|
|
24
|
+
|
|
25
|
+
### Google Play Console (20ツール)
|
|
26
|
+
| カテゴリ | ツール |
|
|
27
|
+
|----------|-------|
|
|
28
|
+
| 編集ライフサイクル | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
|
|
29
|
+
| ストアリスティング | `google_list_listings`, `google_get_listing`, `google_update_listing` |
|
|
30
|
+
| 画像 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
|
|
31
|
+
| トラックとリリース | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
|
|
32
|
+
| Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
|
|
33
|
+
| レビュー | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
|
|
34
|
+
|
|
35
|
+
## セットアップ
|
|
36
|
+
|
|
37
|
+
### 1. インストール
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Apple認証情報
|
|
45
|
+
|
|
46
|
+
1. [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)にアクセス
|
|
47
|
+
2. **App Manager**ロールでAPIキーを作成
|
|
48
|
+
3. `.p8`ファイルをダウンロード
|
|
49
|
+
4. **Key ID**と**Issuer ID**をメモ
|
|
50
|
+
|
|
51
|
+
### 3. Google認証情報
|
|
52
|
+
|
|
53
|
+
1. [Google Cloud Console](https://console.cloud.google.com/)にアクセス
|
|
54
|
+
2. **Google Play Android Developer API**を有効化
|
|
55
|
+
3. **サービスアカウント**を作成してJSONキーをダウンロード
|
|
56
|
+
4. Google Play Consoleで**設定 > APIアクセス**からサービスアカウントにアクセス権限を付与
|
|
57
|
+
|
|
58
|
+
### 4. 環境設定
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cp .env.example .env
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`.env`を編集:
|
|
65
|
+
```
|
|
66
|
+
APPLE_KEY_ID=YOUR_KEY_ID
|
|
67
|
+
APPLE_ISSUER_ID=YOUR_ISSUER_ID
|
|
68
|
+
APPLE_P8_PATH=/path/to/AuthKey.p8
|
|
69
|
+
GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 5. Claude Codeに追加
|
|
73
|
+
|
|
74
|
+
`~/.claude/settings.local.json`に追加:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"app-publish-mcp": {
|
|
80
|
+
"command": "node",
|
|
81
|
+
"args": ["/path/to/app-publish-mcp/dist/index.js"],
|
|
82
|
+
"env": {
|
|
83
|
+
"APPLE_KEY_ID": "YOUR_KEY_ID",
|
|
84
|
+
"APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
|
|
85
|
+
"APPLE_P8_PATH": "/path/to/AuthKey.p8",
|
|
86
|
+
"GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 使用例
|
|
94
|
+
|
|
95
|
+
### iOSアプリのアップデート申請
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. apple_list_apps → アプリIDを取得
|
|
99
|
+
2. apple_create_version → バージョン1.1.0を作成
|
|
100
|
+
3. apple_list_version_localizations → ローカライゼーションIDを取得
|
|
101
|
+
4. apple_update_version_localization → whatsNew、descriptionを設定
|
|
102
|
+
5. apple_list_builds → アップロード済みビルドを検索
|
|
103
|
+
6. apple_assign_build → ビルドをバージョンに紐付け
|
|
104
|
+
7. apple_update_review_detail → レビュアー連絡先情報を設定
|
|
105
|
+
8. apple_submit_for_review → 申請!
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Androidアプリのリリース
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
1. google_create_edit → 編集セッションを開始
|
|
112
|
+
2. google_update_listing → ストアリスティングを更新
|
|
113
|
+
3. google_upload_bundle → .aabファイルをアップロード
|
|
114
|
+
4. google_create_release → 本番トラックでリリースを作成
|
|
115
|
+
5. google_commit_edit → 変更を公開
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## ライセンス
|
|
119
|
+
|
|
120
|
+
MIT
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
[English](README.md) | **한국어** | [中文](README.zh.md) | [日本語](README.ja.md)
|
|
2
|
+
|
|
3
|
+
# app-publish-mcp
|
|
4
|
+
|
|
5
|
+
**App Store Connect**와 **Google Play Console**을 위한 통합 [MCP (Model Context Protocol)](https://modelcontextprotocol.io) 서버입니다. AI 어시스턴트에서 앱 리스팅, 스크린샷, 릴리스, 리뷰, 제출을 관리할 수 있습니다.
|
|
6
|
+
|
|
7
|
+
## 기능
|
|
8
|
+
|
|
9
|
+
### Apple App Store Connect (29개 도구)
|
|
10
|
+
| 카테고리 | 도구 |
|
|
11
|
+
|----------|-------|
|
|
12
|
+
| 앱 관리 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
|
|
13
|
+
| Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
|
|
14
|
+
| 버전 | `apple_list_versions`, `apple_create_version` |
|
|
15
|
+
| 버전 로컬라이제이션 | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
|
|
16
|
+
| 앱 정보 로컬라이제이션 | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
|
|
17
|
+
| 스크린샷 | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
|
|
18
|
+
| 빌드 | `apple_list_builds`, `apple_assign_build` |
|
|
19
|
+
| 연령 등급 | `apple_get_age_rating`, `apple_update_age_rating` |
|
|
20
|
+
| 리뷰 정보 | `apple_update_review_detail` |
|
|
21
|
+
| 제출 | `apple_submit_for_review`, `apple_cancel_submission` |
|
|
22
|
+
| 가격 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
|
|
23
|
+
| 고객 리뷰 | `apple_list_reviews`, `apple_respond_to_review` |
|
|
24
|
+
|
|
25
|
+
### Google Play Console (20개 도구)
|
|
26
|
+
| 카테고리 | 도구 |
|
|
27
|
+
|----------|-------|
|
|
28
|
+
| 편집 생명주기 | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
|
|
29
|
+
| 스토어 리스팅 | `google_list_listings`, `google_get_listing`, `google_update_listing` |
|
|
30
|
+
| 이미지 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
|
|
31
|
+
| 트랙 & 릴리스 | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
|
|
32
|
+
| Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
|
|
33
|
+
| 리뷰 | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
|
|
34
|
+
|
|
35
|
+
## 설정
|
|
36
|
+
|
|
37
|
+
### 1. 설치
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Apple 자격증명
|
|
45
|
+
|
|
46
|
+
1. [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)로 이동합니다
|
|
47
|
+
2. **App Manager** 역할로 API Key를 생성합니다
|
|
48
|
+
3. `.p8` 파일을 다운로드합니다
|
|
49
|
+
4. **Key ID**와 **Issuer ID**를 확인합니다
|
|
50
|
+
|
|
51
|
+
### 3. Google 자격증명
|
|
52
|
+
|
|
53
|
+
1. [Google Cloud Console](https://console.cloud.google.com/)로 이동합니다
|
|
54
|
+
2. **Google Play Android Developer API**를 활성화합니다
|
|
55
|
+
3. **Service Account**를 생성하고 JSON 키를 다운로드합니다
|
|
56
|
+
4. Google Play Console에서 **설정 > API 액세스**에서 서비스 계정에 권한을 부여합니다
|
|
57
|
+
|
|
58
|
+
### 4. 환경 구성
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cp .env.example .env
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`.env` 파일을 편집합니다:
|
|
65
|
+
```
|
|
66
|
+
APPLE_KEY_ID=YOUR_KEY_ID
|
|
67
|
+
APPLE_ISSUER_ID=YOUR_ISSUER_ID
|
|
68
|
+
APPLE_P8_PATH=/path/to/AuthKey.p8
|
|
69
|
+
GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 5. Claude Code에 추가
|
|
73
|
+
|
|
74
|
+
`~/.claude/settings.local.json`에 추가합니다:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"app-publish-mcp": {
|
|
80
|
+
"command": "node",
|
|
81
|
+
"args": ["/path/to/app-publish-mcp/dist/index.js"],
|
|
82
|
+
"env": {
|
|
83
|
+
"APPLE_KEY_ID": "YOUR_KEY_ID",
|
|
84
|
+
"APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
|
|
85
|
+
"APPLE_P8_PATH": "/path/to/AuthKey.p8",
|
|
86
|
+
"GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 사용 예제
|
|
94
|
+
|
|
95
|
+
### iOS 앱 업데이트 제출
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. apple_list_apps → 앱 ID 가져오기
|
|
99
|
+
2. apple_create_version → 버전 1.1.0 생성
|
|
100
|
+
3. apple_list_version_localizations → 로컬라이제이션 ID 가져오기
|
|
101
|
+
4. apple_update_version_localization → whatsNew, description 설정
|
|
102
|
+
5. apple_list_builds → 업로드된 빌드 찾기
|
|
103
|
+
6. apple_assign_build → 버전에 빌드 연결
|
|
104
|
+
7. apple_update_review_detail → 리뷰어 연락처 정보 설정
|
|
105
|
+
8. apple_submit_for_review → 제출!
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Android 앱 릴리스
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
1. google_create_edit → 편집 세션 시작
|
|
112
|
+
2. google_update_listing → 스토어 리스팅 업데이트
|
|
113
|
+
3. google_upload_bundle → .aab 파일 업로드
|
|
114
|
+
4. google_create_release → production 트랙에 릴리스 생성
|
|
115
|
+
5. google_commit_edit → 변경사항 게시
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 라이선스
|
|
119
|
+
|
|
120
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
**English** | [한국어](README.ko.md) | [中文](README.zh.md) | [日本語](README.ja.md)
|
|
2
|
+
|
|
3
|
+
# app-publish-mcp
|
|
4
|
+
|
|
5
|
+
A unified [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server for **App Store Connect** and **Google Play Console**. Manage app listings, screenshots, releases, reviews and submissions — all from your AI assistant.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### Apple App Store Connect (29 tools)
|
|
10
|
+
| Category | Tools |
|
|
11
|
+
|----------|-------|
|
|
12
|
+
| App Management | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
|
|
13
|
+
| Bundle IDs | `apple_list_bundle_ids`, `apple_create_bundle_id` |
|
|
14
|
+
| Versions | `apple_list_versions`, `apple_create_version` |
|
|
15
|
+
| Version Localizations | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
|
|
16
|
+
| App Info Localizations | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
|
|
17
|
+
| Screenshots | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
|
|
18
|
+
| Builds | `apple_list_builds`, `apple_assign_build` |
|
|
19
|
+
| Age Rating | `apple_get_age_rating`, `apple_update_age_rating` |
|
|
20
|
+
| Review Info | `apple_update_review_detail` |
|
|
21
|
+
| Submission | `apple_submit_for_review`, `apple_cancel_submission` |
|
|
22
|
+
| Pricing | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
|
|
23
|
+
| Customer Reviews | `apple_list_reviews`, `apple_respond_to_review` |
|
|
24
|
+
|
|
25
|
+
### Google Play Console (20 tools)
|
|
26
|
+
| Category | Tools |
|
|
27
|
+
|----------|-------|
|
|
28
|
+
| Edit Lifecycle | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
|
|
29
|
+
| Store Listing | `google_list_listings`, `google_get_listing`, `google_update_listing` |
|
|
30
|
+
| Images | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
|
|
31
|
+
| Tracks & Releases | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
|
|
32
|
+
| Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
|
|
33
|
+
| Reviews | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
|
|
34
|
+
|
|
35
|
+
## Setup
|
|
36
|
+
|
|
37
|
+
### 1. Install
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Apple Credentials
|
|
45
|
+
|
|
46
|
+
1. Go to [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)
|
|
47
|
+
2. Create an API Key with **App Manager** role
|
|
48
|
+
3. Download the `.p8` file
|
|
49
|
+
4. Note the **Key ID** and **Issuer ID**
|
|
50
|
+
|
|
51
|
+
### 3. Google Credentials
|
|
52
|
+
|
|
53
|
+
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
|
|
54
|
+
2. Enable **Google Play Android Developer API**
|
|
55
|
+
3. Create a **Service Account** and download the JSON key
|
|
56
|
+
4. In Google Play Console, grant the service account access under **Settings > API access**
|
|
57
|
+
|
|
58
|
+
### 4. Configure Environment
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cp .env.example .env
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Edit `.env`:
|
|
65
|
+
```
|
|
66
|
+
APPLE_KEY_ID=YOUR_KEY_ID
|
|
67
|
+
APPLE_ISSUER_ID=YOUR_ISSUER_ID
|
|
68
|
+
APPLE_P8_PATH=/path/to/AuthKey.p8
|
|
69
|
+
GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 5. Add to Claude Code
|
|
73
|
+
|
|
74
|
+
Add to `~/.claude/settings.local.json`:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"app-publish-mcp": {
|
|
80
|
+
"command": "node",
|
|
81
|
+
"args": ["/path/to/app-publish-mcp/dist/index.js"],
|
|
82
|
+
"env": {
|
|
83
|
+
"APPLE_KEY_ID": "YOUR_KEY_ID",
|
|
84
|
+
"APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
|
|
85
|
+
"APPLE_P8_PATH": "/path/to/AuthKey.p8",
|
|
86
|
+
"GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Usage Examples
|
|
94
|
+
|
|
95
|
+
### Submit an iOS app update
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. apple_list_apps → get app ID
|
|
99
|
+
2. apple_create_version → create version 1.1.0
|
|
100
|
+
3. apple_list_version_localizations → get localization IDs
|
|
101
|
+
4. apple_update_version_localization → set whatsNew, description
|
|
102
|
+
5. apple_list_builds → find the uploaded build
|
|
103
|
+
6. apple_assign_build → attach build to version
|
|
104
|
+
7. apple_update_review_detail → set reviewer contact info
|
|
105
|
+
8. apple_submit_for_review → submit!
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Release an Android app
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
1. google_create_edit → start edit session
|
|
112
|
+
2. google_update_listing → update store listing
|
|
113
|
+
3. google_upload_bundle → upload .aab file
|
|
114
|
+
4. google_create_release → create release on production track
|
|
115
|
+
5. google_commit_edit → publish changes
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## License
|
|
119
|
+
|
|
120
|
+
MIT
|
package/README.zh.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
[English](README.md) | [한국어](README.ko.md) | **中文** | [日本語](README.ja.md)
|
|
2
|
+
|
|
3
|
+
# app-publish-mcp
|
|
4
|
+
|
|
5
|
+
统一的 [MCP(模型上下文协议)](https://modelcontextprotocol.io)服务器,支持 **App Store Connect** 和 **Google Play Console**。从 AI 助手管理应用列表、截图、发布、评论和提交。
|
|
6
|
+
|
|
7
|
+
## 功能特性
|
|
8
|
+
|
|
9
|
+
### Apple App Store Connect(29个工具)
|
|
10
|
+
| 类别 | 工具 |
|
|
11
|
+
|----------|-------|
|
|
12
|
+
| 应用管理 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
|
|
13
|
+
| Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
|
|
14
|
+
| 版本管理 | `apple_list_versions`, `apple_create_version` |
|
|
15
|
+
| 版本本地化 | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
|
|
16
|
+
| 应用信息本地化 | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
|
|
17
|
+
| 截图 | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
|
|
18
|
+
| 构建版本 | `apple_list_builds`, `apple_assign_build` |
|
|
19
|
+
| 年龄分级 | `apple_get_age_rating`, `apple_update_age_rating` |
|
|
20
|
+
| 审核信息 | `apple_update_review_detail` |
|
|
21
|
+
| 提交 | `apple_submit_for_review`, `apple_cancel_submission` |
|
|
22
|
+
| 价格 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
|
|
23
|
+
| 用户评论 | `apple_list_reviews`, `apple_respond_to_review` |
|
|
24
|
+
|
|
25
|
+
### Google Play Console(20个工具)
|
|
26
|
+
| 类别 | 工具 |
|
|
27
|
+
|----------|-------|
|
|
28
|
+
| 编辑生命周期 | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
|
|
29
|
+
| 商店列表 | `google_list_listings`, `google_get_listing`, `google_update_listing` |
|
|
30
|
+
| 图片 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
|
|
31
|
+
| 轨道和发布 | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
|
|
32
|
+
| Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
|
|
33
|
+
| 评论 | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
|
|
34
|
+
|
|
35
|
+
## 配置
|
|
36
|
+
|
|
37
|
+
### 1. 安装
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Apple 凭证
|
|
45
|
+
|
|
46
|
+
1. 前往 [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)
|
|
47
|
+
2. 创建一个具有 **App Manager** 角色的 API Key
|
|
48
|
+
3. 下载 `.p8` 文件
|
|
49
|
+
4. 记录 **Key ID** 和 **Issuer ID**
|
|
50
|
+
|
|
51
|
+
### 3. Google 凭证
|
|
52
|
+
|
|
53
|
+
1. 前往 [Google Cloud Console](https://console.cloud.google.com/)
|
|
54
|
+
2. 启用 **Google Play Android Developer API**
|
|
55
|
+
3. 创建一个 **Service Account** 并下载 JSON 密钥
|
|
56
|
+
4. 在 Google Play Console 中,前往 **Settings > API access** 授予服务账号访问权限
|
|
57
|
+
|
|
58
|
+
### 4. 配置环境变量
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cp .env.example .env
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
编辑 `.env`:
|
|
65
|
+
```
|
|
66
|
+
APPLE_KEY_ID=YOUR_KEY_ID
|
|
67
|
+
APPLE_ISSUER_ID=YOUR_ISSUER_ID
|
|
68
|
+
APPLE_P8_PATH=/path/to/AuthKey.p8
|
|
69
|
+
GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 5. 添加到 Claude Code
|
|
73
|
+
|
|
74
|
+
在 `~/.claude/settings.local.json` 中添加:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"app-publish-mcp": {
|
|
80
|
+
"command": "node",
|
|
81
|
+
"args": ["/path/to/app-publish-mcp/dist/index.js"],
|
|
82
|
+
"env": {
|
|
83
|
+
"APPLE_KEY_ID": "YOUR_KEY_ID",
|
|
84
|
+
"APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
|
|
85
|
+
"APPLE_P8_PATH": "/path/to/AuthKey.p8",
|
|
86
|
+
"GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 使用示例
|
|
94
|
+
|
|
95
|
+
### 提交 iOS 应用更新
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. apple_list_apps → 获取应用 ID
|
|
99
|
+
2. apple_create_version → 创建版本 1.1.0
|
|
100
|
+
3. apple_list_version_localizations → 获取本地化 ID
|
|
101
|
+
4. apple_update_version_localization → 设置 whatsNew、description
|
|
102
|
+
5. apple_list_builds → 查找已上传的构建版本
|
|
103
|
+
6. apple_assign_build → 将构建版本附加到版本
|
|
104
|
+
7. apple_update_review_detail → 设置审核联系信息
|
|
105
|
+
8. apple_submit_for_review → 提交!
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 发布 Android 应用
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
1. google_create_edit → 启动编辑会话
|
|
112
|
+
2. google_update_listing → 更新商店列表
|
|
113
|
+
3. google_upload_bundle → 上传 .aab 文件
|
|
114
|
+
4. google_create_release → 在生产轨道上创建发布
|
|
115
|
+
5. google_commit_edit → 发布更改
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 许可证
|
|
119
|
+
|
|
120
|
+
MIT
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface AppleConfig {
|
|
2
|
+
keyId: string;
|
|
3
|
+
issuerId: string;
|
|
4
|
+
p8Path: string;
|
|
5
|
+
vendorNumber?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class AppleClient {
|
|
8
|
+
private config;
|
|
9
|
+
private baseUrl;
|
|
10
|
+
private token;
|
|
11
|
+
private tokenExp;
|
|
12
|
+
constructor(config: AppleConfig);
|
|
13
|
+
private getToken;
|
|
14
|
+
request<T = any>(path: string, options?: {
|
|
15
|
+
method?: string;
|
|
16
|
+
body?: any;
|
|
17
|
+
params?: Record<string, string>;
|
|
18
|
+
}): Promise<T>;
|
|
19
|
+
upload(url: string, filePath: string, contentType: string): Promise<any>;
|
|
20
|
+
get vendorNumber(): string | undefined;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/apple/client.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAK;gBAET,MAAM,EAAE,WAAW;IAI/B,OAAO,CAAC,QAAQ;IAoBV,OAAO,CAAC,CAAC,GAAG,GAAG,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5B,GACL,OAAO,CAAC,CAAC,CAAC;IA0BP,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmB9E,IAAI,YAAY,uBAEf;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import jwt from 'jsonwebtoken';
|
|
2
|
+
import { readFileSync } from 'fs';
|
|
3
|
+
export class AppleClient {
|
|
4
|
+
config;
|
|
5
|
+
baseUrl = 'https://api.appstoreconnect.apple.com/v1';
|
|
6
|
+
token = null;
|
|
7
|
+
tokenExp = 0;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
getToken() {
|
|
12
|
+
const now = Math.floor(Date.now() / 1000);
|
|
13
|
+
if (this.token && now < this.tokenExp - 60)
|
|
14
|
+
return this.token;
|
|
15
|
+
const privateKey = readFileSync(this.config.p8Path, 'utf8');
|
|
16
|
+
const payload = {
|
|
17
|
+
iss: this.config.issuerId,
|
|
18
|
+
iat: now,
|
|
19
|
+
exp: now + 20 * 60, // 20 minutes
|
|
20
|
+
aud: 'appstoreconnect-v1',
|
|
21
|
+
};
|
|
22
|
+
this.token = jwt.sign(payload, privateKey, {
|
|
23
|
+
algorithm: 'ES256',
|
|
24
|
+
header: { alg: 'ES256', kid: this.config.keyId, typ: 'JWT' },
|
|
25
|
+
});
|
|
26
|
+
this.tokenExp = now + 20 * 60;
|
|
27
|
+
return this.token;
|
|
28
|
+
}
|
|
29
|
+
async request(path, options = {}) {
|
|
30
|
+
const { method = 'GET', body, params } = options;
|
|
31
|
+
let url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
32
|
+
if (params) {
|
|
33
|
+
const qs = new URLSearchParams(params).toString();
|
|
34
|
+
url += `?${qs}`;
|
|
35
|
+
}
|
|
36
|
+
const res = await fetch(url, {
|
|
37
|
+
method,
|
|
38
|
+
headers: {
|
|
39
|
+
Authorization: `Bearer ${this.getToken()}`,
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
},
|
|
42
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
43
|
+
});
|
|
44
|
+
if (!res.ok) {
|
|
45
|
+
const text = await res.text();
|
|
46
|
+
throw new Error(`Apple API ${method} ${path} → ${res.status}: ${text}`);
|
|
47
|
+
}
|
|
48
|
+
if (res.status === 204)
|
|
49
|
+
return {};
|
|
50
|
+
return res.json();
|
|
51
|
+
}
|
|
52
|
+
async upload(url, filePath, contentType) {
|
|
53
|
+
const data = readFileSync(filePath);
|
|
54
|
+
const res = await fetch(url, {
|
|
55
|
+
method: 'PUT',
|
|
56
|
+
headers: {
|
|
57
|
+
Authorization: `Bearer ${this.getToken()}`,
|
|
58
|
+
'Content-Type': contentType,
|
|
59
|
+
},
|
|
60
|
+
body: data,
|
|
61
|
+
});
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
const text = await res.text();
|
|
64
|
+
throw new Error(`Apple upload → ${res.status}: ${text}`);
|
|
65
|
+
}
|
|
66
|
+
if (res.status === 204)
|
|
67
|
+
return {};
|
|
68
|
+
return res.json();
|
|
69
|
+
}
|
|
70
|
+
get vendorNumber() {
|
|
71
|
+
return this.config.vendorNumber;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/apple/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AppleClient } from './client.js';
|
|
3
|
+
interface ToolDef {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
schema: z.ZodObject<any>;
|
|
7
|
+
handler: (client: AppleClient, args: any) => Promise<any>;
|
|
8
|
+
}
|
|
9
|
+
export declare const appleTools: ToolDef[];
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/apple/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3D;AAmrCD,eAAO,MAAM,UAAU,EAAE,OAAO,EAuC/B,CAAC"}
|