From 76c383329c98d1155ea1bda15386f2c5eafb5ba7 Mon Sep 17 00:00:00 2001 From: Navin Pai Date: Wed, 17 Sep 2025 13:10:29 +0530 Subject: [PATCH 1/3] [MINOR] Handle multiple responses are returned from MCP (#69) * [MINOR] Handle multiple responses are returned from MCP * [MINOR] Update tests * Revert "[MINOR] Update tests" This reverts commit 8595aa6dc1c3af993ff872603b5a480a6dba751b. * Fix logic to be backwards-compatible * Update tests to be backwards compatible * [MINOR] Remove redundant tests --- src/mcpadapt/crewai_adapter.py | 13 ++++++- tests/test_crewai_adapter.py | 66 ++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/mcpadapt/crewai_adapter.py b/src/mcpadapt/crewai_adapter.py index 3ebef56..3cc105b 100644 --- a/src/mcpadapt/crewai_adapter.py +++ b/src/mcpadapt/crewai_adapter.py @@ -86,7 +86,18 @@ def _run(self, *args: Any, **kwargs: Any) -> Any: else: filtered_kwargs[key] = value - return func(filtered_kwargs).content[0].text # type: ignore + result = func(filtered_kwargs) + return ( + result.content[0].text + if len(result.content) == 1 + else str( + [ + content.text + for content in result.content + if hasattr(content, "text") + ] + ) + ) def _generate_description(self): args_schema = { diff --git a/tests/test_crewai_adapter.py b/tests/test_crewai_adapter.py index c769ea9..06281c6 100644 --- a/tests/test_crewai_adapter.py +++ b/tests/test_crewai_adapter.py @@ -364,3 +364,69 @@ def test_none_values_filtered_from_kwargs(mcp_server_that_rejects_none_script): assert "Another: None" in result # Most importantly, no error message about "is not of type string, is " assert "parameter" not in result or "is " not in result + + +@pytest.fixture +def multiple_content_server_script(): + return dedent( + """ + import mcp.types as types + from mcp.server.lowlevel import Server + from mcp.server.stdio import stdio_server + import anyio + + app = Server("multiple-content-server") + + @app.call_tool() + async def call_tool(name: str, arguments: dict | None) -> list[types.TextContent]: + if name != "multiple_content_tool": + raise ValueError(f"Unknown tool: {name}") + + # Return multiple content responses + return [ + types.TextContent(type="text", text="First response"), + types.TextContent(type="text", text="Second response"), + types.TextContent(type="text", text="Third response") + ] + + @app.list_tools() + async def list_tools() -> list[types.Tool]: + return [ + types.Tool( + name="multiple_content_tool", + description="A tool that returns multiple content items", + inputSchema={ + "type": "object", + "properties": {}, + }, + ) + ] + + async def arun(): + async with stdio_server() as streams: + await app.run( + streams[0], streams[1], app.create_initialization_options() + ) + + anyio.run(arun) + """ + ) + + +def test_multiple_content_response_handling(multiple_content_server_script): + """Test that multiple content responses return a string representation of the list.""" + with MCPAdapt( + StdioServerParameters( + command="uv", + args=["run", "python", "-c", multiple_content_server_script], + ), + CrewAIAdapter(), + ) as tools: + assert len(tools) == 1 + tool = tools[0] + assert tool.name == "multiple_content_tool" + + result = tool.run() + # Should return string representation of list of text contents + expected = str(["First response", "Second response", "Third response"]) + assert result == expected From 439604dff384e0ad224221049b63855f338e3811 Mon Sep 17 00:00:00 2001 From: Guillaume Raille Date: Wed, 17 Sep 2025 09:41:50 +0200 Subject: [PATCH 2/3] release 0.1.14: version bump commit --- src/mcpadapt/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcpadapt/__init__.py b/src/mcpadapt/__init__.py index 3cb7d95..fb69db9 100644 --- a/src/mcpadapt/__init__.py +++ b/src/mcpadapt/__init__.py @@ -1 +1 @@ -__version__ = "0.1.13" +__version__ = "0.1.14" From d04acac2dac2dc48510a4f9aa00f79aae857ad87 Mon Sep 17 00:00:00 2001 From: Guillaume Raille Date: Wed, 17 Sep 2025 09:43:27 +0200 Subject: [PATCH 3/3] release 0.1.15: version bump commit --- src/mcpadapt/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcpadapt/__init__.py b/src/mcpadapt/__init__.py index fb69db9..f3b4574 100644 --- a/src/mcpadapt/__init__.py +++ b/src/mcpadapt/__init__.py @@ -1 +1 @@ -__version__ = "0.1.14" +__version__ = "0.1.15"