Skip to main content
Handlers, middleware, and hooks all work from the same request-aware event model.

The four important fields

handler: ({ input, ctx, request, tool }) => {
  return { input, tool, transport: request.transport };
};

input

input is parsed tool input. Use it for:
  • validated Zod input
  • defaulted values
  • coerced values
  • plain JSON Schema object input

ctx

ctx is shared mutable per-request state. Use it for:
  • auth metadata
  • tenant or organization data
  • timing values
  • request-scoped values computed by middleware or hooks

request

request is read-only transport metadata. Use it for:
  • headers
  • ip
  • method
  • url
  • raw
  • sessionId
  • transport

tool

tool is the resolved tool name. This is especially useful in global hooks and shared middleware.

Mental model

  • input = validated business input
  • ctx = mutable request state
  • request = transport metadata
  • tool = current tool identity