Express Adapter
The @mastra/express package provides a server adapter for running Mastra with Express.
For general adapter concepts (constructor options, initialization flow, etc.), see Server Adapters.
InstallationDirect link to Installation
Install the Express adapter and Express framework:
npm install @mastra/express expressCreate your server file:
server.tsimport express from 'express';
import { MastraServer } from '@mastra/express';
import { mastra } from './mastra';
const app = express();
app.use(express.json()); // Required for body parsing
const server = new MastraServer({ app, mastra });
await server.init();
app.listen(4111, () => {
console.log('Server running on port 4111');
});
Express requires express.json() middleware for JSON body parsing. Add it before creating the MastraServer.
Full exampleDirect link to Full example
import express from 'express';
import { MastraServer } from '@mastra/express';
import { mastra } from './mastra';
const app = express();
app.use(express.json());
const server = new MastraServer({
app,
mastra,
prefix: '/api/v2',
openapiPath: '/openapi.json',
bodyLimitOptions: {
maxSize: 10 * 1024 * 1024, // 10MB
onError: (err) => ({ error: 'Payload too large', maxSize: '10MB' }),
},
streamOptions: { redact: true },
});
await server.init();
app.listen(4111);
Constructor parametersDirect link to Constructor parameters
app:
mastra:
prefix?:
openapiPath?:
bodyLimitOptions?:
streamOptions?:
customRouteAuthConfig?:
tools?:
taskStore?:
Differences from HonoDirect link to Differences from Hono
| Aspect | Express | Hono |
|---|---|---|
| Body parsing | Requires express.json() | Handled by framework |
| Context storage | res.locals | c.get() / c.set() |
| Middleware signature | (req, res, next) | (c, next) |
| Streaming | res.write() / res.end() | stream() helper |
| AbortSignal | Created from req.on('close') | c.req.raw.signal |
Adding custom routesDirect link to Adding custom routes
Add routes directly to the Express app:
const app = express();
app.use(express.json());
const server = new MastraServer({ app, mastra });
// Before init - runs before Mastra middleware
app.get('/early-health', (req, res) => res.json({ status: 'ok' }));
await server.init();
// After init - has access to Mastra context
app.get('/custom', (req, res) => {
const mastraInstance = res.locals.mastra;
res.json({ agents: Object.keys(mastraInstance.listAgents()) });
});
app.listen(4111);
Routes added before init() run without Mastra context. Add routes after init() to access the Mastra instance and request context.
Accessing contextDirect link to Accessing context
In Express middleware and routes, access Mastra context via res.locals:
app.get('/custom', (req, res) => {
const mastra = res.locals.mastra;
const requestContext = res.locals.requestContext;
const abortSignal = res.locals.abortSignal;
const agent = mastra.getAgent('myAgent');
res.json({ agent: agent.name });
});
Available properties on res.locals:
| Key | Description |
|---|---|
mastra | Mastra instance |
requestContext | Request context map |
abortSignal | Request cancellation signal |
tools | Available tools |
taskStore | Task store for A2A operations |
customRouteAuthConfig | Per-route auth overrides |
user | Authenticated user (if auth configured) |
Adding middlewareDirect link to Adding middleware
Add Express middleware before or after init():
const app = express();
app.use(express.json());
// Middleware before init
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
const server = new MastraServer({ app, mastra });
await server.init();
// Middleware after init has access to Mastra context
app.use((req, res, next) => {
const mastra = res.locals.mastra;
// ...
next();
});
Manual initializationDirect link to Manual initialization
For custom middleware ordering, call each method separately instead of init(). See Server Adapters: Manual initialization for details.
ExamplesDirect link to Examples
- Express Adapter - Basic Express server setup
RelatedDirect link to Related
- Server Adapters - Shared adapter concepts
- Hono Adapter - Alternative adapter
- MastraServer Reference - Full API reference
- createRoute() Reference - Creating type-safe custom routes