---
title: "Tool & Prompt Errors"
description: "Errors thrown during tool and prompt lookup and execution."
icon: "wrench"
keywords: ['frontmcp', 'mcp', 'model context protocol', 'sdk', 'reference', 'api', 'errors', 'exceptions', 'error handling', 'tool', 'typescript']
---

## Overview

Tool and prompt errors are thrown when a tool or prompt cannot be found or when execution fails. Not-found errors are public and safe to expose to clients, while execution errors are internal and hide implementation details.

## Error Reference

### ToolNotFoundError

Thrown when a requested tool is not registered in the server.

| Property     | Type      | Value            |
| ------------ | --------- | ---------------- |
| `code`       | `string`  | `TOOL_NOT_FOUND` |
| `statusCode` | `number`  | `404`            |
| `isPublic`   | `boolean` | `true`           |

```typescript
new ToolNotFoundError(toolName: string)
```

**Example:**

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

const tool = registry.get(name);
if (!tool) {
  throw new ToolNotFoundError(name);
}
```

---

### ToolExecutionError

Thrown when a tool's `execute()` method throws an unexpected error. This is an internal error — the original error details are hidden from clients.

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

```typescript
new ToolExecutionError(toolName: string, originalError?: Error)
```

**Example:**

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

try {
  await tool.execute(input);
} catch (error) {
  throw new ToolExecutionError('my_tool', error);
}
```

<Note>
`ToolExecutionError` extends `InternalMcpError`. Clients receive a generic message with an `errorId` for support correlation, not the original stack trace.
</Note>

---

### PromptNotFoundError

Thrown when a requested prompt is not registered in the server.

| Property     | Type      | Value              |
| ------------ | --------- | ------------------ |
| `code`       | `string`  | `PROMPT_NOT_FOUND` |
| `statusCode` | `number`  | `404`              |
| `isPublic`   | `boolean` | `true`             |

```typescript
new PromptNotFoundError(promptName: string)
```

**Example:**

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

throw new PromptNotFoundError('summarize');
// "Prompt not found: summarize"
```

---

### PromptExecutionError

Thrown when a prompt's `execute()` method throws an unexpected error. This is an internal error.

| Property        | Type                 | Value                     |
| --------------- | -------------------- | ------------------------- |
| `code`          | `string`             | `PROMPT_EXECUTION_FAILED` |
| `statusCode`    | `number`             | `500`                     |
| `isPublic`      | `boolean`            | `false`                   |
| `promptName`    | `string`             | The prompt that failed    |
| `originalError` | `Error \| undefined` | The underlying cause      |

```typescript
new PromptExecutionError(promptName: string, cause?: Error)
```

**Example:**

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

try {
  await prompt.execute(args);
} catch (error) {
  throw new PromptExecutionError('summarize', error);
}
```
