Skip to content

Commit 16ba441

Browse files
committed
support MCP async calls
1 parent 6fbdbf2 commit 16ba441

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

docs/references.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
- [🤖 LangGraph Multi-Agent Supervisor](https://github.com/langchain-ai/langgraph-supervisor-py)
88
- [Software Design 誌「実践 LLM アプリケーション開発」第 24 回サンプルコード](https://github.com/mahm/softwaredesign-llm-application/tree/main/24)
99
- [Streamlit](https://python.langchain.com/docs/integrations/callbacks/streamlit/)
10+
- [LangChain MCP Adapters](https://github.com/langchain-ai/langchain-mcp-adapters)
11+
- [Research Agent with MCP Integration.](https://github.com/langchain-ai/deep_research_from_scratch/blob/main/src/deep_research_from_scratch/research_agent_mcp.py)
1012

1113
### Sample Codes
1214

template_langgraph/agents/chat_with_tools_agent/agent.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import json
23

34
from langchain_core.messages import ToolMessage
@@ -6,7 +7,7 @@
67
from template_langgraph.agents.chat_with_tools_agent.models import AgentState
78
from template_langgraph.llms.azure_openais import AzureOpenAiWrapper
89
from template_langgraph.loggers import get_logger
9-
from template_langgraph.tools.common import get_default_tools
10+
from template_langgraph.tools.common import get_default_tools, is_async_call_required
1011

1112
logger = get_logger(__name__)
1213

@@ -25,10 +26,13 @@ def __call__(self, inputs: dict):
2526
outputs = []
2627
for tool_call in message.tool_calls:
2728
try:
28-
tool_result = self.tools_by_name[tool_call["name"]].invoke(tool_call["args"])
29+
if is_async_call_required(tool_call["name"]):
30+
observation = asyncio.run(self.tools_by_name[tool_call["name"]].ainvoke(tool_call["args"]))
31+
else:
32+
observation = self.tools_by_name[tool_call["name"]].invoke(tool_call["args"])
2933
outputs.append(
3034
ToolMessage(
31-
content=json.dumps(tool_result.__str__(), ensure_ascii=False),
35+
content=json.dumps(observation.__str__(), ensure_ascii=False),
3236
name=tool_call["name"],
3337
tool_call_id=tool_call["id"],
3438
)

template_langgraph/tools/common.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ def get_default_tools():
2525
)
2626
+ McpClientWrapper().get_tools()
2727
)
28+
29+
30+
def is_async_call_required(tool_name: str) -> bool:
31+
# FIXME: adhoc impl
32+
if tool_name.startswith("browser_"):
33+
return True
34+
return tool_name in [
35+
"echo",
36+
"add",
37+
# add async tool names here
38+
]

0 commit comments

Comments
 (0)