Koa Adapter
The @mastra/koa package provides a server adapter for running Mastra with Koa.
For general adapter concepts (constructor options, initialization flow, etc.), see Server Adapters.
InstallationDirect link to Installation
Install the Koa adapter and Koa framework:
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/koa@latest koa koa-bodyparser
pnpm add @mastra/koa@latest koa koa-bodyparser
yarn add @mastra/koa@latest koa koa-bodyparser
bun add @mastra/koa@latest koa koa-bodyparser
Usage exampleDirect link to Usage example
import Koa from 'koa'
import bodyParser from 'koa-bodyparser'
import { MastraServer } from '@mastra/koa'
import { mastra } from './mastra'
const app = new Koa()
app.use(bodyParser())
const server = new MastraServer({ app, mastra })
await server.init()
app.listen(3000, () => {
console.log('Server running on http://localhost:3000')
})
Constructor parametersDirect link to Constructor parameters
app:
mastra:
prefix?:
openapiPath?:
bodyLimitOptions?:
streamOptions?:
customRouteAuthConfig?:
tools?:
taskStore?:
mcpOptions?:
Error handlingDirect link to Error handling
The Koa adapter propagates errors from route handlers up through Koa's middleware chain, following Koa's standard error handling pattern. This means you can use regular Koa error-handling middleware:
const app = new Koa()
app.use(bodyParser())
// Your error middleware catches errors from Mastra route handlers
app.use(async (ctx, next) => {
try {
await next()
} catch (err) {
ctx.status = err.status || 500
ctx.body = { error: err.message }
// Log, report to Sentry, etc.
}
})
const server = new MastraServer({ app, mastra })
await server.init()
The server.onError hook is also supported. When configured, it is called before the error propagates to middleware, and its response is used directly:
const mastra = new Mastra({
server: {
onError: (err, c) => {
console.error('Unhandled error:', err)
return c.json({ error: err.message }, 500)
},
},
})
When init() is used, a global error-handling middleware is also registered as a safety net. Errors that reach this middleware are emitted via ctx.app.emit('error', err, ctx) following the standard Koa convention.
Manual initializationDirect link to Manual initialization
For custom middleware ordering, call each method separately instead of init(). See manual initialization for details.
ExamplesDirect link to Examples
- Koa Adapter - Basic Koa server setup
RelatedDirect link to Related
- Server Adapters - Shared adapter concepts
- MastraServer Reference - Full API reference
- createRoute() Reference - Creating type-safe custom routes