> ## Documentation Index
> Fetch the complete documentation index at: https://fastmcp-ts.docs.prefect.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ErrorNormalizationMiddleware

Defined in: [server/middleware.ts:298](https://github.com/PrefectHQ/fastmcp-ts/blob/e4b6038f642b529f601463a576229747afebe9a4/src/server/middleware.ts#L298)

Normalises errors thrown by handlers to proper MCP shapes:

* tools/call plain errors → \{ isError: true, content: \[...] }  (per MCP spec)
* tools/call McpError     → re-thrown as a protocol-level error
* all other methods       → McpError(InternalError, message)

Re-throwing McpError from onCallTool ensures that middleware-level errors
(e.g. from RateLimitingMiddleware or SizeLimitingMiddleware stacked before
this middleware) always propagate as protocol errors and are never silently
converted to isError:true tool responses.

## Implements

* [`Middleware`](/api/server/interfaces/Middleware)

## Constructors

### Constructor

```ts theme={null}
new ErrorNormalizationMiddleware(): ErrorNormalizationMiddleware;
```

#### Returns

`ErrorNormalizationMiddleware`

## Methods

### onCallTool()

```ts theme={null}
onCallTool(ctx, next): Promise<unknown>;
```

Defined in: [server/middleware.ts:299](https://github.com/PrefectHQ/fastmcp-ts/blob/e4b6038f642b529f601463a576229747afebe9a4/src/server/middleware.ts#L299)

#### Parameters

##### ctx

[`MiddlewareContext`](/api/server/interfaces/MiddlewareContext)

##### next

[`Next`](/api/server/type-aliases/Next)

#### Returns

`Promise`\<`unknown`>

#### Implementation of

[`Middleware`](/api/server/interfaces/Middleware).[`onCallTool`](/api/server/interfaces/Middleware#oncalltool)

***

### onRequest()

```ts theme={null}
onRequest(ctx, next): Promise<unknown>;
```

Defined in: [server/middleware.ts:311](https://github.com/PrefectHQ/fastmcp-ts/blob/e4b6038f642b529f601463a576229747afebe9a4/src/server/middleware.ts#L311)

#### Parameters

##### ctx

[`MiddlewareContext`](/api/server/interfaces/MiddlewareContext)

##### next

[`Next`](/api/server/type-aliases/Next)

#### Returns

`Promise`\<`unknown`>

#### Implementation of

[`Middleware`](/api/server/interfaces/Middleware).[`onRequest`](/api/server/interfaces/Middleware#onrequest)
