Skip to main content

Gmail Tool

The Gmail Tool allows your agent to create and view messages from a linked email account.

Setup

You can authenticate via two methods:

  1. Provide an access token, obtained via OAuth2 token exchange, to the credentials object. This can be a string or a function so that token expiry and validation can be handled. This can be done using an Identity Provider that supports getting access tokens from federated connections. This is the most secure method as the access and scope will be limited to the specific end user. This method will be more appropriate when using the tool in an application that is meant to be used by end users with their own Gmail account.
  2. You will need to get an API key from Google here and enable the new Gmail API. Then, set the environment variables for GMAIL_CLIENT_EMAIL, and either GMAIL_PRIVATE_KEY, or GMAIL_KEYFILE.

To use the Gmail Tool you need to install the following official peer dependency:

npm install @langchain/openai @langchain/community @langchain/core googleapis

Usage

import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { OpenAI } from "@langchain/openai";
import {
GmailCreateDraft,
GmailGetMessage,
GmailGetThread,
GmailSearch,
GmailSendMessage,
} from "@langchain/community/tools/gmail";
import { StructuredTool } from "@langchain/core/tools";

export async function run() {
const model = new OpenAI({
temperature: 0,
apiKey: process.env.OPENAI_API_KEY,
});

// These are the default parameters for the Gmail tools
// const gmailParams = {
// credentials: {
// clientEmail: process.env.GMAIL_CLIENT_EMAIL,
// privateKey: process.env.GMAIL_PRIVATE_KEY,
// // Either (privateKey + clientEmail) or accessToken is required
// accessToken: "an access token or function to get access token",
// },
// scopes: ["https://mail.google.com/"], // Not required if using access token
// };

// For custom parameters, uncomment the code above, replace the values with your own, and pass it to the tools below
const tools: StructuredTool[] = [
new GmailCreateDraft(),
new GmailGetMessage(),
new GmailGetThread(),
new GmailSearch(),
new GmailSendMessage(),
];

const gmailAgent = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "structured-chat-zero-shot-react-description",
verbose: true,
});

const createInput = `Create a gmail draft for me to edit of a letter from the perspective of a sentient parrot who is looking to collaborate on some research with her estranged friend, a cat. Under no circumstances may you send the message, however.`;

const createResult = await gmailAgent.invoke({ input: createInput });
// Create Result {
// output: 'I have created a draft email for you to edit. The draft Id is r5681294731961864018.'
// }
console.log("Create Result", createResult);

const viewInput = `Could you search in my drafts for the latest email?`;

const viewResult = await gmailAgent.invoke({ input: viewInput });
// View Result {
// output: "The latest email in your drafts is from hopefulparrot@gmail.com with the subject 'Collaboration Opportunity'. The body of the email reads: 'Dear [Friend], I hope this letter finds you well. I am writing to you in the hopes of rekindling our friendship and to discuss the possibility of collaborating on some research together. I know that we have had our differences in the past, but I believe that we can put them aside and work together for the greater good. I look forward to hearing from you. Sincerely, [Parrot]'"
// }
console.log("View Result", viewResult);
}

API Reference:


Was this page helpful?


You can also leave detailed feedback on GitHub.