Channel Connectors

Slack / Discord / Telegram bridges.

8 actions. Each is callable by the agent as a tool, over HTTP via /api/invoke, and (usually) from a UI page.

channels.catalog

GET

List supported channel providers (Slack, Discord, Telegram, WhatsApp, Teams, Gmail, Webex, Google Chat, …) with their capabilities, webhook path, and auth hints.

  • AI tool: channels_catalog
  • API: GET /api/invoke/channels.catalog

Input

No parameters.

JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

channels.list

GET

List configured channel connectors. Prefer filtering by projectId — connectors are scoped per workspace × project.

  • AI tool: channels_list
  • API: GET /api/invoke/channels.list

Input

Field Type Required Description
provider "slack" | "discord" | "telegram" | "whatsapp" | "teams" | "imessage" | "signal" | "email-imap" | "webex" | "google-chat" | "sms" | "composio"
active boolean
projectId string
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "slack",
        "discord",
        "telegram",
        "whatsapp",
        "teams",
        "imessage",
        "signal",
        "email-imap",
        "webex",
        "google-chat",
        "sms",
        "composio"
      ]
    },
    "active": {
      "type": "boolean"
    },
    "projectId": {
      "type": "string",
      "minLength": 1
    }
  }
}

channels.get

GET

Get a connector + recent event audit log.

  • AI tool: channels_get
  • API: GET /api/invoke/channels.get

Input

Field Type Required Description
id string yes
eventLimit integer
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "eventLimit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "id"
  ]
}

channels.create

POST · mutating

Add a new channel connector scoped to a project. Configure provider, mode (native/composio/simulated), assigned agent, and provider-specific config (bot tokens, signing secrets, etc.).

  • AI tool: channels_create
  • API: POST /api/invoke/channels.create

Input

Field Type Required Description
provider "slack" | "discord" | "telegram" | "whatsapp" | "teams" | "imessage" | "signal" | "email-imap" | "webex" | "google-chat" | "sms" | "composio" yes
mode "native" | "composio" | "simulated"
name string yes
description string
config object
assignedToActorId string
mentionRequired boolean
allowlistChannelIds string[]
denylistUserIds string[]
composioConnectionId string
projectId string yes
subjectId string
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "slack",
        "discord",
        "telegram",
        "whatsapp",
        "teams",
        "imessage",
        "signal",
        "email-imap",
        "webex",
        "google-chat",
        "sms",
        "composio"
      ]
    },
    "mode": {
      "type": "string",
      "enum": [
        "native",
        "composio",
        "simulated"
      ]
    },
    "name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "assignedToActorId": {
      "type": "string",
      "minLength": 1
    },
    "mentionRequired": {
      "type": "boolean"
    },
    "allowlistChannelIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "denylistUserIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "composioConnectionId": {
      "type": "string"
    },
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "subjectId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "provider",
    "name",
    "projectId"
  ]
}

channels.update

PATCH · mutating

Update a channel connector (name, config, assigned agent, mention gate, etc.).

  • AI tool: channels_update
  • API: PATCH /api/invoke/channels.update

Input

Field Type Required Description
id string yes
patch object yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "patch": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "provider": {
          "type": "string",
          "enum": [
            "slack",
            "discord",
            "telegram",
            "whatsapp",
            "teams",
            "imessage",
            "signal",
            "email-imap",
            "webex",
            "google-chat",
            "sms",
            "composio"
          ]
        },
        "mode": {
          "default": "simulated",
          "type": "string",
          "enum": [
            "native",
            "composio",
            "simulated"
          ]
        },
        "name": {
          "type": "string"
        },
        "description": {
          "default": "",
          "type": "string"
        },
        "config": {
          "default": {},
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        "assignedToActorId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "mentionRequired": {
          "default": true,
          "type": "boolean"
        },
        "allowlistChannelIds": {
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "denylistUserIds": {
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "subjectId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "composioConnectionId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "active": {
          "default": true,
          "type": "boolean"
        },
        "lastEventAt": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ]
        },
        "lastError": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "createdAt": {},
        "updatedAt": {}
      }
    }
  },
  "required": [
    "id",
    "patch"
  ]
}

channels.delete

DELETE · mutating

Delete a channel connector. Audit events are preserved via FK cascade.

  • AI tool: channels_delete
  • API: DELETE /api/invoke/channels.delete

Input

Field Type Required Description
id string yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ]
}

channels.test

POST

Run the adapter's self-test (e.g. Slack auth.test, Telegram getMe). Returns { ok, detail }.

  • AI tool: channels_test
  • API: POST /api/invoke/channels.test

Input

Field Type Required Description
id string yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ]
}

channels.simulate_inbound

POST · mutating

Inject a synthetic inbound event into a connector — useful for dev/test without a real provider. Bypasses signature verification.

  • AI tool: channels_simulate_inbound
  • API: POST /api/invoke/channels.simulate_inbound

Input

Field Type Required Description
id string yes
body string yes
externalAuthorHandle string
externalChannelId string
isMention boolean
isDirectMessage boolean
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "body": {
      "type": "string"
    },
    "externalAuthorHandle": {
      "default": "test-user",
      "type": "string"
    },
    "externalChannelId": {
      "default": "test-channel",
      "type": "string"
    },
    "isMention": {
      "default": true,
      "type": "boolean"
    },
    "isDirectMessage": {
      "default": false,
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "body"
  ]
}