## List host-side tools

**get** `/api/v1/tools`

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.

### Returns

- `object: "list"`

  - `"list"`

- `data: array of object { server_label, type, name, 10 more }`

  - `server_label: string`

    The `server_label` to reference this connector by in a request, e.g. `{ "type": "mcp", "server_label": "slack" }`.

  - `type: "mcp"`

    Responses API tool type to send in the `tools` array.

    - `"mcp"`

  - `name: string`

  - `description: string`

  - `auth: "none" or "platform" or "caller" or "connection"`

    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.

    - `"none"`

    - `"platform"`

    - `"caller"`

    - `"connection"`

  - `connect: "oauth" or "secret"`

    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.

    - `"oauth"`

    - `"secret"`

  - `connect_path: string`

    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`

    URL of the connector's logo, for showing it in a UI. Null for tools without one.

  - `mode: "hosted_proxy" or "remote_mcp"`

    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.

    - `"hosted_proxy"`

    - `"remote_mcp"`

  - `default_require_approval: "always" or "never"`

    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.

    - `"always"`

    - `"never"`

  - `required_scope: string`

    Scope a scoped API key must hold to use this tool.

  - `available: boolean`

    Whether this caller can use the tool right now.

  - `unavailable_reason: optional "not_implemented" or "disabled" or "requires_plan" or "requires_scope"`

    Why the tool is unavailable. Returned rather than omitting the tool, so a caller can tell "not on your plan" from "does not exist".

    - `"not_implemented"`

    - `"disabled"`

    - `"requires_plan"`

    - `"requires_scope"`

### Example

```http
curl https://api.prod.adaptionlabs.ai/api/v1/tools \
    -H "Authorization: Bearer $ADAPTION_API_KEY"
```

#### Response

```json
{
  "object": "list",
  "data": [
    {
      "server_label": "slack",
      "type": "mcp",
      "name": "Slack",
      "description": "description",
      "auth": "connection",
      "connect": "oauth",
      "connect_path": "/oauth/slack/connect",
      "logo_url": "https://proteus-prod-public.s3.us-east-1.amazonaws.com/connectors/slack.svg",
      "mode": "remote_mcp",
      "default_require_approval": "never",
      "required_scope": "mcp:slack",
      "available": false,
      "unavailable_reason": "not_implemented"
    }
  ]
}
```
