> ## Documentation Index
> Fetch the complete documentation index at: https://docs.snorbe.deskrex.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List Tools

> Retrieve the catalog of tools the agent can invoke internally

# List Tools

Returns the catalog of tools the agent can invoke internally during `POST /agent/run` / `POST /agent/run/stream` execution. Use this to surface agent capabilities in your UI or to validate tool availability ahead of time.

<Note>
  No authentication required (public). The endpoint returns a static catalog that does not depend on the workspace.
</Note>

## Request

```
GET /api/v1/agent/tools
```

No headers or query parameters required.

## Response

```json theme={null}
{
  "tools": [
    {
      "id": "search",
      "displayName": "Web Search",
      "category": "research",
      "description": "General web search with query generation, SERP selection, scraping, and summary."
    },
    {
      "id": "x_search",
      "displayName": "X Search",
      "category": "research",
      "description": "Search posts on X (Twitter) with optional date range and account filters."
    },
    {
      "id": "plan",
      "displayName": "Plan",
      "category": "generation",
      "description": "Draft a multi-step research plan for human review before executing the full workflow."
    },
    {
      "id": "confirm_plan",
      "displayName": "Confirm Plan",
      "category": "hitl",
      "description": "Confirm a plan draft and start execution."
    },
    {
      "id": "mention_agent",
      "displayName": "Mention Agent",
      "category": "agent_integration",
      "description": "Hand off work to another agent referenced in the input via agent:// mention."
    }
  ]
}
```

### Response fields

| Field                 | Type       | Description                                                        |
| --------------------- | ---------- | ------------------------------------------------------------------ |
| `tools[].id`          | `string`   | Internal tool identifier used by the agent                         |
| `tools[].displayName` | `string`   | Human-readable label for UI display                                |
| `tools[].category`    | `string`   | Category bucket. See below                                         |
| `tools[].description` | `string`   | Short description of the tool's behavior                           |
| `tools[].trigger?`    | `string`   | Trigger conditions in the chat-routing prompt (when applicable)    |
| `tools[].inputs?`     | `string`   | Primary input parameters (when applicable)                         |
| `tools[].modes?`      | `string[]` | Supported modes (e.g. matrix's `create` / `edit` / `continue`)     |
| `tools[].flow?`       | `string[]` | Ordered internal workflow steps                                    |
| `tools[].sseEvents?`  | `string[]` | Related SSE event names emitted by this tool                       |
| `tools[].notes?`      | `string`   | Additional notes (external endpoints, post-completion hooks, etc.) |

`trigger` / `inputs` / `modes` / `flow` / `sseEvents` / `notes` are optional — only tools that carry them will include them.

### Categories

| Value               | Meaning                                                                                           |
| ------------------- | ------------------------------------------------------------------------------------------------- |
| `research`          | Information gathering — web search, X search, browser automation, source summary, RAG recall      |
| `generation`        | Structured content generation — plans, reports, matrices                                          |
| `hitl`              | Draft confirmation / regeneration / abort tools invoked by the LLM during human-in-the-loop flows |
| `agent_integration` | Delegation to other agents (`mention_agent`), skill execution, agent memory refresh               |
| `internal`          | Sub-tools not routed directly from `chat-routing` (e.g., SERP selection, in-browser helpers)      |

<Tip>
  This endpoint is the **source of truth** for the agent's tool set. Prefer the API response over any documentation that lists tools by name.
</Tip>

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://app.snorbe.deskrex.ai/api/v1/agent/tools"
  ```

  ```python Python theme={null}
  import requests

  resp = requests.get("https://app.snorbe.deskrex.ai/api/v1/agent/tools")
  tools = resp.json()["tools"]
  for tool in tools:
      print(f"[{tool['category']}] {tool['id']} — {tool['displayName']}")
  ```

  ```typescript TypeScript theme={null}
  const resp = await fetch("https://app.snorbe.deskrex.ai/api/v1/agent/tools");
  const { tools } = await resp.json();
  for (const tool of tools) {
    console.log(`[${tool.category}] ${tool.id} — ${tool.displayName}`);
  }
  ```
</CodeGroup>

## Error responses

| HTTP status | Code                | Description                |
| ----------- | ------------------- | -------------------------- |
| 429         | `TOO_MANY_REQUESTS` | Rate limit exceeded (rare) |

## Related

* [Execute Agent (non-streaming)](/en/api-reference/execute-agent)
* [Execute Agent (SSE streaming)](/en/api-reference/stream-agent-run)
* [Agent Execution Flow](/en/api-reference/agent-workflows)
