From c0d4c347c57ec46526091e1b1920be3af20a4c54 Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Tue, 14 Apr 2026 13:05:37 +0200 Subject: [PATCH] debug: add stderr logging to _poll_task for every status poll attempt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Logs [poll] lines to stderr so Claude Desktop's MCP log shows exactly what DSM returns on each status call: attempt number, elapsed time, finished flag, data keys (on success) or error code + message (on 599). Version 0.2.3 — remove this logging once the 599 root cause is confirmed. Co-Authored-By: Claude Sonnet 4.6 --- pyproject.toml | 2 +- src/mcp_synology_filestation/__init__.py | 2 +- .../tools/filestation.py | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index feeb1a1..7b0d8e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mcp-synology-filestation" -version = "0.2.2" +version = "0.2.3" description = "MCP server for Synology FileStation" requires-python = ">=3.12" dependencies = [ diff --git a/src/mcp_synology_filestation/__init__.py b/src/mcp_synology_filestation/__init__.py index 5ce481f..8aad4b5 100644 --- a/src/mcp_synology_filestation/__init__.py +++ b/src/mcp_synology_filestation/__init__.py @@ -1,3 +1,3 @@ """MCP server for Synology FileStation.""" -__version__ = "0.2.2" +__version__ = "0.2.3" diff --git a/src/mcp_synology_filestation/tools/filestation.py b/src/mcp_synology_filestation/tools/filestation.py index 69c8fa6..1005b28 100644 --- a/src/mcp_synology_filestation/tools/filestation.py +++ b/src/mcp_synology_filestation/tools/filestation.py @@ -81,17 +81,26 @@ def register_filestation( ``(True, status_dict)`` on success, or ``(False, "Error: …")`` on DSM error or timeout. """ + import sys as _sys + from mcp_synology_filestation.client import SynologyError as _SynologyError delay = 0.2 elapsed = initial_delay timeout = 60.0 consecutive_599 = 0 + attempt = 0 + + _sys.stderr.write( + f"[poll] START {api}/status v{version} taskid={taskid} initial_delay={initial_delay}\n" + ) + _sys.stderr.flush() if initial_delay > 0: await asyncio.sleep(initial_delay) while True: + attempt += 1 try: status_data = await client.request( api, @@ -100,7 +109,18 @@ def register_filestation( params={"taskid": taskid}, ) consecutive_599 = 0 + finished = status_data.get("finished") + _sys.stderr.write( + f"[poll] #{attempt} elapsed={elapsed:.2f}s finished={finished}" + f" data_keys={list(status_data.keys())}\n" + ) + _sys.stderr.flush() except _SynologyError as e: + _sys.stderr.write( + f"[poll] #{attempt} elapsed={elapsed:.2f}s" + f" SynologyError code={e.code} msg={e}\n" + ) + _sys.stderr.flush() if e.code == 599: # 599 can be transient (task just started, not yet available). # Retry up to 5 times before giving up.