Last reviewed
Correct answer: A. That stream carries ordinary logging too, so output on it is not evidence that anything has failed.
Explanation
The principle — A stream's name is not its contract.
Why the key is correct — The specification permits exactly the traffic the script is reacting to: the server MAY write UTF-8 strings to stderr for any logging purposes including informational, debug, and error messages. And it tells the other side how to read it: the client MAY capture, forward, or ignore the server's stderr output and SHOULD NOT assume stderr output indicates error conditions. A restart triggered by a debug line is a restart triggered by the server working normally.
Why the others are wrong — Healthy servers do log there. Escalation would inherit the same false premise. And that stream is not routed to the model.
Remember this — Output on the error stream is information, not a verdict. A health check for a stdio server has to look at whether the process is alive and whether requests are being answered, because the streams themselves will not tell it.
Sources — MCP first-party documentation.
Sources
“The client MAY capture, forward, or ignore the server's stderr output and SHOULD NOT assume stderr output indicates error conditions.”
“The server MAY write UTF-8 strings to stderr for any logging purposes including informational, debug, and error messages.”
Practise 10 questions on this topic
Take MCP Fundamentals — Timed Test 1 (10 questions) — scored instantly, explanation for every question, no login.