You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/aop_examples/client/aop_raw_task_example.py

68 lines
1.9 KiB

import asyncio
import json
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def call_agent_tool_raw(
url: str,
tool_name: str,
task: str,
img: str | None = None,
imgs: list[str] | None = None,
correct_answer: str | None = None,
) -> dict:
async with streamablehttp_client(url, timeout=30) as ctx:
if len(ctx) == 2:
read, write = ctx
else:
read, write, *_ = ctx
async with ClientSession(read, write) as session:
await session.initialize()
arguments = {"task": task}
if img is not None:
arguments["img"] = img
if imgs is not None:
arguments["imgs"] = imgs
if correct_answer is not None:
arguments["correct_answer"] = correct_answer
result = await session.call_tool(
name=tool_name, arguments=arguments
)
return result.model_dump()
async def list_available_tools(url: str) -> dict:
async with streamablehttp_client(url, timeout=30) as ctx:
if len(ctx) == 2:
read, write = ctx
else:
read, write, *_ = ctx
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
return tools.model_dump()
def main():
url = "http://localhost:5932/mcp"
tool_name = "Research-Agent"
task = "Summarize the latest advances in agent orchestration protocols."
tools_info = asyncio.run(list_available_tools(url))
print("Available tools:")
print(json.dumps(tools_info, indent=2))
print(f"\nCalling tool '{tool_name}' with task...\n")
result = asyncio.run(
call_agent_tool_raw(url=url, tool_name=tool_name, task=task)
)
print(json.dumps(result, indent=2))
if __name__ == "__main__":
main()