summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@jolla.com>2026-06-02 00:18:28 +0200
committerAndrew Branson <andrew.branson@jolla.com>2026-06-02 00:18:28 +0200
commit21dcc7e6413cf1e93a37cce2098a86c2a3ab5e5a (patch)
tree6ee366f4e6f1c79135d0d6b34c73731c750571d2
parent5d24d33536d1041b4d9f107a5f5813bd43177530 (diff)
Log MCP wrapper lifecycle
Capture wrapper and Python PIDs, stderr, exit status, and common termination signals in the persistent Sailfish MCP server log.
-rwxr-xr-xbin/sailfish-devel-mcp78
1 files changed, 77 insertions, 1 deletions
diff --git a/bin/sailfish-devel-mcp b/bin/sailfish-devel-mcp
index 5105b01..94a946e 100755
--- a/bin/sailfish-devel-mcp
+++ b/bin/sailfish-devel-mcp
@@ -4,5 +4,81 @@ set -eu
root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
PYTHONPATH="$root/src${PYTHONPATH:+:$PYTHONPATH}"
export PYTHONPATH
-exec python3 -m sailfish_devel_mcp "$@"
+PYTHONUNBUFFERED="${PYTHONUNBUFFERED:-1}"
+export PYTHONUNBUFFERED
+
+if [ -n "${SAILFISH_DEVEL_MCP_LOG_DIR:-}" ]; then
+ log_dir=$SAILFISH_DEVEL_MCP_LOG_DIR
+elif [ -n "${XDG_STATE_HOME:-}" ]; then
+ log_dir=$XDG_STATE_HOME/sailfish-devel-mcp
+elif [ -n "${HOME:-}" ]; then
+ log_dir=$HOME/.local/state/sailfish-devel-mcp
+else
+ log_dir=/tmp/sailfish-devel-mcp
+fi
+
+log_file=$log_dir/server.log
+if mkdir -p "$log_dir" 2>/dev/null && touch "$log_file" 2>/dev/null; then
+ {
+ log_line() {
+ printf '[%s] %s\n' "$(date -Is)" "$*" >&2
+ }
+
+ log_exit_once() {
+ status=$1
+ if [ "$exit_logged" -eq 0 ]; then
+ log_line "sailfish-devel-mcp exited status=$status"
+ exit_logged=1
+ fi
+ }
+
+ on_signal() {
+ signal=$1
+ log_line "sailfish-devel-mcp wrapper received signal=$signal"
+ if [ -n "$child_pid" ]; then
+ kill "-$signal" "$child_pid" 2>/dev/null || true
+ wait "$child_pid"
+ status=$?
+ else
+ status=128
+ fi
+ log_exit_once "$status"
+ exit "$status"
+ }
+ child_pid=
+ exit_logged=0
+
+ trap 'on_signal HUP' HUP
+ trap 'on_signal INT' INT
+ trap 'on_signal QUIT' QUIT
+ trap 'on_signal TERM' TERM
+ trap 'status=$?; log_exit_once "$status"' EXIT
+
+ printf '\n' >&2
+ printf '[%s] starting sailfish-devel-mcp wrapper_pid=%s parent_pid=%s' \
+ "$(date -Is)" "$$" "${PPID:-unknown}" >&2
+ if [ "$#" -gt 0 ]; then
+ printf ' argv=' >&2
+ for arg do
+ printf ' %s' "$arg" >&2
+ done
+ fi
+ printf '\n' >&2
+
+ exec 3<&0
+ set +e
+ python3 -m sailfish_devel_mcp "$@" <&3 &
+ child_pid=$!
+ log_line "sailfish-devel-mcp python_pid=$child_pid"
+ wait "$child_pid"
+ status=$?
+ exec 3<&-
+ child_pid=
+ set -e
+ log_exit_once "$status"
+ exit "$status"
+ } 2>>"$log_file"
+fi
+
+exec python3 -m sailfish_devel_mcp "$@"