I write these as part of my job, I know how they work. I'm not going to spend more time explaining to you (and demonstrating!) what is in the spec. Read the spec and let the authors know that they don't understand what they wrote. I've run out of energy in this conversation.
llm tool call -> mcp client validates the schema -> mcp client calls the tool -> mcp server validates the schema -> mcp server responds with the result -> mcp client passes the tool result into llm
They often do fail, at the client level you can just feed the schema validation error message back into the LLM and it corrects itself most of the time.
If not the LLM throws itself into a loop until its caller times it out and it sends an error message back to the user.
At the server level it's just a good old JSON API at this point, and the server would send the usual error message it would send out to anyone.