---
title: "Elicitation Errors"
description: "Errors for MCP elicitation requests, timeouts, and store issues."
icon: "comment-dots"
keywords: ['frontmcp', 'mcp', 'model context protocol', 'sdk', 'reference', 'api', 'errors', 'exceptions', 'error handling', 'elicitation', 'typescript']
---

## Overview

Elicitation errors are thrown during the MCP elicitation flow — the mechanism that allows tools to request additional user input during execution. These errors cover unsupported clients, timeouts, fallback flows, store initialization, encryption failures, and subscription issues.

## Error Reference

### ElicitationNotSupportedError

Thrown when attempting to elicit from a client that does not support elicitation or when the transport is unavailable.

| Property     | Type      | Value                       |
| ------------ | --------- | --------------------------- |
| `code`       | `string`  | `ELICITATION_NOT_SUPPORTED` |
| `statusCode` | `number`  | `400`                       |
| `isPublic`   | `boolean` | `true`                      |

```typescript
new ElicitationNotSupportedError(message?: string)
```

**Example:**

```typescript
import { ElicitationNotSupportedError } from '@frontmcp/sdk';

throw new ElicitationNotSupportedError('Client does not support elicitation');
```

---

### ElicitationTimeoutError

Thrown when an elicitation request times out waiting for the user's response.

| Property     | Type      | Value                          |
| ------------ | --------- | ------------------------------ |
| `code`       | `string`  | `ELICITATION_TIMEOUT`          |
| `statusCode` | `number`  | `408`                          |
| `isPublic`   | `boolean` | `true`                         |
| `elicitId`   | `string`  | The timed-out request ID       |
| `ttl`        | `number`  | The TTL that was exceeded (ms) |

```typescript
new ElicitationTimeoutError(elicitId: string, ttl: number)
```

**Example:**

```typescript
import { ElicitationTimeoutError } from '@frontmcp/sdk';

throw new ElicitationTimeoutError('elicit_abc', 60000);
// Public: "Elicitation request timed out. The user did not respond within the allowed time (60 seconds)."
```

---

### ElicitationFallbackRequired

Thrown when elicitation is requested but the client doesn't support the standard protocol. This is **not** a failure — it triggers the fallback flow where the tool returns instructions to the LLM, and the LLM uses `sendElicitationResult` to continue.

| Property        | Type                      | Value                             |
| --------------- | ------------------------- | --------------------------------- |
| `code`          | `string`                  | `ELICITATION_FALLBACK`            |
| `statusCode`    | `number`                  | `200`                             |
| `isPublic`      | `boolean`                 | `true`                            |
| `elicitId`      | `string`                  | Unique elicitation request ID     |
| `elicitMessage` | `string`                  | Message to display to user        |
| `schema`        | `Record<string, unknown>` | JSON Schema for expected response |
| `toolName`      | `string`                  | Tool that requested elicitation   |
| `toolInput`     | `unknown`                 | Original tool input args          |
| `ttl`           | `number`                  | Time-to-live (ms)                 |

```typescript
new ElicitationFallbackRequired(
  elicitId: string,
  elicitMessage: string,
  schema: Record<string, unknown>,
  toolName: string,
  toolInput: unknown,
  ttl: number,
)
```

<Note>
This error has a `statusCode` of `200` because it is not a failure — it's a signal to switch to the fallback elicitation flow.
</Note>

---

### ElicitationStoreNotInitializedError

Thrown when attempting to access the elicitation store before scope initialization has completed. Callers should `await scope.ready` before accessing `elicitationStore`.

| Property     | Type      | Value                               |
| ------------ | --------- | ----------------------------------- |
| `code`       | `string`  | `ELICITATION_STORE_NOT_INITIALIZED` |
| `statusCode` | `number`  | `500`                               |
| `isPublic`   | `boolean` | `false`                             |

```typescript
new ElicitationStoreNotInitializedError()
```

---

### ElicitationDisabledError

Thrown when elicitation is used but disabled in server configuration. Enable via `@FrontMcp({ elicitation: { enabled: true } })`.

| Property     | Type      | Value                  |
| ------------ | --------- | ---------------------- |
| `code`       | `string`  | `ELICITATION_DISABLED` |
| `statusCode` | `number`  | `400`                  |
| `isPublic`   | `boolean` | `true`                 |

```typescript
new ElicitationDisabledError()
```

The internal message includes configuration guidance. The public message is: `"Elicitation is disabled on this server."`

---

### ElicitationEncryptionError

Thrown when encryption or decryption of elicitation data fails — typically when the session ID is missing or key derivation fails.

| Property        | Type                 | Value                          |
| --------------- | -------------------- | ------------------------------ |
| `code`          | `string`             | `ELICITATION_ENCRYPTION_ERROR` |
| `statusCode`    | `number`             | `500`                          |
| `isPublic`      | `boolean`            | `false`                        |
| `originalError` | `Error \| undefined` | The underlying cause           |

```typescript
new ElicitationEncryptionError(message: string, originalError?: Error)
```

---

### ElicitationSubscriptionError

Thrown when subscription to the elicitation pub/sub channel fails. This indicates a transport or infrastructure failure, not a user non-response (which would be a timeout).

| Property        | Type                 | Value                            |
| --------------- | -------------------- | -------------------------------- |
| `code`          | `string`             | `ELICITATION_SUBSCRIPTION_ERROR` |
| `statusCode`    | `number`             | `500`                            |
| `isPublic`      | `boolean`            | `false`                          |
| `elicitId`      | `string`             | The elicitation request ID       |
| `originalError` | `Error \| undefined` | The underlying cause             |

```typescript
new ElicitationSubscriptionError(elicitId: string, originalError?: Error)
```
