Skip to content

Commit fca072d

Browse files
committed
quality: fix review issues and update external references Metadata: fix mcp-server description (12->15 tools), regenerate lockfiles, update SECURITY.md supported versions, remove shipped feature from ROADMAP v0.7. MCP tools: add try/catch to runOnDevice, fix 5 tool description mismatches (checkDevEnvironment, submitToAppStore, validateStoreMetadata, scaffoldProject, runOnDevice). Rules: move UIManager.setLayoutAnimationEnabledExperimental to Android-only. CI: fix brittle stdio smoke test to accept clean exit from stdin-less server. Docs: align CONTRIBUTING.md required sections with test_skills.py, fix checkDevEnvironment description in CLAUDE.md and README.md. Skills (April 2026 freshness): update for Expo SDK 55 (Node 20+, New Architecture required), Android API 36 deadline, iOS 26 SDK/Xcode 26 requirement, expo-notifications v55 breaking changes, ngrok tunnel issues, remove stale internal version labels.
Made-with: Cursor
1 parent fb20d08 commit fca072d

File tree

24 files changed

+88
-56
lines changed

24 files changed

+88
-56
lines changed

.github/workflows/ci.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,23 @@ jobs:
5151

5252
- name: Smoke test (server starts without crashing)
5353
run: |
54-
sleep 5 | node dist/index.js &
54+
node dist/index.js < /dev/null &
5555
PID=$!
5656
sleep 3
5757
if kill -0 "$PID" 2>/dev/null; then
5858
echo "Server still running after 3s. Smoke test passed."
5959
kill "$PID" 2>/dev/null || true
6060
wait "$PID" 2>/dev/null || true
6161
else
62+
echo "Server exited (expected for stdio server with no stdin). Checking exit code."
6263
wait "$PID" 2>/dev/null
63-
echo "Server exited early."
64-
exit 1
64+
EXIT_CODE=$?
65+
if [ "$EXIT_CODE" -le 1 ]; then
66+
echo "Clean exit (code $EXIT_CODE). Smoke test passed."
67+
else
68+
echo "Server crashed with exit code $EXIT_CODE."
69+
exit 1
70+
fi
6571
fi
6672
6773
build-npm-package:

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Tools use the `mobile_` prefix (for example `mobile_checkDevEnvironment`).
7676

7777
| Tool | Description |
7878
| --- | --- |
79-
| mobile_checkDevEnvironment | Detect installed tools, SDKs, simulators; report what is missing |
79+
| mobile_checkDevEnvironment | Detect installed tools and SDKs (Node, Expo CLI, Watchman, Xcode, Android Studio, JDK); report what is missing |
8080
| mobile_scaffoldProject | Generate a new Expo project from a template with chosen options |
8181
| mobile_runOnDevice | Start dev server and provide instructions for connecting a physical device |
8282
| mobile_generateScreen | Create a new Expo Router screen file with navigation wiring and boilerplate |

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Thanks for your interest in contributing to Mobile App Developer Tools.
1515

1616
1. Create a directory under `skills/` matching your skill name (e.g. `skills/mobile-my-skill/`)
1717
2. Add a `SKILL.md` file with YAML frontmatter containing `name` (must match directory) and `description`
18-
3. Include these sections in order: Trigger, Required Inputs, Workflow, Key References, Example Interaction, MCP Usage, Common Pitfalls, See Also
18+
3. Include these required sections in order: Trigger, Required Inputs, Workflow, Example Interaction, MCP Usage, Common Pitfalls. Optional sections: Key References, See Also
1919
4. Run `pytest tests/test_skills.py -v` to verify frontmatter and structure
2020

2121
## Adding a Rule

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ npx @tmhs/mobile-mcp
281281

282282
| Tool | Purpose |
283283
| --- | --- |
284-
| `mobile_checkDevEnvironment` | Detect installed tools (Node, Expo CLI, Watchman, Xcode, Android Studio, JDK). Report what is missing with install instructions. |
284+
| `mobile_checkDevEnvironment` | Detect installed tools and SDKs (Node, Expo CLI, Watchman, Xcode, Android Studio, JDK). Report what is missing with install instructions. |
285285
| `mobile_scaffoldProject` | Generate a new Expo project with TypeScript template and recommended config. |
286286
| `mobile_runOnDevice` | Start dev server and provide step-by-step instructions for connecting a physical device. |
287287
| `mobile_generateScreen` | Create a new Expo Router screen file with correct convention, navigation wiring, and boilerplate. |

ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
| **v0.4.0** | Users & Data | +4 | +1 | +3 | Auth, push notifications, local storage, API integration, env-safety rule |
1111
| **v0.5.0** | Flutter | +4 | +1 | +0 | Flutter project setup, navigation, run-on-device, state management, performance rule |
1212
| **v0.6.0** | Ship It | +3 | +1 | +3 | App store prep, iOS submission, Android submission, accessibility rule **(current)** |
13-
| **v0.7.0** | Grow | +2 | +0 | +3 | Monetization, deep links, build-for-store, screenshots, bundle analysis |
13+
| **v0.7.0** | Grow | +2 | +0 | +3 | Monetization, deep links, screenshots, bundle analysis |
1414
| **v1.0.0** | Stable | +0 | +0 | +0 | Polish, docs, production release: 22 skills, 7 rules, 18 MCP tools |
1515

1616
## v0.1.0 - Zero to Phone

SECURITY.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
| Version | Supported |
66
|---------|-----------|
7-
| 0.1.x | Yes |
7+
| 0.6.x | Yes |
8+
| 0.5.x | Best-effort |
9+
| < 0.5 | No |
810

911
## Reporting a Vulnerability
1012

mcp-server/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mcp-server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@tmhs/mobile-mcp",
33
"version": "0.6.0",
4-
"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.",
4+
"description": "MCP server for mobile app development - 15 tools for environment checks, project scaffolding, device deployment, screen/component generation, dependency installation, permissions, AI integration, build health, push notifications, deep links, dev environment reset, store builds, metadata validation, and App Store submission.",
55
"type": "module",
66
"main": "dist/index.js",
77
"bin": {

mcp-server/src/tools/checkDevEnvironment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const inputSchema = {
5757
export function register(server: McpServer): void {
5858
server.tool(
5959
"mobile_checkDevEnvironment",
60-
"Detect installed mobile development tools, SDKs, and simulators. Report what is installed and what is missing with install instructions.",
60+
"Detect installed mobile development tools and SDKs (Node, Expo CLI, Watchman, Xcode, Android Studio, JDK). Report what is installed and what is missing with install instructions.",
6161
inputSchema,
6262
async (args) => {
6363
try {

mcp-server/src/tools/runOnDevice.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { z } from "zod";
22
import { platform } from "node:os";
33
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4-
import { textResponse } from "../types.js";
4+
import { textResponse, errorResponse } from "../types.js";
55

66
const inputSchema = {
77
project_path: z
@@ -22,9 +22,10 @@ const inputSchema = {
2222
export function register(server: McpServer): void {
2323
server.tool(
2424
"mobile_runOnDevice",
25-
"Start the Expo dev server and provide step-by-step instructions for connecting a physical device.",
25+
"Provide step-by-step instructions for connecting a physical device to the Expo dev server via LAN, tunnel, or USB.",
2626
inputSchema,
2727
async (args) => {
28+
try {
2829
const os = platform();
2930
const connection = args.connection;
3031
const targetPlatform = args.target_platform;
@@ -114,6 +115,9 @@ export function register(server: McpServer): void {
114115
};
115116

116117
return textResponse(JSON.stringify(result, null, 2));
118+
} catch (err) {
119+
return errorResponse(err);
120+
}
117121
},
118122
);
119123
}

0 commit comments

Comments
 (0)