Resources are read-only context, not actions. Each resource has a uniform resource identifier (URI), such as file:///home/user/report.pdf, plus metadata like name, description, and mimeType.
The key differences from tools: resources are meant to have no side effects, they are addressed by identity rather than invoked with arbitrary arguments. They are application-controlled: the host or user decides which ones to load into context, rather than the model calling them mid-generation.
Servers can let clients subscribe to an address and send notifications/resources/updated when it changes. This suits live logs or documents.
Expose data as a resource when it is naturally "a thing you attach": files, schemas, configuration, documentation pages, records with stable identity.
One practical compatibility issue: some hosts historically had stronger tool support than resource support. Server authors therefore sometimes add a companion tool that reads the same data to maximize compatibility.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓