---
title: "List a connector’s tools for writing a restriction"
method: GET
path: "/restriction/connector/{slug}/tools"
tags: ["Restrictions"]
---

# List a connector’s tools for writing a restriction

`GET /restriction/connector/{slug}/tools`

## Request

- Base URL: `https://api.elaichi.ai`
- URL: `https://api.elaichi.ai/restriction/connector/{slug}/tools`
- Auth: HTTP bearer

Lists every tool a connector defines (name, person-readable label, description, resource and method), for picking `tools[].tool_name` values in a restriction. Unlike `GET /connector/{slug}/tools`, this answers regardless of the caller’s own restrictions: that route returns `403` for a connector the caller is blocked from, which would leave a member unable to narrow a rule that blocks them to specific tools. Reading the catalog grants nothing: execution, connections and toolbox pins still apply the caller’s restrictions, and the write routes still decide whether the caller may write the rule. Requires `restriction:manage` and `connector:view` (browsing the catalog needs the latter everywhere; this route drops only the caller’s use-side restriction). Cursor-paged by `name`. For an organization’s remote MCP connector the rows are the org’s registry of tool names (turned-off ones included, with `status`, `tier` and `title`), `resource` is `mcp`, `method` is the upstream tool name, and `operation_counts` is not returned.

## Path parameters

- `slug` string, required

## Query parameters

- `limit` integer
- `cursor` string
- `q` string
- `operation` string

## Headers

- `X-Organization-Id` string

## Response `200`

OK

- object
  - `result` object[], required
    - `name` string: Exact tool name — what `tools[].tool_name` must contain.
    - `tool_label` string: The same phrase a saved rule’s `tools[].tool_label` carries for this tool, so a tool reads the same in the picker as on the saved rule.
    - `description` string
    - `resource` string
    - `method` string
    - `operation` 'read' | 'create' | 'update' | 'delete' | 'other': Same CRUD bucket as on `GET /connector/{slug}/tools`. Filter with `?operation=`.
    - `title` string: The remote MCP server's human title for the tool, as on `GET /connector/{slug}/tools`. Present only on a remote MCP tool that has one.
    - `tier` 'read' | 'write' | 'destructive': Always present, as on `GET /connector/{slug}/tools`: how the approval gate and the MCP scope ladder classify this tool. For a remote MCP tool, the server’s label. Read `kind` to tell a remote MCP tool, never this field.
    - `kind` 'catalog' | 'remote_mcp': `remote_mcp` for a tool from an organization's remote MCP connector, else `catalog`.
    - `status` 'active' | 'disabled': Whether a remote MCP tool is on in the organization's registry (`disabled`: a manager turned it off). Present only on a remote MCP tool, where `operation_counts` is not returned; absent on a catalog tool.
  - `next_cursor` string, nullable, required
  - `prev_cursor` string, nullable, required
  - `operation_counts` object, required: How many tools of each CRUD bucket the `q` filter alone leaves — never narrowed further by `operation` itself, so the count beside an unselected filter chip stays honest. Repeated on every page.
    - `read` integer, required
    - `create` integer, required
    - `update` integer, required
    - `delete` integer, required
    - `other` integer, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited

---

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