Decide which side is failing
Run mcp-scrcpy list-devices. Device lines mean enumeration works, so check the failing tool. No devices found means ADB sees nothing. failed to list ADB devices means the ADB query failed. Command not found means the executable is not on the search path.
The ADB query fails
The client starts the ADB server by running adb, so platform-tools must be installed:
If it still fails, check for another service on port 5037: the ADB server must be on its default endpoint.
No device, or a device that is not usable
Compare with adb devices -l; both read the same server. A state such as offline or unauthorized comes from ADB: accept the authorization prompt on the handset. Pair and connect wireless devices with ADB's own tools first.
Transport and client problems
Use stdio or unix; there is no HTTP transport. Pass an explicit socket to test commands with --server unix:///tmp/mcp-scrcpy.sock, and start a server at that absolute path. Do not delete a socket you did not create. For stdio, launch the absolute executable with serve and keep wrapper output off stdout.
A tool call times out
Each call is bounded at 60 seconds. Compare list_devices with the direct command to separate MCP from ADB. A timeout does not cancel a started operation, so check the device before retrying.
Screenshots or condensed recordings fail with an OpenH264 error
Screenshots and condensed recording need Cisco OpenH264 2.6. Without a system copy, the first screenshot downloads it from Cisco into ~/.cache/screencast-lib/, which needs internet access and bunzip2. The download uses plain HTTP, and a library is accepted only if it is one of Cisco's published builds. Where a controlled download is required, forbid it with SCREENCAST_LIB_OPENH264_DOWNLOAD=0 and point SCREENCAST_LIB_OPENH264_PATH at Cisco's library. Plain MP4 recording works without it.
A screenshot fails after a decoder library was found
The server refused to load the library: only Cisco's published OpenH264 library is accepted, and every later screenshot fails the same way while the refused file stays in place. A refused system copy also blocks the automatic download because the file is present. Set SCREENCAST_LIB_OPENH264_PATH to Cisco's library, remove the refused file (for a downloaded copy, delete the decoder cache directory) so the download can run, or remove the system package.
Capture, control and recording
Adopt the device and send input through the same persistent connection; call scrcpy_adopt first means the session holds no claim. Touch coordinates are device pixels, while screenshots are scaled to at most 1920 pixels on the longer side. Read published resources through the same session before disconnecting. Each device has one recording slot: call scrcpy_record_stop to free it, including after a disconnect. Recordings fall back to video only when audio capture is unavailable.
What you getThe device listed and usable, with captures and recordings you can read.