Context
During the Mar 17 outage, claude-sonnet-4-6 stopped being accepted on the Max plan OAuth endpoint. The /health endpoint reported healthy the entire time because it only checks bot polling, MCP server connectivity, and OAuth token expiry — not whether the Claude API actually accepts requests.
Proposal
Add a synthetic API call to the health check — a cheap max_tokens=1 request that verifies the model is reachable:
// In health.ts, add to component checks:
try {
await anthropic.messages.create({
model: MODEL,
max_tokens: 1,
messages: [{ role: "user", content: "ping" }],
});
components.api = { status: "up" };
} catch (err) {
components.api = { status: "down", error: err.message };
}
Cache the result for ~5 minutes to avoid excessive API calls on repeated health checks.
Acceptance Criteria
Context
During the Mar 17 outage,
claude-sonnet-4-6stopped being accepted on the Max plan OAuth endpoint. The/healthendpoint reportedhealthythe entire time because it only checks bot polling, MCP server connectivity, and OAuth token expiry — not whether the Claude API actually accepts requests.Proposal
Add a synthetic API call to the health check — a cheap
max_tokens=1request that verifies the model is reachable:Cache the result for ~5 minutes to avoid excessive API calls on repeated health checks.
Acceptance Criteria
/healthincludes anapicomponent withup/downstatusdegradedwhen API is down