# Building an AI Stock Agent
[EN] Source: https://mastra.ai/guides/guide/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.

<YouTube id="rIaZ4l7y9wo" />

## Prerequisites

- Node.js `v20.0` or later installed
- An API key from a supported [Model Provider](/models)
- An existing Mastra project (Follow the [installation guide](/docs/getting-started/installation) to set up a new project)

## Creating the Agent

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

<Steps>

<StepItem>

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

```ts copy title="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"),
});
```

</StepItem>

<StepItem>

In your `src/mastra/index.ts` file, register the agent:

```ts copy title="src/mastra/index.ts" {2, 5}
import { Mastra } from "@mastra/core";
import { stockAgent } from "./agents/stockAgent";

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

</StepItem>

</Steps>

## 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.

<Steps>

<StepItem>

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:

```ts title="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),
    };
  },
});
```

</StepItem>

<StepItem>

Inside `src/mastra/agents/stockAgent.ts` import your newly created `stockPrices` tool and add it to the agent.

```ts copy title="src/mastra/agents/stockAgent.ts" {3, 10-12}
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,
  },
});
```

</StepItem>

</Steps>

## Running the Agent Server

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

<Steps>

<StepItem>

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

```bash copy
mastra dev
```

This will start a server exposing endpoints to interact with your registered agents. Within [Studio](/docs/getting-started/studio) you can test your `stockAgent` and `stockPrices` tool through a UI.

</StepItem>

<StepItem>

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

```
POST http://localhost:4111/api/agents/stockAgent/generate
```

</StepItem>

<StepItem>

You can interact with the agent using `curl` from the command line:

```bash copy
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:

```json
{
  "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.

</StepItem>

</Steps>


---
title: "Guide: Building an Agent that can search the web | Mastra Guide"
description: "A step-by-step guide to creating an agent that can search the web."
---

import Steps from "@site/src/components/Steps";
import StepItem from "@site/src/components/StepItem";
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";