Agent Sdk Typescript
<script src="/components/typescript-sdk-type-links.js" defer />
## Installation
```bash
npm install @anthropic-ai/claude-agent-sdk
```
## Functions
### `query()`
The primary function for interacting with Claude Code. Creates an async generator that streams messages as they arrive.
```ts
function query({
prompt,
options
}: {
prompt: string | AsyncIterable<SDKUserMessage>;
options?: Options;
}): Query
```
#### Parameters
| Parameter | Type | Description |
| :-------- | :--------------------------------------------------------------- | :---------------------------------------------------------------- |
| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkusermessage)`>` | The input prompt as a string or async iterable for streaming mode |
| `options` | [`Options`](#options) | Optional configuration object (see Options type below) |
#### Returns
Returns a [`Query`](#query-1) object that extends `AsyncGenerator<`[`SDKMessage`](#sdkmessage)`, void>` with additional methods.
### `tool()`
Creates a type-safe MCP tool definition for use with SDK MCP servers.
```ts
function tool<Schema extends ZodRawShape>(
name: string,
description: string,
inputSchema: Schema,
handler: (args: z.infer<ZodObject<Schema>>, extra: unknown) => Promise<CallToolResult>
): SdkMcpToolDefinition<Schema>
```
#### Parameters
| Parameter | Type | Description |
| :------------ | :---------------------------------------------------------------- | :---------------------------------------------- |
| `name` | `string` | The name of the tool |
| `description` | `string` | A description of what the tool does |
| `inputSchema` | `Schema extends ZodRawShape` | Zod schema defining the tool's input parameters |
| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#calltoolresult)`>` | Async function that executes the tool logic |
### `createSdkMcpServer()`
Creates an MCP server instance that runs in the same process as your application.
```ts
function createSdkMcpServer(options: {
name: string;
version?: string;
tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance
```
#### Parameters
| Parameter | Type | Description |
| :---------------- | :---------------------------- | :------------------------------------------------------- |
| `options.name` | `string` | The name of the MCP server |
| `options.version` | `string` | Optional version string |
| `options.tools` | `Array<SdkMcpToolDefinition>` | Array of tool definitions created with [`tool()`](#tool) |
## Types
### `Options`
Configuration object for the `query()` function.
| Property | Type | Default | Description |
| :--------------------------- | :------------------------------------------------------------------------------------------------ | :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `abortController` | `AbortController` | `new AbortController()` | Controller for cancelling operations |
| `additionalDirectories` | `string[]` | `[]` | Additional directories Claude can access |
| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Programmatically define subagents |
| `allowedTools` | `string[]` | All tools | List of allowed tool names |
| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Custom permission function for tool usage |
| `continue` | `boolean` | `false` | Continue the most recent conversation |
| `cwd` | `string` | `process.cwd()` | Current working directory |
| `disallowedTools` | `string[]` | `[]` | List of disallowed tool names |
| `env` | `Dict<string>` | `process.env` | Environment variables |
| `executable` | `'bun' \| 'deno' \| 'node'` | Auto-detected | JavaScript runtime to use |
| `executableArgs` | `string[]` | `[]` | Arguments to pass to the executable |
| `extraArgs` | `Record<string, string \| null>` | `{}` | Additional arguments |
| `fallbackModel` | `string` | `undefined` | Model to use if primary fails |
| `forkSession` | `boolean` | `false` | When resuming with `resume`, fork to a new session ID instead of continuing the original session |
| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | Hook callbacks for events |
| `includePartialMessages` | `boolean` | `false` | Include partial message events |
| `maxThinkingTokens` | `number` | `undefined` | Maximum tokens for thinking process |
| `maxTurns` | `number` | `undefined` | Maximum conversation turns |
| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP server configurations |
| `model` | `string` | Default from CLI | Claude model to use |
| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Define output format for agent results. See [Structured outputs](/en/docs/agent-sdk/structured-outputs) for details |
| `pathToClaudeCodeExecutable` | `string` | Auto-detected | Path to Claude Code executable |
| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | Permission mode for the session |
| `permissionPromptToolName` | `string` | `undefined` | MCP tool name for permission prompts |
| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | Load custom plugins from local paths. See [Plugins](/en/docs/agent-sdk/plugins) for details |
| `resume` | `string` | `undefined` | Session ID to resume |
| `settingSources` | [`SettingSource`](#settingsource)`[]` | `[]` (no settings) | Control which filesystem settings to load. When omitted, no settings are loaded. **Note:** Must include `'project'` to load CLAUDE.md files |
| `stderr` | `(data: string) => void` | `undefined` | Callback for stderr output |
| `strictMcpConfig` | `boolean` | `false` | Enforce strict MCP validation |
| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string }` | `undefined` (empty prompt) | System prompt configuration. Pass a string for custom prompt, or `{ type: 'preset', preset: 'claude_code' }` to use Claude Code's system prompt. When using the preset object form, add `append` to extend the system prompt with additional instructions |
### `Query`
Interface returned by the `query()` function.
```ts
interface Query extends AsyncGenerator<SDKMessage, void> {
interrupt(): Promise<void>;
setPermissionMode(mode: PermissionMode): Promise<void>;
}
```
#### Methods
| Method | Description |
| :-------------------- | :------------------------------------------------------------------- |
| `interrupt()` | Interrupts the query (only available in streaming input mode) |
| `setPermissionMode()` | Changes the permission mode (only available in streaming input mode) |
### `AgentDefinition`
Configuration for a subagent defined programmatically.
```ts
type AgentDefinition = {
description: string;
tools?: string[];
prompt: string;
model?: 'sonnet' | 'opus' | 'haiku' | 'inherit';
}
```
| Field | Required | Description |
| :------------ | :------- | :------------------------------------------------------------- |
| `description` | Yes | Natural language description of when to use this agent |
| `tools` | No | Array of allowed tool names. If omitted, inherits all tools |
| `prompt` | Yes | The agent's system prompt |
| `model` | No | Model override for this agent. If omitted, uses the main model |
### `SettingSource`
Controls which filesystem-based configuration sources the SDK loads settings from.
```ts
type SettingSource = 'user' | 'project' | 'local';
```
| Value | Description | Location |
| :---------- | :------------------------------------------- | :---------------------------- |
| `'user'` | Global user settings | `~/.claude/settings.json` |
| `'project'` | Shared project settings (version controlled) | `.claude/settings.json` |
| `'local'` | Local project settings (gitignored) | `.claude/settings.local.json` |
#### Default behavior
When `settingSources` is **omitted** or **undefined**, the SDK does **not** load any filesystem settings. This provides isolation for SDK applications.
#### Why use settingSources?
**Load all filesystem settings (legacy behavior):**
```typescript
// Load all settings like SDK v0.0.x did
const result = query({
prompt: "Analyze this code",
options: {
settingSources: ['user', 'project', 'local'] // Load all settings
}
});
```
**Load only specific setting sources:**
```typescript
// Load only project settings, ignore user and local
const result = query({
prompt: "Run CI checks",
options: {
settingSources: ['project'] // Only .claude/settings.json
}
});
```
**Testing and CI environments:**
```typescript
// Ensure consistent behavior in CI by excluding local settings
const result = query({
prompt: "Run tests",
options: {
settingSources: ['project'], // Only team-shared settings
permissionMode: 'bypassPermissions'
}
});
```
**SDK-only applications:**
```typescript
// Define everything programmatically (default behavior)
// No filesystem dependencies - settingSources defaults to []
const result = query({
prompt: "Review this PR",
options: {
// settingSources: [] is the default, no need to specify
agents: { /* ... */ },
mcpServers: { /* ... */ },
allowedTools: ['Read', 'Grep', 'Glob']
}
});
```
**Loading CLAUDE.md project instructions:**
```typescript
// Load project settings to include CLAUDE.md files
const result = query({
prompt: "Add a new feature following project conventions",
options: {
systemPrompt: {
type: 'preset',
preset: 'claude_code' // Required to use CLAUDE.md
},
settingSources: ['project'], // Loads CLAUDE.md from project directory
allowedTools: ['Read', 'Write', 'Edit']
}
});
```
#### Settings precedence
When multiple sources are loaded, settings are merged with this precedence (highest to lowest):
1. Local settings (`.claude/settings.local.json`)
2. Project settings (`.claude/settings.json`)
3. User settings (`~/.claude/settings.json`)
Programmatic options (like `agents`, `allowedTools`) always override filesystem settings.
### `PermissionMode`
```ts
type PermissionMode =
| 'default' // Standard permission behavior
| 'acceptEdits' // Auto-accept file edits
| 'bypassPermissions' // Bypass all permission checks
| 'plan' // Planning mode - no execution
```
### `CanUseTool`
Custom permission function type for controlling tool usage.
```ts
type CanUseTool = (
toolName: string,
input: ToolInput,
options: {
signal: AbortSignal;
suggestions?: PermissionUpdate[];
}
) => Promise<PermissionResult>;
```
### `PermissionResult`
Result of a permission check.
```ts
type PermissionResult =
| {
behavior: 'allow';
updatedInput: ToolInput;
updatedPermissions?: PermissionUpdate[];
}
| {
behavior: 'deny';
message: string;
interrupt?: boolean;
}
```
### `McpServerConfig`
Configuration for MCP servers.
```ts
type McpServerConfig =
| McpStdioServerConfig
| McpSSEServerConfig
| McpHttpServerConfig
| McpSdkServerConfigWithInstance;
```
#### `McpStdioServerConfig`
```ts
type McpStdioServerConfig = {
type?: 'stdio';
command: string;
args?: string[];
env?: Record<string, string>;
}
```
#### `McpSSEServerConfig`
```ts
type McpSSEServerConfig = {
type: 'sse';
url: string;
headers?: Record<string, string>;
}
```
#### `McpHttpServerConfig`
```ts
type McpHttpServerConfig = {
type: 'http';
url: string;
headers?: Record<string, string>;
}
```
#### `McpSdkServerConfigWithInstance`
```ts
type McpSdkServerConfigWithInstance = {
type: 'sdk';
name: string;
instance: McpServer;
}
```
### `SdkPluginConfig`
Configuration for loading plugins in the SDK.
```ts
type SdkPluginConfig = {
type: 'local';
path: string;
}
```
| Field | Type | Description |
| :----- | :-------- | :--------------------------------------------------------- |
| `type` | `'local'` | Must be `'local'` (only local plugins currently supported) |
| `path` | `string` | Absolute or relative path to the plugin directory |
**Example:**
```ts
plugins: [
{ type: 'local', path: './my-plugin' },
{ type: 'local', path: '/absolute/path/to/plugin' }
]
```
For complete information on creating and using plugins, see [Plugins](/en/docs/agent-sdk/plugins).
## Message Types
### `SDKMessage`
Union type of all possible messages returned by the query.
```ts
type SDKMessage =
| SDKAssistantMessage
| SDKUserMessage
| SDKUserMessageReplay
| SDKResultMessage
| SDKSystemMessage
| SDKPartialAssistantMessage
| SDKCompactBoundaryMessage;
```
### `SDKAssistantMessage`
Assistant response message.
```ts
type SDKAssistantMessage = {
type: 'assistant';
uuid: UUID;
session_id: string;
message: APIAssistantMessage; // From Anthropic SDK
parent_tool_use_id: string | null;
}
```
### `SDKUserMessage`
User input message.
```ts
type SDKUserMessage = {
type: 'user';
uuid?: UUID;
session_id: string;
message: APIUserMessage; // From Anthropic SDK
parent_tool_use_id: string | null;
}
```
### `SDKUserMessageReplay`
Replayed user message with required UUID.
```ts
type SDKUserMessageReplay = {
type: 'user';
uuid: UUID;
session_id: string;
message: APIUserMessage;
parent_tool_use_id: string | null;
}
```
### `SDKResultMessage`
Final result message.
```ts
type SDKResultMessage =
| {
type: 'result';
subtype: 'success';
uuid: UUID;
session_id: string;
duration_ms: number;
duration_api_ms: number;
is_error: boolean;
num_turns: number;
result: string;
total_cost_usd: number;
usage: NonNullableUsage;
permission_denials: SDKPermissionDenial[];
}
| {
type: 'result';
subtype: 'error_max_turns' | 'error_during_execution';
uuid: UUID;
session_id: string;
duration_ms: number;
duration_api_ms: number;
is_error: boolean;
num_turns: number;
total_cost_usd: number;
usage: NonNullableUsage;
permission_denials: SDKPermissionDenial[];
}
```
### `SDKSystemMessage`
System initialization message.
```ts
type SDKSystemMessage = {
type: 'system';
subtype: 'init';
uuid: UUID;
session_id: string;
apiKeySource: ApiKeySource;
cwd: string;
tools: string[];
mcp_servers: {
name: string;
status: string;
}[];
model: string;
permissionMode: PermissionMode;
slash_commands: string[];
output_style: string;
}
```
### `SDKPartialAssistantMessage`
Streaming partial message (only when `includePartialMessages` is true).
```ts
type SDKPartialAssistantMessage = {
type: 'stream_event';
event: RawMessageStreamEvent; // From Anthropic SDK
parent_tool_use_id: string | null;
uuid: UUID;
session_id: string;
}
```
### `SDKCompactBoundaryMessage`
Message indicating a conversation compaction boundary.
```ts
type SDKCompactBoundaryMessage = {
type: 'system';
subtype: 'compact_boundary';
uuid: UUID;
session_id: string;
compact_metadata: {
trigger: 'manual' | 'auto';
pre_tokens: number;
};
}
```
### `SDKPermissionDenial`
Information about a denied tool use.
```ts
type SDKPermissionDenial = {
tool_name: string;
tool_use_id: string;
tool_input: ToolInput;
}
```
## Hook Types
### `HookEvent`
Available hook events.
```ts
type HookEvent =
| 'PreToolUse'
| 'PostToolUse'
| 'Notification'
| 'UserPromptSubmit'
| 'SessionStart'
| 'SessionEnd'
| 'Stop'
| 'SubagentStop'
| 'PreCompact';
```
### `HookCallback`
Hook callback function type.
```ts
type HookCallback = (
input: HookInput, // Union of all hook input types
toolUseID: string | undefined,
options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;
```
### `HookCallbackMatcher`
Hook configuration with optional matcher.
```ts
interface HookCallbackMatcher {
matcher?: string;
hooks: HookCallback[];
}
```
### `HookInput`
Union type of all hook input types.
```ts
type HookInput =
| PreToolUseHookInput
| PostToolUseHookInput
| NotificationHookInput
| UserPromptSubmitHookInput
| SessionStartHookInput
| SessionEndHookInput
| StopHookInput
| SubagentStopHookInput
| PreCompactHookInput;
```
### `BaseHookInput`
Base interface that all hook input types extend.
```ts
type BaseHookInput = {
session_id: string;
transcript_path: string;
cwd: string;
permission_mode?: string;
}
```
#### `PreToolUseHookInput`
```ts
type PreToolUseHookInput = BaseHookInput & {
hook_event_name: 'PreToolUse';
tool_name: string;
tool_input: ToolInput;
}
```
#### `PostToolUseHookInput`
```ts
type PostToolUseHookInput = BaseHookInput & {
hook_event_name: 'PostToolUse';
tool_name: string;
tool_input: ToolInput;
tool_response: ToolOutput;
}
```
#### `NotificationHookInput`
```ts
type NotificationHookInput = BaseHookInput & {
hook_event_name: 'Notification';
message: string;
title?: string;
}
```
#### `UserPromptSubmitHookInput`
```ts
type UserPromptSubmitHookInput = BaseHookInput & {
hook_event_name: 'UserPromptSubmit';
prompt: string;
}
```
#### `SessionStartHookInput`
```ts
type SessionStartHookInput = BaseHookInput & {
hook_event_name: 'SessionStart';
source: 'startup' | 'resume' | 'clear' | 'compact';
}
```
#### `SessionEndHookInput`
```ts
type SessionEndHookInput = BaseHookInput & {
hook_event_name: 'SessionEnd';
reason: 'clear' | 'logout' | 'prompt_input_exit' | 'other';
}
```
#### `StopHookInput`
```ts
type StopHookInput = BaseHookInput & {
hook_event_name: 'Stop';
stop_hook_active: boolean;
}
```
#### `SubagentStopHookInput`
```ts
type SubagentStopHookInput = BaseHookInput & {
hook_event_name: 'SubagentStop';
stop_hook_active: boolean;
}
```
#### `PreCompactHookInput`
```ts
type PreCompactHookInput = BaseHookInput & {
hook_event_name: 'PreCompact';
trigger: 'manual' | 'auto';
custom_instructions: string | null;
}
```
### `HookJSONOutput`
Hook return value.
```ts
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;
```
#### `AsyncHookJSONOutput`
```ts
type AsyncHookJSONOutput = {
async: true;
asyncTimeout?: number;
}
```
#### `SyncHookJSONOutput`
```ts
type SyncHookJSONOutput = {
continue?: boolean;
suppressOutput?: boolean;
stopReason?: string;
decision?: 'approve' | 'block';
systemMessage?: string;
reason?: string;
hookSpecificOutput?:
| {
hookEventName: 'PreToolUse';
permissionDecision?: 'allow' | 'deny' | 'ask';
permissionDecisionReason?: string;
}
| {
hookEventName: 'UserPromptSubmit';
additionalContext?: string;
}
| {
hookEventName: 'SessionStart';
additionalContext?: string;
}
| {
hookEventName: 'PostToolUse';
additionalContext?: string;
};
}
```
## Tool Input Types
Documentation of input schemas for all built-in Claude Code tools. These types are exported from `@anthropic-ai/claude-agent-sdk` and can be used for type-safe tool interactions.
### `ToolInput`
**Note:** This is a documentation-only type for clarity. It represents the union of all tool input types.
```ts
type ToolInput =
| AgentInput
| BashInput
| BashOutputInput
| FileEditInput
| FileReadInput
| FileWriteInput
| GlobInput
| GrepInput
| KillShellInput
| NotebookEditInput
| WebFetchInput
| WebSearchInput
| TodoWriteInput
| ExitPlanModeInput
| ListMcpResourcesInput
| ReadMcpResourceInput;
```
### Task
**Tool name:** `Task`
```ts
interface AgentInput {
/**
* A short (3-5 word) description of the task
*/
description: string;
/**
* The task for the agent to perform
*/
prompt: string;
/**
* The type of specialized agent to use for this task
*/
subagent_type: string;
}
```
Launches a new agent to handle complex, multi-step tasks autonomously.
### Bash
**Tool name:** `Bash`
```ts
interface BashInput {
/**
* The command to execute
*/
command: string;
/**
* Optional timeout in milliseconds (max 600000)
*/
timeout?: number;
/**
* Clear, concise description of what this command does in 5-10 words
*/
description?: string;
/**
* Set to true to run this command in the background
*/
run_in_background?: boolean;
}
```
Executes bash commands in a persistent shell session with optional timeout and background execution.
### BashOutput
**Tool name:** `BashOutput`
```ts
interface BashOutputInput {
/**
* The ID of the background shell to retrieve output from
*/
bash_id: string;
/**
* Optional regex to filter output lines
*/
filter?: string;
}
```
Retrieves output from a running or completed background bash shell.
### Edit
**Tool name:** `Edit`
```ts
interface FileEditInput {
/**
* The absolute path to the file to modify
*/
file_path: string;
/**
* The text to replace
*/
old_string: string;
/**
* The text to replace it with (must be different from old_string)
*/
new_string: string;
/**
* Replace all occurrences of old_string (default false)
*/
replace_all?: boolean;
}
```
Performs exact string replacements in files.
### Read
**Tool name:** `Read`
```ts
interface FileReadInput {
/**
* The absolute path to the file to read
*/
file_path: string;
/**
* The line number to start reading from
*/
offset?: number;
/**
* The number of lines to read
*/
limit?: number;
}
```
Reads files from the local filesystem, including text, images, PDFs, and Jupyter notebooks.
### Write
**Tool name:** `Write`
```ts
interface FileWriteInput {
/**
* The absolute path to the file to write
*/
file_path: string;
/**
* The content to write to the file
*/
content: string;
}
```
Writes a file to the local filesystem, overwriting if it exists.
### Glob
**Tool name:** `Glob`
```ts
interface GlobInput {
/**
* The glob pattern to match files against
*/
pattern: string;
/**
* The directory to search in (defaults to cwd)
*/
path?: string;
}
```
Fast file pattern matching that works with any codebase size.
### Grep
**Tool name:** `Grep`
```ts
interface GrepInput {
/**
* The regular expression pattern to search for
*/
pattern: string;
/**
* File or directory to search in (defaults to cwd)
*/
path?: string;
/**
* Glob pattern to filter files (e.g. "*.js")
*/
glob?: string;
/**
* File type to search (e.g. "js", "py", "rust")
*/
type?: string;
/**
* Output mode: "content", "files_with_matches", or "count"
*/
output_mode?: 'content' | 'files_with_matches' | 'count';
/**
* Case insensitive search
*/
'-i'?: boolean;
/**
* Show line numbers (for content mode)
*/
'-n'?: boolean;
/**
* Lines to show before each match
*/
'-B'?: number;
/**
* Lines to show after each match
*/
'-A'?: number;
/**
* Lines to show before and after each match
*/
'-C'?: number;
/**
* Limit output to first N lines/entries
*/
head_limit?: number;
/**
* Enable multiline mode
*/
multiline?: boolean;
}
```
Powerful search tool built on ripgrep with regex support.
### KillBash
**Tool name:** `KillBash`
```ts
interface KillShellInput {
/**
* The ID of the background shell to kill
*/
shell_id: string;
}
```
Kills a running background bash shell by its ID.
### NotebookEdit
**Tool name:** `NotebookEdit`
```ts
interface NotebookEditInput {
/**
* The absolute path to the Jupyter notebook file
*/
notebook_path: string;
/**
* The ID of the cell to edit
*/
cell_id?: string;
/**
* The new source for the cell
*/
new_source: string;
/**
* The type of the cell (code or markdown)
*/
cell_type?: 'code' | 'markdown';
/**
* The type of edit (replace, insert, delete)
*/
edit_mode?: 'replace' | 'insert' | 'delete';
}
```
Edits cells in Jupyter notebook files.
### WebFetch
**Tool name:** `WebFetch`
```ts
interface WebFetchInput {
/**
* The URL to fetch content from
*/
url: string;
/**
* The prompt to run on the fetched content
*/
prompt: string;
}
```
Fetches content from a URL and processes it with an AI model.
### WebSearch
**Tool name:** `WebSearch`
```ts
interface WebSearchInput {
/**
* The search query to use
*/
query: string;
/**
* Only include results from these domains
*/
allowed_domains?: string[];
/**
* Never include results from these domains
*/
blocked_domains?: string[];
}
```
Searches the web and returns formatted results.
### TodoWrite
**Tool name:** `TodoWrite`
```ts
interface TodoWriteInput {
/**
* The updated todo list
*/
todos: Array<{
/**
* The task description
*/
content: string;
/**
* The task status
*/
status: 'pending' | 'in_progress' | 'completed';
/**
* Active form of the task description
*/
activeForm: string;
}>;
}
```
Creates and manages a structured task list for tracking progress.
### ExitPlanMode
**Tool name:** `ExitPlanMode`
```ts
interface ExitPlanModeInput {
/**
* The plan to run by the user for approval
*/
plan: string;
}
```
Exits planning mode and prompts the user to approve the plan.
### ListMcpResources
**Tool name:** `ListMcpResources`
```ts
interface ListMcpResourcesInput {
/**
* Optional server name to filter resources by
*/
server?: string;
}
```
Lists available MCP resources from connected servers.
### ReadMcpResource
**Tool name:** `ReadMcpResource`
```ts
interface ReadMcpResourceInput {
/**
* The MCP server name
*/
server: string;
/**
* The resource URI to read
*/
uri: string;
}
```
Reads a specific MCP resource from a server.
## Tool Output Types
Documentation of output schemas for all built-in Claude Code tools. These types represent the actual response data returned by each tool.
### `ToolOutput`
**Note:** This is a documentation-only type for clarity. It represents the union of all tool output types.
```ts
type ToolOutput =
| TaskOutput
| BashOutput
| BashOutputToolOutput
| EditOutput
| ReadOutput
| WriteOutput
| GlobOutput
| GrepOutput
| KillBashOutput
| NotebookEditOutput
| WebFetchOutput
| WebSearchOutput
| TodoWriteOutput
| ExitPlanModeOutput
| ListMcpResourcesOutput
| ReadMcpResourceOutput;
```
### Task
**Tool name:** `Task`
```ts
interface TaskOutput {
/**
* Final result message from the subagent
*/
result: string;
/**
* Token usage statistics
*/
usage?: {
input_tokens: number;
output_tokens: number;
cache_creation_input_tokens?: number;
cache_read_input_tokens?: number;
};
/**
* Total cost in USD
*/
total_cost_usd?: number;
/**
* Execution duration in milliseconds
*/
duration_ms?: number;
}
```
Returns the final result from the subagent after completing the delegated task.
### Bash
**Tool name:** `Bash`
```ts
interface BashOutput {
/**
* Combined stdout and stderr output
*/
output: string;
/**
* Exit code of the command
*/
exitCode: number;
/**
* Whether the command was killed due to timeout
*/
killed?: boolean;
/**
* Shell ID for background processes
*/
shellId?: string;
}
```
Returns command output with exit status. Background commands return immediately with a shellId.
### BashOutput
**Tool name:** `BashOutput`
```ts
interface BashOutputToolOutput {
/**
* New output since last check
*/
output: string;
/**
* Current shell status
*/
status: 'running' | 'completed' | 'failed';
/**
* Exit code (when completed)
*/
exitCode?: number;
}
```
Returns incremental output from background shells.
### Edit
**Tool name:** `Edit`
```ts
interface EditOutput {
/**
* Confirmation message
*/
message: string;
/**
* Number of replacements made
*/
replacements: number;
/**
* File path that was edited
*/
file_path: string;
}
```
Returns confirmation of successful edits with replacement count.
### Read
**Tool name:** `Read`
```ts
type ReadOutput =
| TextFileOutput
| ImageFileOutput
| PDFFileOutput
| NotebookFileOutput;
interface TextFileOutput {
/**
* File contents with line numbers
*/
content: string;
/**
* Total number of lines in file
*/
total_lines: number;
/**
* Lines actually returned
*/
lines_returned: number;
}
interface ImageFileOutput {
/**
* Base64 encoded image data
*/
image: string;
/**
* Image MIME type
*/
mime_type: string;
/**
* File size in bytes
*/
file_size: number;
}
interface PDFFileOutput {
/**
* Array of page contents
*/
pages: Array<{
page_number: number;
text?: string;
images?: Array<{
image: string;
mime_type: string;
}>;
}>;
/**
* Total number of pages
*/
total_pages: number;
}
interface NotebookFileOutput {
/**
* Jupyter notebook cells
*/
cells: Array<{
cell_type: 'code' | 'markdown';
source: string;
outputs?: any[];
execution_count?: number;
}>;
/**
* Notebook metadata
*/
metadata?: Record<string, any>;
}
```
Returns file contents in format appropriate to file type.
### Write
**Tool name:** `Write`
```ts
interface WriteOutput {
/**
* Success message
*/
message: string;
/**
* Number of bytes written
*/
bytes_written: number;
/**
* File path that was written
*/
file_path: string;
}
```
Returns confirmation after successfully writing the file.
### Glob
**Tool name:** `Glob`
```ts
interface GlobOutput {
/**
* Array of matching file paths
*/
matches: string[];
/**
* Number of matches found
*/
count: number;
/**
* Search directory used
*/
search_path: string;
}
```
Returns file paths matching the glob pattern, sorted by modification time.
### Grep
**Tool name:** `Grep`
```ts
type GrepOutput =
| GrepContentOutput
| GrepFilesOutput
| GrepCountOutput;
interface GrepContentOutput {
/**
* Matching lines with context
*/
matches: Array<{
file: string;
line_number?: number;
line: string;
before_context?: string[];
after_context?: string[];
}>;
/**
* Total number of matches
*/
total_matches: number;
}
interface GrepFilesOutput {
/**
* Files containing matches
*/
files: string[];
/**
* Number of files with matches
*/
count: number;
}
interface GrepCountOutput {
/**
* Match counts per file
*/
counts: Array<{
file: string;
count: number;
}>;
/**
* Total matches across all files
*/
total: number;
}
```
Returns search results in the format specified by output\_mode.
### KillBash
**Tool name:** `KillBash`
```ts
interface KillBashOutput {
/**
* Success message
*/
message: string;
/**
* ID of the killed shell
*/
shell_id: string;
}
```
Returns confirmation after terminating the background shell.
### NotebookEdit
**Tool name:** `NotebookEdit`
```ts
interface NotebookEditOutput {
/**
* Success message
*/
message: string;
/**
* Type of edit performed
*/
edit_type: 'replaced' | 'inserted' | 'deleted';
/**
* Cell ID that was affected
*/
cell_id?: string;
/**
* Total cells in notebook after edit
*/
total_cells: number;
}
```
Returns confirmation after modifying the Jupyter notebook.
### WebFetch
**Tool name:** `WebFetch`
```ts
interface WebFetchOutput {
/**
* AI model's response to the prompt
*/
response: string;
/**
* URL that was fetched
*/
url: string;
/**
* Final URL after redirects
*/
final_url?: string;
/**
* HTTP status code
*/
status_code?: number;
}
```
Returns the AI's analysis of the fetched web content.
### WebSearch
**Tool name:** `WebSearch`
```ts
interface WebSearchOutput {
/**
* Search results
*/
results: Array<{
title: string;
url: string;
snippet: string;
/**
* Additional metadata if available
*/
metadata?: Record<string, any>;
}>;
/**
* Total number of results
*/
total_results: number;
/**
* The query that was searched
*/
query: string;
}
```
Returns formatted search results from the web.
### TodoWrite
**Tool name:** `TodoWrite`
```ts
interface TodoWriteOutput {
/**
* Success message
*/
message: string;
/**
* Current todo statistics
*/
stats: {
total: number;
pending: number;
in_progress: number;
completed: number;
};
}
```
Returns confirmation with current task statistics.
### ExitPlanMode
**Tool name:** `ExitPlanMode`
```ts
interface ExitPlanModeOutput {
/**
* Confirmation message
*/
message: string;
/**
* Whether user approved the plan
*/
approved?: boolean;
}
```
Returns confirmation after exiting plan mode.
### ListMcpResources
**Tool name:** `ListMcpResources`
```ts
interface ListMcpResourcesOutput {
/**
* Available resources
*/
resources: Array<{
uri: string;
name: string;
description?: string;
mimeType?: string;
server: string;
}>;
/**
* Total number of resources
*/
total: number;
}
```
Returns list of available MCP resources.
### ReadMcpResource
**Tool name:** `ReadMcpResource`
```ts
interface ReadMcpResourceOutput {
/**
* Resource contents
*/
contents: Array<{
uri: string;
mimeType?: string;
text?: string;
blob?: string;
}>;
/**
* Server that provided the resource
*/
server: string;
}
```
Returns the contents of the requested MCP resource.
## Permission Types
### `PermissionUpdate`
Operations for updating permissions.
```ts
type PermissionUpdate =
| {
type: 'addRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'replaceRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'removeRules';
rules: PermissionRuleValue[];
behavior: PermissionBehavior;
destination: PermissionUpdateDestination;
}
| {
type: 'setMode';
mode: PermissionMode;
destination: PermissionUpdateDestination;
}
| {
type: 'addDirectories';
directories: string[];
destination: PermissionUpdateDestination;
}
| {
type: 'removeDirectories';
directories: string[];
destination: PermissionUpdateDestination;
}
```
### `PermissionBehavior`
```ts
type PermissionBehavior = 'allow' | 'deny' | 'ask';
```
### `PermissionUpdateDestination`
```ts
type PermissionUpdateDestination =
| 'userSettings' // Global user settings
| 'projectSettings' // Per-directory project settings
| 'localSettings' // Gitignored local settings
| 'session' // Current session only
```
### `PermissionRuleValue`
```ts
type PermissionRuleValue = {
toolName: string;
ruleContent?: string;
}
```
## Other Types
### `ApiKeySource`
```ts
type ApiKeySource = 'user' | 'project' | 'org' | 'temporary';
```
### `ConfigScope`
```ts
type ConfigScope = 'local' | 'user' | 'project';
```
### `NonNullableUsage`
A version of [`Usage`](#usage) with all nullable fields made non-nullable.
```ts
type NonNullableUsage = {
[K in keyof Usage]: NonNullable<Usage[K]>;
}
```
### `Usage`
Token usage statistics (from `@anthropic-ai/sdk`).
```ts
type Usage = {
input_tokens: number | null;
output_tokens: number | null;
cache_creation_input_tokens?: number | null;
cache_read_input_tokens?: number | null;
}
```
### `CallToolResult`
MCP tool result type (from `@modelcontextprotocol/sdk/types.js`).
```ts
type CallToolResult = {
content: Array<{
type: 'text' | 'image' | 'resource';
// Additional fields vary by type
}>;
isError?: boolean;
}
```
### `AbortError`
Custom error class for abort operations.
```ts
class AbortError extends Error {}
```
## See also
* [SDK overview](/en/docs/agent-sdk/overview) - General SDK concepts
* [Python SDK reference](/en/docs/agent-sdk/python) - Python SDK documentation
* [CLI reference](https://code.claude.com/docs/en/cli-reference) - Command-line interface
* [Common workflows](https://code.claude.com/docs/en/common-workflows) - Step-by-step guides
Was this page helpful?