fix: v0.5.1 — pull_image API (Image/pull_start, not Registry/pull_start)

The 0.5.0 prompt mis-attributed the API: pull_start lives on
SYNO.Docker.Image, not SYNO.Docker.Registry (live DSM capture).
search and tags ARE correctly on Registry; only pull_start belongs
to Image. Registry/pull_start returns "Method does not exist".

Parameters are unchanged (repository + tag both JSON-encoded), and
the Image/list polling for completion detection is untouched.

Tests updated to assert SYNO.Docker.Image/pull_start. CLAUDE.md
DSM-quirks section consolidates the Image vs. Registry split so
this trap is documented for future surface additions. References
#3 (already closed).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 13:32:13 +02:00
parent f27a5456f6
commit 18fe063691
6 changed files with 42 additions and 16 deletions
@@ -169,9 +169,13 @@ def register_registry(mcp: FastMCP, config: AppConfig, client: DsmClient) -> Non
if await _image_present(client, repository, tag):
return f"{target} is already present locally — nothing to pull."
# `pull_start` lives on SYNO.Docker.Image, NOT SYNO.Docker.Registry
# (live DSM capture, confirmed). The Registry API only exposes the
# synchronous read-only methods (search, tags, get/set/create/delete,
# using). Calling Registry/pull_start returns "Method does not exist".
try:
await client.request(
"SYNO.Docker.Registry",
"SYNO.Docker.Image",
"pull_start",
version=1,
params={