General protocol syntax
- Requests
+ Protocol overview
- If arguments contain spaces, they should be surrounded by double quotation
- marks.
+ The MPD command protocol exchanges line-based text records
+ between client and server over TCP. Once the client is
+ connected to the server, they conduct a conversation until the
+ client closes the connection. The conversation flow is always
+ initiated by the client.
+
+ The client transmits a command sequence, terminated by the
+ newline character \n. The server will
+ respond with one or more lines, the last of which will be a
+ completion code.
+
+
+
+ When the client connects to the server, the server will answer
+ with the following line:
+
+ OK MPD version
+
+ where version is a version identifier such as
+ 0.12.2. This version identifier is the version of the protocol
+ spoken, not the real version of the daemon. (There is no way to
+ retrieve this real version identifier from the connection.)
+
+
+
+
+ Requests
+
COMMANDARG
+
+ If arguments contain spaces, they should be surrounded by double
+ quotation marks.
+
+
+
+ Argument strings are separated from the command and any other
+ arguments by linear white-space (' ' or '\t').
+
+
All data between the client and the server is encoded in
UTF-8. (Note: In UTF-8 all standard ansi characters, 0-127 are
@@ -38,13 +74,97 @@
Responses
- A command returns OK on completion
- or ACK some error on failure.
- These denote the end of command execution.
+ A command returns OK on completion or
+ ACK some error on failure. These
+ denote the end of command execution.
+
+
+ Failure responses
+
+
+ The nature of the error can be gleaned from the information
+ that follows the ACK.
+ ACK lines are of the form:
+
+ ACK [error@command_listNum] {current_command} message_text\n
+
+ These responses are generated by a call to
+ commandError. They contain four separate
+ terms. Let's look at each of them:
+
+
+
+
+ error: numeric value of one
+ of the ACK_ERROR constants defined
+ in ack.h.
+
+
+
+
+ command_listNum:
+ offset of the command that caused the error in a Command List.
+ An error will always cause a command list to terminate
+ at the command that causes the error.
+
+
+
+
+ current_command:
+ name of the command, in a Command List,
+ that was executing when the error occurred.
+
+
+
+
+ message_text:
+ some (hopefully) informative text that describes the
+ nature of the error.
+
+
+
+
+
+
+ foo
+
+ An example might help. Consider the following sequence
+ sent from the client to the server.
+
+
+ command_list_begin
+ volume 86
+ play 10240
+ status
+ command_list_end
+
+
+
+
+ The server responds with:
+
+
+ ACK [50@1] {play} song doesn't exist: "10240"
+
+
+
+
+ This tells us that the play command, which was the
+ second in the list (the first or only command is
+ numbered 0), failed with error 50. The number 50
+ translates to ACK_ERROR_NO_EXIST--the
+ song doesn't exist. This is reiterated by the message text
+ which also tells us which song doesn't exist.
+
+
+
+
-
+ Command lists