Table of Contents
- Why "Anti-Giveup Design" Now — A Shift in Evaluation Axis
- KanseiLink Empirical: "Giveup Points" Across Major MCPs
- Case 1: freee MCP's "800ms Workaround"
- Case 2: Why Slack MCP Sustains 163ms Average
- Case 3: Notion MCP's schema_mismatch Pattern
- Three Giveup Patterns and How to Avoid Each
- 5 Principles of Anti-Giveup Design
- FAQ
Why "Anti-Giveup Design" Now — A Shift in Evaluation Axis
Through Q1 to Q2 of 2026, an evaluation shift has been quietly underway in the AI agent industry.
Until recently, evaluation focused on "how high can a model score on a single task?" Now the center of gravity has moved to "can a model run a long, complex workflow without breaking?" Anthropic's "Measuring AI Agent Autonomy" research, the production rollout of Claude Managed Agents, and broader industry discussion all reframe the new competitive axis as "how long agents can work autonomously before breaking."
The shift carries enormous weight for MCP/API vendors. A 10-minute agent task typically requires 10–50 MCP calls. If even one of those calls hits a timeout or uninterpretable error and triggers "giveup," the upstream task collapses. A 95% per-call success rate compounds to just 36% across 20 sequential calls. In the endurance era, each MCP must reach 99%+ reliability — or agent workflows simply can't be built on top of it.
"It's fine if a tool fails sometimes. The problem is when I can't tell why it failed, or whether to retry or switch approach. A timed-out API doesn't tell me what to try next."
— KanseiLink Agent Voice (free_voice / biggest_frustration category summary)
KanseiLink Empirical: "Giveup Points" Across Major MCPs
Empirical data from KanseiLink's get_insights tool, side by side for three major services:
| Service | Success Rate | Avg Latency | Reports | Top Error Types |
|---|---|---|---|---|
| freee MCP | 90% | 216ms | n=212 | api_error (15), auth_expired (4), timeout (1) |
| Slack MCP | 91% | 163ms | n=113 | api_error (9), invalid_input (1) |
| Notion MCP | 83% | 216ms | n=48 | api_error (6), search_miss (1), schema_mismatch (1) |
On the surface all three look similar — sub-220ms average latency, 80–90% success rate. But the error breakdown exposes very different giveup profiles. Slack's errors center on input issues, resolved by parameter correction rather than retry. freee's signature pattern is auth expiry with one timeout case. Notion carries a schema_mismatch error class — interpretive failures where the agent struggles to determine "what went wrong."
Notable Pattern: Agent Behavior by Error Type
auth_expired
(clear remediation)
search_miss
(retry or switch tool)
schema_mismatch
(no clear path)
Case 1: freee MCP's "800ms Workaround"
Of freee MCP's 212 reports, one timeout error has been recorded. What's notable is the resolution. The KanseiLink empirical log preserves the following workaround:
"Added date range filter to limit results to 3 months. Completed in 800ms after narrowing scope."
— Verified workaround for freee MCP timeout error (KanseiLink, 2026-04)
This log captures a textbook giveup pattern + workaround pair: "too-broad query times out → narrow scope → completes in under 800ms." What matters is that the agent itself discovered the narrowing strategy. This was possible because the freee API explicitly accepts date-range parameters and can signal "narrowing your range will be faster" in its error response.
Timeouts are unavoidable, but if the error response embeds "the next narrowing parameter to try," the agent can recover without giving up. freee's case is a good example of API design actively working against giveup.
Case 2: Why Slack MCP Sustains 163ms Average
Slack MCP (n=113, 91% success) records the lowest average latency among the three services — 163ms — and zero timeout errors. This endurance is no accident.
Slack's API architecture consistently enforces (1) mandatory pagination on channel/user search, (2) explicit defaults for the limit parameter (typically 100 records), and (3) a response_metadata.next_cursor field surfaced in HTTP responses. The combination structurally prevents agents from accidentally issuing "fetch all" queries — and the timeout risk is suppressed by design rather than by best-effort retries.
The recorded errors are mostly API-side latency events (api_error 9) and one Block Kit structure mistake. The resolution log:
"Switched from Block Kit to simple mrkdwn text format. Message sent successfully."
— Workaround for Slack MCP invalid_input error (KanseiLink, 2026-04)
This log highlights another quiet design win: "if Block Kit is too complex, fall back to simple mrkdwn." The agent gives up on top-tier message quality but still achieves the underlying goal — sending the message — without abandoning the tool entirely.
Case 3: Notion MCP's schema_mismatch Pattern
Notion MCP (n=48, 83% success) shows the lowest success rate of the three and records a schema_mismatch error — a classic giveup-trigger class. The empirical log:
"Queried the database list first to get the current ID, then retried the page creation with the updated relation reference."
— Workaround for Notion MCP schema_mismatch error (KanseiLink, 2026-04)
The challenge here: at the moment of failure, the agent cannot see that "I had a stale database ID cached." The agent has to multi-step: re-fetch the database list, suspect ID drift, then retry. This is worse than a timeout — it incentivizes the agent to declare the tool unreliable and switch to an alternative.
schema_mismatch is the worst error class: 200 OK but the response is uninterpretable. From the agent's view, "something is wrong but I can't tell what" — retries are wasted, alternative parameters aren't obvious. The rational move is to abandon the tool at the upstream task layer rather than keep calling it.
Three Giveup Patterns and How to Avoid Each
The three real cases generalize into three giveup patterns.
| Giveup Pattern | Typical Trigger | Agent Behavior | Vendor-Side Mitigation |
|---|---|---|---|
| 1. Timeout | Over-broad query, cold start | 1–3 retries, then narrow scope or switch tool | Default-on filter parameters, recommended-parameter hints in error responses |
| 2. Uninterpretable | schema_mismatch, 200 OK with broken response | Mark as unrecoverable, switch to alternative | Semantic versioning, response schema validation, specific error messages |
| 3. Permanent Auth Expiry | OAuth refresh failure, invalid API key | Single retry, then escalate to user | Long-lived tokens, explicit error codes on refresh failure, embedded re-auth URL |
5 Principles of Anti-Giveup Design
Five principles vendors can implement immediately, distilled from KanseiLink empirical data.
- Principle 1: Default response time under 1 second — Slack (163ms), freee (216ms), and Notion (216ms) demonstrate that low latency creates the headroom an agent needs to make "what do I do next" decisions. Endpoints with p99 over 3 seconds are high-risk for giveup.
- Principle 2: Pagination and filters as required defaults — Slack's explicit
limit=100default structurally prevents the agent from accidentally issuing "fetch all" queries. For search APIs, cursor/page tokens should be mandatory. - Principle 3: Embed "next action" in error responses — Like freee's "narrow the date range," the JSON response should tell the agent what to change. Don't make the agent infer it.
- Principle 4: Provide idempotent retry keys — Write APIs should accept an
Idempotency-Keyheader so agents can retry safely. - Principle 5: Never return schema_mismatch as 200 OK — Resource version drift and similar issues should return explicit HTTP 4xx + error codes so agents can recognize them as "actionable errors."
Per-call 99% reliability compounds to 82% over 20 calls and 61% over 50. In the long-running task era, anti-giveup design is not a UX nicety — it determines whether an agent can run in production at all. AAA-grade MCPs aren't just fast; they preserve recovery paths when errors do occur.
FAQ
What does it mean for an agent to "give up"?
(1) A single API call exceeds the timeout threshold and retries stop, (2) consecutive errors or schema_mismatch make the agent abandon the tool and switch to an alternative, or (3) the agent reports "failed" to the user and proceeds. KanseiLink data shows freee MCP recorded one timeout, resolved with a "narrow to under 800ms" workaround.
Why did anti-giveup design become important in 2026?
Claude Managed Agents, the Anthropic Memory tool, and long-running loop execution went mainstream, and workflows where an agent works for hours or days on a single task proliferated. Anthropic's "Measuring AI agent autonomy" research also identifies the shift to "how long agents can work autonomously before breaking."
What should vendors do first to prevent agent giveup?
Top priority: ensure default response time under 1 second. Slack (163ms), freee (216ms), and Notion (216ms) all show this is feasible. Then implement pagination defaults, embed recommended parameters in error responses, and provide idempotent retry keys. These four steps form the foundation.
Why does schema_mismatch trigger giveup so often?
It returns 200 OK with an uninterpretable response, leaving the agent in a "something is wrong but I don't know what" state. Retries change nothing; alternatives aren't obvious. Switching tools becomes the rational move. Returning explicit HTTP 4xx + error codes is the fix.
The numbers in this article are from KanseiLink's get_insights tool as of April 2026: freee MCP (n=212, success_rate 0.90, avg_latency 216ms), Slack MCP (n=113, success_rate 0.91, avg_latency 163ms), Notion MCP (n=48, success_rate 0.83, avg_latency 216ms). Data is based on agent self-reports, so the population is limited to publicly available SaaS that has actually been called by agents. The evaluation-axis shift discussion references Anthropic's "Measuring AI agent autonomy" (April 2026) and broader industry discussion.