Skip to content

Unix Socket API

โœ… Implemented ๐Ÿงช Tested

The AutoMobile daemon exposes a Unix socket for IDE plugins and CLI clients to communicate with the daemon without going through MCP. See Daemon Overview for architecture context.

Socket Path

/tmp/auto-mobile-daemon-<uid>.sock

The path can be overridden via the AUTOMOBILE_DAEMON_SOCKET_PATH or AUTO_MOBILE_DAEMON_SOCKET_PATH environment variables.

Protocol

All messages are newline-delimited JSON sent over the Unix socket. Each request receives exactly one response.

Request

{
  "id": "unique-request-id",
  "type": "mcp_request",
  "method": "ide/ping",
  "params": {},
  "timeoutMs": 30000
}
Field Type Required Description
id string Yes Caller-assigned ID echoed back in the response
type "mcp_request" \| "daemon_request" Yes Request category
method string Yes Endpoint name (e.g. ide/ping, daemon/availableDevices)
params object Yes Method-specific parameters; pass {} when none are needed
timeoutMs number No Per-request timeout in milliseconds (default: 30 000)

Response

{
  "id": "unique-request-id",
  "type": "mcp_response",
  "success": true,
  "result": { }
}
Field Type Description
id string Echoed from the request
type "mcp_response" Always this value
success boolean true on success, false on error
result object Present when success is true
error string Present when success is false

IDE Endpoints

These are handled directly by the daemon process without forwarding to the MCP server.

ide/ping

Liveness check. Returns immediately.

Params: none

Result

{ "ok": true, "timestamp": 1718000000000 }

ide/status

Returns daemon version and bundled service artifact information.

Params: none

Result

{
  "version": "1.2.3",
  "releaseVersion": "1.2.3",
  "android": {
    "accessibilityService": {
      "expectedSha256": "abc123...",
      "url": "https://..."
    }
  },
  "ios": {
    "xcTestService": {
      "expectedSha256": "def456...",
      "expectedAppHash": "ghi789...",
      "url": "https://..."
    }
  }
}

ide/listFeatureFlags

Lists all available feature flags and their current state. See Feature Flags for the full list of flags.

Params: none

Result

{
  "flags": [
    { "key": "debugMode", "enabled": false, "config": null }
  ]
}

ide/setFeatureFlag

Enables or disables a feature flag, with optional configuration.

Params

Field Type Required Description
key string Yes Feature flag key
enabled boolean Yes Enable or disable the flag
config object \| null No Optional flag-specific configuration

Result: the updated feature flag object.


ide/updateService

Updates the Android accessibility service APK or restarts the iOS CtrlProxy iOS on the target device.

Params

Field Type Required Description
deviceId string Yes ADB device ID or simulator UDID
platform "android" \| "ios" Yes Target platform

Result

{
  "success": true,
  "message": "Accessibility service upgraded",
  "status": { "status": "upgraded" }
}

For iOS, status is omitted and message is "CtrlProxy iOS restarted".


ide/setKeyValue

Writes a value into an Android app’s SharedPreferences file via the accessibility service. ๐Ÿค– Android Only

Params

Field Type Required Description
deviceId string Yes ADB device ID
appId string Yes Application package name
fileName string Yes SharedPreferences file name (without .xml)
key string Yes Preference key
value string \| null Yes Value to write; null removes the key
type "STRING" \| "INT" \| "LONG" \| "FLOAT" \| "BOOLEAN" \| "STRING_SET" Yes Preference type

Result

{ "success": true }

ide/removeKeyValue

Removes a single key from an Android app’s SharedPreferences file. ๐Ÿค– Android Only

Params

Field Type Required Description
deviceId string Yes ADB device ID
appId string Yes Application package name
fileName string Yes SharedPreferences file name
key string Yes Preference key to remove

Result

{ "success": true }

ide/clearKeyValueFile

Clears all keys from an Android app’s SharedPreferences file. ๐Ÿค– Android Only

Params

Field Type Required Description
deviceId string Yes ADB device ID
appId string Yes Application package name
fileName string Yes SharedPreferences file name

Result

{ "success": true }

MCP Proxy Endpoints

These are forwarded to the daemon’s internal MCP server. The response wraps whatever the MCP server returns.

tools/list

Lists all registered MCP tools. Equivalent to the MCP tools/list protocol message.

Params: none

Result: standard MCP ListToolsResult.


tools/call

Calls a registered MCP tool by name.

Params

Field Type Required Description
name string Yes MCP tool name (e.g. observe, tapOn)
arguments object Yes Tool-specific arguments

Result: standard MCP CallToolResult.


resources/list

Lists all registered MCP resources.

Params: none

Result: standard MCP ListResourcesResult.


resources/read

Reads a single MCP resource by URI.

Params

Field Type Required Description
uri string Yes Resource URI (e.g. automobile:devices/booted)

Result: standard MCP ReadResourceResult.


resources/list-templates

Lists available MCP resource templates.

Params: none

Result: standard MCP ListResourceTemplatesResult.


ide/getNavigationGraph

Convenience wrapper that calls the getNavigationGraph MCP tool and returns its result directly. Accepts the same arguments as the MCP tool.

Params: same as the getNavigationGraph MCP tool (all optional).

Result: navigation graph tool result.


Daemon Management Endpoints

These manage the device pool and session lifecycle. See Daemon Overview for pool architecture details.

daemon/availableDevices

Returns current device pool statistics.

Params: none

Result

{
  "availableDevices": 3,
  "totalDevices": 4,
  "assignedDevices": 1,
  "errorDevices": 0,
  "stats": {
    "total": 4,
    "idle": 3,
    "assigned": 1,
    "error": 0
  }
}

daemon/refreshDevices

Re-discovers connected devices and updates the pool.

Params: none

Result

{
  "addedDevices": 1,
  "totalDevices": 4,
  "availableDevices": 3,
  "stats": { "total": 4, "idle": 3, "assigned": 1, "error": 0 }
}

daemon/sessionInfo

Returns metadata for an active session.

Params

Field Type Required Description
sessionId string Yes Session ID to query

Result

{
  "sessionId": "abc-123",
  "assignedDevice": "emulator-5554",
  "platform": "android",
  "createdAt": 1718000000000,
  "lastUsedAt": 1718000010000,
  "expiresAt": 1718003600000,
  "cacheSize": 4096
}

Returns an error if the session does not exist.


daemon/releaseSession

Releases a session and returns its device to the idle pool. Idempotent โ€” safe to call even if the session was already released.

Params

Field Type Required Description
sessionId string Yes Session to release

Result

{
  "message": "Session abc-123 released",
  "device": "emulator-5554",
  "alreadyReleased": false
}

When the session was already released (or never existed):

{
  "message": "Session abc-123 already released or never existed",
  "alreadyReleased": true
}