Arcade Documentation • Toolkits • Python Client • JavaScript Client
langchain-arcade
allows you to use Arcade tools in your LangChain and LangGraph applications. This integration provides a simple way to access Arcade's extensive toolkit ecosystem, including tools for search, email, document processing, and more.
pip install langchain-arcade
The ToolManager
is the main entry point for working with Arcade tools in LangChain:
import os
from langchain_arcade import ToolManager
# Initialize with your API key
manager = ToolManager(api_key=os.environ["ARCADE_API_KEY"])
# Initialize with specific tools or toolkits
tools = manager.init_tools(
tools=["Web.ScrapeUrl"], # Individual tools
toolkits=["Search"] # All tools from a toolkit
)
# Convert to LangChain tools
langchain_tools = manager.to_langchain()
pip install langgraph
Here's a simple example of using Arcade tools with LangGraph:
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent
# Create a LangGraph agent
model = ChatOpenAI(model="gpt-4o")
memory = MemorySaver()
graph = create_react_agent(model, tools, checkpointer=memory)
config = {"configurable": {"thread_id": "1", "user_id": "[email protected]"}}
user_input = {"messages": [("user", "List my important emails")]}
for chunk in graph.stream(user_input, config, stream_mode="values"):
print(chunk["messages"][-1].content)
Many Arcade tools require user authorization. Here's how to handle it:
import os
from langchain_arcade import ToolManager
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
# Initialize tools
manager = ToolManager(api_key=os.environ["ARCADE_API_KEY"])
manager.init_tools(toolkits=["Github"])
tools = manager.to_langchain(use_interrupts=True)
# Create agent
model = ChatOpenAI(model="gpt-4o")
graph = create_react_agent(model, tools)
# Run the agent with the "user_id" field in the config
# IMPORTANT the "user_id" field is required for tools that require user authorization
config = {"configurable": {"user_id": "[email protected]"}}
user_input = {"messages": [("user", "Star the arcadeai/arcade-ai repository on GitHub")]}
for chunk in graph.stream(user_input, config, debug=True):
if chunk.get("__interrupt__"):
# print the authorization url
print(chunk["__interrupt__"][0].value)
# visit the URL to authorize the tool
# once you have authorized the tool, you can run again and the agent will continue
elif chunk.get("agent"):
print(chunk["agent"]["messages"][-1].content)
# see the functional example for continuing the agent after authorization
# and for handling authorization errors gracefully
See the Functional examples in the examples directory that continue the agent after authorization and handle authorization errors gracefully.
For asynchronous applications, use AsyncToolManager
:
import asyncio
from langchain_arcade import AsyncToolManager
async def main():
manager = AsyncToolManager(api_key=os.environ["ARCADE_API_KEY"])
await manager.init_tools(toolkits=["Google"])
tools = await manager.to_langchain()
# Use tools with async LangChain/LangGraph components
asyncio.run(main())
Many Arcade tools require user authorization. This can be handled in many ways but the ToolManager
provides a simple flow that can be used with prebuilt agents and also the functional API. The typical flow is:
- Attempt to use a tool that requires authorization
- Check the state for interrupts from the
NodeInterrupt
exception (or Command) - Call
manager.authorize(tool_name, user_id)
to get an authorization URL - Present the URL to the user
- Call
manager.wait_for_auth(auth_response.id)
to wait for completion - Resume the agent execution
Arcade provides many toolkits including:
Search
: Google search, Bing searchGoogle
: Gmail, Google Drive, Google CalendarWeb
: Crawling, scraping, etcGithub
: Repository operationsSlack
: Sending messages to SlackLinkedin
: Posting to LinkedinX
: Posting and reading tweets on X- And many more
For a complete list, see the Arcade Toolkits documentation.
For more examples, see the examples directory.