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 boardsread— read a task or a room’s messagescreate_task— create a taskcomment_task— comment on a taskset_task_status— change a task’s statussend_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();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
