Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions openhcs/mcp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -1986,9 +1986,8 @@ def control_args(
arguments: Mapping[str, JsonValue],
timeout_policy: type[McpControlTimeoutPolicy] = McpViewerTimeoutPolicy,
) -> "McpViewerConnectionToolArgs":
return dataclass_from_mapping(
McpViewerConnectionToolFields,
arguments,
return McpViewerConnectionToolFields.from_tool_arguments(
arguments
).to_control_args(timeout_policy)

@staticmethod
Expand Down Expand Up @@ -2647,6 +2646,26 @@ class McpViewerConnectionToolFields:
transport_mode: TransportMode | None = None
timeout_ms: int | None = None

@classmethod
def from_tool_arguments(
cls,
arguments: Mapping[str, JsonValue],
) -> Self:
"""Reconstruct this record from its own declared tool fields."""
declared_names = tuple(
declared_field.name
for declared_field in dataclass_fields(cls)
if declared_field.init
)
return dataclass_from_mapping(
cls,
{
field_name: arguments[field_name]
for field_name in declared_names
if field_name in arguments
},
)

@classmethod
def signature_parameters(
cls,
Expand Down
1 change: 1 addition & 0 deletions tests/unit/agent/test_mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -14830,6 +14830,7 @@ def test_mcp_viewer_connection_tool_fields_parse_nominal_transport_from_wire():
"host": "127.0.0.1",
"transport_mode": "tcp",
"timeout_ms": 2000,
"route_key": "image-layer",
},
server.McpViewerCommandTimeoutPolicy,
)
Expand Down
Loading