Skip to content

Commit 2523a8a

Browse files
authored
fix: MCP output types, requirement target extraction (#1435)
The `isinstance(target, Sequence)` check introduced in commit 3b90dae incorrectly treats a single string target as a sequence of characters, splitting it into individual chars. Fix that. Signed-off-by: Nikola Forró <nforro@redhat.com>
1 parent f280084 commit 2523a8a

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

python/beeai_framework/adapters/mcp/serve/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ async def run(**kwargs: Any) -> MCPCallToolResult:
173173

174174
return MCPCallToolResult(
175175
content=[MCPTextContent(type="text", text=output.get_text_content())],
176-
structuredContent=to_json_serializable(output)
176+
structuredContent=(res if isinstance(res := to_json_serializable(output), dict) else {"result": res})
177177
if isinstance(output, CustomJsonDump) # (eg: JSONToolOutput/SearchToolOutput)
178178
else None,
179179
_meta={"is_empty": output.is_empty()},

python/beeai_framework/agents/requirement/requirements/_utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@
1616
def _extract_targets(
1717
target: MultiTargetType | None,
1818
) -> set[str | type | AnyTool]:
19-
targets = list(target) if isinstance(target, Sequence) else [target] if target is not None else []
19+
targets = (
20+
list(target)
21+
if isinstance(target, Sequence) and not isinstance(target, str)
22+
else [target]
23+
if target is not None
24+
else []
25+
)
2026
return set(targets)
2127

2228

0 commit comments

Comments
 (0)