49b9bb6724
Deploy Docs / deploy-docs (push) Failing after 1s
Conformance Tests / client-conformance (push) Failing after 3s
Conformance Tests / server-conformance (push) Failing after 1s
GitHub Actions Security Analysis / zizmor (push) Failing after 1s
CI / checks (push) Failing after 59m20s
CI / all-green (push) Waiting to run
51 lines
2.1 KiB
Markdown
51 lines
2.1 KiB
Markdown
# 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).
|