io.github.saloprj/dialogbrain
io.github.saloprj/dialogbrain · v1.0.1 · MCP 2025-06-18
Unified inbox MCP for WhatsApp, Telegram, Email, voice — read/send messages, search, AI agents.
Reachability
reachable
checked 2026-07-14 03:46 UTC
Registry status active
Tools pinned 213
8087d174366c
Tools last changed
unchanged since first capture 2026-07-14
Provenance
Registry namespace io.github.saloprj
(GitHub-account verified by the official registry)
Repository
github.com/saloprj/dialogbrain-mcp
Website
https://dialogbrain.com
Remote endpoints
https://api.dialogbrain.com/mcp (streamable-http)
Observed changes
| When (UTC) | Event | Detail |
|---|---|---|
| 2026-07-14 03:46 | first capture | 213 tools pinned |
Pinned tool definitions (213)
| Tool | Description |
|---|---|
| contacts_find | 👤 Search for contacts in your address book by name or username. When to use: - User asks 'find contact X' or 'who is Y?' - User wants to know someone's username or ID - Before sending a message to verify contact exists - To get... |
| contacts_discover | Search for a contact on a live channel (Telegram, WhatsApp, etc.) before adding them. Use this to look up a person by username or phone number before calling contacts.sync. This is the right tool when asked to add or find a specific... |
| contacts_research | Research a person before outreach: returns a synthesized profile (current role, company, location, career history, education, LinkedIn/social URLs) plus a candidates array for disambiguating namesakes. Use to personalize a first touch... |
| contacts_sync | Add a discovered contact and open a conversation thread. Returns thread_id for the new conversation, plus entity_id — the canonical handle to pass as contacts.update's contact_id. Call contacts.discover first to verify the contact exists. |
| contacts_profile | 👤 Get full profile for a contact: all channel identities, notes, role, capabilities, birthday. When to use: - After contacts.find to get complete info about a specific person - To see all channels a contact is reachable on - To read... |
| contacts_update | ✏️ Update a contact's profile: name, notes, role, capabilities, birthday, preferred channel. When to use: - User wants to add notes about a contact - User wants to set/update role or capabilities for a contact - User wants to rename a... |
| contacts_add_channel | 🔗 Link a new channel identity (email, phone, LinkedIn, etc.) to an existing contact. When to use: - User learns a contact's email or phone and wants to save it - User wants to link a LinkedIn/Instagram profile to an existing contact -... |
| contacts_capture_lead | 📝 Save a website-chat visitor's details as a structured lead (contact + Contacts tab). When to use: - In a livechat conversation, AFTER the visitor has shared their name and email (plus company / use case if given) — e.g. when booking... |
| group_search | Search for public groups or channels by topic on Telegram (or other channels). Returns matching groups with title, member count, and whether messages can be previewed. Finds public groups/channels by topic — NOT individual people. To... |
| group_add | Add a specific group to your discovery list by @username or invite link (t.me/...). Groups and channels only — this does NOT add an individual person/contact. To add a person by @username (e.g. a customer or lead), use... |
| group_list | List groups in this workspace's DISCOVERY/SCORING list (the discovered_group table). ⚠️ This is NOT your messageable inbox. It is a subset used for discovery + quality scoring, and its channel_ref may be un-normalized (raw positive id)... |
| group_preview_messages | Read recent public messages from a group without joining it. Only works for groups where can_preview_history=true. Use this to manually evaluate message quality before deciding to join. For an automated quality score, use group.scan... |
| group_scan | Scan a group to evaluate its quality before joining. Fetches recent messages, analyzes activity, spam, and engagement, then returns a quality score and plain-English verdict. When to use: - After finding groups with group.search -... |
| group_join | Join a group and start syncing its messages to your inbox. The group must be in your discovery list (use group.search or group.add first). What this does: - Joins the group on Telegram (or other channel) - Creates a thread in your... |
| group_create | Create a new group on a channel (Telegram or WhatsApp). Returns the new group's chat ID and invite link. What this does: - Creates a new group with the specified title - Returns chat_id, invite_link, and channel_ref for further... |
| group_add_member | Add a member to an existing group on Telegram or WhatsApp. What this does: - Adds the specified member to the group - Resolves the member by username, phone number, or JID - Reports if the member is already in the group Returns:... |
| group_promote_admin | Promote a member to admin in an existing group on Telegram or WhatsApp. What this does: - Gives the specified member admin status in the group - On Telegram, this grants visibility of all group messages (even if not a bot) - Defaults... |
| files_ingest | Save and index a file into the knowledge base. Use this when the user asks to save, store, or remember a document. The file will be processed (OCR if needed) and indexed for future search. |
| files_read | Read **text content** of an attached file. Works for: .txt, .md, .json, code files, and PDFs (after files.ingest extracts text). DO NOT call on binary files — for IMAGES use `files.get_base64`, for AUDIO/VIDEO it cannot be transcribed... |
| files_upload | Upload a file to DialogBrain and get a file_id for use in messages_send. When to use: - User wants to send a file/image to a contact - Before calling messages_send with an attachment Returns: file_id (integer) to pass to messages_send... |
| images_generate | Generates a PNG image from a text prompt using Gemini 2.5 Flash Image. Returns a file_id consumable by messages.send(attachments=[...]) and other file-aware tools. Supports up to 12 reference image file_ids for subject-consistent edits... |
| videos_generate | Generate a short video (5-10s) from a text prompt using BytePlus Seedance. Optionally accepts up to 12 image file IDs from the user's attached files (visible in the [ATTACHMENTS] block) as `reference_file_ids` for style and composition.... |
| images_search | Searches images in this workspace by visual content using vector embeddings (Voyage multimodal-3). Pass a text description; returns ranked file_ids with cosine scores and presigned download URLs. Up to 50 results. |
| vision_query | Look at the screen currently being shared in a meeting and answer a question about it. Returns a natural-language answer based on the visual content. Use ONLY when the user explicitly asks about the screen/slide/document being shown. |
| youtube_list_videos | List videos on the connected YouTube channel. Returns id, title, published_at, view_count. Paginate via page_token. |
| youtube_list_comments | List comment threads on a YouTube video. Pass video_id (e.g. 'dQw4w9WgXcQ') or channel_ref ('youtube:video:<id>'). Returns top-level comments with inline replies. |
| youtube_post_comment_reply | Post a comment on a YouTube video, or reply to an existing comment. Pass video_id for a top-level comment, OR parent_comment_id to reply. AI-disclosure suffix appended automatically when configured. |
| youtube_delete_comment | Permanently delete a YouTube comment by id (or 'youtube:comment:<id>'). Cannot be undone. Costs 50 quota units. |
| youtube_delete_video | Permanently delete a YouTube video by id (or 'youtube:video:<id>'). Cannot be undone. Costs 50 quota units. Caller must own the channel. |
| youtube_update_video | Update title, description, privacy, or tags on a YouTube video. Costs 1600 quota units. Only fields provided are changed. |
| youtube_moderate_comment | Apply a moderation status to a YouTube comment. Allowed status values: heldForReview, published, rejected, spam. Costs 50 quota units. |
| youtube_upload_video | Upload a workspace-owned video file (file_id) to the connected YouTube channel. Returns video_id + thread_id. Costs 1600 quota units. Default privacy is 'private' — pass privacy='public' to publish. |
| youtube_video_query | Ask Gemini about a YouTube video. Pass a video URL and any prompt — verbatim transcript with timestamps, summary, targeted Q&A about content or visuals, translation, etc. Works on any public/unlisted video. |
| instagram_publish_media | Publish a photo (IMAGE) or video (REELS) from workspace files to a connected Instagram Business/Creator account. Returns media_id + permalink. Instagram allows ~25 publishes per day. |
| instagram_update_media | Update the caption of a published Instagram photo or Reel. Only caption is editable after publish (Instagram limitation). |
| instagram_list_media | List photos and Reels on the connected Instagram Business/Creator account. Returns id, caption, media_type, permalink, thumbnail_url, timestamp. |
| files_info | Get metadata and download URLs for files by their IDs. When to use: - After messages_read_history returns attachment_file_ids - To get a presigned download URL to read a received file Returns: filename, mime_type, byte_size,... |
| files_get_base64 | Download one or more files server-side and return their content as base64-encoded strings. Use this to inspect images, PDFs, or any binary file attached to messages when you cannot access presigned S3 URLs directly. Supports up to 5... |
| messages_read_history | Read messages from a conversation thread. Use text_contains to find specific messages by content. Returns the most recent messages, including sender info and timestamps. Voice calls: each row carries a `meta` object with allowlisted... |
| channels_connect_telegram_bot | 🤖 Connect a Telegram Bot (Bot API) channel from its bot token. When to use: - After a bot was created via @BotFather and you have its token. - The token alone is sufficient — no Telegram user account is needed. Validates the token,... |
| threads_update | ✏️ Update a conversation thread: rename it, add notes/description, or move to a folder. When to use: - User wants to rename a chat or group - User wants to add notes/context about a conversation - User wants to organize threads into... |
| threads_delete | 🗑️ PERMANENTLY delete conversation thread(s) and their messages + user-facing state (tags, assignments, drafts, reminders, RAG chunks). Destructive and NOT undoable — requires confirm=true. Pass thread_id for one, or thread_ids for a... |
| folders_create | 📁 Create a new inbox folder to organize threads. When to use: - User wants to create a folder to group related conversations - User wants to organize threads by topic, project, or contact type After creating a folder, use... |
| folders_delete | 🗑️ Delete an inbox folder. Threads inside become unfiled (not deleted). When to use: - User wants to remove a folder they no longer need - User wants to clean up their inbox organization Threads inside the folder are NOT deleted —... |
| ai_tags_list | List all personal AI tags. AI tags are automatic message filters: the system runs a lightweight classifier on every incoming message and applies matching tags to threads. This lets AI agents skip expensive full analysis on most... |
| ai_tags_create | Create a new AI tag (automatic message filter). AI tags are lightweight classifiers that run on every incoming message. When a message matches the tag's description/criteria, the thread is automatically labelled — so AI agents can... |
| ai_tags_update | Update an existing personal AI tag's name, description, icon, color, or active state. When to use: - User wants to rename a tag - User wants to change a tag's icon, color, or description - User wants to enable or disable a tag Provide... |
| ai_tags_delete | Delete a personal AI tag. All thread associations are removed automatically. When to use: - User wants to permanently remove a tag they no longer need This cannot be undone. Threads are NOT deleted — they just lose this tag. |
| ai_tags_add_to_thread | Apply one or more AI tags to a thread (manually). When to use: - User wants to label a conversation with one or more tags - User asks to categorize or tag a thread Provide the thread_id (integer) and an array of tag_ids to apply. If a... |
| ai_tags_remove_from_thread | Remove a specific AI tag from a thread. When to use: - User wants to un-label or remove a specific tag from a conversation - User wants to correct an incorrectly applied tag Provide both thread_id and tag_id. |
| ai_filters_list | List all AI filters for the current workspace. AI filters are semantic intent-based message filters that use embeddings (vector representations) to detect whether an incoming message matches a specific intent or topic. Unlike keyword... |
| ai_filters_create | Create a new AI filter for semantic intent-based message matching. AI filters use vector embeddings (via Voyage AI) to detect whether an incoming message matches a specific intent or topic. The filter's description is embedded as a... |
| ai_filters_update | Update an existing AI filter's name, description, threshold, or active state. When to use: - User wants to rename a filter - User wants to refine the filter description to improve match accuracy - User wants to adjust the similarity... |
| ai_filters_delete | Permanently delete an AI filter. When to use: - User wants to remove a filter they no longer need This action cannot be undone. Any triggers that reference this filter by ID will no longer match it — review and update those triggers... |
| ai_filters_test | Test a message against an AI filter to check whether it would match. This tool embeds the provided message using Voyage AI and computes the cosine similarity between the message vector and the filter's stored reference vector. It... |
| messages_send | Send a message to a thread, channel, or contact. Supports Telegram, Email, LinkedIn, and other connected channels. For LinkedIn posts (comment_thread kind), this posts a comment on the post. Can automatically resolve recipients and... |
| messages_send_email | Compose and send an email — with subject, CC/BCC, and attachments. Use for email; for chat messages (Telegram/WhatsApp/livechat) use messages.send instead. |
| messages_delete | Delete a message from a thread. Supports Telegram, WhatsApp, and other connected channels. Note: Some channels have time limits on message deletion. |
| messages_edit | Edit the text of a message you already sent, in place. Supported on Telegram, WhatsApp, LiveChat, Max.ru, LINE, WeChat and similar channels; NOT supported on Gmail, Instagram, or LinkedIn (their platforms forbid editing) — those return... |
| messages_forward | Forward a message from one thread to another. Supports native Telegram forwarding (preserves original sender attribution) and text-based forwarding for cross-channel scenarios. |
| knowledge_query | Answer questions using knowledge base (uploaded documents, handbooks, files). Use for QUESTIONS that need an answer synthesized from documents or messages. Returns an evidence pack with source citations, KG entities, and extracted... |
| kg_find_entity | Find an entity by name in the Knowledge Graph. USE WHEN user mentions a person, project, company by name and you need: - To resolve a name to entity_id for subsequent queries - 'Кто работает над X?' → find X first - 'Расскажи про Y' →... |
| kg_get_relationships | Get relationships for a specific entity from Knowledge Graph. USE WHEN: - 'Кто работает над X?' - filter by works_on - 'С кем общался Y?' - filter by discussed_with - 'Кто из компании Z?' - filter by member_of - 'Что связано с W?' - no... |
| calendar_create_event | Create a new event in Google Calendar. Specify the title, start time, end time, and optionally invite attendees. Use ISO 8601 format for dates (e.g., 2024-12-15T14:00:00). |
| calendar_list_events | List events from Google Calendar. Shows upcoming events by default. Can filter by date range and search query. |
| calendar_update_event | Update an existing event in Google Calendar. Can modify title, time, location, description, and attendees. Only specified fields will be updated. |
| calendar_delete_event | Delete an event from Google Calendar. This action cannot be undone. Use with caution. |
| calendar_check_availability | Check when you have free time in Google Calendar. Shows busy periods and free slots in a given time range. Useful for finding meeting times or checking schedule conflicts. |
| web_search | Search the web for current information, news, facts, prices, or events. Use this when the user asks about something that requires up-to-date information from the internet, or when internal knowledge base doesn't have the answer.... |
| web_fetch | Fetches a single URL and returns its content. Use this when you have a specific URL in mind — for example, after web.search returns a link you want to read, or when the user pastes a URL. Modes (extract): - 'auto' (default): picks the... |
| web_research | Answer a research question from live web sources in one call — returns a synthesized answer with numbered [N] citation markers and a citations array of {url, title, index}. Supports recency and domain filters. Use for questions needing... |
| web__local_search | Multi-source web research with citations. Returns a synthesized answer with numbered [^1] markers and a citations array of {url, title, snippet, index}. Use for evidence-backed synthesis (competitive analysis, regulatory summary,... |
| documents_create | Render a document (PDF / HTML / PPTX / DOCX) and save it to the workspace. This tool has two input pipelines — pass **exactly one** of `content_html` or `content_markdown`. # Pipeline A — `content_html` (canonical for decks,... |
| agents_list | List all AI agents configured in the workspace. Returns agents with their basic info, trigger count, and knowledge collection count. Each agent's `description` field tells you when that agent is useful. If you're a router-style agent... |
| agents_get | Get detailed information about a specific AI agent. Returns full agent config including: - Execution configuration - Tool configuration - Knowledge configuration - Escalation configuration - Triggers list - Knowledge collections -... |
| agents_create | Create a new AI agent in the workspace. Execution modes: - ai_assisted (default, recommended): Two-phase AI — fast pre-classifier (Haiku) for keyword filtering and simple replies, then full AI with tools for complex messages. Best for:... |
| agents_update | Update an existing AI agent's configuration. All parameters are optional — only provided fields will be updated. Use this to: - Enable or disable an agent - Change agent name or description - Assign or detach a prompt - Change default... |
| agents_delete | Permanently delete an AI agent. WARNING: This cannot be undone. The agent and all its triggers will be removed. |
| agents_ask | Send a message to an AI agent and get its response. The agent runs with its configured prompt, tools, and knowledge. Use this to test agents or have them process a task. Returns: {status: 'replied'|'silent', response_text, messages[],... |
| agents_trigger_create | Create a new trigger for an AI agent. Triggers determine when the agent activates. Trigger types: - incoming_message: Activates on new incoming messages - schedule: Activates on a schedule - webhook: Activates on webhook events -... |
| agents_trigger_update | Update an existing AI agent trigger. All parameters are optional — only provided fields will be updated. |
| agents_trigger_delete | Delete a trigger from an AI agent. WARNING: This cannot be undone. |
| webhooks_configure_enrichment | Enable enrichment on an agent's webhook trigger so reference-only webhook payloads are resolved to full data before the agent runs. One tool for every provider — choose `provider` and pass its `config`. Providers & required config: -... |
| agents_list_drafts | List pending agent drafts awaiting approval. Shows drafts that have been generated by AI agents but not yet sent. Each draft includes: - Thread/conversation info - Trigger message (what prompted the reply) - Generated response text -... |
| agents_approve_draft | Approve a pending agent draft and send the message. The draft will be sent to the conversation it was generated for. You can optionally edit the text before sending. Use this when user says: - 'Approve this draft' - 'Send this... |
| agents_reject_draft | Reject a pending agent draft without sending. The draft will be marked as rejected and won't be sent. Use this when the generated response isn't appropriate. Use this when user says: - 'Reject this draft' - 'Don't send this' - 'Cancel... |
| agents_list_files | List files directly attached to this agent (agent-specific files, not shared collections). Returns file_id, title, status, and chunk_count for each file. chunk_count shows how many indexed chunks were created — 0 means the file is... |
| agents_add_file | Attach a file to this agent's private knowledge (agent-specific files, not shared with other agents). Workflow: 1. Upload the file with files_upload (pass source_url for remote files) 2. Index it with files_ingest (pass the file_id) 3.... |
| agents_remove_file | Remove a file from this agent's private knowledge. The file itself is not deleted — it's just detached from this agent. Use agents.list_files to find the file_id to remove. |
| agents_task_complete | Report that a Claude Code agent task has been completed. Call this when you finish processing an agent_task from DialogBrain. |
| agent_handoff | Delegate a multi-step task (research, composing messages, booking, scheduling) to the full agentic planner. Use when a user ask needs more than a direct answer. The specialist runs synchronously — its response is already shown to the... |
| agent_silence | End this turn without sending any message. Use when the thread is owned by a human operator after job.escalate, when the guest is self-resolving, when the message is a duplicate, or for observation-only turns. Calling this tool is the... |
| agents_traces_list | List recent execution traces for an agent — the same data as /admin/requests, scoped to one agent and readable by an LLM. Use this when an agent call timed out, drafted the wrong response, or you want to know which tool/LLM call burned... |
| agents_trace_get | Fetch the full execution detail for a single trace — tool executions, events timeline, LLM call spans (with error_message on failures). Use after `agents.traces_list` identifies a specific trace of interest (failed run, slow run,... |
| agents_traces_stats | Aggregated trace statistics for one agent over the last N days — total runs, success rate, avg duration, error breakdown, top tools used, runs-per-day histogram. Use this when you want a bird's-eye view of an agent's health before... |
| agents_activity | See what you — or another agent in your workspace — actually did over a time window: messages sent, documents created, calls made, plus a summary (run counts, per-day, top tools). Use this to answer 'what did I do today / yesterday /... |
| agents_prompt_history | List past versions of an agent's `prompt_text`. Every edit to the agent's prompt is snapshotted to an append-only table — use this tool to browse history, find a prior known-good version, and copy it into `agents.prompt_restore`. |
| agents_prompt_restore | Restore a past version of an agent's `prompt_text` by version_number. Creates a new version pointing at the restored content — history is preserved. Use `agents.prompt_history` first to find the version_number you want. |
| agents_simulate_inbound | Replay an inbound message on a thread through the real trigger pipeline and return what would have happened. The router auto-picks the winning enabled agent + trigger by priority/specificity (same logic as production). By default... |
| agents_update_from_template | Update a forked agent's instructions (prompt) to the latest version of the system template it was created from. Use when the platform has improved a template and the user wants their forked agent to pick up the new prompt. This... |
| agents_set_integration | Enable or disable a connected workspace integration on an AI agent — this controls which ext<id>_<name> integration tools the agent (and its sandboxed workbench runs) may call. Use integrations_list to get the... |
| agents_list_integrations | List the workspace integrations enabled (or available) for an AI agent, with each one's workspace_integration_id, provider, enabled flag, and count of denied tools. Use this to see what an agent can call before toggling with... |
| collections_list | List all knowledge collections in the workspace. Collections are named groups of files used for RAG search. Auto-created collections (per-agent, per-prompt) are hidden by default. |
| collections_create | Create a named knowledge collection. Collections group files for RAG search. After creating, add files with collections.add_file and assign to agents with collections.assign_agent. |
| collections_delete | Delete a knowledge collection. If the collection is assigned to agents, prompts, or channels, pass force=true to delete anyway. CASCADE removes all assignments automatically. |
| collections_add_file | Add a file to a knowledge collection. The file must be uploaded and indexed first (files_upload + files_ingest). If the file was previously removed, it is re-enabled. |
| collections_remove_file | Remove a file from a knowledge collection. The file itself is not deleted — only the collection membership is removed. |
| collections_list_files | List all files in a knowledge collection with their indexing status and chunk counts. Each returned file has a `file_id` (integer) that can be passed to messages.send as `attachments=[file_id]` to send the file to a contact, or to... |
| collections_assign_agent | Assign a knowledge collection to an AI agent. Once assigned, the agent's knowledge.query will automatically scope RAG search to files in its assigned collections. |
| collections_unassign_agent | Remove a knowledge collection from an AI agent. The collection and its files are not deleted — only the agent assignment is removed. |
| prompts_list | List all prompt templates in this workspace. Returns id + name + description + category so you know which prompt_id to use in prompts.get or prompts.update. |
| prompts_get | Get full content of a prompt template: system instructions (prompt_text) and auto-reply rules. Run prompts.list first to find the prompt_id. |
| prompts_update | Update a prompt template's name, system instructions, or auto-reply rules. Changes affect every agent using this template, unless the agent has its own override (set via agents.update → prompt_text). All parameters except prompt_id... |
| prompts_prompt_history | List past versions of a prompt template's `prompt_text`. Every edit is snapshotted to an append-only table — use this to browse history and find a version_number for `prompts.prompt_restore`. |
| prompts_prompt_restore | Restore a past version of a prompt template by version_number. Creates a new version pointing at the restored content — history is preserved. Fans out to every agent using this template without a per-agent override; the response... |
| widgets_list | List all livechat widgets. Returns widgets with their configuration, embed code, and status. Use this when user wants to see their widgets or chat widgets. |
| widgets_create | Create a new livechat widget for your website. The widget will be created with default settings. You can customize theme, auto-reply mode, and more. Use this when user wants to add a chat widget to their site. |
| widgets_update | Update an existing livechat widget configuration. You can change name, theme, auto-reply mode, and other settings. Only provided fields will be updated. Use this when user wants to modify their chat widget settings. |
| widgets_delete | Delete a livechat widget permanently. This will remove the widget and its embed code will stop working. Existing chat history will be preserved. Use this when user wants to remove a chat widget. |
| widgets_get_embed_code | Get the embed code snippet for a livechat widget. Returns HTML/JavaScript code to add to your website. The code should be placed before the closing </body> tag. Use this when user wants to install the chat widget on their site. |
| widgets_get | Get full configuration of a single livechat widget. Returns all settings including theme, identification, actions, and more. Use this when user wants to see or verify a specific widget's settings. |
| linkedin_search | Search LinkedIn for people, companies, jobs, or posts. Supports filtering by keywords, location, industry, network distance, and more. Use linkedin.search_filters first to resolve filter keywords to LinkedIn parameter IDs. |
| linkedin_search_filters | Get LinkedIn search filter parameter IDs. LinkedIn uses internal IDs instead of text for search filters (location, industry, etc.). Call this before linkedin.search to resolve filter keywords to their LinkedIn parameter IDs. |
| linkedin_get_profile | Get a LinkedIn user profile by ID, public identifier (vanity name), or profile URL. Returns name, headline, location, and other profile information. |
| linkedin_get_company | Get a LinkedIn company profile by company ID or vanity name. Returns company name, description, industry, size, and other details. |
| linkedin_update_profile | Update the authenticated user's own LinkedIn profile. Supports adding/editing experience entries (role, company, skills, dates). Also supports updating location. Headline, summary, education are NOT supported by the API. |
| linkedin_invite | Send a connection invitation to a LinkedIn user. Optionally include a personalized message (max 300 characters). Rate limited: LinkedIn allows 80-100 invitations per day, max 200 per week. |
| linkedin_list_connections | List your LinkedIn connections, sorted by most recently added. |
| linkedin_list_invitations_sent | List your pending sent connection invitations on LinkedIn. |
| linkedin_list_reactions | List all reactions (likes, celebrates, etc.) on a specific LinkedIn post. |
| linkedin_add_comment | Add a comment to a LinkedIn post. Use post_id from search results or thread data. |
| linkedin_raw_request | Send an arbitrary LinkedIn API request via Unipile's magic route. Only GET and POST methods are allowed. WARNING: This bypasses structured rate limiting and can perform destructive actions. Use this only when no other LinkedIn tool... |
| search_messages | Search message content across all chats — semantic + keyword. Use to find what was said: quotes, topics, info exchanged. For chats/threads themselves use search.threads; for files use search.files; for links use search.links. |
| search_threads | Find or list chat threads/conversations — by topic, participant, unread/unanswered status, or recency. Omit `query` to list threads by filter. For message content use search.messages; for files use search.files. `since` filters by... |
| search_files | Search files and attachments across the workspace — by content, filename, document type, or origin. For message content use search.messages; for links use search.links. |
| search_links | Search links/URLs shared across the workspace — by type, owner, or associated contact. For files use search.files; for message content use search.messages. |
| workspace_list | List every workspace the caller is a member of, with `is_current` marking the workspace this MCP key is currently routed to. Pair with `workspace.switch` to change the active workspace without reconnecting. |
| workspace_current | Return the workspace this MCP API key is currently routed to, with the caller's role inside it. Use this to confirm context before/after `workspace.switch`. |
| workspace_switch | Re-point the active MCP API key to a different workspace. Pass exactly one of `workspace_id` or `slug` (find them via `workspace.list`). Takes effect on the very next tool call — no MCP reconnect, no new API key. Sequential checkpoint:... |
| integrations_list | List the workspace's external integrations (HTTP-API + MCP), each with its id, provider name, base_url, transport, status, and registered tool count. Use before integrations.add_endpoints to find the integration id / base_url. |
| integrations_get_endpoints | List every endpoint (operationId, method, path) registered on an HTTP-API integration. Identify it by `integration_id` or `base_url`. Use this to review what tools exist before integrations.remove_endpoints or add_endpoints. |
| integrations_add_endpoints | Add one or more API endpoints to an HTTP-API integration as callable tools, merged additively into the integration for `base_url` (created if none exists). Each endpoint becomes a tool with params + request/response schemas inferred... |
| integrations_remove_endpoints | Remove endpoints (tools) from an HTTP-API integration — e.g. junk paths like static assets, /socket.io, or SPA routes that aren't real API calls. Identify the integration by `integration_id` or `base_url`, and the endpoints to drop by... |
| integrations_set_auth | Set or update the authentication on an HTTP-API integration, generically. Identify it by `integration_id` or `base_url`. Pass `auth` = {type: bearer|api_key|basic|custom_headers|browser_identity|none, ...}: bearer/basic → {token};... |
| integrations_capture_session | Restore an expired integration session by capturing the LIVE auth of an open browser page — works for COOKIE sessions (browser_identity) AND TOKEN/HEADER sessions (bearer / api_key / custom_headers, e.g. Devise access-token/client/uid).... |
| job_read_context | Read the current job context. Returns the full state of your active job including assignments, escalations, and any data you previously stored. |
| job_update_context | Update the job context by merging new data. Existing keys are preserved unless explicitly overwritten. Use this to record progress, update assignment statuses, or store intermediate results. |
| job_complete | Mark the job as completed. This sanitizes PII from the context and records a completion summary. Use when all tasks in the job are done. |
| job_escalate | Escalate the job to a human. Use when you cannot resolve an issue, someone is not responding, or a situation requires human judgment. |
| notes_save | Save a fact or note into the agent's memory. Use scope to choose visibility: 'workspace' = visible to every agent in this workspace (use for shared facts, project conventions); 'agent' = private to this agent (use for personal working... |
| notes_recall | Recall notes from your notebook. By default returns only your own notes (all scopes, newest first). Pass filter_agent_id=<int> to read another agent's notebook, or filter_agent_id="all" (or "*") to read across every agent in the... |
| notes_search | Full-text search in your notebook. By default searches only your own notes. Pass filter_agent_id=<int> to search another agent's notebook, or "all" (or "*") for workspace-wide. Or list all notes for a person/thread by scope_ref_id. |
| notes_delete | Delete a note by ID from the target notebook. Same identity rules as notes.save — agents can only delete from their own notebook. |
| feedback_save | Save a behavioral rule, preference, or correction that should guide future agent behavior. Use this when the user gives explicit guidance like 'always reply in Russian', 'don't suggest meetings before 11am', or 'invoice link goes via... |
| tasks_create | Create a new task in your to-do list. |
| tasks_update | Update an existing task. Set status='done' to complete it, 'cancelled' to cancel. Use summary for completion notes. |
| tasks_list | List your tasks, or another agent's tasks (read-only) using from_agent_id. Use filters to narrow results. |
| tasks_delete | Delete a task from your to-do list by its ID. |
| reminder_set | Schedule a reminder. One-time reminders fire at a specific datetime. Recurring reminders fire on a schedule (daily, weekly, every N days, or every N minutes). Optionally scope to a thread or target another agent. |
| reminder_list | List your active reminders (both one-time and recurring). |
| reminder_cancel | Cancel an active reminder by its trigger ID. |
| system_sleep | Pause execution for a given number of seconds (max 30). Use when you need to wait for an external process to complete before retrying — e.g. message sync, backfill, or API propagation. Total sleep per run is capped at 60 seconds. |
| calls_make | Place an outbound AUDIO/VOICE phone call via Twilio (PSTN) or Telegram (MTProto 1:1 call). Use this any time the user asks to 'call', 'ring', 'phone', 'dial', or have a spoken conversation. Do NOT use messages.send when the user asks to... |
| calls_agent_duel | Start an agent-vs-agent VOICE test call: two AI voice agents share one LiveKit room — a 'caller' persona agent pursues a task brief against the 'callee' business agent under test. Use to evaluate booking flows, latency, and conversation... |
| background_run | Run ANOTHER tool off the critical path: returns INSTANTLY while the target tool runs in the background, so a slow write/log/notify never delays your reply. Pass `tool` (the id of a tool you already have) and `args` (the target tool's... |
| calls_send_to_meet | Dispatch a workspace AI agent into an active Google Meet call. The agent joins as a participant — it can hear the conversation, respond via TTS, see the shared screen (when vision is enabled on the agent), and answer questions about... |
| workbench_run_python | Run Python in an isolated sandbox to process LARGE or paginated tool results without pulling every row into the conversation. Inside the code, call your connected integration tools with `call_tool('ext<id>_<name>', {..})`. RETURN SHAPE:... |
| analytics_query | Answer analytics questions about this workspace's own data (conversations, messages, voice calls) — e.g. 'how many new conversations this week by channel' or 'inbound vs outbound messages per day this month'. Returns rows plus a chart... |
| calls_meet_browser | Attach to a Google Meet bot's live browser to diagnose and recover a bot that isn't visibly joining. Pass the meet session's call_id; returns a page_id. Then drive the bot's Meet page with the generic browser tools (browser.snapshot /... |
| calls_set_translation_language | Change the target language of an active voice/Meet call's live translator on the fly — no hangup or re-dispatch (also arms translator mode if it isn't already on). Pass the call_id and an ISO language code, e.g. 'th' (Thai), 'ru'... |
| calls_set_translation_languages | Set the EXTRA target languages an active voice/Meet call's translator produces for the APP ONLY (subtitles + listenable audio in the inbox — NOT spoken into the call). Operators switch between them in the UI. Pass call_id and... |
| present_tab | Share the agent's browser tab on the live call so everyone sees it as a real screen-share. Pass the page_id you got from browser.open. Only usable while the agent is in an active voice call. The shared tab stays the active share until... |
| calls_send_to_telegram_call | Dispatch a workspace AI agent into a live Telegram GROUP voice chat OR an encrypted call-link conference. FOUR ways to target the call: (1) chat_id — the group's numeric id, e.g. -1001234567890 (use for a private group with no... |
| calls_list_active | List active voice calls in this workspace. Use before calls.make on a Telegram account (only one MTProto call per account at a time) to check whether the line is free. |
| calls_get_transcript | Get the structured transcript and final state of a voice call by call_id. Returns per-turn rows in chronological order, call status (active/completed/failed/abandoned), duration, and an `outcome` field telling whether the recipient... |
| calls_list_history | Search historical voice calls in this workspace by participant name, contact_id, thread, channel, source, and/or date range. Returns one row per call (NOT per turn) with call_id, duration_seconds, outcome, direction, started_at, source,... |
| calls_wait | Block until a voice call ends (status changes from 'active') or timeout elapses. Returns ended=true with final state when the call has ended; ended=false on timeout (re-issue to keep waiting). The returned state includes `outcome` so... |
| calls_hangup | Hang up an active voice call by call_id. Use after calls.make when the agent decides to terminate before the callee does, or to abort a stuck call. Idempotent: returns success if the call is already terminal. |
| android_screenshot | Capture a screenshot from the Android device. Returns JPEG image data encoded as base64. |
| android_tap | Tap on the Android device screen at specified coordinates. Coordinates are in device pixels. |
| android_swipe | Swipe/drag on the Android device screen from one coordinate to another. Use for scrolling, opening app drawer, etc. |
| android_key | Send a key event to the Android device. Use keycode (e.g., '3' for HOME, '4' for BACK) or common name (e.g., 'HOME'). |
| android_type | Type text on the Android device keyboard. |
| android_launch_app | Launch an app on the Android device by package name. Example: 'com.whatsapp'. Returns success status and process ID if launched. |
| android_close_app | Close an app on the Android device (safe method: HOME key + am kill). Never uses am force-stop (corrupts PackageManager). Example: 'com.whatsapp'. |
| android_install_apk | Install an app on the Android device from an APK or split bundle (XAPK/APKS — how most large modern apps ship). Provide apk_url (an https link the device downloads itself — preferred, and the only workable option for real apps) or, for... |
| android_list_apps | List installed apps on the Android device. By default returns third-party apps; use all=true for all apps. |
| android_current_app | Get the currently focused app and activity on the Android device. |
| android_ui_dump | Get UI structure dump from the Android device. Uses dumpsys (uiautomator OOM-kills on this build). Returns window list and focused activity for frame-based clicking. |
| android_shell | Run an allowlisted shell command on the Android device. First element of cmd array must be allowlisted: input, pm, dumpsys, am, getprop, screencap, monkey, uiautomator, settings, wm, cmd, content, ls, cat, pidof, ps, echo, service. |
| browser_open | Open a URL in a remote browser. Saved login cookies are auto-attached when the URL domain matches a claimed browser identity. Pass identity_name to override auto-matching or force a specific identity. |
| browser_snapshot | Return a YAML aria_snapshot of the page DOM. Each interactive node is tagged with `[ref=eN]` (e.g. `[ref=e7]`). Pass that exact token as the `ref` arg to browser.click / browser.fill / browser.type / browser.press_key. Do NOT pass the... |
| browser_click | Click an element. `ref` is either an aria-ref token from browser.snapshot ('e7') OR a CSS selector ('button.submit'). Prefer the aria-ref token. |
| browser_fill | Fill an input or textarea with the given value. `ref` is either an aria-ref token from browser.snapshot ('e7') OR a CSS selector ('input[name=email]'). Prefer the aria-ref token — it's stable and matches exactly what snapshot returned. |
| browser_wait_for | Wait for a selector to appear OR a navigation URL to match a glob pattern. Provide `ref` (selector) OR `url_pattern` (glob). |
| browser_attach_identity | Switch the page's identity by loading saved cookies + storage. Use only when switching identity mid-page; for first navigation, pass `identity_name` to browser.open instead. |
| browser_close | Close a page opened by browser.open. |
| browser_hover | Hover the mouse over an element (reveals tooltips + hover menus). `ref` is a CSS selector. |
| browser_select_option | Pick option(s) in a native <select> dropdown. Pass `value` (matches the option's value attr) OR `label` (matches its visible text). Lists allowed for multi-select. |
| browser_press_key | Press a keyboard key (e.g., 'Enter', 'Tab', 'Escape', 'ArrowDown') or a single character. Optional `ref` focuses an element first — aria-ref token from browser.snapshot ('e7') or a CSS selector. |
| browser_navigate_back | Navigate back in the page's history (browser back button). Returns the new URL + title. |
| browser_take_screenshot | Capture a PNG screenshot of the page or a specific element. Returns base64-encoded image bytes AND a file_id (persisted in DialogBrain files storage). Pass file_id straight to messages.send(attachment_file_ids=[file_id]) — do NOT call... |
| browser_tabs | Manage tabs within the same BrowserContext as `page_id`. `action` ∈ {list, switch, close, new}. For list, returns all open tab metadata; for new, returns the new tab's page_id. |
| browser_evaluate | Run JavaScript in the page context and return the result. Use for state not in the a11y tree, captcha iframe inspection, DOM events. Expression is either a plain JS value ('document.title') or a zero-arg IIFE ('(() => { … })()'). Inline... |
| browser_drag | Drag one element onto another. `source_ref` is the element to grab; `target_ref` is where to drop. Both are CSS selectors. Used for slider captchas, kanban, drag-and-drop uploads. |
| browser_type | Type text into an element with per-keystroke delay (organic). Each character dispatches keydown/keypress/keyup, unlike browser.fill which replaces .value instantly. Use when the page listens to keystroke events or for typing-speed... |
| browser_fill_form | Fill multiple form fields in one call. `fields` is a list of {ref, value} dicts. ref is a CSS selector; value is a string (text) or boolean (checkbox). Saves N round-trips vs calling browser.fill repeatedly. |
| browser_resize | Resize the page viewport. Useful when a site serves different HTML based on viewport width (mobile vs desktop) or when an anti-bot scores risk by viewport dimensions. |
| browser_file_upload | Attach files to an <input type=file>. Pass either `local_paths` (absolute host paths) or `data` (list of {name, mime, base64} blobs written to /tmp). 25MB cap per file. |
| browser_handle_dialog | Respond to a pending JS dialog (alert/confirm/prompt). Pass accept=true for OK or false for Cancel. For prompt() dialogs also pass prompt_text. Dialogs are queued at page-open time; returns {pending: false} if none is waiting. |
| browser_console_messages | Return console.log/warn/error events captured since the last drain. Filter by level ('log'|'info'|'warning'|'error'|'debug') and/or pattern (regex). Buffer caps at 500 entries; oldest are dropped first. Set clear=false to peek without draining. |
| browser_network_requests | List HTTP requests the page made since open or last drain. Optional filters: method (GET/POST/...), url_pattern (regex), status_min (e.g. 400 for errors). Captures up to 200 most recent requests per page. |
| browser_attach_meet | Attach to THIS meet's bot browser and return a page_id for its live Google Meet tab. Then use the normal browser.* tools (browser.snapshot to see the page, browser.click to press a control, browser.take_screenshot, browser.evaluate,... |
Status badge
[](https://toolpin.dev/servers/io.github.saloprj/dialogbrain)
Maintain this server? Add the badge to your README — it links your users to this live status page.