type is stable and meant for code. message is for people and can change.
The tools answer in the shape of the API they copy. Slack answers
{"ok": false, "error": "..."}, for example invalid_auth for a wrong run token. Gmail and Calendar answer Google’s {"error": {"code", "message", "status"}}.