arcade-mcp/examples/agent_frameworks/langchain/langchain_tool_arcade_auth.py
Eric Gustin d7107c107d
Update examples (#601)
* Reorganize the examples folder
* Add two mcp server examples. A local filesystem server and a simple
'starter' server.
2025-10-03 17:37:22 -07:00

59 lines
1.9 KiB
Python

import os
from arcadepy import Arcade
from google.oauth2.credentials import Credentials
from langchain_google_community import GmailToolkit
from langchain_google_community.gmail.utils import (
build_resource_service,
)
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
# Get the API key from the environment variable
api_key = os.getenv("ARCADE_API_KEY")
# Initialize the Arcade client
client = Arcade(api_key=api_key)
# Start the authorization process for Gmail
# see all possible gmail scopes here:
# https://developers.google.com/gmail/api/auth/scopes
user_id = "user@example.com"
auth_response = client.auth.start(
user_id=user_id, provider="google", scopes=["https://www.googleapis.com/auth/gmail.readonly"]
)
# Prompt the user to authorize if not already completed
if auth_response.status != "completed":
print("Please authorize the application in your browser:")
print(auth_response.url)
# Wait for the user to complete the authorization process, if necessary...
auth_response = client.auth.wait_for_completion(auth_response)
# Obtain credentials using the authorization context
creds = Credentials(auth_response.context.token)
api_resource = build_resource_service(credentials=creds)
# Initialize the Gmail toolkit with the authorized API resource
toolkit = GmailToolkit(api_resource=api_resource)
# Retrieve the tools from the langchain gmail toolkit
tools = toolkit.get_tools()
# Initialize the language model and create an agent
llm = ChatOpenAI(model="gpt-4o")
agent_executor = create_react_agent(llm, tools)
# Define the user query
example_query = "Read my latest emails and summarize them."
# Execute the agent with the user query
events = agent_executor.stream(
{"messages": [("user", example_query)]},
stream_mode="values",
)
# Display the agent's response
for event in events:
event["messages"][-1].pretty_print()