Skip to content

Commit 9765f1a

Browse files
committed
v0.6.0: Ship It - app store prep, submissions, accessibility
Add 3 skills (mobile-app-store-prep, mobile-ios-submission, mobile-android-submission), 1 rule (mobile-accessibility), and 3 MCP tools (buildForStore, validateStoreMetadata, submitToAppStore). Totals: 20 skills, 6 rules, 15 MCP tools. Made-with: Cursor
1 parent 6d11260 commit 9765f1a

16 files changed

Lines changed: 1356 additions & 30 deletions

File tree

.cursor-plugin/plugin.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "mobile-app-developer-tools",
33
"displayName": "Mobile App Developer Tools",
4-
"version": "0.5.0",
5-
"description": "Mobile app development for Cursor, Claude Code, and MCP-compatible editors. 17 skills covering React Native/Expo and Flutter - project setup, navigation, device deployment, state management, components, camera, AI, permissions, auth, push, storage, APIs - plus 5 rules. Companion MCP server provides 12 tools.",
4+
"version": "0.6.0",
5+
"description": "Mobile app development for Cursor, Claude Code, and MCP-compatible editors. 20 skills covering React Native/Expo and Flutter - project setup through app store submission - plus 6 rules. Companion MCP server provides 15 tools.",
66
"author": {
77
"name": "TMHSDigital",
88
"url": "https://github.com/TMHSDigital"

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [0.6.0] - 2026-04-03
6+
7+
### Added
8+
9+
- **3 new skills**: `mobile-app-store-prep` (app icons, screenshots, metadata, privacy policy, review guidelines), `mobile-ios-submission` (EAS Build/Submit, certificates, TestFlight, App Store review), `mobile-android-submission` (Play Console, signing keys, AAB, service accounts, staged rollouts)
10+
- **1 new rule**: `mobile-accessibility` (missing a11y labels, small touch targets, images without alt text, color-only indicators for RN + Flutter)
11+
- **3 new MCP tools**: `mobile_buildForStore`, `mobile_validateStoreMetadata`, `mobile_submitToAppStore`
12+
- Totals: 20 skills, 6 rules, 15 MCP tools
13+
514
## [0.5.0] - 2026-04-03
615

716
### Added

CLAUDE.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
The **Mobile App Developer Tools** Cursor plugin is at **v0.5.0**. It helps developers go from zero to a running mobile app on their phone. Supports React Native/Expo and Flutter with **17 skills**, **5 rules**, and a companion MCP server exposing **12 tools**.
7+
The **Mobile App Developer Tools** Cursor plugin is at **v0.6.0**. It helps developers go from zero to a published app in the stores. Supports React Native/Expo and Flutter with **20 skills**, **6 rules**, and a companion MCP server exposing **15 tools**.
88

99
## Plugin Architecture
1010

1111
```
1212
.cursor-plugin/plugin.json - Plugin manifest
1313
skills/<skill-name>/SKILL.md - AI workflow definitions
1414
rules/<rule-name>.mdc - Code quality and security rules
15-
mcp-server/ - MCP server with 12 tools
15+
mcp-server/ - MCP server with 15 tools
1616
packages/mobile-dev-tools/ - NPM package (stub for name claim)
1717
```
1818

19-
## Skills (17 total)
19+
## Skills (20 total)
2020

2121
### React Native / Expo
2222

@@ -35,6 +35,8 @@ packages/mobile-dev-tools/ - NPM package (stub for name claim)
3535
| mobile-push-notifications | expo-notifications, EAS Push, Android channels, deep link on tap, local notifications |
3636
| mobile-local-storage | AsyncStorage, expo-sqlite, expo-secure-store, MMKV; migrations and data cleanup |
3737
| mobile-api-integration | REST/GraphQL clients, React Query, auth headers, retry, offline queue, optimistic updates |
38+
| mobile-ios-submission | EAS Build/Submit, certificates, provisioning profiles, TestFlight, App Store review |
39+
| mobile-android-submission | Play Console, signing keys, AAB, service accounts, staged rollouts |
3840

3941
### Flutter
4042

@@ -45,7 +47,13 @@ packages/mobile-dev-tools/ - NPM package (stub for name claim)
4547
| mobile-flutter-run-on-device | USB/wireless debugging, hot reload vs restart, build modes, troubleshooting |
4648
| mobile-flutter-state-management | Riverpod (recommended), Bloc, Provider, setState; async data, code generation |
4749

48-
## Rules (5 total)
50+
### Shared
51+
52+
| Skill | Purpose |
53+
| --- | --- |
54+
| mobile-app-store-prep | App icons, screenshots, metadata, privacy policy, age ratings, review guidelines |
55+
56+
## Rules (6 total)
4957

5058
| Rule | Scope | Purpose |
5159
| --- | --- | --- |
@@ -54,12 +62,13 @@ packages/mobile-dev-tools/ - NPM package (stub for name claim)
5462
| mobile-image-assets.mdc | `.ts`, `.tsx`, `.json` | Flags oversized images, unoptimized formats, missing density variants, uncached remote images |
5563
| mobile-env-safety.mdc | `.ts`, `.tsx`, `.json` | Flags hardcoded production endpoints, missing EXPO_PUBLIC_ prefix, server-only secrets in client code |
5664
| mobile-performance.mdc | `.ts`, `.tsx`, `.dart` | Flags inline styles, missing list keys, unnecessary re-renders (RN); missing const constructors, inline widgets (Flutter) |
65+
| mobile-accessibility.mdc | `.ts`, `.tsx`, `.dart` | Flags missing a11y labels, small touch targets, images without alt text, color-only indicators |
5766

5867
## Companion MCP Server
5968

6069
Tools use the `mobile_` prefix (for example `mobile_checkDevEnvironment`).
6170

62-
### Tools (12 total)
71+
### Tools (15 total)
6372

6473
| Tool | Description |
6574
| --- | --- |
@@ -75,6 +84,9 @@ Tools use the `mobile_` prefix (for example `mobile_checkDevEnvironment`).
7584
| mobile_addPushNotifications | Add expo-notifications plugin to app.json, create notification handler, configure Android channel |
7685
| mobile_configureDeepLinks | Set scheme, add Android intent filters, iOS associated domains, generate AASA template |
7786
| mobile_resetDevEnvironment | Nuclear reset: clear Metro cache, .expo dir, node_modules cache, optionally Pods and Gradle |
87+
| mobile_buildForStore | Create a production build for app store submission via EAS Build |
88+
| mobile_validateStoreMetadata | Check app.json for all required store listing fields (name, bundle ID, icon, etc.) |
89+
| mobile_submitToAppStore | Submit latest iOS production build to App Store Connect via EAS Submit |
7890

7991
## Development Workflow
8092

README.md

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</p>
1010

1111
<p align="center">
12-
<a href="https://github.com/TMHSDigital/Mobile-App-Developer-Tools/releases"><img src="https://img.shields.io/badge/version-0.5.0-0A84FF?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyTDIyIDEyTDEyIDIyTDIgMTJaIi8+PC9zdmc+" alt="Release"></a>
12+
<a href="https://github.com/TMHSDigital/Mobile-App-Developer-Tools/releases"><img src="https://img.shields.io/badge/version-0.6.0-0A84FF?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyTDIyIDEyTDEyIDIyTDIgMTJaIi8+PC9zdmc+" alt="Release"></a>
1313
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/"><img src="https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey?style=for-the-badge" alt="License"></a>
1414
<a href="https://github.com/TMHSDigital/Mobile-App-Developer-Tools/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/TMHSDigital/Mobile-App-Developer-Tools/ci.yml?branch=main&label=CI&logo=githubactions&style=for-the-badge" alt="CI"></a>
1515
<a href="https://github.com/TMHSDigital/Mobile-App-Developer-Tools/actions/workflows/validate.yml"><img src="https://img.shields.io/github/actions/workflow/status/TMHSDigital/Mobile-App-Developer-Tools/validate.yml?branch=main&label=Validate&logo=githubactions&style=for-the-badge" alt="Validate"></a>
@@ -24,7 +24,7 @@
2424
---
2525

2626
<p align="center">
27-
<strong>17 skills</strong> &nbsp;&bull;&nbsp; <strong>5 rules</strong> &nbsp;&bull;&nbsp; <strong>12 MCP tools</strong>
27+
<strong>20 skills</strong> &nbsp;&bull;&nbsp; <strong>6 rules</strong> &nbsp;&bull;&nbsp; <strong>15 MCP tools</strong>
2828
</p>
2929

3030
<p align="center">
@@ -35,7 +35,7 @@
3535

3636
## Overview
3737

38-
Mobile App Developer Tools is a **Cursor** plugin by **TMHSDigital** that packages agent skills, editor rules, and a TypeScript **MCP server** (`mcp-server/`) so you can scaffold, run, and debug mobile apps without leaving the IDE. Currently at **v0.5.0** with seventeen skills (React Native/Expo + Flutter), five rules, and twelve live MCP tools.
38+
Mobile App Developer Tools is a **Cursor** plugin by **TMHSDigital** that packages agent skills, editor rules, and a TypeScript **MCP server** (`mcp-server/`) so you can scaffold, build, and ship mobile apps without leaving the IDE. Currently at **v0.6.0** with twenty skills (React Native/Expo + Flutter), six rules, and fifteen live MCP tools.
3939

4040
<br>
4141
<table>
@@ -46,9 +46,9 @@ Mobile App Developer Tools is a **Cursor** plugin by **TMHSDigital** that packag
4646

4747
| Layer | Role |
4848
| --- | --- |
49-
| **Skills** | 17 guided workflows for React Native/Expo and Flutter: project setup, navigation, device deploy, state, components, camera, AI, permissions, auth, push, storage, APIs |
50-
| **Rules** | 5 guardrails: secrets, platform guards, image bloat, env safety, performance anti-patterns (RN + Flutter) |
51-
| **MCP** | Twelve tools for environment checks, project creation, device connection, screen/component generation, dependency install, permissions, AI, build health, push, deep links, dev reset |
49+
| **Skills** | 20 guided workflows for React Native/Expo and Flutter: project setup through app store submission |
50+
| **Rules** | 6 guardrails: secrets, platform guards, image bloat, env safety, performance, accessibility |
51+
| **MCP** | Fifteen tools for environment checks, project creation, device connection, screen/component generation, dependency install, permissions, AI, build health, push, deep links, dev reset, store builds, metadata validation, App Store submission |
5252

5353
</td>
5454
<td>
@@ -74,7 +74,7 @@ Mobile App Developer Tools is a **Cursor** plugin by **TMHSDigital** that packag
7474
flowchart LR
7575
A[User asks mobile dev question] --> B[Cursor loads a Skill]
7676
B --> C{MCP server configured?}
77-
C -->|Yes| D["mobile-mcp tools (12)"]
77+
C -->|Yes| D["mobile-mcp tools (15)"]
7878
C -->|No| E[Docs-only guidance]
7979
D --> F[Local env checks / scaffolding]
8080
E --> G[Answer in chat or code edits]
@@ -152,10 +152,10 @@ Open Cursor and ask:
152152

153153
## Skills
154154

155-
All 17 skills are production-ready. Names match the folder under `skills/`.
155+
All 20 skills are production-ready. Names match the folder under `skills/`.
156156

157157
<details>
158-
<summary><strong>React Native / Expo skills (13)</strong></summary>
158+
<summary><strong>React Native / Expo skills (15)</strong></summary>
159159

160160
| Skill | Framework | What it does |
161161
| --- | --- | --- |
@@ -172,6 +172,8 @@ All 17 skills are production-ready. Names match the folder under `skills/`.
172172
| `mobile-push-notifications` | Expo | expo-notifications, EAS Push, Android channels, deep link on tap, local notifications |
173173
| `mobile-local-storage` | Shared | AsyncStorage, expo-sqlite, expo-secure-store, MMKV; migrations and data cleanup |
174174
| `mobile-api-integration` | Shared | REST/GraphQL clients, React Query, auth headers, retry, offline queue, optimistic updates |
175+
| `mobile-ios-submission` | Expo | EAS Build/Submit, certificates, provisioning profiles, TestFlight, App Store review |
176+
| `mobile-android-submission` | Expo | Play Console, signing keys, AAB, service accounts, staged rollouts |
175177

176178
</details>
177179

@@ -187,6 +189,15 @@ All 17 skills are production-ready. Names match the folder under `skills/`.
187189

188190
</details>
189191

192+
<details>
193+
<summary><strong>Shared skills (1)</strong></summary>
194+
195+
| Skill | What it does |
196+
| --- | --- |
197+
| `mobile-app-store-prep` | App icons, screenshots, metadata, privacy policy, age ratings, review guidelines |
198+
199+
</details>
200+
190201
**Example prompts** - one per skill:
191202

192203
| Skill | Try this |
@@ -204,6 +215,9 @@ All 17 skills are production-ready. Names match the folder under `skills/`.
204215
| `mobile-push-notifications` | "Set up push notifications that open a specific screen on tap" |
205216
| `mobile-local-storage` | "I need offline storage for a todo list with secure login" |
206217
| `mobile-api-integration` | "Connect to my REST API with auth headers and offline support" |
218+
| `mobile-app-store-prep` | "What do I need to submit my app to the App Store?" |
219+
| `mobile-ios-submission` | "Submit my Expo app to the App Store for the first time" |
220+
| `mobile-android-submission` | "Publish my app on Google Play with staged rollout" |
207221
| `mobile-flutter-project-setup` | "Create a new Flutter app with Riverpod and GoRouter" |
208222
| `mobile-flutter-navigation` | "Add tab navigation with GoRouter in my Flutter app" |
209223
| `mobile-flutter-run-on-device` | "My Android phone doesn't show up in flutter devices" |
@@ -213,10 +227,10 @@ All 17 skills are production-ready. Names match the folder under `skills/`.
213227

214228
## Rules
215229

216-
All 5 rules are production-ready.
230+
All 6 rules are production-ready.
217231

218232
<details>
219-
<summary><strong>All 5 rules</strong></summary>
233+
<summary><strong>All 6 rules</strong></summary>
220234

221235
| Rule | Scope | What it catches |
222236
| --- | --- | --- |
@@ -225,6 +239,7 @@ All 5 rules are production-ready.
225239
| `mobile-image-assets` | `.ts`, `.tsx`, `.json` | Oversized images (>500KB), unoptimized formats (BMP, TIFF), missing `@2x`/`@3x` variants, uncached remote images |
226240
| `mobile-env-safety` | `.ts`, `.tsx`, `.json` | Hardcoded production endpoints, missing `EXPO_PUBLIC_` prefix, server-only secrets in client code |
227241
| `mobile-performance` | `.ts`, `.tsx`, `.dart` | Inline styles, missing list keys, ScrollView for long lists (RN); missing const constructors, inline widgets (Flutter) |
242+
| `mobile-accessibility` | `.ts`, `.tsx`, `.dart` | Missing a11y labels on interactive elements, small touch targets, images without alt text, color-only indicators |
228243

229244
</details>
230245

@@ -259,7 +274,7 @@ npx @tmhs/mobile-mcp
259274
```
260275

261276
<details>
262-
<summary><strong>All 12 MCP tools</strong></summary>
277+
<summary><strong>All 15 MCP tools</strong></summary>
263278

264279
| Tool | Purpose |
265280
| --- | --- |
@@ -275,6 +290,9 @@ npx @tmhs/mobile-mcp
275290
| `mobile_addPushNotifications` | Add expo-notifications plugin to app.json, create notification handler, configure Android channel. |
276291
| `mobile_configureDeepLinks` | Set URL scheme, add Android intent filters, iOS associated domains, generate AASA template. |
277292
| `mobile_resetDevEnvironment` | Nuclear reset: clear Metro cache, .expo dir, node_modules cache, optionally Pods and Gradle. |
293+
| `mobile_buildForStore` | Create a production build for app store submission via EAS Build. Validates app.json before building. |
294+
| `mobile_validateStoreMetadata` | Check app.json for all required store listing fields (name, bundle ID, version, icon, splash, privacy policy). |
295+
| `mobile_submitToAppStore` | Submit the latest iOS production build to App Store Connect via EAS Submit. |
278296

279297
</details>
280298

@@ -310,7 +328,7 @@ Plugin manifest: [`.cursor-plugin/plugin.json`](.cursor-plugin/plugin.json).
310328

311329
## Configuration
312330

313-
No API keys are required for v0.5.0. All tools work locally.
331+
No API keys are required for local development. Store submission tools require platform-specific credentials.
314332

315333
Future versions may use:
316334

@@ -332,8 +350,8 @@ Summary aligned with [ROADMAP.md](ROADMAP.md):
332350
| **v0.2.0** | Navigate & State | 6 skills, 2 rules, 6 MCP tools | |
333351
| **v0.3.0** | Camera & AI | 9 skills, 3 rules, 9 MCP tools | |
334352
| **v0.4.0** | Users & Data | 13 skills, 4 rules, 12 MCP tools | |
335-
| **v0.5.0** | Flutter | 17 skills, 5 rules, 12 MCP tools | **Current** |
336-
| **v0.6.0** | Ship It | App store prep, iOS and Android submission | |
353+
| **v0.5.0** | Flutter | 17 skills, 5 rules, 12 MCP tools | |
354+
| **v0.6.0** | Ship It | 20 skills, 6 rules, 15 MCP tools | **Current** |
337355
| **v0.7.0** | Grow | Monetization, deep links, bundle analysis | |
338356
| **v1.0.0** | Stable | 22 skills, 7 rules, 18 MCP tools | |
339357

ROADMAP.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
| **v0.2.0** | Navigate & State | +3 | +1 | +3 | Navigation setup, state management, component generation, platform-check rule |
99
| **v0.3.0** | Camera & AI | +3 | +1 | +3 | Camera integration, AI features, permissions skill, image-assets rule |
1010
| **v0.4.0** | Users & Data | +4 | +1 | +3 | Auth, push notifications, local storage, API integration, env-safety rule |
11-
| **v0.5.0** | Flutter | +4 | +1 | +0 | Flutter project setup, navigation, run-on-device, state management, performance rule **(current)** |
12-
| **v0.6.0** | Ship It | +3 | +1 | +3 | App store prep, iOS submission, Android submission, accessibility rule |
11+
| **v0.5.0** | Flutter | +4 | +1 | +0 | Flutter project setup, navigation, run-on-device, state management, performance rule |
12+
| **v0.6.0** | Ship It | +3 | +1 | +3 | App store prep, iOS submission, Android submission, accessibility rule **(current)** |
1313
| **v0.7.0** | Grow | +2 | +0 | +3 | Monetization, deep links, build-for-store, screenshots, bundle analysis |
1414
| **v1.0.0** | Stable | +0 | +0 | +0 | Polish, docs, production release: 22 skills, 7 rules, 18 MCP tools |
1515

@@ -74,7 +74,7 @@
7474
- `mobile_configureDeepLinks` - Set up universal links and app links
7575
- `mobile_resetDevEnvironment` - Clear caches, reinstall pods, reset Metro/Gradle
7676

77-
## v0.5.0 - Flutter (current)
77+
## v0.5.0 - Flutter
7878

7979
**Skills:**
8080
- `mobile-project-setup` (Flutter) - Guided `flutter create` with recommended structure
@@ -85,7 +85,7 @@
8585
**Rules:**
8686
- `mobile-performance` - Common performance anti-patterns (inline styles, missing keys, heavy re-renders)
8787

88-
## v0.6.0 - Ship It
88+
## v0.6.0 - Ship It (current)
8989

9090
**Skills:**
9191
- `mobile-app-store-prep` (Shared) - Screenshots, descriptions, metadata, review guidelines

mcp-server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tmhs/mobile-mcp",
3-
"version": "0.5.0",
3+
"version": "0.6.0",
44
"description": "MCP server for mobile app development - 12 tools for environment checks, project scaffolding, device deployment, screen/component generation, dependency installation, permissions, AI integration, build health, push notifications, deep links, and dev environment reset.",
55
"type": "module",
66
"main": "dist/index.js",

mcp-server/src/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ import { register as registerCheckBuildHealth } from "./tools/checkBuildHealth.j
1515
import { register as registerAddPushNotifications } from "./tools/addPushNotifications.js";
1616
import { register as registerConfigureDeepLinks } from "./tools/configureDeepLinks.js";
1717
import { register as registerResetDevEnvironment } from "./tools/resetDevEnvironment.js";
18+
import { register as registerBuildForStore } from "./tools/buildForStore.js";
19+
import { register as registerValidateStoreMetadata } from "./tools/validateStoreMetadata.js";
20+
import { register as registerSubmitToAppStore } from "./tools/submitToAppStore.js";
1821

1922
const server = new McpServer({
2023
name: "mobile-mcp",
21-
version: "0.5.0",
24+
version: "0.6.0",
2225
});
2326

2427
registerCheckDevEnvironment(server);
@@ -33,6 +36,9 @@ registerCheckBuildHealth(server);
3336
registerAddPushNotifications(server);
3437
registerConfigureDeepLinks(server);
3538
registerResetDevEnvironment(server);
39+
registerBuildForStore(server);
40+
registerValidateStoreMetadata(server);
41+
registerSubmitToAppStore(server);
3642

3743
async function main(): Promise<void> {
3844
const transport = new StdioServerTransport();

0 commit comments

Comments
 (0)