Documentation Index
Fetch the complete documentation index at: https://agentclientprotocol.com/llms.txt Use this file to discover all available pages before exploring further.
Tool Calls
How Agents report tool call execution
Tool calls represent actions that language models request Agents to perform during a prompt turn. When an LLM determines it needs to interact with external systems—like reading files, running code, or fetching data—it generates tool calls that the Agent executes on its behalf.
Agents report tool calls through session/update notifications, allowing Clients to display real-time progress and results to users.
While Agents handle the actual execution, they may leverage Client capabilities like permission requests or file system access to provide a richer, more integrated experience.
Creating
When the language model requests a tool invocation, the Agent SHOULD report it to the Client:
{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "sess_abc123def456",
"update": {
"sessionUpdate": "tool_call",
"toolCallId": "call_001",
"title": "Reading configuration file",
"kind": "read",
"status": "pending"
}
}
}Tool kinds help Clients choose appropriate icons and optimize how they display tool execution progress.
Updating
As tools execute, Agents send updates to report progress and results.
Updates use the session/update notification with tool_call_update:
{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "sess_abc123def456",
"update": {
"sessionUpdate": "tool_call_update",
"toolCallId": "call_001",
"status": "in_progress",
"content": [
{
"type": "content",
"content": {
"type": "text",
"text": "Found 3 configuration files..."
}
}
]
}
}
}
All fields except toolCallId are optional in updates. Only the fields being changed need to be included.
Requesting Permission
The Agent MAY request permission from the user before executing a tool call by calling the session/request_permission method:
{
"jsonrpc": "2.0",
"id": 5,
"method": "session/request_permission",
"params": {
"sessionId": "sess_abc123def456",
"toolCall": {
"toolCallId": "call_001"
},
"options": [
{
"optionId": "allow-once",
"name": "Allow once",
"kind": "allow_once"
},
{
"optionId": "reject-once",
"name": "Reject",
"kind": "reject_once"
}
]
}
}The Client responds with the user’s decision:
{
"jsonrpc": "2.0",
"id": 5,
"result": {
"outcome": {
"outcome": "selected",
"optionId": "allow-once"
}
}
}
Clients MAY automatically allow or reject permission requests according to the user settings.
If the current prompt turn gets cancelled, the Client MUST respond with the "cancelled" outcome:
{
"jsonrpc": "2.0",
"id": 5,
"result": {
"outcome": {
"outcome": "cancelled"
}
}
}Permission Options
Each permission option provided to the Client contains:
allow_once- Allow this operation only this timeallow_always- Allow this operation and remember the choicereject_once- Reject this operation only this timereject_always- Reject this operation and remember the choice
Status
Tool calls progress through different statuses during their lifecycle:
Content
Tool calls can produce different types of content:
Regular Content
Standard content blocks like text, images, or resources:
{
"type": "content",
"content": {
"type": "text",
"text": "Analysis complete. Found 3 issues."
}
}Diffs
File modifications shown as diffs:
{
"type": "diff",
"path": "/home/user/project/src/config.json",
"oldText": "{\n \"debug\": false\n}",
"newText": "{\n \"debug\": true\n}"
}Terminals
Live terminal output from command execution:
{
"type": "terminal",
"terminalId": "term_xyz789"
}When a terminal is embedded in a tool call, the Client displays live output as it’s generated and continues to display it even after the terminal is released.
Following the Agent
Tool calls can report file locations they’re working with, enabling Clients to implement “follow-along” features that track which files the Agent is accessing or modifying in real-time.
{
"path": "/home/user/project/src/main.py",
"line": 42
}Last updated Oct 08, 2026