1 view
mobile-next/mobile-mcp
Model Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices)
TypeScript★ 7,459+168 that day#7 on trending
B70.2/100
Duplication76
3.4% in typescript, bash, javascript, perlDead code66
5.1%Complexity69
28.5% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
3.85%duplicated code · 202 of 5,248 lines
16clones in code
27code files of 68 scanned
5.49%duplicated over all files · 28 clones
Most complex files
- src/server.ts163 cx
- src/android.ts106 cx
- src/webdriver-agent.ts41 cx
- test/utils.ts40 cx
- src/mobile-device.ts35 cx
- test/iphone-simulator.ts35 cx
- src/mobilecli.ts32 cx
- src/iphone-simulator.ts31 cx
- test/android.ts29 cx
- test/mobile-device.test.ts29 cx
Dead code 5.07% unused · 1 findings
- src/iphone-simulator.tsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 18 lines in 3 placestypescript106 tokens
149public async tap(x: number, y: number) { 150 await this.withinSession(async sessionUrl => { 151 const url = `${sessionUrl}/actions`; 152 await fetch(url, { 153 method: "POST", 154 headers: { 155 "Content-Type": "application/json", 156 }, 157 body: JSON.stringify({ 158 actions: [First 10 of 18 lines.
- 42 lines in 2 placestypescript191 tokens
331 x1 = centerX + Math.floor(horizontalDistance / 2); 332 break; 333 default: 334 throw new ActionableError(`Swipe direction "${direction}" is not supported`); 335} 336 337const url = `${sessionUrl}/actions`; 338const response = await fetch(url, { 339 method: "POST", 340 headers: {First 10 of 42 lines.
- 10 lines in 3 placestypescript86 tokens
393 this.adb("uninstall", bundleId); 394 } catch (error: any) { 395 const stdout = error.stdout ? error.stdout.toString() : ""; 396 const stderr = error.stderr ? error.stderr.toString() : ""; 397 const output = (stdout + stderr).trim(); 398 throw new ActionableError(output || error.message); 399 } 400} 401 402public async openUrl(url: string): Promise<void> {
7 more
- 10 lines in 3 placestypescript72 tokens
- 12 lines in 2 placestypescript100 tokens
- 7 lines in 2 placestypescript69 tokens
- 9 lines in 2 placestypescript65 tokens
- 7 lines in 2 placestypescript64 tokens
- 9 lines in 2 placestypescript64 tokens
- 9 lines in 2 placestypescript61 tokens
Largest clones over all files, tests and data included
- 232 lines in 3 placestextdocs and examples286 tokens
252/mcp add 253``` 254 255設定ファイル `~/.copilot/mcp-config.json` を編集して次を追加することもできます: 256 257```json 258{ 259 "mcpServers": { 260 "mobile-mcp": { 261 "type": "local",252/mcp add 253``` 254 255You can edit the configuration file `~/.copilot/mcp-config.json` and add: 256 257```json 258{ 259 "mcpServers": { 260 "mobile-mcp": { 261 "type": "local",First 10 of 232 lines, the second copy on the right.
- 383 lines in 3 placesjsondocs and examples165 tokens
145{ 146 "mcpServers": { 147 "mobile-mcp": { 148 "command": "npx", 149 "args": ["-y", "@mobilenext/mobile-mcp@latest"] 150 } 151 } 152} 153``` 154First 10 of 383 lines.
- 336 lines in 3 placesbashdocs and examples130 tokens
176amp mcp add mobile-mcp -- npx @mobilenext/mobile-mcp@latest 177``` 178 179</details> 180 181<details> 182<summary>Antigravity 2</summary> 183 184Antigravity には MCP サーバーを追加する CLI コマンドがないため、手動で追加します。`~/.gemini/config/mcp_config.json` を編集して次を追加してください: 185176amp mcp add mobile-mcp -- npx @mobilenext/mobile-mcp@latest 177``` 178 179</details> 180 181<details> 182<summary>Antigravity 2</summary> 183 184Antigravity doesn't have a CLI command to add MCP servers, so add it manually. Edit `~/.gemini/config/mcp_config.json` and add: 185First 10 of 336 lines, the second copy on the right.
- 18 lines in 3 placestypescript106 tokens
- 42 lines in 2 placestypescript191 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 15 | 4,167 | 16 | 202 | 4.85% |
| bash | 9 | 644 | 0 | 0 | 0% |
| javascript | 2 | 263 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 27 | 5,222 | 18 | 216 | 4.14% |
| markdown | 13 | 2,453 | 3 | 75 | 3.06% |
| bash | 12 | 671 | 2 | 18 | 2.68% |
| json | 7 | 349 | 2 | 144 | 41.26% |
| text | 3 | 81 | 2 | 54 | 66.67% |
| yaml | 2 | 178 | 1 | 13 | 7.3% |
| javascript | 3 | 341 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 27, 2026 | #7 | 7,459 (+168) | 68 | 9,469 | 28 | 5.49% | 3.85% | B 70.2 | 18d0e8c |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.