diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index b6dd4c2c8c..d695b273ef 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -130,6 +130,7 @@
  * M114 - Report current position.
  * M115 - Report capabilities. (Extended capabilities requires EXTENDED_CAPABILITIES_REPORT)
  * M117 - Display a message on the controller screen. (Requires an LCD)
+ * M118 - Display a message in the host console.
  * M119 - Report endstops status.
  * M120 - Enable endstops detection.
  * M121 - Disable endstops detection.
@@ -7991,6 +7992,14 @@ inline void gcode_M115() {
  */
 inline void gcode_M117() { lcd_setstatus(parser.string_arg); }
 
+/**
+ * M118: Display a message in the host console.
+ */
+inline void gcode_M118() {
+  SERIAL_ECHO_START();
+  SERIAL_ECHOLN(parser.string_arg);
+}
+
 /**
  * M119: Output endstop states to serial output
  */
@@ -10758,6 +10767,9 @@ void process_next_command() {
       case 117: // M117: Set LCD message text, if possible
         gcode_M117();
         break;
+      case 118: // M118: Display a message in the host console
+        gcode_M118();
+        break;
       case 119: // M119: Report endstop states
         gcode_M119();
         break;
diff --git a/Marlin/gcode.cpp b/Marlin/gcode.cpp
index a2f5dcfb10..85b3a194ca 100644
--- a/Marlin/gcode.cpp
+++ b/Marlin/gcode.cpp
@@ -150,7 +150,7 @@ void GCodeParser::parse(char *p) {
   #endif
 
   // Only use string_arg for these M codes
-  if (letter == 'M') switch (codenum) { case 23: case 28: case 30: case 117: case 928: string_arg = p; return; default: break; }
+  if (letter == 'M') switch (codenum) { case 23: case 28: case 30: case 117: case 118: case 928: string_arg = p; return; default: break; }
 
   #if ENABLED(DEBUG_GCODE_PARSER)
     const bool debug = codenum == 800;