@blitzdev/iphone-mcp 0.1.7

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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/child-env.d.ts +1 -0
  4. package/dist/child-env.js +61 -0
  5. package/dist/child-env.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +318 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/device-client.d.ts +2 -0
  10. package/dist/device-client.js +15 -0
  11. package/dist/device-client.js.map +1 -0
  12. package/dist/execution-context.d.ts +33 -0
  13. package/dist/execution-context.js +66 -0
  14. package/dist/execution-context.js.map +1 -0
  15. package/dist/idb/ax-scan-client.d.ts +27 -0
  16. package/dist/idb/ax-scan-client.js +244 -0
  17. package/dist/idb/ax-scan-client.js.map +1 -0
  18. package/dist/idb/idb-client.d.ts +34 -0
  19. package/dist/idb/idb-client.js +288 -0
  20. package/dist/idb/idb-client.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +15 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/logger.d.ts +3 -0
  25. package/dist/logger.js +6 -0
  26. package/dist/logger.js.map +1 -0
  27. package/dist/mcp-server.d.ts +2 -0
  28. package/dist/mcp-server.js +649 -0
  29. package/dist/mcp-server.js.map +1 -0
  30. package/dist/types.d.ts +75 -0
  31. package/dist/types.js +7 -0
  32. package/dist/types.js.map +1 -0
  33. package/dist/ui-filters.d.ts +11 -0
  34. package/dist/ui-filters.js +100 -0
  35. package/dist/ui-filters.js.map +1 -0
  36. package/dist/viewer/server.d.ts +5 -0
  37. package/dist/viewer/server.js +233 -0
  38. package/dist/viewer/server.js.map +1 -0
  39. package/dist/wda/device-discovery.d.ts +12 -0
  40. package/dist/wda/device-discovery.js +91 -0
  41. package/dist/wda/device-discovery.js.map +1 -0
  42. package/dist/wda/wda-client.d.ts +38 -0
  43. package/dist/wda/wda-client.js +314 -0
  44. package/dist/wda/wda-client.js.map +1 -0
  45. package/dist/wda/wda-manager.d.ts +29 -0
  46. package/dist/wda/wda-manager.js +263 -0
  47. package/dist/wda/wda-manager.js.map +1 -0
  48. package/dist/wda/wda-scan.d.ts +3 -0
  49. package/dist/wda/wda-scan.js +41 -0
  50. package/dist/wda/wda-scan.js.map +1 -0
  51. package/package.json +40 -0
  52. package/src/idb/ax-scan/Makefile +30 -0
  53. package/src/idb/ax-scan/ax-scan.m +168 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wda-manager.js","sourceRoot":"","sources":["../../src/wda/wda-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WDAClient } from './wda-client.js';
2
+ import type { ScanRegion } from '../types.js';
3
+ export declare function wdaScanGrid(client: WDAClient, region: ScanRegion): Promise<unknown[]>;
@@ -0,0 +1,41 @@
1
+ import { log } from '../logger.js';
2
+ export async function wdaScanGrid(client, region) {
3
+ const xml = await client.getSource();
4
+ log('WDAScan', 'log', `Got page source: ${xml.length} chars`);
5
+ const allElements = client.parseAccessibilityXml(xml);
6
+ log('WDAScan', 'log', `Parsed ${allElements.length} visible elements from source`);
7
+ if (region === 'full')
8
+ return allElements;
9
+ let screenWidth = 393;
10
+ let screenHeight = 852;
11
+ try {
12
+ const size = await client.getWindowSize();
13
+ screenWidth = size.width;
14
+ screenHeight = size.height;
15
+ }
16
+ catch {
17
+ log('WDAScan', 'warn', 'Could not get window size, using defaults');
18
+ }
19
+ const midX = Math.round(screenWidth / 2);
20
+ const midY = Math.round(screenHeight / 2);
21
+ const regionBounds = {
22
+ 'top-half': { xMin: 0, yMin: 0, xMax: screenWidth, yMax: midY },
23
+ 'bottom-half': { xMin: 0, yMin: midY, xMax: screenWidth, yMax: screenHeight },
24
+ 'top-left': { xMin: 0, yMin: 0, xMax: midX, yMax: midY },
25
+ 'top-right': { xMin: midX, yMin: 0, xMax: screenWidth, yMax: midY },
26
+ 'bottom-left': { xMin: 0, yMin: midY, xMax: midX, yMax: screenHeight },
27
+ 'bottom-right': { xMin: midX, yMin: midY, xMax: screenWidth, yMax: screenHeight },
28
+ };
29
+ const bounds = regionBounds[region];
30
+ const filtered = allElements.filter((el) => {
31
+ const frame = el.frame;
32
+ if (!frame)
33
+ return false;
34
+ const cx = frame.x + frame.width / 2;
35
+ const cy = frame.y + frame.height / 2;
36
+ return cx >= bounds.xMin && cx < bounds.xMax && cy >= bounds.yMin && cy < bounds.yMax;
37
+ });
38
+ log('WDAScan', 'log', `Region ${region}: ${filtered.length} elements (of ${allElements.length} total)`);
39
+ return filtered;
40
+ }
41
+ //# sourceMappingURL=wda-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wda-scan.js","sourceRoot":"","sources":["../../src/wda/wda-scan.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@blitzdev/iphone-mcp",
3
+ "version": "0.1.7",
4
+ "description": "MCP server for controlling iOS simulators and physical iPhones",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/blitzdotdev/ios-mcp.git"
10
+ },
11
+ "bin": {
12
+ "iphone-mcp": "dist/cli.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "src/idb/ax-scan/ax-scan.m",
17
+ "src/idb/ax-scan/Makefile"
18
+ ],
19
+ "engines": {
20
+ "node": ">=18"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "typecheck": "tsc --noEmit",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "dependencies": {
28
+ "@inquirer/checkbox": "^5.1.0",
29
+ "@modelcontextprotocol/sdk": "^1.12.1",
30
+ "express": "^5.1.0",
31
+ "ws": "^8.18.3",
32
+ "zod": "^3.23.0"
33
+ },
34
+ "devDependencies": {
35
+ "@types/express": "^5.0.0",
36
+ "@types/node": "^22.0.0",
37
+ "@types/ws": "^8.5.0",
38
+ "typescript": "^5.7.0"
39
+ }
40
+ }
@@ -0,0 +1,30 @@
1
+ IDB_FRAMEWORKS = $(HOME)/.blitz-ios-mcp/idb-companion/Frameworks
2
+ IDB_FRAMEWORKS_FALLBACK = $(HOME)/.blitz/idb-companion/Frameworks
3
+ XCODE_FRAMEWORKS = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks
4
+ OUTPUT = ax-scan
5
+
6
+ INSTALL_DIR = $(HOME)/.blitz-ios-mcp/bin
7
+
8
+ # Use blitz-ios-mcp frameworks if available, otherwise fall back to blitz
9
+ EFFECTIVE_IDB_FRAMEWORKS = $(shell if [ -d "$(IDB_FRAMEWORKS)" ]; then echo "$(IDB_FRAMEWORKS)"; else echo "$(IDB_FRAMEWORKS_FALLBACK)"; fi)
10
+
11
+ .PHONY: all clean install
12
+
13
+ all: $(OUTPUT)
14
+
15
+ install: $(OUTPUT)
16
+ mkdir -p $(INSTALL_DIR)
17
+ cp $(OUTPUT) $(INSTALL_DIR)/$(OUTPUT)
18
+
19
+ $(OUTPUT): ax-scan.m
20
+ clang -fobjc-arc -fmodules \
21
+ -F$(EFFECTIVE_IDB_FRAMEWORKS) \
22
+ -F$(XCODE_FRAMEWORKS) \
23
+ -framework FBControlCore \
24
+ -framework FBSimulatorControl \
25
+ -framework Foundation \
26
+ -rpath $(EFFECTIVE_IDB_FRAMEWORKS) \
27
+ -o $(OUTPUT) ax-scan.m
28
+
29
+ clean:
30
+ rm -f $(OUTPUT)
@@ -0,0 +1,168 @@
1
+ /**
2
+ * ax-scan: Persistent daemon for fast grid-based accessibility scanning.
3
+ *
4
+ * Loads FBSimulatorControl once, then reads scan commands from stdin.
5
+ * Each command is a single line of JSON, response is JSON followed by \n---\n sentinel.
6
+ *
7
+ * Command format:
8
+ * {"grid_step":50,"x_start":25,"y_start":25,"x_end":402,"y_end":874}
9
+ *
10
+ * Launch:
11
+ * ax-scan --udid <UDID>
12
+ *
13
+ * Sends "READY\n" to stdout once initialization is complete.
14
+ */
15
+
16
+ #import <Foundation/Foundation.h>
17
+ #import <FBControlCore/FBControlCore.h>
18
+ #import <FBSimulatorControl/FBSimulatorControl.h>
19
+
20
+ static NSArray<NSDictionary *> *scanGrid(FBSimulator *simulator,
21
+ CGFloat gridStep,
22
+ CGFloat xStart, CGFloat yStart,
23
+ CGFloat xEnd, CGFloat yEnd) {
24
+ // Build grid of points
25
+ NSMutableArray<NSValue *> *points = [NSMutableArray array];
26
+ for (CGFloat y = yStart; y <= yEnd; y += gridStep) {
27
+ for (CGFloat x = xStart; x <= xEnd; x += gridStep) {
28
+ [points addObject:[NSValue valueWithPoint:NSMakePoint(x, y)]];
29
+ }
30
+ }
31
+
32
+ // Fire all futures at once
33
+ NSMutableArray<NSDictionary *> *allResults = [NSMutableArray array];
34
+ NSLock *resultsLock = [[NSLock alloc] init];
35
+ dispatch_group_t group = dispatch_group_create();
36
+ dispatch_queue_t cbQueue = dispatch_queue_create("com.blitz.ax-scan.cb", DISPATCH_QUEUE_SERIAL);
37
+
38
+ for (NSValue *pointValue in points) {
39
+ CGPoint point = CGPointMake(pointValue.pointValue.x, pointValue.pointValue.y);
40
+ FBFuture<NSDictionary<NSString *, id> *> *future =
41
+ [simulator accessibilityElementAtPoint:point nestedFormat:NO];
42
+
43
+ dispatch_group_enter(group);
44
+ [future onQueue:cbQueue notifyOfCompletion:^(FBFuture *completed) {
45
+ NSDictionary *result = completed.result;
46
+ if (result && ![result isKindOfClass:[NSNull class]]) {
47
+ [resultsLock lock];
48
+ [allResults addObject:result];
49
+ [resultsLock unlock];
50
+ }
51
+ dispatch_group_leave(group);
52
+ }];
53
+ }
54
+
55
+ // Pump main run loop until all futures complete
56
+ while (dispatch_group_wait(group, DISPATCH_TIME_NOW) != 0) {
57
+ [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode
58
+ beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.001]];
59
+ }
60
+
61
+ // Deduplicate by (AXLabel, type, frame)
62
+ NSMutableDictionary<NSString *, NSDictionary *> *unique = [NSMutableDictionary dictionary];
63
+ for (NSDictionary *element in allResults) {
64
+ NSString *label = element[@"AXLabel"] ?: @"";
65
+ NSString *type = element[@"type"] ?: @"";
66
+ NSDictionary *frame = element[@"frame"];
67
+ NSString *key;
68
+ if (frame) {
69
+ key = [NSString stringWithFormat:@"%@|%@|%.0f,%.0f,%.0f,%.0f",
70
+ label, type,
71
+ [frame[@"x"] doubleValue], [frame[@"y"] doubleValue],
72
+ [frame[@"width"] doubleValue], [frame[@"height"] doubleValue]];
73
+ } else {
74
+ key = [NSString stringWithFormat:@"%@|%@|noframe", label, type];
75
+ }
76
+ if (!unique[key]) {
77
+ unique[key] = element;
78
+ }
79
+ }
80
+
81
+ return [unique allValues];
82
+ }
83
+
84
+ int main(int argc, const char *argv[]) {
85
+ @autoreleasepool {
86
+ // Parse --udid from args
87
+ NSArray<NSString *> *args = [[NSProcessInfo processInfo] arguments];
88
+ NSString *udid = nil;
89
+ for (NSUInteger i = 1; i < args.count; i++) {
90
+ if ([args[i] isEqualToString:@"--udid"] && i + 1 < args.count) {
91
+ udid = args[++i];
92
+ }
93
+ }
94
+ if (!udid) {
95
+ fprintf(stderr, "Usage: ax-scan --udid <UDID>\n");
96
+ return 1;
97
+ }
98
+
99
+ // One-time initialization
100
+ [FBSimulatorControlFrameworkLoader.essentialFrameworks loadPrivateFrameworksOrAbort];
101
+
102
+ NSError *error = nil;
103
+ FBSimulatorControlConfiguration *config = [FBSimulatorControlConfiguration
104
+ configurationWithDeviceSetPath:nil logger:nil reporter:nil];
105
+ FBSimulatorControl *control = [FBSimulatorControl withConfiguration:config error:&error];
106
+ if (!control) {
107
+ fprintf(stderr, "Error: %s\n", error.localizedDescription.UTF8String);
108
+ return 1;
109
+ }
110
+
111
+ FBSimulator *simulator = [control.set simulatorWithUDID:udid];
112
+ if (!simulator) {
113
+ fprintf(stderr, "Error: No simulator with UDID %s\n", udid.UTF8String);
114
+ return 1;
115
+ }
116
+
117
+ // Signal ready
118
+ printf("READY\n");
119
+ fflush(stdout);
120
+
121
+ // Read commands from stdin, one JSON per line
122
+ char buf[4096];
123
+
124
+ while (1) {
125
+ // Read a line from stdin
126
+ if (!fgets(buf, sizeof(buf), stdin)) {
127
+ break; // EOF — parent closed pipe
128
+ }
129
+
130
+ NSString *line = [[NSString alloc] initWithUTF8String:buf];
131
+ line = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
132
+ if (line.length == 0) continue;
133
+
134
+ // Parse JSON command
135
+ NSData *cmdData = [line dataUsingEncoding:NSUTF8StringEncoding];
136
+ NSDictionary *cmd = [NSJSONSerialization JSONObjectWithData:cmdData options:0 error:&error];
137
+ if (!cmd) {
138
+ fprintf(stderr, "Invalid JSON: %s\n", error.localizedDescription.UTF8String);
139
+ printf("{\"error\":\"invalid JSON\"}\n---\n");
140
+ fflush(stdout);
141
+ continue;
142
+ }
143
+
144
+ CGFloat gridStep = [cmd[@"grid_step"] doubleValue] ?: 50.0;
145
+ CGFloat xStart = [cmd[@"x_start"] doubleValue] ?: 25.0;
146
+ CGFloat yStart = [cmd[@"y_start"] doubleValue] ?: 25.0;
147
+ CGFloat xEnd = [cmd[@"x_end"] doubleValue] ?: 402.0;
148
+ CGFloat yEnd = [cmd[@"y_end"] doubleValue] ?: 874.0;
149
+
150
+ // Run scan
151
+ NSArray<NSDictionary *> *elements = scanGrid(simulator, gridStep, xStart, yStart, xEnd, yEnd);
152
+
153
+ // Output JSON
154
+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject:elements
155
+ options:NSJSONWritingSortedKeys
156
+ error:&error];
157
+ if (jsonData) {
158
+ NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
159
+ printf("%s\n---\n", json.UTF8String);
160
+ } else {
161
+ printf("{\"error\":\"serialization failed\"}\n---\n");
162
+ }
163
+ fflush(stdout);
164
+ }
165
+
166
+ return 0;
167
+ }
168
+ }