# resources Expose data by URI: a static resource (`config://app`) and an RFC-6570 template (`greeting://{name}`). One `@mcp.resource()` decorator handles both — the SDK infers static-vs-template from whether the URI contains `{...}`. The client lists resources, lists templates, then reads each. ## Run it ```bash # stdio (default — the client spawns the server as a subprocess) uv run python -m stories.resources.client # HTTP — the client self-hosts the server on a free port, runs, then tears it down uv run python -m stories.resources.client --http # same, against the lowlevel-API server variant uv run python -m stories.resources.client --http --server server_lowlevel ``` ## What to look at - `client.py` `async with Client(target, mode=mode) as client:` — the one line every client example exists to teach. `target` is anything `Client()` accepts (an in-process server, a transport, or an HTTP URL) and `mode=` is always explicit; the rest of the story is the body of that `async with`. - `server.py` `app_config` vs `greeting` — a URI with no `{}` registers a static resource (appears in `resources/list`); a URI with `{name}` registers a template (appears only in `resources/templates/list`) and the placeholder must match the function parameter name. - `server_lowlevel.py` `read_resource` — without `MCPServer` you own the URI dispatch yourself, including raising `MCPError(code=INVALID_PARAMS, ...)` for unknown URIs (matches what `MCPServer` sends). - `client.py` `isinstance(entry, TextResourceContents)` — `contents` is a list of `TextResourceContents | BlobResourceContents`; narrow before reading `.text`. ## Not shown here Subscriptions. Per-URI `resources/subscribe` is a 2025-era RPC being replaced by `subscriptions/listen` in 2026-07-28; neither is shown in this story. See `stickynotes/` for `list_changed` notifications. ## Spec [Resources — server features](https://modelcontextprotocol.io/specification/2025-11-25/server/resources) ## See also `stickynotes/` (list-changed notifications), `pagination/` (cursor over a long resource list).