Skip to content

Commit 57828c8

Browse files
committed
mcp(fix[hierarchy]): Use ResourceError instead of ValueError
why: Resource handlers raised `ValueError` for not-found conditions, while tool modules consistently use `ToolError` from fastmcp. FastMCP provides `ResourceError` specifically for resource operation errors. Using `ValueError` produces inconsistent error presentation to MCP clients since it's not a `FastMCPError` subclass. what: - Import and use `fastmcp.exceptions.ResourceError` for all not-found conditions in resource handlers
1 parent c8ae043 commit 57828c8

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/libtmux/mcp/resources/hierarchy.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import json
66
import typing as t
77

8+
from fastmcp.exceptions import ResourceError
9+
810
from libtmux.mcp._utils import (
911
_get_server,
1012
_serialize_pane,
@@ -50,7 +52,7 @@ def get_session(session_name: str) -> str:
5052
session = server.sessions.get(session_name=session_name, default=None)
5153
if session is None:
5254
msg = f"Session not found: {session_name}"
53-
raise ValueError(msg)
55+
raise ResourceError(msg)
5456

5557
result = _serialize_session(session)
5658
result["windows"] = [_serialize_window(w) for w in session.windows]
@@ -74,7 +76,7 @@ def get_session_windows(session_name: str) -> str:
7476
session = server.sessions.get(session_name=session_name, default=None)
7577
if session is None:
7678
msg = f"Session not found: {session_name}"
77-
raise ValueError(msg)
79+
raise ResourceError(msg)
7880

7981
windows = [_serialize_window(w) for w in session.windows]
8082
return json.dumps(windows, indent=2)
@@ -99,12 +101,12 @@ def get_window(session_name: str, window_index: str) -> str:
99101
session = server.sessions.get(session_name=session_name, default=None)
100102
if session is None:
101103
msg = f"Session not found: {session_name}"
102-
raise ValueError(msg)
104+
raise ResourceError(msg)
103105

104106
window = session.windows.get(window_index=window_index, default=None)
105107
if window is None:
106108
msg = f"Window not found: index {window_index}"
107-
raise ValueError(msg)
109+
raise ResourceError(msg)
108110

109111
result = _serialize_window(window)
110112
result["panes"] = [_serialize_pane(p) for p in window.panes]
@@ -128,7 +130,7 @@ def get_pane(pane_id: str) -> str:
128130
pane = server.panes.get(pane_id=pane_id, default=None)
129131
if pane is None:
130132
msg = f"Pane not found: {pane_id}"
131-
raise ValueError(msg)
133+
raise ResourceError(msg)
132134

133135
return json.dumps(_serialize_pane(pane), indent=2)
134136

@@ -150,7 +152,7 @@ def get_pane_content(pane_id: str) -> str:
150152
pane = server.panes.get(pane_id=pane_id, default=None)
151153
if pane is None:
152154
msg = f"Pane not found: {pane_id}"
153-
raise ValueError(msg)
155+
raise ResourceError(msg)
154156

155157
lines = pane.capture_pane()
156158
return "\n".join(lines)

0 commit comments

Comments
 (0)