firehose-mcp
Provides tools for interacting with Qualcomm Firehose protocol on EDL devices, enabling partition read/write/erase, device configuration, storage info queries, raw XML commands, and reset.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@firehose-mcpread 16 sectors from partition 0 into dump.bin"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
firehose-mcp
A native Python MCP (Model Context Protocol) server for the Qualcomm Firehose protocol.
WHAT THIS IS
After a Qualcomm EDL device has been brought up with a Firehose programmer
(e.g. prog_firehose_ddr.elf) via the sibling sahara-mcp project, the
device speaks the Firehose protocol: an XML command/response stream over
USB bulk endpoints. firehose-mcp implements that client side and exposes it
to LLM agents through MCP tools: configure, read/write/erase partitions,
query storage info, send raw XML, and reset.
Related MCP server: mcp-uart
⚠️ ALPHA — NOT TESTED ON REAL HARDWARE
This code is derived from public protocol documentation and the
linux-msm/qdl (BSD-3-Clause) reference. It has not been validated
against a real Firehose programmer. Do not flash production devices with
it without careful review and testing on disposable hardware. Use of this
tool to alter device storage is entirely at your own risk.
Feature list
firehose_configure— send<configure>withMemoryName,MaxPayloadSizeToTargetInBytes=1048576,ZlpAwareHost=1, etc.firehose_get_storage_info— issue<getstorageinfo>and decode the JSON geometry (LUNs, block sizes, total blocks) returned in the log stream.firehose_program_from_file/firehose_read_partition/firehose_erase_partition— the<program>/<read>/<erase>XML commands with raw binary data streaming.firehose_raw_xml— dump an arbitrary XML string with the packet framing and return the device's<response>XML.firehose_reset— issue the<power value="reset">XML.firehose_list_devices— enumerate visible Qualcomm EDL devices.
Responses are decoded by regex; ACK is surfaced as a success, NAK is
surfaced with its rawdata payload.
Windows driver note (Zadig / WinUSB)
On Windows the Qualcomm EDL device must be bound to a WinUSB-capable driver so that libusb/pyusb can claim it:
Put the device into EDL mode (it enumerates as
Qualcomm HS-USB QDLoader 9008).Open Zadig, select the device, and replace the driver with WinUSB / libusb-win32.
Load the Firehose programmer first (see
sahara-mcp), then connect with this server.
On Linux, ensure modemmanager/ModemManager is not grabbing the device.
pip install
pip install "mcp" "pyusb>=1.2"
# or, from this directory:
pip install -e .pyusb also needs a libusb backend (bundled by libusb packages; see the
driver note above for Windows).
Example usage (as an MCP server)
Run the server:
python firehose_mcp_server.pyThen connect an MCP client and call tools, e.g.:
firehose_configure(memory_name="emmc")
firehose_get_storage_info(lun=0)
firehose_read_partition(partition=0, file_path="dump.bin", num_sectors=16)
firehose_raw_xml(xml="<?xml version=\"1.0\" ?><data><response value=\"ACK\"/></data>")
firehose_reset()Protocol reference
The wire format and XML command layouts are derived from the authoritative BSD-3-Clause reference implementation:
https://github.com/linux-msm/qdl —
src/firehose.c,src/usb.c(Linaro Ltd / Qualcomm).
Key facts taken from that reference:
The host sends commands raw as XML over the USB bulk endpoints; no host-side packet framing is added (src/usb.c
usb_write, src/firehose.cfirehose_write).Responses come back as one or more
<?xml ...?><data>documents (<log value="...">,<response value="ACK"/>,<response value="NAK" rawdata="..."/>,rawmode="true"for binary transfers).Configure XML, storage-info JSON-in-log decoding, and the program/read/ erase/reset XML shapes mirror
src/firehose.c.
The "fastboot-like" magic/command words and the NOP;NOP;NOP; preamble are
produced by the programmer firmware itself and are not in the BSD host
reference; the inferred framing constants in the source are explicitly marked
inferred + untested.
License
GPL-3.0 — see LICENSE. Copyright (c) 2026 libertyrights.
Protocol facts reference linux-msm/qdl (BSD-3-Clause). No GPL code is
imported or linked beyond our own.
This server cannot be deployed
Maintenance
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables LLMs to control and manage Android devices via ADB, including app installation, UI interaction, and device monitoring.3512GPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to communicate with UART/serial devices, offering tools for port management, data read/write, and protocol handling.MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLM agents to interact directly with Qualcomm EDL devices over USB, including device enumeration, Sahara protocol handshake, SoC identity queries, Firehose programmer upload, command-mode execution, and device reset.GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Qualcomm modems via the DIAG/QCDM protocol over serial ports, providing tools for NV read/write, memory peek/poke, and EFS file operations.GPL 3.0