Skip to main content

Building an AI Stock Agent

In this guide, you're going to create a simple agent that fetches the last day's closing stock price for a given symbol. You'll learn how to create a tool, add it to an agent, and use the agent to fetch stock prices.

PrerequisitesDirect link to Prerequisites

  • Node.js v20.0 or later installed
  • An API key from a supported Model Provider
  • An existing Mastra project (Follow the installation guide to set up a new project)

Creating the AgentDirect link to Creating the Agent

To create an agent in Mastra use the Agent class to define it and then register it with Mastra.

  1. Create a new file src/mastra/agents/stockAgent.ts and define your agent:

    src/mastra/agents/stockAgent.ts
    import { openai } from "@ai-sdk/openai";
    import { Agent } from "@mastra/core/agent";

    export const stockAgent = new Agent({
    name: "Stock Agent",
    instructions:
    "You are a helpful assistant that provides current stock prices. When asked about a stock, use the stock price tool to fetch the stock price.",
    model: openai("gpt-4o-mini"),
    });
  2. In your src/mastra/index.ts file, register the agent:

    src/mastra/index.ts
    import { Mastra } from "@mastra/core";
    import { stockAgent } from "./agents/stockAgent";

    export const mastra = new Mastra({
    agents: { stockAgent },
    });

Creating the Stock Price ToolDirect link to Creating the Stock Price Tool

So far the Stock Agent doesn't know anything about the current stock prices. To change this, create a tool and add it to the agent.

  1. Create a new file src/mastra/tools/stockPrices.ts. Inside, add a stockPrices tool that will fetch the last day's closing stock price for a given symbol:

    src/mastra/tools/stockPrices.ts
    import { createTool } from "@mastra/core/tools";
    import { z } from "zod";

    const getStockPrice = async (symbol: string) => {
    const data = await fetch(
    `https://mastra-stock-data.vercel.app/api/stock-data?symbol=${symbol}`,
    ).then((r) => r.json());
    return data.prices["4. close"];
    };

    export const stockPrices = createTool({
    id: "Get Stock Price",
    inputSchema: z.object({
    symbol: z.string(),
    }),
    description: `Fetches the last day's closing stock price for a given symbol`,
    execute: async ({ context: { symbol } }) => {
    console.log("Using tool to fetch stock price for", symbol);
    return {
    symbol,
    currentPrice: await getStockPrice(symbol),
    };
    },
    });
  2. Inside src/mastra/agents/stockAgent.ts import your newly created stockPrices tool and add it to the agent.

    src/mastra/agents/stockAgent.ts
    import { openai } from "@ai-sdk/openai";
    import { Agent } from "@mastra/core/agent";
    import { stockPrices } from "../tools/stockPrices";

    export const stockAgent = new Agent({
    name: "Stock Agent",
    instructions:
    "You are a helpful assistant that provides current stock prices. When asked about a stock, use the stock price tool to fetch the stock price.",
    model: openai("gpt-4o-mini"),
    tools: {
    stockPrices,
    },
    });

Running the Agent ServerDirect link to Running the Agent Server

Learn how to interact with your agent through Mastra's API.

  1. You can run your agent as a service using the mastra dev command:

    mastra dev

    This will start a server exposing endpoints to interact with your registered agents. Within Studio you can test your stockAgent and stockPrices tool through a UI.

  2. By default, mastra dev runs on http://localhost:4111. Your Stock agent will be available at:

    POST http://localhost:4111/api/agents/stockAgent/generate
  3. You can interact with the agent using curl from the command line:

    curl -X POST http://localhost:4111/api/agents/stockAgent/generate \
    -H "Content-Type: application/json" \
    -d '{
    "messages": [
    { "role": "user", "content": "What is the current stock price of Apple (AAPL)?" }
    ]
    }'

    Expected Response:

    You should receive a JSON response similar to:

    {
    "text": "The current price of Apple (AAPL) is $174.55.",
    "agent": "Stock Agent"
    }

    This indicates that your agent successfully processed the request, used the stockPrices tool to fetch the stock price, and returned the result.