In depth
An MCP resource is the read-only data primitive of the protocol. Each resource has a URI (which identifies it), a human-readable name, optional description, and a MIME type. Resources are listed via `resources/list` and fetched via `resources/read`.
Think of resources as the 'data' counterpart to tools. Tools DO things (send email, create issue); resources EXPOSE things (file contents, database rows, API responses). Many servers expose both — the filesystem MCP has tools (`write_file`) and resources (the files themselves).
Resources support templates: a URI like `github://repos/{owner}/{repo}/issues/{number}` lets the LLM fetch any issue by parameterizing the URI. This is more efficient than tool calls for large fan-out reads.
Resources can also be subscribed to — the client registers interest in a URI, and the server notifies on change. This enables live dashboards and reactive workflows.