kalagh-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KALAGH_WS_URL | No | Socket.IO URL, e.g. https://kalagh-ws.smg.tr. Required for ws. When set, provider events are buffered for events_recent. | |
| KALAGH_API_KEY | Yes | The provider's API_KEY. Sent as x-api-key (REST), in the handshake (Socket.IO), or as x-api-key metadata (gRPC). | |
| KALAGH_API_URL | Yes | REST base, e.g. https://kalagh.smg.tr (no /api/kalagh). Always needed: the tool list, uploads and /storage downloads use it. | |
| KALAGH_GRPC_TLS | No | TLS on the gRPC channel. Default is TLS, except for loopback. grpcs:// in the URL forces it on, and grpc:// or false turns it off. Plaintext is the default only for localhost/127.0.0.1/::1, because the key travels in the call metadata. | |
| KALAGH_GRPC_URL | No | host:port, e.g. kalagh-grpc.smg.tr:443. Required for grpc. A local provider is grpc://localhost:4002. When set (and no socket URL is), provider events come from StreamEvents. | |
| KALAGH_READ_ONLY | No | When true, only the tools that read are listed. | false |
| KALAGH_TRANSPORT | No | Transport to use: http, ws or grpc. | http |
| KALAGH_TIMEOUT_MS | No | Per-call timeout in milliseconds. | 60000 |
| KALAGH_DOWNLOAD_DIR | No | Where avatars, media and storage downloads are written. Defaults to $TMPDIR/kalagh-mcp. | |
| KALAGH_STORAGE_ORIGINS | No | Comma-separated origins storage_get may download from besides the provider's own, e.g. the object store behind presigned attachment links. Nothing else is ever fetched. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| channels_aliasesC | The identity pairings this channel observed (e.g. WhatsApp LID ↔ phone JID) (POST /api/kalagh/channels/aliases · gRPC GetPlatformAliases · socket "channels/aliases") |
| channels_createC | Create a channel and return its first QR code / state (POST /api/kalagh/channels/create · gRPC CreateChannel · socket "channels/create") |
| channels_credentials_patchA | Deep-merge fields into a channel’s stored credentials Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/channels/credentials/patch · gRPC PatchChannelCredentials · socket "channels/credentials/patch") |
| channels_deleteB | Delete a channel and everything that hangs off it Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/channels/delete · gRPC DeleteChannel · socket "channels/delete") |
| channels_getC | One channel by row id or by the connected account id (POST /api/kalagh/channels/get · gRPC GetChannel · socket "channels/get") |
| channels_listD | A page of channels (POST /api/kalagh/channels/list · gRPC GetChannels · socket "channels/list") |
| channels_request_qrB | A fresh login QR code for a channel awaiting pairing (POST /api/kalagh/channels/request-qr · gRPC RequestQRCode · socket "channels/request-qr") |
| channels_restartB | Reconnect the channel’s session, keeping its pairing (POST /api/kalagh/channels/restart · gRPC RestartChannel · socket "channels/restart") |
| channels_terminateB | Log the channel out of the platform (pairing is dropped) Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/channels/terminate · gRPC TerminateChannel · socket "channels/terminate") |
| channels_unloadB | Drop the channel’s session from memory without logging out (POST /api/kalagh/channels/unload · gRPC UnloadChannel · socket "channels/unload") |
| channels_updateB | Change a channel’s title, webhook, event and logging settings Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/channels/update · gRPC UpdateChannel · socket "channels/update") |
| chats_add_participantB | Add a participant to a chat Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/add-participant · gRPC AddChatParticipant · socket "chats/add-participant") |
| chats_archiveC | Archive a chat (POST /api/kalagh/chats/archive · gRPC ArchiveChat · socket "chats/archive") |
| chats_createC | Create a chat (a group, where the platform has them) Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/create · gRPC CreateChat · socket "chats/create") |
| chats_deleteB | Soft-delete a chat Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/delete · gRPC DeleteChat · socket "chats/delete") |
| chats_getB | One chat by row id, or by platform id within a channel (POST /api/kalagh/chats/get · gRPC GetChat · socket "chats/get") |
| chats_get_avatarB | A chat’s avatar, described; the bytes are served from GET /storage/* The file is saved locally and its path returned (images are also shown). gRPC answers the bytes in-band; on REST/socket they are fetched from the provider’s storage. (POST /api/kalagh/chats/get-avatar · gRPC GetChatAvatar) |
| chats_get_participantsC | The stored participants of a chat (POST /api/kalagh/chats/get-participants · gRPC GetChatParticipants · socket "chats/get-participants") |
| chats_listC | A page of a channel’s chats (POST /api/kalagh/chats/list · gRPC GetChats · socket "chats/list") |
| chats_mark_as_readB | Mark a whole chat as read Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/mark-as-read · gRPC MarkChatAsRead · socket "chats/mark-as-read") |
| chats_muteC | Mute a chat (POST /api/kalagh/chats/mute · gRPC MuteChat · socket "chats/mute") |
| chats_pinC | Pin a chat (POST /api/kalagh/chats/pin · gRPC PinChat · socket "chats/pin") |
| chats_remove_participantB | Remove a participant from a chat Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/remove-participant · gRPC RemoveChatParticipant · socket "chats/remove-participant") |
| chats_searchC | Search a channel’s chats by name (POST /api/kalagh/chats/search · gRPC SearchChats · socket "chats/search") |
| chats_syncC | Import the platform’s chat list for a channel (POST /api/kalagh/chats/sync · gRPC SyncChats · socket "chats/sync") |
| chats_unarchiveC | Unarchive a chat (POST /api/kalagh/chats/unarchive · gRPC UnarchiveChat · socket "chats/unarchive") |
| chats_unmuteC | Unmute a chat (POST /api/kalagh/chats/unmute · gRPC UnmuteChat · socket "chats/unmute") |
| chats_unpinC | Unpin a chat (POST /api/kalagh/chats/unpin · gRPC UnpinChat · socket "chats/unpin") |
| chats_updateC | Rename a chat Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/chats/update · gRPC UpdateChat · socket "chats/update") |
| contacts_blockB | Block a contact on the platform Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/contacts/block · gRPC BlockContact · socket "contacts/block") |
| contacts_createC | Create a contact from a name and phone number (POST /api/kalagh/contacts/create · gRPC CreateContact · socket "contacts/create") |
| contacts_deleteC | Soft-delete a contact Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/contacts/delete · gRPC DeleteContact · socket "contacts/delete") |
| contacts_getB | One contact by row id, or by platform id within a channel (POST /api/kalagh/contacts/get · gRPC GetContact · socket "contacts/get") |
| contacts_get_avatarC | A contact’s avatar, described; the bytes are served from GET /storage/* The file is saved locally and its path returned (images are also shown). gRPC answers the bytes in-band; on REST/socket they are fetched from the provider’s storage. (POST /api/kalagh/contacts/get-avatar · gRPC GetContactAvatar) |
| contacts_listC | A page of a channel’s contacts (POST /api/kalagh/contacts/list · gRPC GetContacts · socket "contacts/list") |
| contacts_searchB | Search a channel’s contacts by name or number (POST /api/kalagh/contacts/search · gRPC SearchContacts · socket "contacts/search") |
| contacts_syncC | Import the platform’s address book for a channel (POST /api/kalagh/contacts/sync · gRPC SyncContacts · socket "contacts/sync") |
| contacts_unblockC | Unblock a contact on the platform Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/contacts/unblock · gRPC UnblockContact · socket "contacts/unblock") |
| contacts_updateC | Rename a contact in the provider’s own records (POST /api/kalagh/contacts/update · gRPC UpdateContact · socket "contacts/update") |
| contacts_update_statusC | Store a contact’s status / about text (POST /api/kalagh/contacts/update-status · gRPC UpdateContactStatus · socket "contacts/update-status") |
| healthA | Liveness probe — no authentication required (GET /api/kalagh/health) |
| infoB | Which platform this provider instance serves (GET /api/kalagh/info) |
| logs_listC | A page of a channel’s activity log (POST /api/kalagh/logs/list · gRPC GetLogs · socket "logs/list") |
| logs_webhooksC | A page of a channel’s webhook delivery log (POST /api/kalagh/logs/webhooks · gRPC GetWebhookLogs · socket "logs/webhooks") |
| messages_attachmentsC | A cursor page of a chat’s file-bearing messages (POST /api/kalagh/messages/attachments · gRPC GetMessageAttachments · socket "messages/attachments") |
| messages_deleteB | Delete a message for everyone Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/delete · gRPC DeleteMessage · socket "messages/delete") |
| messages_forwardB | Forward a message to one or more chats Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/forward · gRPC ForwardMessage · socket "messages/forward") |
| messages_getB | One message by row id, or by platform id within a channel (POST /api/kalagh/messages/get · gRPC GetMessage · socket "messages/get") |
| messages_get_mediaB | Fetch a message’s media into provider storage and describe it The file is saved locally and its path returned (images are also shown). gRPC answers the bytes in-band; on REST/socket they are fetched from the provider’s storage. (POST /api/kalagh/messages/get-media · gRPC GetMessageMedia) |
| messages_historyB | A page of stored messages before a given one — never starts a fetch (POST /api/kalagh/messages/history · gRPC GetMessageHistory · socket "messages/history") |
| messages_listC | A cursor page of a chat’s messages (POST /api/kalagh/messages/list · gRPC GetMessages · socket "messages/list") |
| messages_mark_as_readC | Mark one message — and the chat up to it — as read Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/mark-as-read · gRPC MarkMessageAsRead · socket "messages/mark-as-read") |
| messages_reactC | React to a message with an emoji Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/react · gRPC ReactToMessage · socket "messages/react") |
| messages_remove_reactionA | Remove a reaction from a message Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/remove-reaction · gRPC RemoveReaction · socket "messages/remove-reaction") |
| messages_replyB | Reply to a message, quoting it Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/reply · gRPC ReplyMessage · socket "messages/reply") |
| messages_searchB | Search a channel’s messages, optionally within one chat (POST /api/kalagh/messages/search · gRPC SearchMessages · socket "messages/search") |
| messages_sendC | Send a message carrying a whole MessageContent Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send · gRPC SendMessage · socket "messages/send") |
| messages_send_contactC | Send a contact card (vCard) Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-contact · gRPC SendContact · socket "messages/send-contact") |
| messages_send_eventC | Send a scheduled event Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-event · gRPC SendEvent · socket "messages/send-event") |
| messages_send_interactiveC | Send quick-reply buttons and/or a structured list Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-interactive · gRPC SendInteractive · socket "messages/send-interactive") |
| messages_send_locationC | Send a location (or a venue, when name/address are given) Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-location · gRPC SendLocation · socket "messages/send-location") |
| messages_send_mediaC | Send a message carrying one or more uploaded files Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-media · gRPC SendMedia) |
| messages_send_pollB | Send a poll — question plus 2..12 options Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/send-poll · gRPC SendPoll · socket "messages/send-poll") |
| messages_syncC | Pull a page of a chat’s history from the platform (POST /api/kalagh/messages/sync · gRPC SyncMessages · socket "messages/sync") |
| messages_updateB | Edit a sent message’s text Reaches other people on the platform, deletes, or redirects data — say exactly what will happen and get the user’s confirmation first. (POST /api/kalagh/messages/update · gRPC UpdateMessage · socket "messages/update") |
| storage_getA | Download a stored object (media, avatar) from the provider’s storage to a local file. Pass the path after /storage/, or a full /storage/... URL as found in a message attachment. The file is saved locally and its path returned (images are also shown). gRPC answers the bytes in-band; on REST/socket they are fetched from the provider’s storage. (GET /storage/{path}) |
| statusB | How this MCP server is connected: transport, endpoints, where the tool schemas came from, the event subscription, and the provider’s own health and info. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 67 tools
Tools are cleanly namespaced by domain (chats_, contacts_, messages_, channels_, logs_) and most have a single distinct action. A few boundaries are soft — e.g. messages_send versus the specialized send_media/send_contact/send_event variants, and messages_list vs messages_history vs messages_sync — but descriptions clarify the fetch-vs-store distinction.
Every tool follows a strict snake_case namespace_verb_noun pattern (chats_add_participant, messages_send_poll, channels_request_qr). Verb choices are consistent across domains, making the set highly predictable.
67 tools is very heavy and exceeds the range where an agent can hold the surface in mind comfortably. Although the domain (channels, chats, contacts, messages, media, storage, logs) is genuinely broad and most tools earn their place, the sheer granularity is excessive.
The surface covers full lifecycle operations: create/get/list/update/delete for chats, contacts, and channels; a rich message action set (send, reply, forward, react, edit, delete, read); plus media storage, sync, search, and logs. No obvious dead ends for the stated messaging-platform purpose.