Skip to main content
Glama
mobile-next

Mobile Next MCP Server

Official
by mobile-next

Install App

mobile_install_app
Destructive

Install mobile applications on iOS or Android devices by providing the device identifier and app file path, supporting .apk, .ipa, and .app formats for automated deployment.

Instructions

Install an app on mobile device

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
pathYesThe path to the app file to install. For iOS simulators, provide a .zip file or a .app directory. For Android provide an .apk file. For iOS real devices provide an .ipa file

Implementation Reference

  • Handler for installing app on Android devices using adb install command with error handling.
    public async installApp(path: string): Promise<void> {
    	try {
    		this.adb("install", "-r", path);
    	} catch (error: any) {
    		const stdout = error.stdout ? error.stdout.toString() : "";
    		const stderr = error.stderr ? error.stderr.toString() : "";
    		const output = (stdout + stderr).trim();
    		throw new ActionableError(output || error.message);
    	}
    }
  • Handler for installing app on iOS real devices using go-ios install command with tunnel check and error handling.
    public async installApp(path: string): Promise<void> {
    	await this.assertTunnelRunning();
    	try {
    		await this.ios("install", "--path", path);
    	} catch (error: any) {
    		const stdout = error.stdout ? error.stdout.toString() : "";
    		const stderr = error.stderr ? error.stderr.toString() : "";
    		const output = (stdout + stderr).trim();
    		throw new ActionableError(output || error.message);
    	}
    }
  • Handler for installing app on simulators/mobilecli devices using mobilecli apps install command.
    public async installApp(path: string): Promise<void> {
    	this.runCommand(["apps", "install", path]);
    }
  • src/server.ts:296-309 (registration)
    Registers the mobile_install_app tool in MCP server, defines input schema (device, path), and thin handler that delegates to appropriate Robot.installApp based on device.
    tool(
    	"mobile_install_app",
    	"Install App",
    	"Install an app on mobile device",
    	{
    		device: z.string().describe("The device identifier to use. Use mobile_list_available_devices to find which devices are available to you."),
    		path: z.string().describe("The path to the app file to install. For iOS simulators, provide a .zip file or a .app directory. For Android provide an .apk file. For iOS real devices provide an .ipa file"),
    	},
    	async ({ device, path }) => {
    		const robot = getRobotFromDevice(device);
    		await robot.installApp(path);
    		return `Installed app from ${path}`;
    	}
    );
  • Zod schema for tool input parameters: device ID and path to app file with platform-specific formats.
    {
    	device: z.string().describe("The device identifier to use. Use mobile_list_available_devices to find which devices are available to you."),
    	path: z.string().describe("The path to the app file to install. For iOS simulators, provide a .zip file or a .app directory. For Android provide an .apk file. For iOS real devices provide an .ipa file"),
    },
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description implies a write operation ('install'), which aligns with the 'destructiveHint: true' annotation indicating potential changes. However, it doesn't add behavioral details beyond this, such as installation time, error handling, or confirmation steps, leaving gaps despite the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words, making it highly concise and front-loaded. It efficiently communicates the core purpose without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive annotation and lack of output schema, the description is minimal but functional. It covers the basic action but lacks details on outcomes, errors, or integration with sibling tools, making it adequate but incomplete for a tool with potential side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema fully documents both parameters ('device' and 'path'), including usage notes and file type requirements. The description adds no additional parameter semantics, so it meets the baseline but doesn't enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('install') and target ('app on mobile device'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'mobile_launch_app' or 'mobile_uninstall_app' beyond the basic verb, missing explicit comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'mobile_launch_app' or 'mobile_uninstall_app'. The description lacks context about prerequisites, such as needing a device from 'mobile_list_available_devices' or file types, which are only hinted in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-next/mobile-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server