the-android-mcp 0.1.0

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.
package/dist/server.js ADDED
@@ -0,0 +1,484 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AndroidMcpServer = void 0;
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
+ const types_js_2 = require("./types.js");
8
+ const screenshot_js_1 = require("./utils/screenshot.js");
9
+ const adb_js_1 = require("./utils/adb.js");
10
+ const error_js_1 = require("./utils/error.js");
11
+ class AndroidMcpServer {
12
+ server;
13
+ constructor() {
14
+ this.server = new index_js_1.Server({
15
+ name: 'the-android-mcp',
16
+ version: '0.1.0',
17
+ }, {
18
+ capabilities: {
19
+ tools: {},
20
+ },
21
+ });
22
+ this.setupToolHandlers();
23
+ }
24
+ setupToolHandlers() {
25
+ this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
26
+ const tools = [
27
+ {
28
+ name: 'take_android_screenshot',
29
+ description: 'Capture a screenshot from an Android device or emulator',
30
+ inputSchema: types_js_2.TakeScreenshotToolSchema,
31
+ },
32
+ {
33
+ name: 'list_android_devices',
34
+ description: 'List all connected Android devices and emulators',
35
+ inputSchema: types_js_2.ListDevicesToolSchema,
36
+ },
37
+ {
38
+ name: 'find_android_apk',
39
+ description: 'Find the most recent APK in a project directory',
40
+ inputSchema: types_js_2.FindApkToolSchema,
41
+ },
42
+ {
43
+ name: 'install_android_apk',
44
+ description: 'Install an APK on a connected Android device or emulator',
45
+ inputSchema: types_js_2.InstallApkToolSchema,
46
+ },
47
+ {
48
+ name: 'uninstall_android_app',
49
+ description: 'Uninstall an Android app by package name',
50
+ inputSchema: types_js_2.UninstallAppToolSchema,
51
+ },
52
+ {
53
+ name: 'start_android_app',
54
+ description: 'Start an Android app by package name (optionally activity)',
55
+ inputSchema: types_js_2.StartAppToolSchema,
56
+ },
57
+ {
58
+ name: 'stop_android_app',
59
+ description: 'Force-stop an Android app by package name',
60
+ inputSchema: types_js_2.StopAppToolSchema,
61
+ },
62
+ {
63
+ name: 'clear_android_app_data',
64
+ description: 'Clear app data for a package name',
65
+ inputSchema: types_js_2.ClearAppDataToolSchema,
66
+ },
67
+ {
68
+ name: 'tap_android_screen',
69
+ description: 'Send a tap event to the device screen',
70
+ inputSchema: types_js_2.TapToolSchema,
71
+ },
72
+ {
73
+ name: 'swipe_android_screen',
74
+ description: 'Send a swipe gesture to the device screen',
75
+ inputSchema: types_js_2.SwipeToolSchema,
76
+ },
77
+ {
78
+ name: 'input_android_text',
79
+ description: 'Type text into the focused input field',
80
+ inputSchema: types_js_2.InputTextToolSchema,
81
+ },
82
+ {
83
+ name: 'send_android_keyevent',
84
+ description: 'Send an Android keyevent',
85
+ inputSchema: types_js_2.KeyeventToolSchema,
86
+ },
87
+ {
88
+ name: 'reverse_android_port',
89
+ description: 'Reverse a TCP port from device to host (useful for hot reload)',
90
+ inputSchema: types_js_2.ReversePortToolSchema,
91
+ },
92
+ {
93
+ name: 'forward_android_port',
94
+ description: 'Forward a TCP port from host to device',
95
+ inputSchema: types_js_2.ForwardPortToolSchema,
96
+ },
97
+ {
98
+ name: 'get_android_logcat',
99
+ description: 'Fetch recent logcat output (optionally filtered)',
100
+ inputSchema: types_js_2.GetLogcatToolSchema,
101
+ },
102
+ {
103
+ name: 'list_android_activities',
104
+ description: 'List activities for a given package name',
105
+ inputSchema: types_js_2.ListActivitiesToolSchema,
106
+ },
107
+ {
108
+ name: 'hot_reload_android_app',
109
+ description: 'Reverse ports, install (optional), and start an app for hot reload',
110
+ inputSchema: types_js_2.HotReloadSetupToolSchema,
111
+ },
112
+ ];
113
+ return { tools };
114
+ });
115
+ this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
116
+ const { name, arguments: args } = request.params;
117
+ try {
118
+ switch (name) {
119
+ case 'take_android_screenshot': {
120
+ const input = types_js_2.TakeScreenshotInputSchema.parse(args);
121
+ const result = await this.takeScreenshot(input);
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'image',
126
+ data: result.data,
127
+ mimeType: 'image/png',
128
+ },
129
+ {
130
+ type: 'text',
131
+ text: `Android screenshot captured from ${result.deviceId}: ${result.width}x${result.height} pixels`,
132
+ },
133
+ ],
134
+ };
135
+ }
136
+ case 'list_android_devices': {
137
+ const input = types_js_2.ListDevicesInputSchema.parse(args);
138
+ const result = await this.listDevices(input);
139
+ return {
140
+ content: [
141
+ {
142
+ type: 'text',
143
+ text: JSON.stringify(result),
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ case 'find_android_apk': {
149
+ const input = types_js_2.FindApkInputSchema.parse(args);
150
+ const result = await this.findApk(input);
151
+ return {
152
+ content: [
153
+ {
154
+ type: 'text',
155
+ text: JSON.stringify(result),
156
+ },
157
+ ],
158
+ };
159
+ }
160
+ case 'install_android_apk': {
161
+ const input = types_js_2.InstallApkInputSchema.parse(args);
162
+ const result = await this.installApk(input);
163
+ return {
164
+ content: [
165
+ {
166
+ type: 'text',
167
+ text: JSON.stringify(result),
168
+ },
169
+ ],
170
+ };
171
+ }
172
+ case 'uninstall_android_app': {
173
+ const input = types_js_2.UninstallAppInputSchema.parse(args);
174
+ const result = await this.uninstallApp(input);
175
+ return {
176
+ content: [
177
+ {
178
+ type: 'text',
179
+ text: JSON.stringify(result),
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ case 'start_android_app': {
185
+ const input = types_js_2.StartAppInputSchema.parse(args);
186
+ const result = await this.startApp(input);
187
+ return {
188
+ content: [
189
+ {
190
+ type: 'text',
191
+ text: JSON.stringify(result),
192
+ },
193
+ ],
194
+ };
195
+ }
196
+ case 'stop_android_app': {
197
+ const input = types_js_2.StopAppInputSchema.parse(args);
198
+ const result = await this.stopApp(input);
199
+ return {
200
+ content: [
201
+ {
202
+ type: 'text',
203
+ text: JSON.stringify(result),
204
+ },
205
+ ],
206
+ };
207
+ }
208
+ case 'clear_android_app_data': {
209
+ const input = types_js_2.ClearAppDataInputSchema.parse(args);
210
+ const result = await this.clearAppData(input);
211
+ return {
212
+ content: [
213
+ {
214
+ type: 'text',
215
+ text: JSON.stringify(result),
216
+ },
217
+ ],
218
+ };
219
+ }
220
+ case 'tap_android_screen': {
221
+ const input = types_js_2.TapInputSchema.parse(args);
222
+ const result = await this.tapScreen(input);
223
+ return {
224
+ content: [
225
+ {
226
+ type: 'text',
227
+ text: JSON.stringify(result),
228
+ },
229
+ ],
230
+ };
231
+ }
232
+ case 'swipe_android_screen': {
233
+ const input = types_js_2.SwipeInputSchema.parse(args);
234
+ const result = await this.swipeScreen(input);
235
+ return {
236
+ content: [
237
+ {
238
+ type: 'text',
239
+ text: JSON.stringify(result),
240
+ },
241
+ ],
242
+ };
243
+ }
244
+ case 'input_android_text': {
245
+ const input = types_js_2.InputTextInputSchema.parse(args);
246
+ const result = await this.inputText(input);
247
+ return {
248
+ content: [
249
+ {
250
+ type: 'text',
251
+ text: JSON.stringify(result),
252
+ },
253
+ ],
254
+ };
255
+ }
256
+ case 'send_android_keyevent': {
257
+ const input = types_js_2.KeyeventInputSchema.parse(args);
258
+ const result = await this.sendKeyevent(input);
259
+ return {
260
+ content: [
261
+ {
262
+ type: 'text',
263
+ text: JSON.stringify(result),
264
+ },
265
+ ],
266
+ };
267
+ }
268
+ case 'reverse_android_port': {
269
+ const input = types_js_2.ReversePortInputSchema.parse(args);
270
+ const result = await this.reversePort(input);
271
+ return {
272
+ content: [
273
+ {
274
+ type: 'text',
275
+ text: JSON.stringify(result),
276
+ },
277
+ ],
278
+ };
279
+ }
280
+ case 'forward_android_port': {
281
+ const input = types_js_2.ForwardPortInputSchema.parse(args);
282
+ const result = await this.forwardPort(input);
283
+ return {
284
+ content: [
285
+ {
286
+ type: 'text',
287
+ text: JSON.stringify(result),
288
+ },
289
+ ],
290
+ };
291
+ }
292
+ case 'get_android_logcat': {
293
+ const input = types_js_2.GetLogcatInputSchema.parse(args);
294
+ const result = await this.getLogcat(input);
295
+ return {
296
+ content: [
297
+ {
298
+ type: 'text',
299
+ text: JSON.stringify(result),
300
+ },
301
+ ],
302
+ };
303
+ }
304
+ case 'list_android_activities': {
305
+ const input = types_js_2.ListActivitiesInputSchema.parse(args);
306
+ const result = await this.listActivities(input);
307
+ return {
308
+ content: [
309
+ {
310
+ type: 'text',
311
+ text: JSON.stringify(result),
312
+ },
313
+ ],
314
+ };
315
+ }
316
+ case 'hot_reload_android_app': {
317
+ const input = types_js_2.HotReloadSetupInputSchema.parse(args);
318
+ const result = await this.hotReload(input);
319
+ return {
320
+ content: [
321
+ {
322
+ type: 'text',
323
+ text: JSON.stringify(result),
324
+ },
325
+ ],
326
+ };
327
+ }
328
+ default:
329
+ throw new Error(`Unknown tool: ${name}`);
330
+ }
331
+ }
332
+ catch (error) {
333
+ return {
334
+ content: [
335
+ {
336
+ type: 'text',
337
+ text: (0, error_js_1.formatErrorForResponse)(error),
338
+ },
339
+ ],
340
+ isError: true,
341
+ };
342
+ }
343
+ });
344
+ }
345
+ async takeScreenshot(input) {
346
+ const screenshot = await (0, screenshot_js_1.captureScreenshotResponse)(input.deviceId);
347
+ const result = {
348
+ data: screenshot.data,
349
+ format: screenshot.format,
350
+ width: screenshot.width,
351
+ height: screenshot.height,
352
+ deviceId: screenshot.deviceId,
353
+ timestamp: screenshot.timestamp,
354
+ };
355
+ return types_js_2.TakeScreenshotOutputSchema.parse(result);
356
+ }
357
+ async listDevices(input) {
358
+ const devices = (0, adb_js_1.getConnectedDevices)();
359
+ const result = {
360
+ devices: devices.map(device => ({
361
+ id: device.id,
362
+ status: device.status,
363
+ model: device.model,
364
+ product: device.product,
365
+ transportId: device.transportId,
366
+ usb: device.usb,
367
+ productString: device.productString,
368
+ })),
369
+ };
370
+ return types_js_2.ListDevicesOutputSchema.parse(result);
371
+ }
372
+ async findApk(input) {
373
+ const result = (0, adb_js_1.findApkInProject)(input.projectRoot);
374
+ return types_js_2.FindApkOutputSchema.parse(result);
375
+ }
376
+ async installApk(input) {
377
+ const result = (0, adb_js_1.installApk)(input.apkPath, input.deviceId, {
378
+ projectRoot: input.projectRoot,
379
+ reinstall: input.reinstall,
380
+ grantPermissions: input.grantPermissions,
381
+ allowTestPackages: input.allowTestPackages,
382
+ allowDowngrade: input.allowDowngrade,
383
+ timeoutMs: input.timeoutMs,
384
+ });
385
+ return types_js_2.InstallApkOutputSchema.parse(result);
386
+ }
387
+ async uninstallApp(input) {
388
+ const result = (0, adb_js_1.uninstallApp)(input.packageName, input.deviceId, {
389
+ keepData: input.keepData,
390
+ });
391
+ return types_js_2.UninstallAppOutputSchema.parse(result);
392
+ }
393
+ async startApp(input) {
394
+ const result = (0, adb_js_1.startApp)(input.packageName, input.activity, input.deviceId);
395
+ return types_js_2.StartAppOutputSchema.parse(result);
396
+ }
397
+ async stopApp(input) {
398
+ const result = (0, adb_js_1.stopApp)(input.packageName, input.deviceId);
399
+ return types_js_2.StopAppOutputSchema.parse(result);
400
+ }
401
+ async clearAppData(input) {
402
+ const result = (0, adb_js_1.clearAppData)(input.packageName, input.deviceId);
403
+ return types_js_2.ClearAppDataOutputSchema.parse(result);
404
+ }
405
+ async tapScreen(input) {
406
+ const result = (0, adb_js_1.tapScreen)(input.x, input.y, input.deviceId);
407
+ return types_js_2.TapOutputSchema.parse(result);
408
+ }
409
+ async swipeScreen(input) {
410
+ const result = (0, adb_js_1.swipeScreen)(input.startX, input.startY, input.endX, input.endY, input.durationMs, input.deviceId);
411
+ return types_js_2.SwipeOutputSchema.parse(result);
412
+ }
413
+ async inputText(input) {
414
+ const result = (0, adb_js_1.inputText)(input.text, input.deviceId);
415
+ return types_js_2.InputTextOutputSchema.parse(result);
416
+ }
417
+ async sendKeyevent(input) {
418
+ const result = (0, adb_js_1.sendKeyevent)(input.keyCode, input.deviceId);
419
+ return types_js_2.KeyeventOutputSchema.parse(result);
420
+ }
421
+ async reversePort(input) {
422
+ const result = (0, adb_js_1.reversePort)(input.devicePort, input.hostPort, input.deviceId);
423
+ return types_js_2.ReversePortOutputSchema.parse(result);
424
+ }
425
+ async forwardPort(input) {
426
+ const result = (0, adb_js_1.forwardPort)(input.devicePort, input.hostPort, input.deviceId);
427
+ return types_js_2.ForwardPortOutputSchema.parse(result);
428
+ }
429
+ async getLogcat(input) {
430
+ const result = (0, adb_js_1.getLogcat)({
431
+ deviceId: input.deviceId,
432
+ lines: input.lines,
433
+ since: input.since,
434
+ tag: input.tag,
435
+ priority: input.priority,
436
+ pid: input.pid,
437
+ packageName: input.packageName,
438
+ format: input.format,
439
+ });
440
+ return types_js_2.GetLogcatOutputSchema.parse(result);
441
+ }
442
+ async listActivities(input) {
443
+ const result = (0, adb_js_1.listPackageActivities)(input.packageName, input.deviceId);
444
+ return types_js_2.ListActivitiesOutputSchema.parse(result);
445
+ }
446
+ async hotReload(input) {
447
+ const result = (0, adb_js_1.hotReloadSetup)({
448
+ deviceId: input.deviceId,
449
+ packageName: input.packageName,
450
+ activity: input.activity,
451
+ apkPath: input.apkPath,
452
+ projectRoot: input.projectRoot,
453
+ reversePorts: input.reversePorts,
454
+ install: input.install,
455
+ start: input.start,
456
+ stopBeforeStart: input.stopBeforeStart,
457
+ reinstall: input.reinstall,
458
+ grantPermissions: input.grantPermissions,
459
+ allowTestPackages: input.allowTestPackages,
460
+ allowDowngrade: input.allowDowngrade,
461
+ timeoutMs: input.timeoutMs,
462
+ });
463
+ return types_js_2.HotReloadSetupOutputSchema.parse(result);
464
+ }
465
+ async run() {
466
+ const transport = new stdio_js_1.StdioServerTransport();
467
+ await this.server.connect(transport);
468
+ console.error('The Android MCP server started');
469
+ }
470
+ }
471
+ exports.AndroidMcpServer = AndroidMcpServer;
472
+ // Main entry point
473
+ async function main() {
474
+ const server = new AndroidMcpServer();
475
+ await server.run();
476
+ }
477
+ // Run the server if this file is executed directly
478
+ if (require.main === module) {
479
+ main().catch(error => {
480
+ console.error('Server error:', error);
481
+ process.exit(1);
482
+ });
483
+ }
484
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}