Setup
Copy
Ask AI
npm i llamaindex @llamaindex/openai @nangohq/node
This example uses the Node SDK, a lightweight wrapper over Nango’s REST API. The same flow works in any language by using the API reference.
- A Nango account with a Hubspot integration configured and the
whoamiaction enabled. - An OpenAI account (or another LLM provider).
Usage
Example of a basic tool that calls an external API (Hubspot):Copy
Ask AI
import { ReActAgent, FunctionTool } from "llamaindex";
import { OpenAI } from "@llamaindex/openai";
import { Nango } from "@nangohq/node";
export async function runLlamaIndexAgent() {
if (!process.env.OPENAI_API_KEY) {
console.log("Missing environment variable: OPENAI_API_KEY.");
}
const nango = new Nango({ secretKey: process.env.NANGO_SECRET_KEY! });
const userId = "user1", integrationId = "hubspot";
// Step 1: Ensure the user is authorized
console.log("🔒 Checking API authorization...");
let connectionId = (await nango.listConnections({ integrationId, userId })).connections[0]?.connection_id;
// Step 2: If the user is not authorized, redirect to the auth flow.
if (!connectionId) {
const session = await nango.createConnectSession({
allowed_integrations: [integrationId],
end_user: { id: userId },
});
console.log(`Please authorize the app by visiting this URL: ${session.data.connect_link}`);
const connection = await nango.waitForConnection(integrationId, userId);
connectionId = connection!.connection_id;
}
// Step 3: Define the tool
const whoAmITool = FunctionTool.from(
async () => {
// Step 4: Execute the requested tool with Nango.
const result = await nango.triggerAction(integrationId, connectionId, "whoami");
return JSON.stringify(result);
},
{
name: "who_am_i",
description: "Get the current user info.",
parameters: {
type: "object",
properties: {},
required: [],
},
}
);
const agent = new ReActAgent({
tools: [whoAmITool],
llm: new OpenAI({ model: "gpt-4" }),
});
console.log("🤖 Agent running...");
const response = await agent.chat({
message: "Using the who_am_i tool, provide the current user info.",
});
console.log("✅ Agent retrieved your Hubspot user info:", response.response);
}
You can let agents or models introspect available tools and their specifications by calling this endpoint. Your model can then automatically decide which tool to call.