> Source: https://wexa.ai/docs/connectors/list-connector-catalog

# list-connector-catalog

List every connector Wexa offers, whether or not this project has configured it, with each one's actions. Needs the `fabric:orchestrate.read` grant.

**Search the connector catalog**

**Wexa MCP server**

```bash
curl -sS -X POST https://fabric.wexa.ai/mcp/$FABRIC_PROJECT_ID \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "Mcp-Session-Id: $MCP_SESSION_ID" \
  -H "content-type: application/json" -H "accept: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list-connector-catalog","arguments":{"search":"duckduckgo"}}}'
```

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000011\",\"result\":{\"connectors\":[{\"category\":\"duckduckgo\",\"name\":\"DuckDuckGo\",\"connector_type\":\"system\",\"configured\":true,\"provisionable\":true,\"actions\":[{\"action\":\"search\",\"name\":\"Search\"}]}],\"total\":1}}"
    }
  ],
  "isError": false
}
```

**REST API**

```bash
curl -sS https://fabric.wexa.ai/v1/list-connector-catalog \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "content-type: application/json" \
  -d '{"search":"duckduckgo"}'
```

```json
{
  "lifecycle_id": "qlc_000011",
  "result": {
    "connectors": [
      {
        "category": "duckduckgo",
        "name": "DuckDuckGo",
        "connector_type": "system",
        "configured": true,
        "provisionable": true,
        "actions": [
          {
            "action": "search",
            "name": "Search"
          }
        ]
      }
    ],
    "total": 1
  }
}
```

**TypeScript SDK**

```ts
import { Fabric } from '@wexa-fabric/sdk'

const fabric = new Fabric()
const result = await fabric.listConnectorCatalog({
  search: 'duckduckgo'
})
```

```ts
// result is the payload itself, with no `.result` to read
{
  connectors: [
    {
      category: 'duckduckgo',
      name: 'DuckDuckGo',
      connector_type: 'system',
      configured: true,
      provisionable: true,
      actions: [
        {
          action: 'search',
          name: 'Search'
        }
      ]
    }
  ],
  total: 1
}
```

**Python SDK**

```python
from wexa import Fabric

fabric = Fabric()
out = fabric.list_connector_catalog(
    search="duckduckgo",
)
```

```python
# out is the result, already unwrapped
{
    "connectors": [
        {
            "category": "duckduckgo",
            "name": "DuckDuckGo",
            "connector_type": "system",
            "configured": True,
            "provisionable": True,
            "actions": [
                {
                    "action": "search",
                    "name": "Search"
                }
            ]
        }
    ],
    "total": 1
}
```

## Parameters

| Parameter | Type | Required | Notes |
| --- | --- | --- | --- |
| `search` | string | Optional | Only connectors whose name, category, description or actions contain this text. |
| `category` | string | Optional | Exactly one connector, by category, e.g. `slack`. A category that matches nothing is not an error: it returns an empty `connectors`, `total: 0` and a `note`. |
| `schemas` | boolean | Optional | Include each action's input and output fields (id, label, type, required), read from the action's own models. Use it to work out which action's output can fill another's input. |
| `forms` | boolean | Optional | Include each connector's setup form (`ui_form`: the fields to fill in), as the console's create page reads it. `get-connector-form` returns one category's. |

**Show full response**

An example response, for `search` set to `duckduckgo`, in a project that has DuckDuckGo configured.

**Result of list-connector-catalog**

**REST API**

```json
{
  "lifecycle_id": "qlc_000011",
  "result": {
    "connectors": [
      {
        "category": "duckduckgo",
        "name": "DuckDuckGo",
        "description": "DuckDuckGo Instant Answer API connector for quick answers like abstracts, related topics, and more.",
        "logo": null,
        "group": null,
        "connector_type": "system",
        "needs_credentials": false,
        "configured": true,
        "provisionable": true,
        "actions": [
          {
            "action": "search",
            "name": "Search",
            "description": "Search DuckDuckGo Instant Answer API and return abstract and related topics."
          }
        ]
      }
    ],
    "total": 1
  }
}
```

**Wexa MCP server**

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000011\",\"result\":{\"connectors\":[{\"category\":\"duckduckgo\",\"name\":\"DuckDuckGo\",\"description\":\"DuckDuckGo Instant Answer API connector for quick answers like abstracts, related topics, and more.\",\"logo\":null,\"group\":null,\"connector_type\":\"system\",\"needs_credentials\":false,\"configured\":true,\"provisionable\":true,\"actions\":[{\"action\":\"search\",\"name\":\"Search\",\"description\":\"Search DuckDuckGo Instant Answer API and return abstract and related topics.\"}]}],\"total\":1}}"
    }
  ],
  "isError": false
}
```

**TypeScript SDK**

```ts
// the object you get back IS the result — there is no `.result` to read
{
  "connectors": [
    {
      "category": "duckduckgo",
      "name": "DuckDuckGo",
      "description": "DuckDuckGo Instant Answer API connector for quick answers like abstracts, related topics, and more.",
      "logo": null,
      "group": null,
      "connector_type": "system",
      "needs_credentials": false,
      "configured": true,
      "provisionable": true,
      "actions": [
        {
          "action": "search",
          "name": "Search",
          "description": "Search DuckDuckGo Instant Answer API and return abstract and related topics."
        }
      ]
    }
  ],
  "total": 1
}

// The TS SDK names these camelCase — lifecycleId, traceId — where Python uses
// lifecycle_id and trace_id. Both are non-enumerable: readable, but omitted by
// Object.keys() and JSON.stringify(). `result.lifecycleId` here is undefined.
result.lifecycleId // 'qlc_000011'
```

**Python SDK**

```python
# a dict subclass; `result` is already unwrapped
{
 "connectors": [
  {
   "category": "duckduckgo",
   "name": "DuckDuckGo",
   "description": "DuckDuckGo Instant Answer API connector for quick answers like abstracts, related topics, and more.",
   "logo": None,
   "group": None,
   "connector_type": "system",
   "needs_credentials": False,
   "configured": True,
   "provisionable": True,
   "actions": [
    {
     "action": "search",
     "name": "Search",
     "description": "Search DuckDuckGo Instant Answer API and return abstract and related topics."
    }
   ]
  }
 ],
 "total": 1
}

out.lifecycle_id  # 'qlc_000011' — an attribute, not a key
```

Keeping the `lifecycle_id` is what lets you ask later why a call was allowed, refused or held.

**More details**

**Response fields**

- `connectors`: The connectors, each with the fields below.
- `total`: How many connectors came back.
- `note`: Present only when `category` matched nothing. It says to drop `category` and use `search` instead.

Each connector has these fields:

- `category`: The connector's key, for example `duckduckgo`. Pass it as `category` to the other connector tools.
- `name`, `description`: The connector's name and what it does.
- `logo`, `group`: Its logo and the group the console files it under. Either can be `null`.
- `connector_type`: `user`, `system` or `external`.
- `needs_credentials`: `true` when the connector has a setup form to fill in. Connect it with `configure-connector`.
- `configured`: `true` when this project already has one configured. A placeholder that `request-connector` created and nobody has configured does not count.
- `provisionable`: `true` when `provision-connector` can connect it without credentials.
- `actions`: Each enabled action's `action` (its key), `name` and `description`. With `schemas`, also `inputs` and `outputs`: each field's `id`, `label`, `type`, `required` and `description`.
- `ui_form`: Present only with `forms`: the connector's setup form, or `null` when it has none.

A connector with no enabled action is not listed.

Each connector comes with its category, its type, whether it needs credentials, whether it is configured in this project, whether [`provision-connector`](/docs/connectors/provision-connector) can connect it without credentials, and the key, name and description of each enabled action. Connectors this project has configured come first, then the rest, each part in name order. A connector with no enabled action is not listed.

[`list-connectors`](/docs/connectors/list-connectors) shows only the connectors someone has set up. This is the other half: use it to design work against a connector nobody has configured yet, or to find the category to pass to [`get-connector-form`](/docs/connectors/get-connector-form) and [`configure-connector`](/docs/connectors/configure-connector).

Every parameter is optional: a bare call answers with the whole catalog.

Only reads, so not marked consequential: it is audited lightly and is never held for approval. It still consumes quota and is still refused by policy like anything else.

Every tool call works the same way: [How every tool call works](/docs/sdks-and-apis/how-every-tool-call-works).
