`resources/read` is a one-shot pull of a resource's current contents; `resources/subscribe` registers for server-push notifications whenever that resource later changes.
Think of a recipe pinned to a friend's fridge. Reading it is walking over once and copying down today's version: a single trip, and you're done. Subscribing is leaving a sticky note that says 'text me whenever you change this'. Now you don't keep walking back to check; your friend pings you only when something actually changes, and then you go grab the fresh copy. Both deal with the same recipe on the same fridge. One is a single look right now; the other is a standing arrangement to be told about future edits. In MCP terms, the fridge is a server exposing a resource by URI, and your trips are the host fetching that resource for the model.
Detailed answer & concept explanation~7 min readEverything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example.
Everything important, quickly.
4 min: resources are read-only URIs, read is a one-shot pull, subscribe registers for push, the updated notification then read flow, capability negotiation, and when polling wins.
| Aspect | resources/read | resources/subscribe |
|---|---|---|
| Interaction model | One-shot request-response | Standing registration plus push |
| Who initiates updates | Host pulls each time | Server pushes on change |
| Returns contents | Yes, current state directly | No, sends an updated notification only |
| Freshness mechanism | Poll again | Wait for notification, then read |
| Capability needed | Core resources support | Server must advertise subscribe |
Real products, models, and research that use this idea.
- A filesystem MCP server exposes a log file as a resource; the host subscribes and re-reads only when new lines land, instead of polling on a timer.
- Claude Desktop and Claude Code connect to MCP servers over stdio, where a persistent connection makes resource subscriptions practical.
- A Postgres MCP server can expose a query result as a resource and emit an updated notification when underlying rows change.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow does the host learn the new contents after a resources updated notification arrives?
QWhy might resource subscriptions fail on a stateless HTTP MCP deployment behind a load balancer?
Don't say thisRed flags and common mistakes that signal junior thinking. Click to expand.
Red flags and common mistakes that signal junior thinking. Click to expand.
Guessing the split is binary versus text, or read versus write. Both methods target the same read-only resource; the real axis is one-shot pull versus standing push.
The night-before-the-interview bullets. Scan these on the way to the call.
Primary sources. Skim if you want the original framing.
Same topic, related formats. Practice these next.