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
2 changes: 1 addition & 1 deletion plugins/communication_protocols/mcp/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "utcp-mcp"
version = "1.1.0"
version = "1.1.2"
authors = [
{ name = "UTCP Contributors" },
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ async def register_manual(self, caller: 'UtcpClient', manual_call_template: Call
utcp_tool = Tool(
name=mcp_tool.name,
description=mcp_tool.description,
input_schema=mcp_tool.inputSchema,
output_schema=mcp_tool.outputSchema,
inputs=mcp_tool.inputSchema,
outputs=mcp_tool.outputSchema,
tool_call_template=manual_call_template
)
all_tools.append(utcp_tool)
Expand All @@ -212,12 +212,12 @@ async def register_manual(self, caller: 'UtcpClient', manual_call_template: Call
resource_tool = Tool(
name=f"{server_name}.resource_{mcp_resource.name}",
description=f"Read resource: {mcp_resource.description or mcp_resource.name}. URI: {mcp_resource.uri}",
input_schema={
inputs={
"type": "object",
"properties": {},
"required": []
},
output_schema={
outputs={
"type": "object",
"properties": {
"contents": {
Expand Down Expand Up @@ -384,12 +384,15 @@ async def call_tool_streaming(self, caller: 'UtcpClient', tool_name: str, tool_a
def _process_tool_result(self, result, tool_name: str) -> Any:
self._log_info(f"Processing tool result for '{tool_name}', type: {type(result)}")

# Check for structured output first
if hasattr(result, 'structured_output'):
self._log_info(f"Found structured_output: {result.structured_output}")
return result.structured_output
# Check for structured output first - this is the expected behavior
if hasattr(result, 'structuredContent'):
self._log_info(f"Found structuredContent: {result.structuredContent}")
# If structuredContent has a 'result' key, unwrap it
if isinstance(result.structuredContent, dict) and 'result' in result.structuredContent:
return result.structuredContent['result']
return result.structuredContent

# Process content if available
# Process content if available (fallback)
if hasattr(result, 'content'):
content = result.content
self._log_info(f"Content type: {type(content)}")
Expand Down Expand Up @@ -427,6 +430,10 @@ def _process_tool_result(self, result, tool_name: str) -> Any:

return content

# Handle dictionary with 'result' key
if isinstance(result, dict) and 'result' in result:
return result['result']

# Fallback to result attribute
if hasattr(result, 'result'):
return result.result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,7 @@ async def test_http_list_output(

assert isinstance(result, list)
assert len(result) == 3
assert result[0] == "item_0"
assert result[1] == "item_1"
assert result[2] == "item_2"
assert result == ["item_0", "item_1", "item_2"]


@pytest.mark.asyncio
Expand Down