ktalk-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KTALK_LOG_LEVEL | No | Уровень логов (в stderr) | INFO |
| KTALK_SPACE_URL | Yes | Адрес пространства Толка, например https://<your-space>.ktalk.ru | |
| KTALK_TOKEN_FILE | No | Файл токена (0600); папка и файл создаются при старте | ~/.config/ktalk-mcp/token |
| KTALK_VERIFY_SSL | No | Проверка TLS-сертификата; true — требовать валидный сертификат | false |
| KTALK_RECEIVER_PORT | No | Локальный порт, на который букмарклет отправляет токен | 8765 |
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 | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_roomA | Create (or overwrite) a Talk room; returns {url, room_name, conference_id, title, room}. |
| create_meetingA | Schedule a calendar meeting; returns {url, event}. |
| list_meetingsA | Past meetings, newest first — deep paginated archive. Default row: conference_key, room_name, title, start, end, participants_count, participants (≤6; full list via get_meeting), has_chat, recording_ids. Times are ISO-8601 in the machine's own zone, to the second. Meetings still in progress may also appear (the request asks for them the way the web client does; not verified against a live meeting). Returns {meetings, count, has_more, next_offset} — the API gives no grand total, so has_more is the only end signal. A requested field the API did not send is simply missing from the row: that means "not in this payload", not "no data at all". |
| get_meetingA | One meeting with its full participant list. Returns everything the payload has by default — detail is asked for by key, and for the detail: conference_key, room_name, title, start, end (ISO-8601, local zone, to the second), participants_count, participants and invited_participants (full; a guest without an account → {name, is_anonymous: true} — anonymousName is all the identification they have), has_chat, recording_ids, session_halls_artifacts. A field the API did not send is simply missing, which means "not in this payload", not "no data at all". |
| list_recordingsA | Recordings, newest first. Default row: recording_id, title, created_date (ISO-8601, local zone, to the second), created_by, duration, participants_count, participants (≤6; full list via get_recording), status, has_audio. There is no date window here — the recordings endpoint has no date filter, so narrow with query and limit instead. Returns {recordings, count, has_more, next_offset} — the API gives no grand total, so has_more is the only end signal. A requested field the API did not send is simply missing from the row: that means "not in this payload", not "no data at all". |
| get_recordingA | Recording detail with its full participant list. Returns everything the payload has by default — detail is asked for by id, and for the detail. Surfaces conference_key (link to the meeting/chat; only on this endpoint), download_url (best-quality file for download_recording) and has_chat, alongside title, description, created_date (ISO-8601, local zone, to the second), created_by, duration, status, participants_count, participants, has_audio, comments_count, frame_size, preview_image, qualities. The last four are bulky — pass fields to leave them out. A field the API did not send is simply missing, i.e. "not in this payload". |
| download_recordingA | Download a recording's video file to disk (best available quality). An existing file at target_path is overwritten. |
| get_chat_messagesA | Meeting chat across all channels, merged and time-ordered. The chat lives on the meeting, not the recording — pass conference_key, or a recording_id whose conference_key is resolved. With save_path, writes .json + .txt and returns a compact summary instead of the messages. Returns {conference_key, channels, count, truncated_channels, messages:[{id, channel, created, author, authorLogin, isAnonymous, text, files, reactions}]}; a non-empty truncated_channels means those channels hit limit and the chat may be incomplete. |
| auth_statusA | Token status: authenticated/expired, expiry, the token-file path, and the README link. No parameters. To (re)authenticate, put a Session token in the token_file. |
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 9 tools
Each tool targets a distinct resource and action: room creation, meeting creation, meeting listing/detail, recording listing/detail/download, chat retrieval, and auth status. There is no overlap or ambiguity between any two tools.
The naming pattern is predominantly verb_noun (create_room, create_meeting, list_meetings, get_meeting, list_recordings, get_recording, download_recording, get_chat_messages). The only outlier is auth_status, which uses a noun_noun form, slightly breaking the otherwise consistent convention.
With 9 tools, the server is well-scoped for its purpose of managing meetings, recordings, rooms, and chat. The count is neither too sparse nor overwhelming, and each tool contributes a distinct capability.
The tool set provides solid coverage for creating rooms and meetings, browsing meetings and recordings, downloading recordings, and fetching chat messages. However, there are no update/delete operations for rooms or meetings, and no list/get for rooms, which are minor gaps for full lifecycle management.