docs/src/content/en/guides/getting-started/express.mdx
import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem";
In this guide, you'll build a tool-calling AI agent using Mastra and Express. Using the Express server adapter, you can expose your agents as HTTP endpoints without writing the routing yourself or running a separate Mastra server.
v22.13.0 or laterIf you already have an Express app, skip to the next step.
Clone this boilerplate repository and install dependencies:
<Tabs> <TabItem value="https" label="HTTPS"> ```bash npm2yarn git clone https://github.com/mastra-ai/express-ts-boilerplate.git cd express-ts-boilerplate npm install ``` </TabItem> <TabItem value="ssh" label="SSH"> ```bash npm2yarn git clone [email protected]:mastra-ai/express-ts-boilerplate.git cd express-ts-boilerplate npm install ``` </TabItem> </Tabs>Inside your Express project directory, run mastra init.
When prompted, choose a provider (e.g. OpenAI) and enter your key:
npx mastra@latest init
This creates a src/mastra folder with an example weather agent and the following files:
index.ts - Mastra config, including memorytools/weather-tool.ts - a tool to fetch weather for a given locationagents/weather-agent.ts- a weather agent with a prompt that uses the toolYou'll pass the src/mastra/index.ts file to the Express server adapter later.
Install the Express server adapter package:
npm install @mastra/express@latest
Open the Express entry file at src/index.ts and add the required import and initialization code:
import express, { type Request, type Response } from 'express'
import { MastraServer } from '@mastra/express'
import { mastra } from './mastra'
const app = express()
const PORT = process.env.PORT || 3000
// Middleware
app.use(express.json())
const server = new MastraServer({ app, mastra })
await server.init()
// Routes
app.get('/', (_req: Request, res: Response) => {
res.json({ message: 'Hello, World!' })
})
// Start server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`)
})
The MastraServer is initialized with the existing Express app and the root mastra instance. Calling init() registers the Mastra middleware and exposes all available Mastra endpoints.
By default, Mastra's endpoints are added under the /api subpath and use your agent/workflow IDs. The default weather-agent created by mastra init is available at /api/agents/weather-agent.
Start your Express server:
npm run start
In a separate terminal window, use curl to ask the weather agent:
curl -X POST http://localhost:3000/api/agents/weather-agent/generate -H "Content-Type: application/json" -d "{\"messages\":[{\"role\":\"user\",\"content\":\"What is the weather like in Seoul?\"}]}"
Congratulations on building your Mastra agent with Express! 🎉
From here, you can extend the project with your own tools and logic:
When you're ready, read more about how Mastra integrates with Express: