v1.108.74 - Harden: tool errors carry isError (MCP protocol conformance)
Phase 2 (Harden) of the maintenance PRD, WI-2.2 (F-P01). Tool failures were returned in-band only: a JSON {"error": ...} body in a plain content list, which the SDK wraps as CallToolResult(isError=False), so a non-Claude MCP client that branches on isError saw a failure as a success. call_tool now returns CallToolResult(isError=True) for every failure path (input validation, disabled-tool, in-band tool error, Unknown tool, missing-argument, internal exceptions), carrying the SAME JSON body in content so the in-band contract (v1.108.30) still holds. Successful calls stay a plain content list (SDK wraps isError=False), so the wire change is purely additive: only failures gain the isError signal. New tests/test_v1_108_74.py (4); error-path tests updated. Full suite 4714 passed / 10 skipped.