From 7c7e63d89af5a95ae7714a7c14b4bc1233f233bc Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Tue, 14 Apr 2026 06:38:00 +0200 Subject: [PATCH] Add full JSON dump to get_container_status diagnostic logging Replaces key-only log with complete json.dumps output (up to 2000 chars) so the actual DSM response structure is visible in Claude Desktop logs. Co-Authored-By: Claude Sonnet 4.6 --- src/mcp_synology_container/modules/containers.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/mcp_synology_container/modules/containers.py b/src/mcp_synology_container/modules/containers.py index e6518bf..6e7b8e6 100644 --- a/src/mcp_synology_container/modules/containers.py +++ b/src/mcp_synology_container/modules/containers.py @@ -2,6 +2,7 @@ from __future__ import annotations +import json import logging import re import sys @@ -128,7 +129,8 @@ def register_containers(mcp: FastMCP, config: AppConfig, client: DsmClient) -> N return f"Error getting container '{container_name}': {e}" sys.stderr.write( - f"[get_container_status] name={clean_name!r} data_keys={list(data.keys())}\n" + f"[get_container_status] name={clean_name!r} " + f"raw response: {json.dumps(data, indent=2, default=str)[:2000]}\n" ) sys.stderr.flush() @@ -338,12 +340,7 @@ def _format_container_detail(name: str, data: dict[str, Any]) -> str: status/image fields as returned by the list endpoint). """ # Unwrap "container" wrapper if present (common DSM API pattern) - if "container" in data and isinstance(data["container"], dict): - sys.stderr.write("[get_container_status] unwrapping 'container' key\n") - sys.stderr.flush() - raw = data["container"] - else: - raw = data + raw = data["container"] if "container" in data and isinstance(data["container"], dict) else data # Docker Engine inspect format: State / Config / HostConfig state = raw.get("State", {}) or {} @@ -355,11 +352,6 @@ def _format_container_detail(name: str, data: dict[str, Any]) -> str: running = state.get("Running") if "Running" in state else (status_str == "running") image_str = config.get("Image") or raw.get("image") or "?" - sys.stderr.write( - f"[get_container_status] status={status_str!r} running={running!r} image={image_str!r}\n" - ) - sys.stderr.flush() - lines = [ f"Container: {name}", f" Status: {status_str}",