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.
Capture, control and recording
Adopt the device and send input through the same persistent connection. Screenshots and condensed recording need an OpenH264 library at SCREENCAST_LIB_OPENH264_PATH. 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.