Messaging & Social
Use these tools to read and send email, post into chat systems, deliver SMS or WhatsApp messages, work with social platforms, and schedule or inspect meetings.
What This Page Covers
This page documents the built-in tools in the messaging-and-social group.
Use these tools when you need outbound communication, mailbox access, team-chat delivery, social/community lookups, or Zoom meeting management.
Tools On This Page
- [
gmail] - Gmail mailbox access and message composition through the Google Gmail OAuth provider. - [
slack] - Slack channel messaging, threaded replies, channel listing, and history reads. - [
discord] - Discord bot messaging, channel inspection, history reads, and message deletion. - [
telegram] - Telegram bot delivery to one configured chat. - [
whatsapp] - WhatsApp Business API text and template messaging. - [
twilio] - Twilio SMS delivery, call lookup, and recent message listing. - [
webex] - Webex room messaging and room listing. - [
resend] - Transactional email delivery through Resend. - [
email] - Simple SMTP email sending through Gmail SMTP. - [
x] - X posting, replying, DMs, profile lookup, timeline reads, and recent-post search. - [
reddit] - Reddit read access plus optional posting and replies with user auth. - [
zoom] - Zoom Server-to-Server OAuth meeting scheduling and management.
Common Setup Notes
gmail uses auth_provider="google_gmail" and connects through the generic /api/oauth/google_gmail/* flow.
Its OAuth tokens are stored separately from editable Gmail tool settings.
homeassistant stays local even when other tools are routed through the sandbox proxy.
MindRoom enforces that restriction both at config-validation time and again during tool construction.
Password fields should be stored through the dashboard or credential store instead of inline YAML.
Several metadata fields on this page are marked required: false, but the installed SDKs still need the corresponding token or secret in practice.
Useful environment fallbacks on this page include SLACK_TOKEN, DISCORD_BOT_TOKEN, TELEGRAM_TOKEN, WHATSAPP_ACCESS_TOKEN, WHATSAPP_PHONE_NUMBER_ID, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, WEBEX_ACCESS_TOKEN, RESEND_API_KEY, X_BEARER_TOKEN, X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_USERNAME, REDDIT_PASSWORD, ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, and ZOOM_CLIENT_SECRET.
The generic-looking email tool is not a fully configurable SMTP client on this branch.
Its installed upstream implementation is hard-wired to Gmail SMTP over smtp.gmail.com:465 and does not expose SMTP host, port, or TLS configuration fields.
[gmail]
gmail is the mailbox-oriented tool for reading, searching, drafting, sending, and labeling Gmail messages through the Google Gmail OAuth provider.
What It Does
MindRoom wraps Agno's GmailTools with ScopedOAuthClientMixin, so Gmail credentials are loaded from MindRoom's scoped OAuth credential store instead of a local token.json file.
The wrapper refreshes stored Google tokens when needed and raises OAuthConnectionRequired with a connect URL when no usable stored OAuth credentials are available.
It does not fall back to Agno's local OAuth flow when MindRoom credentials are missing.
It only bypasses MindRoom OAuth when configured for Google service-account auth.
The current installed Gmail toolkit exposes get_latest_emails(), get_emails_from_user(), get_unread_emails(), get_starred_emails(), get_emails_by_context(), get_emails_by_date(), get_emails_by_thread(), search_emails(), create_draft_email(), send_email(), send_email_reply(), mark_email_as_read(), mark_email_as_unread(), list_custom_labels(), apply_label(), remove_label(), and delete_custom_label().
Draft and send operations accept local file-system paths for attachments.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
get_latest_emails |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
get_emails_from_user |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
get_unread_emails |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
get_starred_emails |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
search_emails |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
create_draft_email |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
send_email |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
send_email_reply |
boolean |
no |
true |
Declared in MindRoom's registry metadata as a capability flag. |
Example
get_latest_emails(10)
search_emails("label:unread from:billing@example.com", 10)
send_email("alice@example.com", "Project update", "Here is the latest status.")
send_email_reply("thread_id", "message_id", "alice@example.com", "Re: Project update", "Thanks for the update.")
apply_label("is:unread category:promotions", "Needs Review", count=10)
Notes
- Connect Gmail through the
google_gmailOAuth provider rather than storing a Gmail-specific API key. - The Gmail provider requests Gmail read, modify, and compose scopes.
gmailalways runs in the primary MindRoom runtime so worker runtimes do not receive Google OAuth secrets.- Agno's Gmail constructor accepts per-method selector kwargs (
get_latest_emails,get_unread_emails,search_emails, etc.), and the MindRoom wrapper forwards them via**kwargs. - Use those selector kwargs to disable specific methods you do not want the agent calling.
- Attachment arguments are local file paths in the current runtime, not Matrix attachment IDs.
[slack]
slack is the Slack bot toolkit for posting to channels, replying in threads, listing channels, and reading recent channel history.
What It Does
The installed upstream tool exposes send_message(), send_message_thread(), list_channels(), and get_channel_history().
It uses Slack's WebClient from slack_sdk.
markdown maps to the mrkdwn flag on chat_postMessage().
Channel-history responses are normalized into a smaller JSON structure instead of returning the full Slack API payload.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
token |
password |
no |
null |
Slack bot token, or use SLACK_TOKEN. Required in practice. |
markdown |
boolean |
no |
true |
Enable Slack markdown rendering on sent messages. |
enable_send_message |
boolean |
no |
true |
Enable send_message(). |
enable_send_message_thread |
boolean |
no |
true |
Enable send_message_thread(). |
enable_list_channels |
boolean |
no |
true |
Enable list_channels(). |
enable_get_channel_history |
boolean |
no |
true |
Enable get_channel_history(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
list_channels()
send_message("C0123456789", "Deployment finished.")
send_message_thread("C0123456789", "Following up in the same thread.", "1743112345.678900")
get_channel_history("C0123456789", limit=25)
Notes
- Although
tokenis marked optional in metadata, the installed Slack toolkit raises if no token orSLACK_TOKENis present. - Use channel IDs for the most reliable calls, especially for threaded replies and history reads.
get_channel_history()returns a simplified JSON view rather than the raw Slack response.
[discord]
discord is the Discord bot toolkit for channel messaging, channel metadata, channel history, server channel listing, and message deletion.
What It Does
The installed upstream tool exposes send_message(), get_channel_messages(), get_channel_info(), list_channels(), and delete_message().
It talks directly to https://discord.com/api/v10 with a bot token in the Authorization header.
This is a raw REST wrapper rather than a gateway-connected real-time bot runtime.
Most functions expect Discord IDs such as channel_id, guild_id, and message_id, not display names.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
bot_token |
password |
no |
null |
Discord bot token, or use DISCORD_BOT_TOKEN. Required in practice. |
enable_send_message |
boolean |
no |
true |
Enable send_message(). |
enable_get_channel_messages |
boolean |
no |
true |
Enable get_channel_messages(). |
enable_get_channel_info |
boolean |
no |
true |
Enable get_channel_info(). |
enable_list_channels |
boolean |
no |
true |
Enable list_channels(). |
enable_delete_message |
boolean |
no |
true |
Enable delete_message(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
list_channels("123456789012345678")
get_channel_info("123456789012345678")
get_channel_messages("123456789012345678", limit=25)
send_message("123456789012345678", "Hello from MindRoom.")
Notes
bot_tokenis effectively required even though the metadata marks it optional.- This tool uses ordinary Discord REST calls and does not manage slash commands, presence, or gateway subscriptions.
- Deletion is enabled by default, so disable
enable_delete_messageif you only want read and send access.
[telegram]
telegram is the simplest chat-delivery tool on this page, with one configured destination and one send function.
What It Does
The installed upstream tool exposes only send_message().
It posts to Telegram Bot API sendMessage for the configured chat_id.
The tool instance is bound to one chat destination, so callers do not pass a chat ID per request.
Responses are returned as the raw Telegram API response text.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
chat_id |
text |
yes |
null |
Telegram chat or channel ID that this tool instance will target. |
token |
password |
no |
null |
Telegram bot token, or use TELEGRAM_TOKEN. Required in practice. |
enable_send_message |
boolean |
no |
true |
Enable send_message(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
Notes
- Set both
chat_idandtokenfor a usable configuration. - Because the destination chat is fixed in config, this tool is best for one bot-to-room delivery path rather than general multi-room Telegram automation.
- If you need different Telegram destinations, configure different agents or different tool credentials per scope.
[whatsapp]
whatsapp is the WhatsApp Business API toolkit for text messages and template messages through Meta's Graph API.
What It Does
The installed upstream tool can expose either send_text_message_sync() and send_template_message_sync() or their async variants, depending on async_mode.
It posts to https://graph.facebook.com/<version>/<phone_number_id>/messages.
recipient_waid sets a default recipient so callers can omit the recipient argument.
If no default recipient is configured, every send call must provide one.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
access_token |
password |
no |
null |
WhatsApp Business API token, or use WHATSAPP_ACCESS_TOKEN. Required in practice. |
phone_number_id |
text |
no |
null |
WhatsApp Business phone number ID, or use WHATSAPP_PHONE_NUMBER_ID. Required in practice. |
version |
text |
no |
v22.0 |
Graph API version prefix. |
recipient_waid |
text |
no |
null |
Default recipient phone number or WhatsApp ID. |
async_mode |
boolean |
no |
false |
Register async send functions instead of sync send functions. |
Example
send_text_message_sync("The deployment finished.")
send_template_message_sync(template_name="deployment_notice", language_code="en_US")
Notes
- Set both
access_tokenandphone_number_ideven though the metadata marks them optional. async_mode: truechanges the registered function names to the async variants, which matters if you are debugging tool traces or reading model-generated tool calls.- Template sends expect a preapproved WhatsApp template name and, optionally, template
components.
[twilio]
twilio is the telecom-oriented toolkit for SMS sends, call lookups, and recent message history.
What It Does
The installed upstream tool exposes send_sms(), get_call_details(), and list_messages().
It supports two auth modes: account_sid plus auth_token, or account_sid plus api_key and api_secret.
Optional region and edge are passed into the Twilio client for regional routing.
send_sms() validates that both to and from_ are in E.164 format before sending.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
account_sid |
text |
no |
null |
Twilio account SID, or use TWILIO_ACCOUNT_SID. Required in practice. |
auth_token |
password |
no |
null |
Twilio auth token for the simpler auth mode. |
api_key |
password |
no |
null |
Twilio API key for key-and-secret auth. |
api_secret |
password |
no |
null |
Twilio API secret for key-and-secret auth. |
region |
text |
no |
null |
Optional Twilio region such as au1. |
edge |
text |
no |
null |
Optional Twilio edge such as sydney. |
debug |
boolean |
no |
false |
Enable Twilio HTTP client logging. |
enable_send_sms |
boolean |
no |
true |
Enable send_sms(). |
enable_get_call_details |
boolean |
no |
true |
Enable get_call_details(). |
enable_list_messages |
boolean |
no |
true |
Enable list_messages(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
send_sms("+15551234567", "+15557654321", "Build passed.")
get_call_details("CA1234567890abcdef")
list_messages(limit=10)
Notes
account_sidis required in both supported auth modes.- Use either
auth_tokenor theapi_keyplusapi_secretpair, not both as separate independent auth methods. send_sms()rejects non-E.164 numbers before it reaches Twilio's API.
[webex]
webex is the Cisco Webex toolkit for room messaging and room listing.
What It Does
The installed upstream tool exposes send_message() and list_rooms().
It authenticates with webexpythonsdk.WebexAPI using one access token.
Despite the broader description in the registry, the current tool surface is messaging-centric and does not manage meetings.
Responses are returned as JSON strings built from the SDK result objects.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
enable_send_message |
boolean |
no |
true |
Enable send_message(). |
enable_list_rooms |
boolean |
no |
true |
Enable list_rooms(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
access_token |
password |
no |
null |
Webex access token, or use WEBEX_ACCESS_TOKEN. Required in practice. |
Example
Notes
- Set
access_tokeneven though metadata marks it optional. - The current tool surface is room messaging and room discovery only.
- Use room IDs, not room titles, when sending messages.
[resend]
resend is the transactional-email API toolkit for HTML email delivery through Resend.
What It Does
The installed upstream tool exposes one function, send_email().
It sets resend.api_key on each call and sends email through resend.Emails.send().
The current implementation passes the message body as HTML, not plain text.
from_email is stored on the tool instance and reused for every call.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
api_key |
password |
no |
null |
Resend API key, or use RESEND_API_KEY. Required in practice. |
from_email |
text |
no |
null |
Sender identity used for every call. Usually required by the provider in practice. |
enable_send_email |
boolean |
no |
true |
Enable send_email(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
Notes
from_emailis not marked required in metadata, but most Resend setups need a verified sender.- The
bodyargument is sent as HTML. - Use
resendwhen you want provider-managed transactional delivery rather than Gmail mailbox access.
[email]
email is the simplest SMTP mailer on this page, but on this branch it is specifically wired for Gmail SMTP rather than generic SMTP.
What It Does
The installed upstream tool exposes one function, email_user().
It builds an EmailMessage, then logs in with smtplib.SMTP_SSL("smtp.gmail.com", 465).
That means the sender account must be a Gmail account or a Google Workspace account compatible with Gmail SMTP.
The current implementation sends plain-text bodies only.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
receiver_email |
text |
no |
null |
Default recipient for all email_user() calls. |
sender_name |
text |
no |
null |
Display name shown in the From header. |
sender_email |
text |
no |
null |
Gmail sender address used for SMTP login. |
sender_passkey |
password |
no |
null |
Gmail app password or equivalent SMTP passkey. Required in practice. |
enable_email_user |
boolean |
no |
true |
Enable email_user(). |
all |
boolean |
no |
false |
Enable the full upstream toolkit surface. |
Example
agents:
alerts:
tools:
- email:
receiver_email: oncall@example.com
sender_name: MindRoom Alerts
sender_email: alerts@gmail.com
Notes
- Despite the generic tool name, there are no host, port, TLS, or auth-mechanism overrides in the current implementation.
- This tool is best for simple Gmail-based outbound mail, not arbitrary SMTP providers.
- If you need mailbox reads, drafts, replies, or labels, use
gmailinstead. - If you need provider-managed transactional delivery with HTML bodies, use
resendinstead.
[x]
x is the X or Twitter toolkit for recent-post search, user lookup, timeline access, posting, replying, and DMs.
What It Does
The installed upstream tool exposes create_post(), reply_to_post(), send_dm(), get_user_info(), get_home_timeline(), and search_posts().
It uses tweepy.Client and passes through wait_on_rate_limit.
search_posts() calls search_recent_tweets() and, when include_post_metrics is enabled, augments each returned post with reply, retweet, like, and quote counts.
The implementation clamps max_results for search to the Twitter API's supported 10 to 100 range.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
bearer_token |
password |
no |
null |
Bearer token, or use X_BEARER_TOKEN. |
consumer_key |
password |
no |
null |
OAuth consumer key, or use X_CONSUMER_KEY. |
consumer_secret |
password |
no |
null |
OAuth consumer secret, or use X_CONSUMER_SECRET. |
access_token |
password |
no |
null |
OAuth access token, or use X_ACCESS_TOKEN. |
access_token_secret |
password |
no |
null |
OAuth access token secret, or use X_ACCESS_TOKEN_SECRET. |
include_post_metrics |
boolean |
no |
false |
Include public metrics in search_posts() output. |
wait_on_rate_limit |
boolean |
no |
false |
Let Tweepy wait for rate limits instead of failing immediately. |
Example
search_posts("mindroom matrix", max_results=10)
get_user_info("mindroom_ai")
create_post("MindRoom now supports another release.")
reply_to_post("1890123456789012345", "Thanks for the feedback.")
Notes
- A bearer token can support read-style endpoints such as search, but posting, replying, DMs, and home-timeline access generally need full OAuth user credentials.
- The toolkit also defines
get_my_info(), but MindRoom's current registered tool list on this branch does not advertise a separate config flag for it. reply_to_post()builds atwitter.comURL in its response, whilecreate_post()builds anx.comURL, so response formatting is currently inconsistent upstream.
[reddit]
reddit is the Reddit toolkit for reading user and subreddit data, listing trending communities, and optionally posting or replying with user credentials.
What It Does
The installed upstream tool exposes get_user_info(), get_top_posts(), get_subreddit_info(), get_trending_subreddits(), get_subreddit_stats(), create_post(), reply_to_post(), and reply_to_comment().
With only client_id and client_secret, the tool initializes a read-only praw.Reddit client.
If username and password are also configured, the tool enables posting and replying with authenticated user actions.
reddit_instance is an advanced programmatic injection point for an existing praw.Reddit object rather than a normal YAML value.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
reddit_instance |
text |
no |
null |
Advanced programmatic Reddit client injection, not normal YAML authoring. |
client_id |
text |
no |
null |
Reddit app client ID, or use REDDIT_CLIENT_ID. Required in practice. |
client_secret |
password |
no |
null |
Reddit app client secret, or use REDDIT_CLIENT_SECRET. Required in practice. |
user_agent |
text |
no |
null |
Optional custom user agent, with RedditTools v1.0 as the upstream fallback. |
username |
text |
no |
null |
Reddit username for posting and replying. |
password |
password |
no |
null |
Reddit password for posting and replying. |
Example
get_top_posts("matrixdotorg", time_filter="week", limit=10)
get_subreddit_info("python")
get_trending_subreddits()
get_user_info("spez")
Notes
client_idandclient_secretare enough for read-only operations.create_post(),reply_to_post(), andreply_to_comment()additionally requireusernameandpassword.- The current MindRoom metadata treats
reddit_instanceas text, but the upstream constructor expects an already constructedpraw.Redditobject.
[zoom]
zoom is the Zoom meeting-management toolkit for scheduling, listing, inspecting, deleting, and reading recordings through Zoom's Server-to-Server OAuth flow.
What It Does
The installed upstream tool exposes get_access_token(), schedule_meeting(), get_upcoming_meetings(), list_meetings(), get_meeting_recordings(), delete_meeting(), and get_meeting().
It exchanges account_id, client_id, and client_secret against https://zoom.us/oauth/token with grant_type=account_credentials.
The generated access token is cached in process until shortly before expiry.
Meeting creation always targets users/me/meetings and applies a fixed set of default meeting settings in the upstream implementation.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
account_id |
text |
no |
null |
Zoom account ID from a Server-to-Server OAuth app, or use ZOOM_ACCOUNT_ID. Required in practice. |
client_id |
text |
no |
null |
Zoom client ID, or use ZOOM_CLIENT_ID. Required in practice. |
client_secret |
password |
no |
null |
Zoom client secret, or use ZOOM_CLIENT_SECRET. Required in practice. |
Example
schedule_meeting("Weekly sync", "2026-04-02T16:00:00Z", 30, timezone="America/Los_Angeles")
get_upcoming_meetings()
list_meetings(type="scheduled")
get_meeting("81234567890")
Notes
- Although MindRoom marks
zoomassetup_type: oauth, the current implementation is not an interactive browser OAuth flow. - The installed tool expects Server-to-Server OAuth credentials and exchanges them directly for an access token on demand.
get_meeting_recordings()can request a download token and TTL per call, but those are call arguments rather than config fields.
Related Docs
- Tools Overview
- Automation & Platforms - For
aws_seswhen you want an alternative outbound-email provider.