跳至主要內容

MastraServer

MastraServer abstract class 是所有 server adapter 的基礎。擴充此 class 可為 Hono 或 Express 以外的 framework 建立 adapter。

匯入
匯入 的直接連結

import { MastraServer } from '@mastra/server/server-adapter'

Type 參數
Type 參數 的直接連結

MastraServer<TApp, TRequest, TResponse>
參數說明
TAppFramework app 類型(例如 HonoApplication
TRequestFramework request 類型
TResponseFramework response/context 類型

Constructor
Constructor 的直接連結

constructor(options: MastraServerOptions<TApp>)

選項
選項 的直接連結

app:

TApp
Framework app instance

mastra:

Mastra
Mastra instance

prefix?:

string
= ''
Route 路徑前綴(例如 /api/v2

openapiPath?:

string
= ''
提供 OpenAPI 規格的路徑

bodyLimitOptions?:

BodyLimitOptions
Request body 大小限制

streamOptions?:

StreamOptions
= { redact: true }
Stream 遮蔽設定

customRouteAuthConfig?:

Map<string, boolean>
各 route 的 auth 覆寫設定

tools?:

Record<string, Tool>
Server 可用的 Tool

taskStore?:

InMemoryTaskStore
A2A(Agent-to-Agent)操作的 task store

mcpOptions?:

MCPOptions
Serverless 環境的 MCP transport 選項

Abstract method
Abstract method 的直接連結

Adapter 必須實作以下 method:

registerContextMiddleware()
registercontextmiddleware 的直接連結

將 Mastra context 附加至每個 request。

abstract registerContextMiddleware(): void

要附加的 context:

  • mastra - Mastra instance
  • requestContext - Request scope context
  • tools - 可用的 Tool
  • abortSignal - Request 取消訊號

registerAuthMiddleware()
registerauthmiddleware 的直接連結

在初始化期間運行 adapter auth hook。當 auth 按 route 強制執行時,官方 adapter 可將其實作為 no-op。

abstract registerAuthMiddleware(): void

registerRoute()
registerroute 的直接連結

向 framework 註冊單一 route。

abstract registerRoute(
app: TApp,
route: ServerRoute,
options: { prefix?: string }
): Promise<void>

getParams()
getparams 的直接連結

從 request 擷取參數。

abstract getParams(
route: ServerRoute,
request: TRequest
): Promise<{
urlParams: Record<string, string>;
queryParams: Record<string, string>;
body: unknown;
}>

sendResponse()
sendresponse 的直接連結

根據 route 類型傳送 response。

abstract sendResponse(
route: ServerRoute,
response: TResponse,
result: unknown
): Promise<unknown>

stream()
stream 的直接連結

處理 streaming response。

abstract stream(
route: ServerRoute,
response: TResponse,
result: unknown
): Promise<unknown>

Instance method
Instance method 的直接連結

init()
init 的直接連結

透過註冊所有 middleware 及 route 初始化 server。

async init(): Promise<void>

按以下順序呼叫:

  1. registerContextMiddleware()
  2. registerAuthMiddleware()
  3. registerRoutes()

registerRoutes()
registerroutes 的直接連結

註冊所有 Mastra route。

async registerRoutes(): Promise<void>

getApp()
getapp 的直接連結

取得 framework app instance。

getApp<T = TApp>(): T

parsePathParams()
parsepathparams 的直接連結

使用 route 的 Zod schema 驗證路徑參數。

async parsePathParams(
route: ServerRoute,
params: Record<string, string>
): Promise<Record<string, unknown>>

parseQueryParams()
parsequeryparams 的直接連結

使用 route 的 Zod schema 驗證 query 參數。

async parseQueryParams(
route: ServerRoute,
params: Record<string, string>
): Promise<Record<string, unknown>>

parseBody()
parsebody 的直接連結

使用 route 的 Zod schema 驗證 request body。

async parseBody(
route: ServerRoute,
body: unknown
): Promise<unknown>

registerOpenAPIRoute()
registeropenapiroute 的直接連結

註冊提供 OpenAPI 規格的 endpoint。

async registerOpenAPIRoute(
app: TApp,
config: OpenAPIConfig,
options: { prefix?: string }
): Promise<void>

Protected method
Protected method 的直接連結

mergeRequestContext()
mergerequestcontext 的直接連結

合併來自多個來源(query 參數及 body)的 request context。

protected mergeRequestContext(options: {
paramsRequestContext?: Record<string, any>;
bodyRequestContext?: Record<string, any>;
}): RequestContext

類型
類型 的直接連結

BodyLimitOptions
bodylimitoptions 的直接連結

interface BodyLimitOptions {
maxSize: number
onError: (error: unknown) => unknown
}

StreamOptions
streamoptions 的直接連結

interface StreamOptions {
redact?: boolean
}

MCPOptions
MCPOptions 的直接連結

interface MCPOptions {
serverless?: boolean
sessionIdGenerator?: () => string
}
Property說明
serverless設為 true 時,MCP 會以無狀態模式運行,不使用 session 管理。適用於 Cloudflare Workers 或 Vercel Edge 等 serverless 環境。
sessionIdGenerator用於產生 session ID 的自訂 function。

範例
範例 的直接連結

import { MastraServer, ServerRoute } from '@mastra/server/server-adapter'
import type { Mastra } from '@mastra/core'

export class MyServer extends MastraServer<MyApp, MyRequest, MyResponse> {
registerContextMiddleware(): void {
this.app.use('*', (req, res, next) => {
res.locals.mastra = this.mastra
next()
})
}

registerAuthMiddleware(): void {
const auth = this.mastra.getServer()?.auth
if (!auth) return
// Register global auth middleware, or leave this empty and
// enforce auth when routes are registered.
}

async registerRoute(app, route, { prefix }) {
// Implement route registration
}

async getParams(route, request) {
return {
urlParams: request.params,
queryParams: request.query,
body: request.body,
}
}

async sendResponse(route, response, result) {
return response.json(result)
}

async stream(route, response, result) {
// Implement streaming
}
}