AutoMobile
Mobile device interaction automation via MCP
dev.jasonpearson/auto-mobile · Repository · Website · version 0.0.67 · 56 stars · listed from registry
Install
The sweep installs into a clean prefix, but this is the command a user would run:
npx @kaeawc/auto-mobile
Results by platform
Linux
MCP handshake failed2026-08-15 · probed over npm1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…d",`pid=${J.pid??"?"}`),J.stdout.on("data",(X)=>{let Q=Buffer.isBuffer(X)?X:Buffer.from(X),Y=this.decoder.push(Q,(W)=>this.emit("malformed",W),(W)=>this.emit("audio",W),(W)=>this.enqueueFrame(W),(W)=>this.emit("encodedVideo",W));for(let W of Y)this.enqueueFrame(W)}),J.stderr.on("data",(X)=>{let Q=Buffer.isBuffer(X)?X.toString("utf8"):String(X);this.appendStderr(Q)}),J.once("error",(X)=>{this.emit("error",X instanceof Error?X:Error(String(X)))}),this.exitPromise=new Promise((X)=>{J.once("exit",(Q,Y)=>{if(this.stderrBuffer.length>0)this.handleStderrLine(this.stderrBuffer),this.stderrBuffer="";let W={code:Q,signal:Y};this.emit("exit",W),X(W)})}),U.debug(`[IOSScreenCaptureHelper] spawned ${this.binaryPath} pid=${J.pid??"?"}`)}async stop(){let $=this.process;if($===null)return null;if($.exitCode!==null||$.killed){let X=await this.waitForExitWithinGrace();return this.cleanupProcess($),X??{code:$.exitCode,signal:$.signalCode}}$.kill("SIGTERM");let J=await this.waitForExitWithinGrace();if(J!==null)return this.cleanupProcess($),J;if(U.warn(`[IOSScreenCaptureHelper] helper pid=${$.pid??"?"} did not exit after SIGTERM; escalating to SIGKILL`),$.kill("SIGKILL"),process.platform==="darwin")if($.pid!==void 0)try{this.processGroupKiller($.pid,"SIGKILL")}catch(X){U.warn(`[IOSScreenCaptureHelper] process-group cleanup failed for pid=${$.pid}; detached children may leak: ${X}`)}else U.warn("[IOSScreenCaptureHelper] helper pid unknown after SIGKILL; cannot group-kill, detached children may leak");return this.cleanupProcess($),{code:$.exitCode,signal:$.signalCode??"SIGKILL"}}appendStderr($){if(this.stderrBuffer+=$,this.stderrBuffer.length>$L.STDERR_BUFFER_MAX){this.emit("stderr",this.stderrBuffer),this.stderrBuffer="";return}let J=this.stderrBuffer.split(`
TypeError: N0 is not a function
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:4837
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:10501
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:28816
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:58646
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:1038
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:21:8758
at file:///tmp/does-it-install/dii-npm-1qEnHq/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:1038
Node.js v22.23.2
macOS
MCP handshake failed2026-08-15 · probed over npm1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
….decodeAvailable(W,J,X,Q,Y))throw Error("FrameDecoder reached its raw-frame buffer limit without a complete frame");continue}let j=Math.min($.length,G+Z);this.buffer.append($.subarray(G,j)),this.highWaterMarkBytes=Math.max(this.highWaterMarkBytes,this.buffer.length),G=j,this.decodeAvailable(W,J,X,Q,Y)}return W}getMetrics(){return{bufferedBytes:this.buffer.length,highWaterMarkBytes:this.highWaterMarkBytes,maxBufferedBytes:RU+kb}}decodeAvailable($,J,X,Q,Y){let W=!1;while(!0){if(this.resynchronizing&&!this.resynchronize())return W;if(this.pendingHeader===null){let V=this.takeHeader(J);if(V==="starved")return W;if(V==="malformed"){W=!0;continue}this.pendingHeader=V,W=!0}let G=this.pendingHeader,Z=cO0(G);if(this.buffer.length<Z)return W;let j=this.buffer.takeDetached(Z);this.emitRecord(G,j,$,X,Q,Y),this.pendingHeader=null,W=!0}}emitRecord($,J,X,Q,Y,W){if(ue($)){Q?.({pcm16le:J});return}if(me($)){W?.({keyframe:($.height&pO0)!==0,presentationTimestampMs:$.timestampMs,payload:J});return}let G={header:$,pixels:J};if(Y)Y(G);else X.push(G)}takeHeader($){if(this.buffer.length<RU)return"starved";let J=this.buffer.peek(RU),X=eN$(J,0);if(X)return this.resynchronizing=!0,$?.({reason:X,header:ge(J,0)}),"malformed";let Q=ge(J,0);return this.buffer.discard(RU),Q}resynchronize(){let $=this.buffer.toBuffer(),J=0;while(J<=$.length-he.length){let X=$.indexOf(he,J);if(X<0)break;if(X+RU>$.length)return this.replaceBuffer($.subarray(X)),!1;if(eN$($,X)===null)return this.replaceBuffer($.subarray(X)),this.resynchronizing=!1,!0;J=X+1}return this.replaceBuffer($.subarray(Math.max(0,$.length-(he.length-1)))),!1}replaceBuffer($){this.buffer.replace($.length===0?Buffer.alloc(0):Buffer.from($))}}function ue($){return $.width===0&&$.height===8000&&$.bytesPerRow===1}function me($){return $.width===0&&($.height&XA$)>>>0===JA$}function cO0($){if(ue($))return $.timestampMs;if(me($))return $.bytesPerRow;return $.height*$.bytesPerRow}function ge($,J){return{width:$.readUInt32LE(J+8),height:$.readUInt32LE(J+12),bytesPerRow:$.readUInt32LE(J+16),timestampMs:$.readUInt32LE(J+20)}}function eN$($,J){if($.readUInt32LE(J)!==$A$)return"header_magic_mismatch";if($.readUInt32LE(J+4)!==QA$($.subarray(J+gO0,J+RU)))return"header_checksum_mismatch";return dO0(ge($,J))}function dO0($){if(ue($))return $.timestampMs>mO0?"audio_payload_too_large":null;if(me($))return $.bytesPerRow>lO0?"encoded_video_payload_too_large":null;if($.width===0)return"header_width_zero";if($.height===0)return"header_height_zero";if($.bytesPerRow<$.width*4)return"header_bytes_per_row_too_small";if($.width>sN$||$.height>sN$)return"header_dimensions_out_of_range";if($.bytesPerRow>$.width*4+uO0)return"header_bytes_per_row_too_large";if($.height*$.bytesPerRow>kb)return"header_payload_too_large";return null}function iO0(){let $=new Uint32Array(256);for(let J=0;J<256;J++){let X=J;for(let Q=0;Q<8;Q++)X=(X&1)!==0?3988292384^X>>>1:X>>>1;$[J]=X>>>0}return $}function QA$($){let J=4294967295;for(let X=0;X<$.length;X++)J=J>>>8^nO0[(J^$[X])&255];return(J^4294967295)>>>0}var $A$=826690881,he,RU=24,gO0=8,sN$=16384,uO0=4096,kb=33554432,mO0=16777216,lO0=16777216,JA$=3798204416,XA$=4294967294,pO0=1,nO0;var le=D(()=>{he=Buffer.from([65,77,70,49]);nO0=iO0()});class cB{options;pending=null;droppedFrames=0;highWaterMarkBytes=0;lastCaptureTimestampMs=null;constructor($){this.options=$}enqueue($){if(this.lastCaptureTimestampMs=$.header.timestampMs,$.pixels.length>this.options.maxFrameBytes)return this.droppedFrames++,!1;if(this.pending!==null)this.droppedFrames++;return this.pending={frame:$,enqueuedAtMs:this.options.now()},this.highWaterMarkBytes=Math.max(this.highWaterMarkBytes,$.pixels.length),!0}take(){let $=this.pending;return this.pending=null,$?.frame??null}clear($=!1){if($&&this.pending!==null)this.droppedFrames++;this.pending=null}metrics(){let $=this.pending;return{captureTimestampMs:$?.frame.header.timestampMs??this.lastCaptureTimestampMs,frameAgeMs
Windows
MCP handshake failed2026-08-15 · probed over npm1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…)}),J.once("error",(X)=>{this.emit("error",X instanceof Error?X:Error(String(X)))}),this.exitPromise=new Promise((X)=>{J.once("exit",(Q,Y)=>{if(this.stderrBuffer.length>0)this.handleStderrLine(this.stderrBuffer),this.stderrBuffer="";let W={code:Q,signal:Y};this.emit("exit",W),X(W)})}),U.debug(`[IOSScreenCaptureHelper] spawned ${this.binaryPath} pid=${J.pid??"?"}`)}async stop(){let $=this.process;if($===null)return null;if($.exitCode!==null||$.killed){let X=await this.waitForExitWithinGrace();return this.cleanupProcess($),X??{code:$.exitCode,signal:$.signalCode}}$.kill("SIGTERM");let J=await this.waitForExitWithinGrace();if(J!==null)return this.cleanupProcess($),J;if(U.warn(`[IOSScreenCaptureHelper] helper pid=${$.pid??"?"} did not exit after SIGTERM; escalating to SIGKILL`),$.kill("SIGKILL"),process.platform==="darwin")if($.pid!==void 0)try{this.processGroupKiller($.pid,"SIGKILL")}catch(X){U.warn(`[IOSScreenCaptureHelper] process-group cleanup failed for pid=${$.pid}; detached children may leak: ${X}`)}else U.warn("[IOSScreenCaptureHelper] helper pid unknown after SIGKILL; cannot group-kill, detached children may leak");return this.cleanupProcess($),{code:$.exitCode,signal:$.signalCode??"SIGKILL"}}appendStderr($){if(this.stderrBuffer+=$,this.stderrBuffer.length>$L.STDERR_BUFFER_MAX){this.emit("stderr",this.stderrBuffer),this.stderrBuffer="";return}let J=this.stderrBuffer.split(`
TypeError: N0 is not a function
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:4837
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:10501
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:28816
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:817
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:19:58646
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:1038
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:21:8758
at file:///C:/Users/RUNNER%7E1/AppData/Local/Temp/does-it-install/dii-npm-R28fks/node_modules/@kaeawc/auto-mobile/dist/src/index.js:3:1038
Node.js v22.23.2
Badge
Paste this into the project README to show the current result:
[](https://doesitinstall.com/s/dev.jasonpearson__auto-mobile.html)