Developers

Calab as a platform

Bots, LLM agents and your own apps use the same API as Calab itself: chat, tasks, calendar, voice.

Bots

A bot is a member like everyone else

Create a bot in the workspace settings and give it a role — it uses the same API as the app: chats, tasks, the calendar, members and voice.

  • Chat

    Reads and writes messages in every room and DM it can access, replies, reacts, sends files and stickers. Events arrive in real time over WebSocket.

  • Tasks

    Creates and edits tasks on boards, assigns people, comments and searches. A board is visible to a bot the way it is to a person with the same role.

  • Voice

    Joins a voice room through LiveKit: hears the participants and speaks — text to speech, echo, music, recording. On Node, Python or Go.

  • Calendar

    Schedules and moves meetings, checks free/busy and finds a time for several people. The bot is the organiser; emails go out “on behalf of the bot”.

  • Members

    Opens a member’s profile with their open tasks, renames, invites by link and email, awards badges — within the role’s permissions.

  • Meeting recording

    Starts and stops recording of a voice room — the transcript and summary arrive as a card in the chat. Needs the “Recordings” permission.

  • Commands and buttons

    Registers /commands that the composer suggests on “/”, and attaches buttons under messages — a press reaches the bot as an event.

  • Webhook

    No permanent connection: events arrive as a POST with an HMAC signature and retries on failures. Convenient for serverless.

Rights come from roles, as for people: a bot sees only the rooms it was let into.

MCP

MCP: connect any LLM to Calab

Claude, an IDE agent or your own model works in Calab as a bot: it searches, reads, creates tasks and posts to rooms. The client needs only an address and a bot token.

  • One endpoint

    POST /api/mcp — the Model Context Protocol over HTTP. No adapters, no sessions.

  • Sign in with a bot token

    The bot token goes in the Authorization header. People’s tokens are refused.

  • The bot’s rights, no more

    A tool calls the regular API with the same token: the same permissions and limits, private boards and rooms stay closed.

  • Saves tokens

    One-line tool descriptions and compact answers; the full object only on request.

# Streamable HTTP
url: https://app.calab.io/api/mcp
Authorization: Bearer calab_bot_…

Six tools

  • find — find tasks, messages, rooms and boards
  • read — read a task or a room’s messages
  • create_task — create a task
  • comment_task — comment on a task
  • set_task_status — change a task’s status
  • send_message — post to a room

A bot token is shown once, when it is created.

@calaba/bot-sdk

TypeScript SDK

Commands, buttons, events and voice in a few lines of code.

import { Bot } from '@calaba/bot-sdk';const bot = new Bot(process.env.BOT_TOKEN, {  server: 'https://app.calab.io',});await bot.commands([{ name: 'standup', description: 'Start' }]);// "/standup" → a message with a buttonbot.on('command', (c) =>  bot.send(c.message.roomId, {    text: 'Stand-up time. Record it?',    inlineKeyboard: { rows: [{ buttons: [      { id: 'rec', label: 'Record', data: 'standup' },    ] }] },  }),);// pressed → start the meeting recordingbot.on('callback', (cb) => {  if (cb.buttonId === 'rec') bot.recording.start(cb.roomId);});await bot.start();
A stand-up bot in TypeScript. The echo bot, the voice examples and a Python listener are in examples/bots. The full reference of endpoints and events is in the docs.

Webhooks

Events without a persistent connection: an HMAC-signed POST with retries on failure.

  • Bot webhook: messages, reactions, tasks, meetings, buttons
  • HMAC-SHA256 signature in X-Calab-Signature
  • Retries on failure and an event queue
  • Board webhook: every task change (Business and up)

OAuth 2.0 · OpenID Connect

Sign in with Calab

OAuth 2.0 and OpenID Connect: your internal services let employees in with their Calab account.

  • Authorization Code + PKCE (S256)
  • A consent screen with scopes
  • userinfo, refresh and token revocation
  • Clients are created in workspace settings