---
title: "List host-side tools"
method: GET
path: "/api/v1/tools"
tags: ["tools"]
---

# List host-side tools

`GET /api/v1/tools`

## Request

- The document declares no server URL.
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/adaptionlabs/apis/adaption-api/docs/api/v1/tools/get.ts> (a function with typed inputs; its response is checked against the schema)

Lists the tools the orchestrator can run inside a turn, each annotated with whether this caller can use it. Tools the caller cannot use are returned with a reason rather than hidden.

## Response `200`

- ListToolsResponseDto
  - `object` 'list', required
  - `data` HostedToolDto[], required
    - `server_label` string, required: The `server_label` to reference this connector by in a request, e.g. `{ "type": "mcp", "server_label": "slack" }`.
    - `type` 'mcp', required: Responses API tool type to send in the `tools` array.
    - `name` string, required
    - `description` string, required
    - `auth` 'none' | 'platform' | 'caller' | 'connection', required: Where the outbound credential comes from. `connection` tools use a connection you authorise once, or an `authorization` passed on the request; `caller` tools always take it from the request.
    - `connect` 'oauth' | 'secret', nullable, required: How a `connection` tool is connected: `oauth` through the browser flow at `connect_path`, `secret` by storing one with POST /connections. Null for tools that use no stored connection.
    - `connect_path` string, nullable, required: For an `oauth` tool, the GET path (under the API prefix) that starts its browser connect flow — usually /oauth/{server_label}/connect; Google Drive uses /oauth/google/connect, the shared "Connect Google". Null for tools not connected through OAuth.
    - `logo_url` string, nullable, required: URL of the connector's logo, for showing it in a UI. Null for tools without one.
    - `mode` 'hosted_proxy' | 'remote_mcp', required: How the tool connects. `hosted_proxy`: we run the MCP server against the provider API. `remote_mcp`: we connect as a client to the vendor-hosted MCP server.
    - `default_require_approval` 'always' | 'never', required: Approval posture applied when the request's tool entry does not set `require_approval`. Defaults to `never`; callers may require approval for all tools or specific write tools.
    - `required_scope` string, required: Scope a scoped API key must hold to use this tool.
    - `available` boolean, required: Whether this caller can use the tool right now.
    - `unavailable_reason` 'not_implemented' | 'disabled' | 'requires_plan' | 'requires_scope', nullable: Why the tool is unavailable. Returned rather than omitting the tool, so a caller can tell "not on your plan" from "does not exist".

## Changes

- **2026-10-30** `2d313f8e0922`: 1 breaking
  - the `data/items/connect_path` response's property type changed from `object` to `string` for status `200`
- **2026-10-29** `b38d4dc031db`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adaptionlabs/apis/adaption-api/changes/api/v1/tools/get.md)

---

[API](https://skmtc.dev/adaptionlabs/apis/adaption-api.md) - [All operations](https://skmtc.dev/adaptionlabs/apis/adaption-api/llms.txt) - [OpenAPI document](https://skmtc.dev/adaptionlabs/apis/adaption-api/revisions/d4cf908c19a0?raw)
