--- title: Plugin Setup Guide description: Comprehensive setup instructions for Eliza connector, AI provider, and streaming plugins. --- # Plugin Setup Guide — Eliza AI Comprehensive setup instructions for all connector, AI provider, and streaming plugins. When users ask how to set up a plugin, use this guide: give them the exact env var names, where to get the credentials, minimum required fields, and tips for optional fields. --- ## AI Providers ### OpenAI **Get credentials:** https://platform.openai.com/api-keys **Minimum required:** `OPENAI_API_KEY` (starts with `sk-`) **Variables:** - `OPENAI_API_KEY` — Your secret API key from platform.openai.com - `OPENAI_BASE_URL` — Leave blank for OpenAI default; set to a proxy URL if using a custom endpoint - `OPENAI_SMALL_MODEL` — e.g. `gpt-5-mini` (used for fast/cheap tasks) - `OPENAI_LARGE_MODEL` — e.g. `gpt-5` (used for complex reasoning) - `OPENAI_EMBEDDING_MODEL` — e.g. `text-embedding-3-small` (for semantic search) - `OPENAI_TTS_MODEL` / `OPENAI_TTS_VOICE` — e.g. `tts-1` / `alloy` (for voice synthesis) - `OPENAI_IMAGE_DESCRIPTION_MODEL` — e.g. `gpt-5` (for image understanding) **Tips:** OpenAI is the default fallback for most features. If you have credits, set this first. Use `gpt-5-mini` as small model to save costs. ### Anthropic **Get credentials:** https://console.anthropic.com/settings/keys **Minimum required:** `ANTHROPIC_API_KEY` (starts with `sk-ant-`) or `CLAUDE_API_KEY` **Variables:** - `ANTHROPIC_API_KEY` / `CLAUDE_API_KEY` — Your secret key from console.anthropic.com (either works for auto-enable) - `ANTHROPIC_SMALL_MODEL` — e.g. `claude-haiku-4-5-20251001` - `ANTHROPIC_LARGE_MODEL` — e.g. `claude-sonnet-4-6` - `ANTHROPIC_BROWSER_BASE_URL` — (Advanced) Proxy URL for browser-side requests **Tips:** Best for complex reasoning and long context. Claude Haiku is very fast for the small model slot. ### Google Gemini **Get credentials:** https://aistudio.google.com/app/apikey **Minimum required:** `GOOGLE_GENERATIVE_AI_API_KEY` or `GOOGLE_API_KEY` **Variables:** - `GOOGLE_GENERATIVE_AI_API_KEY` / `GOOGLE_API_KEY` — From AI Studio or Google Cloud (either works for auto-enable) - `GOOGLE_SMALL_MODEL` — e.g. `gemini-2.5-flash` - `GOOGLE_LARGE_MODEL` — e.g. `gemini-2.5-pro` - `GOOGLE_EMBEDDING_MODEL` — e.g. `text-embedding-004` - `GOOGLE_IMAGE_MODEL` — e.g. `gemini-2.0-flash-001` **Tips:** Gemini Flash is fast and cheap; great for small model. The free tier is generous. ### Groq **Get credentials:** https://console.groq.com/keys **Minimum required:** `GROQ_API_KEY` **Variables:** - `GROQ_API_KEY` — From console.groq.com - `GROQ_SMALL_MODEL` — e.g. `openai/gpt-oss-120b` - `GROQ_LARGE_MODEL` — e.g. `openai/gpt-oss-120b` - `GROQ_TTS_MODEL` / `GROQ_TTS_VOICE` — e.g. `canopylabs/orpheus-v1-english` / `troy` - `GROQ_TTS_RESPONSE_FORMAT` — Audio response format (default: `wav`) **Tips:** Groq is extremely fast inference — great for latency-sensitive use cases. Free tier available. ### OpenRouter **Get credentials:** https://openrouter.ai/keys **Minimum required:** `OPENROUTER_API_KEY` **Variables:** - `OPENROUTER_API_KEY` — From openrouter.ai/keys - `OPENROUTER_SMALL_MODEL` — e.g. `openai/gpt-5-mini` or `openai/gpt-oss-120b` - `OPENROUTER_LARGE_MODEL` — e.g. `anthropic/claude-sonnet-4-6` - `OPENROUTER_IMAGE_MODEL` — e.g. `openai/gpt-5` (for vision tasks) - `OPENROUTER_IMAGE_GENERATION_MODEL` — e.g. `openai/dall-e-3` - `OPENROUTER_EMBEDDING_MODEL` — e.g. `openai/text-embedding-3-small` - `OPENROUTER_TOOL_EXECUTION_MAX_STEPS` — Max tool call steps per turn (default: 15) **Tips:** OpenRouter gives you access to 200+ models through one API key. Great if you want to switch models without managing multiple accounts. Use model IDs in `provider/model-name` format. ### xAI (Grok) **Get credentials:** https://console.x.ai/ **Minimum required:** `XAI_API_KEY` or `GROK_API_KEY` **Variables:** - `XAI_API_KEY` / `GROK_API_KEY` — From console.x.ai (either works for auto-enable) - `XAI_MODEL` — e.g. `grok-3` (overrides small/large) - `XAI_SMALL_MODEL` / `XAI_LARGE_MODEL` — Specific model slots - `XAI_EMBEDDING_MODEL` — e.g. `grok-embedding` - `X_AUTH_MODE` — `env` (default) or `oauth` - `X_API_KEY`, `X_API_SECRET`, `X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET` — Twitter OAuth keys (for the X connector side of xAI) - `X_ENABLE_POST`, `X_ENABLE_REPLIES`, `X_ENABLE_ACTIONS` — Toggle X/Twitter behaviors **Tips:** xAI = Grok models. The `X_*` vars are for the Twitter integration bundled with xAI. Keep auth mode as `api_key` unless you need OAuth. For a standalone Twitter connector (without Grok), see the [Twitter/X connector](#twitter-x) section below — it uses `TWITTER_*` env vars and `connectors.twitter` config instead. ### Ollama (Local Models) **Get credentials:** No API key needed — install Ollama locally **Setup:** https://ollama.com — create the Eliza-1 Ollama models from `packages/training/cloud/ollama/` **Minimum required:** `OLLAMA_BASE_URL` = `http://localhost:11434` (auto-enable trigger) or `OLLAMA_API_ENDPOINT` = `http://localhost:11434/api` **Variables:** - `OLLAMA_BASE_URL` — Auto-enable trigger. Default: `http://localhost:11434` - `OLLAMA_API_ENDPOINT` — Plugin endpoint. Default: `http://localhost:11434/api` - `OLLAMA_SMALL_MODEL` — e.g. `eliza-1-2b` - `OLLAMA_MEDIUM_MODEL` — e.g. `eliza-1-9b` - `OLLAMA_LARGE_MODEL` — e.g. `eliza-1-9b` - `OLLAMA_EMBEDDING_MODEL` — e.g. `nomic-embed-text` **Tips:** Completely free and private. Requires Ollama running on your machine or a server. Build Eliza-1 models with `ollama create eliza-1-9b -f packages/training/cloud/ollama/Modelfile.eliza-1-9b-q4_k_m`. ### Local AI **Get credentials:** No API key — uses local model files **Variables:** - `MODELS_DIR` — Path to your local model files (e.g. `/Users/you/models`) - `CACHE_DIR` — Path for caching (e.g. `/tmp/ai-cache`) - `LOCAL_SMALL_MODEL` / `LOCAL_LARGE_MODEL` — Model filenames in MODELS_DIR - `LOCAL_EMBEDDING_MODEL` / `LOCAL_EMBEDDING_DIMENSIONS` — Embedding model and its dimension count - `CUDA_VISIBLE_DEVICES` — GPU selection, e.g. `0` for first GPU **Tips:** Use when you have .gguf or similar model files and want full offline operation. ### Vercel AI Gateway **Get credentials:** https://vercel.com/docs/ai/ai-gateway **Minimum required:** `AI_GATEWAY_API_KEY` and `AI_GATEWAY_BASE_URL` **Variables:** - `AI_GATEWAY_API_KEY` / `AIGATEWAY_API_KEY` — Your gateway key (either works) - `VERCEL_OIDC_TOKEN` — For Vercel-hosted deployments only - `AI_GATEWAY_BASE_URL` — Your gateway endpoint URL - `AI_GATEWAY_SMALL_MODEL` / `AI_GATEWAY_LARGE_MODEL` / `AI_GATEWAY_EMBEDDING_MODEL` — Model IDs - `AI_GATEWAY_IMAGE_MODEL` — For image generation - `AI_GATEWAY_TIMEOUT_MS` — Request timeout, default 60000ms **Tips:** Routes model calls through Vercel's AI gateway for caching, rate limiting, and observability. Useful if you're already on Vercel. ### Eliza Cloud **Get credentials:** From the elizaOS Cloud service **Minimum required:** `ELIZAOS_CLOUD_API_KEY` or `ELIZAOS_CLOUD_ENABLED=true` **Variables:** - `ELIZAOS_CLOUD_API_KEY` — Your Eliza Cloud API key - `ELIZAOS_CLOUD_ENABLED` — Set to `true` to enable cloud features **Tips:** Eliza Cloud provides hosted infrastructure for running Eliza agents with managed scaling and monitoring. --- ## Connectors ### Discord **Get credentials:** https://discord.com/developers/applications → New Application → Bot → Reset Token **Minimum required:** `DISCORD_API_TOKEN` **Variables:** - `DISCORD_API_TOKEN` — Bot token (from Bot section, click Reset Token) - `DISCORD_APPLICATION_ID` — Application ID (from General Information, optional if runtime auto-resolve succeeds) - `CHANNEL_IDS` — Comma-separated channel IDs to listen in - `DISCORD_VOICE_CHANNEL_ID` — For voice channel support - `DISCORD_SHOULD_IGNORE_BOT_MESSAGES` — `true` to prevent bot-to-bot loops - `DISCORD_SHOULD_IGNORE_DIRECT_MESSAGES` — `true` to disable DM responses - `DISCORD_SHOULD_RESPOND_ONLY_TO_MENTIONS` — `true` to only respond when @mentioned - `DISCORD_LISTEN_CHANNEL_IDS` — Channel IDs to listen but not post unsolicited **Setup steps:** 1. Create app at discord.com/developers/applications 2. Go to Bot tab → Reset Token (copy immediately) 3. Get Application ID from General Information tab 4. Under OAuth2 → URL Generator → Bot → select permissions: Send Messages, Read Messages, Use Slash Commands 5. Invite bot using generated URL 6. Enable Message Content Intent under Bot → Privileged Gateway Intents **Tips:** You need BOTH the Bot Token AND Application ID — without Application ID slash commands won't register. Right-click a channel and Copy ID to get channel IDs (enable Developer Mode in Discord settings first). ### Telegram **Get credentials:** Message @BotFather on Telegram **Minimum required:** `TELEGRAM_BOT_TOKEN` **Variables:** - `TELEGRAM_BOT_TOKEN` — From @BotFather after `/newbot` - `TELEGRAM_ALLOWED_CHATS` — JSON array of allowed chat IDs, e.g. `["123456789", "-100987654321"]` - `TELEGRAM_API_ROOT` — Leave blank for default; set if using a Telegram proxy - `TELEGRAM_TEST_CHAT_ID` — For testing (advanced) **Setup steps:** 1. Message @BotFather: `/newbot` 2. Give it a name and username 3. Copy the token it gives you 4. To get your chat ID: message @userinfobot **Tips:** Use negative IDs for groups (they start with -100). Use `TELEGRAM_ALLOWED_CHATS` to restrict who can talk to the bot for safety. ### Twitter / X Twitter/X integration is bundled with the **xAI** provider plugin (`@elizaos/plugin-xai`). There is no separate `@elizaos/plugin-x`. **Get credentials:** https://developer.twitter.com/en/portal/dashboard **Minimum required:** xAI plugin enabled + Twitter OAuth keys in connector config or env vars. **Variables (xAI plugin `X_*` convention):** - `X_API_KEY` — Twitter API consumer key - `X_API_SECRET` — Twitter API consumer secret - `X_ACCESS_TOKEN` — OAuth access token - `X_ACCESS_TOKEN_SECRET` — OAuth access token secret - `X_AUTH_MODE` — `api_key` (default) or `oauth` - `X_ENABLE_POST` — `true` to enable autonomous posting - `X_ENABLE_REPLIES` — `true` to reply to @mentions - `X_ENABLE_ACTIONS` — `true` to enable like/retweet/quote actions **Connector config alternative** — set these under `connectors.twitter` in `eliza.json`: - `apiKey`, `apiSecretKey`, `accessToken`, `accessTokenSecret` — OAuth credentials - `postEnable`, `postIntervalMin`, `postIntervalMax`, `dryRun` — posting behavior - `searchEnable`, `autoRespondMentions`, `pollInterval` — engagement settings **Setup steps:** 1. Apply for developer account at developer.twitter.com (instant for basic tier) 2. Create a Project and App 3. Generate all 4 keys from "Keys and Tokens" tab 4. Set app permissions to Read and Write 5. Regenerate tokens AFTER setting permissions **Tips:** Start with `TWITTER_DRY_RUN=true` to verify without posting. Free API tier has very limited write access — check [X developer docs](https://developer.twitter.com/en/docs/twitter-api/rate-limits) for current limits. You need ALL 4 OAuth keys — missing any one will cause auth failure. ### Slack **Get credentials:** https://api.slack.com/apps → Create New App **Minimum required:** `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` **Variables:** - `SLACK_BOT_TOKEN` — Starts with `xoxb-` (from OAuth & Permissions → Bot Token) - `SLACK_APP_TOKEN` — Starts with `xapp-` (from Basic Information → App-Level Tokens; scope: `connections:write`) - `SLACK_SIGNING_SECRET` — From Basic Information (for webhook verification) - `SLACK_USER_TOKEN` — Starts with `xoxp-` (optional, for user-level actions) - `SLACK_CHANNEL_IDS` — Comma-separated channel IDs, e.g. `C01ABCDEF,C02GHIJKL` - `SLACK_SHOULD_IGNORE_BOT_MESSAGES` — Prevent bot loops - `SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS` — Only reply when @mentioned **Setup steps:** 1. Create app at api.slack.com/apps (From Scratch → choose workspace) 2. Socket Mode: Enable Socket Mode → generate App-Level Token with `connections:write` scope 3. Bot Token Scopes (OAuth & Permissions): `chat:write`, `channels:read`, `channels:history`, `groups:history`, `im:history`, `app_mentions:read` 4. Install app to workspace → copy Bot Token 5. Enable Event Subscriptions → Subscribe to bot events: `message.channels`, `message.im`, `app_mention` **Tips:** Socket Mode means you DON'T need a public webhook URL. Both Bot Token (xoxb-) AND App Token (xapp-) are required for Socket Mode. To get channel IDs: right-click channel in Slack → Copy link, the ID is in the URL. ### WhatsApp **Two modes — choose one:** **Mode 1: Cloud API (Business, recommended)** **Get credentials:** https://developers.facebook.com/apps → WhatsApp → API Setup - `WHATSAPP_ACCESS_TOKEN` — Permanent system user token from Meta Business - `WHATSAPP_PHONE_NUMBER_ID` — From WhatsApp → API Setup - `WHATSAPP_BUSINESS_ACCOUNT_ID` — From WhatsApp Business settings - `WHATSAPP_WEBHOOK_VERIFY_TOKEN` — Any string you choose (used to verify webhook) - `WHATSAPP_API_VERSION` — e.g. `v18.0` (use latest) **Setup:** Need Meta Business account, verified phone number, approved WhatsApp Business App **Mode 2: Baileys (Personal, QR code)** - `WHATSAPP_AUTH_DIR` — Directory to store session files, e.g. `/data/whatsapp-auth` - No other credentials needed — it scans a QR code on first run **Tips:** Baileys mode works with your personal WhatsApp number but violates ToS. Use Cloud API for production. Cloud API requires a real business and Meta app approval. ### Instagram **Get credentials:** Use your Instagram account credentials **Minimum required:** `INSTAGRAM_USERNAME` + `INSTAGRAM_PASSWORD` **Variables:** - `INSTAGRAM_USERNAME` — Your Instagram username - `INSTAGRAM_PASSWORD` — Your Instagram password - `INSTAGRAM_VERIFICATION_CODE` — Your 2FA code if enabled - `INSTAGRAM_PROXY` — Proxy URL if rate limited or blocked **Tips:** ⚠️ Uses unofficial API. Instagram frequently blocks automated access. Use a dedicated account, not your personal one. A proxy reduces bans. 2FA users must supply the code on startup. ### Bluesky **Get credentials:** https://bsky.app → Settings → App Passwords **Minimum required:** `BLUESKY_HANDLE` + `BLUESKY_PASSWORD` (app password, not your real password) **Variables:** - `BLUESKY_HANDLE` — Your handle e.g. `yourname.bsky.social` - `BLUESKY_PASSWORD` — App password (not your login password — create one in Settings) - `BLUESKY_ENABLED` — `true` to enable - `BLUESKY_SERVICE` — Default: `https://bsky.social` (only change for self-hosted PDS) - `BLUESKY_ENABLE_POSTING` — `true` for autonomous posts - `BLUESKY_POST_INTERVAL_MIN` / `BLUESKY_POST_INTERVAL_MAX` — Seconds between posts - `BLUESKY_MAX_POST_LENGTH` — Max characters per post (default: 300) - `BLUESKY_POLL_INTERVAL` — Seconds between checking mentions/DMs - `BLUESKY_ENABLE_DMS` — `true` to respond to direct messages **Tips:** Create an App Password at bsky.app → Settings → App Passwords. Never use your main login password. ### Farcaster **Get credentials:** https://warpcast.com → Settings, then https://neynar.com for API **Minimum required:** `FARCASTER_FID` + `FARCASTER_SIGNER_UUID` + `FARCASTER_NEYNAR_API_KEY` **Variables:** - `FARCASTER_FID` — Your Farcaster ID (number shown in profile URL) - `FARCASTER_SIGNER_UUID` — Signer UUID from Neynar dashboard - `FARCASTER_NEYNAR_API_KEY` — From neynar.com (needed for read/write) - `ENABLE_CAST` — `true` to enable autonomous casting - `CAST_INTERVAL_MIN` / `CAST_INTERVAL_MAX` — Minutes between casts - `MAX_CAST_LENGTH` — Default 320 characters - `FARCASTER_POLL_INTERVAL` — Seconds between notification checks - `FARCASTER_HUB_URL` — Custom Farcaster hub (advanced, leave blank for default) **Setup steps:** 1. Create Warpcast account, get your FID from your profile URL 2. Sign up at neynar.com, create a signer for your FID 3. Get your API key from Neynar dashboard **Tips:** Neynar is required — it's the indexer that makes Farcaster data accessible via API. ### WeChat > **Not yet available:** The `@elizaos/plugin-wechat` package is not currently in the plugin registry. The configuration below is for reference when the plugin becomes available. **Get credentials:** From your WeChat proxy service provider **Minimum required:** `WECHAT_API_KEY` + proxy URL in config **Variables:** - `WECHAT_API_KEY` — Proxy service API key **Config-only fields** (set in `connectors.wechat`, not env vars): - `proxyUrl` — **Required** — Your WeChat proxy service URL - `webhookPort` — Webhook listener port (default: 18790) - `deviceType` — Device emulation: `ipad` (default) or `mac` - `features.images` — Enable image send/receive (default: false) - `features.groups` — Enable group chat support (default: false) **Setup steps:** 1. Get API key from your WeChat proxy service 2. Configure `connectors.wechat` in eliza.json with `apiKey` and `proxyUrl` 3. Start Eliza — scan the QR code displayed in terminal with WeChat **Tips:** WeChat uses a third-party proxy service, not an official API. Only use a proxy you trust — it sees all message traffic. Multi-account supported via `accounts` map. Package: `@elizaos/plugin-wechat`. ### GitHub **Get credentials:** https://github.com/settings/tokens → Fine-grained or Classic **Minimum required:** `GITHUB_API_TOKEN` **Variables:** - `GITHUB_API_TOKEN` — Personal access token or GitHub App token - `GITHUB_OWNER` — Repository owner (username or org) - `GITHUB_REPO` — Repository name - `GITHUB_BRANCH` — Default branch (e.g. `main`) - `GITHUB_WEBHOOK_SECRET` — For GitHub App webhook verification - `GITHUB_APP_ID` / `GITHUB_APP_PRIVATE_KEY` / `GITHUB_INSTALLATION_ID` — For GitHub Apps **Tips:** Fine-grained tokens are more secure — scope only to the repos you need. For org repos, you may need to request access from the org. ### Twitch **Get credentials:** https://dev.twitch.tv/console/apps → Register Your Application **Minimum required:** `TWITCH_USERNAME` + `TWITCH_CLIENT_ID` + `TWITCH_ACCESS_TOKEN` + `TWITCH_CLIENT_SECRET` **Variables:** - `TWITCH_USERNAME` — Your Twitch bot username - `TWITCH_CLIENT_ID` — From Twitch Developer Console - `TWITCH_CLIENT_SECRET` — From Twitch Developer Console - `TWITCH_ACCESS_TOKEN` — OAuth token (get via https://twitchapps.com/tmi/ or Twitch OAuth flow) - `TWITCH_REFRESH_TOKEN` — For long-lived sessions - `TWITCH_CHANNEL` — Primary channel to join (e.g. `mychannel`) - `TWITCH_CHANNELS` — Additional channels (comma-separated) - `TWITCH_REQUIRE_MENTION` — `true` to only respond when bot username is mentioned - `TWITCH_ALLOWED_ROLES` — `broadcaster`, `moderator`, `vip`, `subscriber`, `viewer` **Tips:** Create a separate Twitch account for the bot. Use https://twitchapps.com/tmi/ to get an access token for chat bots quickly. ### Twilio (SMS + Voice) **Get credentials:** https://console.twilio.com **Minimum required:** `TWILIO_ACCOUNT_SID` + `TWILIO_AUTH_TOKEN` + `TWILIO_PHONE_NUMBER` **Variables:** - `TWILIO_ACCOUNT_SID` — From Twilio Console dashboard (starts with `AC`) - `TWILIO_AUTH_TOKEN` — From Twilio Console dashboard - `TWILIO_PHONE_NUMBER` — Your Twilio number in E.164 format (e.g. `+15551234567`) - `TWILIO_WEBHOOK_URL` — Your publicly accessible URL for incoming messages - `TWILIO_WEBHOOK_PORT` — Port to listen on (if self-hosting, default 3000) - `VOICE_CALL_PROVIDER` — e.g. `twilio` - `VOICE_CALL_FROM_NUMBER` — Outbound caller ID - `VOICE_CALL_TO_NUMBER` — Default number to call - `VOICE_CALL_PUBLIC_URL` — Publicly accessible URL for voice webhooks - `VOICE_CALL_MAX_DURATION_SECONDS` — Max call length (default 3600) - `VOICE_CALL_INBOUND_POLICY` — `allow-all`, `allow-from`, or `deny-all` - `VOICE_CALL_INBOUND_GREETING` — Text spoken when call is answered **Tips:** For webhooks to work, Twilio needs a public URL. Use ngrok during development. Get a phone number in Console → Phone Numbers → Buy a Number. Free trial gives ~$15 credit. ### Matrix **Get credentials:** Your Matrix homeserver account **Minimum required:** `MATRIX_HOMESERVER` + `MATRIX_USER_ID` + `MATRIX_ACCESS_TOKEN` **Variables:** - `MATRIX_HOMESERVER` — e.g. `https://matrix.org` or your own homeserver - `MATRIX_USER_ID` — e.g. `@yourbot:matrix.org` - `MATRIX_ACCESS_TOKEN` — From Element: Settings → Help & About → Advanced → Access Token - `MATRIX_DEVICE_ID` — Leave blank to auto-assign - `MATRIX_ROOMS` — Comma-separated room IDs (e.g. `!abc123:matrix.org`) - `MATRIX_AUTO_JOIN` — `true` to auto-join invite rooms - `MATRIX_ENCRYPTION` — `true` to enable E2E encryption (requires more setup) - `MATRIX_REQUIRE_MENTION` — `true` to only respond when @mentioned **Tips:** Get your access token in Element → Settings → Help & About → Advanced. Matrix IDs use format `@user:server`. ### Microsoft Teams **Get credentials:** https://portal.azure.com → Azure Active Directory → App Registrations **Minimum required:** `MSTEAMS_APP_ID` + `MSTEAMS_APP_PASSWORD` + `MSTEAMS_TENANT_ID` **Variables:** - `MSTEAMS_APP_ID` — Application (client) ID from Azure portal - `MSTEAMS_APP_PASSWORD` — Client secret value from Azure portal - `MSTEAMS_TENANT_ID` — Your Azure AD tenant ID - `MSTEAMS_WEBHOOK_PORT` / `MSTEAMS_WEBHOOK_PATH` — Where Bot Framework sends messages - `MSTEAMS_ALLOWED_TENANTS` — Restrict to specific tenants (comma-separated) - `MSTEAMS_SHAREPOINT_SITE_ID` — For SharePoint integration (advanced) - `MSTEAMS_MEDIA_MAX_MB` — Max file upload size (default 25MB) **Setup steps:** 1. Register app in Azure portal → App Registrations → New Registration 2. Add a client secret under Certificates & Secrets 3. Register bot via https://dev.botframework.com → Create a bot 4. Connect bot to Microsoft Teams channel in Bot Framework portal **Tips:** Requires Microsoft 365 admin access or an org that allows app registrations. ### Google Chat **Get credentials:** https://console.cloud.google.com → APIs → Google Chat API **Minimum required:** Service account JSON or `GOOGLE_APPLICATION_CREDENTIALS` path **Variables:** - `GOOGLE_CHAT_SERVICE_ACCOUNT_KEY` — Full service account JSON (paste the entire JSON) - `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE` — Alternative: path to service account JSON file - `GOOGLE_APPLICATION_CREDENTIALS` — Alternative: path to credentials file - `GOOGLE_CHAT_SPACES` — Comma-separated space names (e.g. `spaces/AAAA_space_id`) - `GOOGLE_CHAT_AUDIENCE_TYPE` — `PUBLISHED` or `DOMAIN_INSTALL` - `GOOGLE_CHAT_AUDIENCE` — Your app's audience URL - `GOOGLE_CHAT_WEBHOOK_PATH` — Webhook path for incoming messages - `GOOGLE_CHAT_REQUIRE_MENTION` — `true` to require @mention - `GOOGLE_CHAT_BOT_USER` — Bot user ID **Tips:** Enable Google Chat API in Cloud Console. Create a service account with Chat-scope permissions. Workspace admin must approve the Chat app. ### Signal **Get credentials:** Your own phone number + signal-cli or signal-api-rest-api **Minimum required:** `SIGNAL_ACCOUNT_NUMBER` + `SIGNAL_HTTP_URL` **Variables:** - `SIGNAL_ACCOUNT_NUMBER` — Your phone number in E.164 format (e.g. `+15551234567`) - `SIGNAL_HTTP_URL` — REST API URL, e.g. `http://localhost:8080` - `SIGNAL_CLI_PATH` — Path to signal-cli binary (optional, for direct CLI mode) - `SIGNAL_SHOULD_IGNORE_GROUP_MESSAGES` — `true` to ignore group chats **Setup:** Run signal-api-rest-api server: https://github.com/bbernhard/signal-cli-rest-api **Tips:** Signal doesn't have an official API. Use bbernhard/signal-cli-rest-api Docker image — it handles the signal-cli connection and exposes a REST API. ### iMessage (macOS only) **Get credentials:** macOS only — no credentials needed, uses local Messages.app **Variables:** - `IMESSAGE_CLI_PATH` — Path to imessage-reader CLI (install from GitHub) - `IMESSAGE_DB_PATH` — Path to Messages chat.db (default: `~/Library/Messages/chat.db`) - `IMESSAGE_POLL_INTERVAL_MS` — How often to check for new messages (default: 5000ms) - `IMESSAGE_DM_POLICY` — `allow-all` or `allow-from` - `IMESSAGE_GROUP_POLICY` — `allow-all`, `allow-from`, or `deny-all` - `IMESSAGE_ALLOW_FROM` — Comma-separated allowed senders - `IMESSAGE_ENABLED` — `true` to enable **Tips:** macOS only. Requires Full Disk Access permission for the app to read the Messages database. Only works on the machine that has iMessage configured. ### BlueBubbles (iMessage via local server) **Get credentials:** Install [BlueBubbles server](https://bluebubbles.app) on a Mac with iMessage **Minimum required:** `BLUEBUBBLES_PASSWORD` **Variables:** - `BLUEBUBBLES_PASSWORD` — Password set in the BlueBubbles server app - `BLUEBUBBLES_SERVER_URL` — BlueBubbles server URL (e.g. `http://192.168.1.50:1234`) - `BLUEBUBBLES_WEBHOOK_PATH` — Custom webhook endpoint path - `BLUEBUBBLES_DM_POLICY` — `allow`, `deny`, or `allowlist` - `BLUEBUBBLES_ALLOW_FROM` — Comma-separated allowed senders - `BLUEBUBBLES_GROUP_POLICY` — Group message policy - `BLUEBUBBLES_GROUP_ALLOW_FROM` — Comma-separated allowed groups - `BLUEBUBBLES_SEND_READ_RECEIPTS` — `true` to send read receipts - `BLUEBUBBLES_ENABLED` — `true` to enable **Tips:** Unlike direct iMessage, BlueBubbles works over the network — the agent doesn't need to run on the same Mac. Supports rich actions: tapbacks, edit/unsend, effects, attachments, and group management. ### Blooio (SMS via API) **Get credentials:** https://bloo.io **Minimum required:** `BLOOIO_API_KEY` **Variables:** - `BLOOIO_API_KEY` — From bloo.io dashboard - `BLOOIO_WEBHOOK_URL` — Your public URL for incoming SMS webhooks - `BLOOIO_WEBHOOK_SECRET` — Secret for webhook signature verification - `BLOOIO_BASE_URL` — bloo.io API base URL (leave as default) - `BLOOIO_FROM_NUMBER` — Phone number to send from - `BLOOIO_WEBHOOK_PORT` — Port for webhook listener **Tips:** Blooio bridges iMessage/SMS. Requires a Mac running the Blooio app. ### Nostr **Get credentials:** Generate your own keypair using any Nostr client **Minimum required:** `NOSTR_PRIVATE_KEY` **Variables:** - `NOSTR_PRIVATE_KEY` — Your nsec private key (hex format) - `NOSTR_RELAYS` — Comma-separated relay URLs, e.g. `wss://relay.damus.io,wss://relay.nostr.band` - `NOSTR_DM_POLICY` — `allow-all` or `allow-from` - `NOSTR_ALLOW_FROM` — Allowed public keys (npub format) - `NOSTR_ENABLED` — `true` to enable **Tips:** Generate keys with any Nostr app (Damus, Primal, Amethyst). Keep private key secret — it's your identity. Use multiple relays for reliability. ### LINE **Get credentials:** https://developers.line.biz/console **Minimum required:** `LINE_CHANNEL_ACCESS_TOKEN` + `LINE_CHANNEL_SECRET` **Variables:** - `LINE_CHANNEL_ACCESS_TOKEN` — From LINE Developers console → Messaging API → Channel Access Token - `LINE_CHANNEL_SECRET` — From Basic Settings tab - `LINE_WEBHOOK_PATH` — Webhook URL path (configure in LINE console too) - `LINE_DM_POLICY` / `LINE_GROUP_POLICY` — `allow-all` or `allow-from` - `LINE_ALLOW_FROM` — Allowed user IDs - `LINE_ENABLED` — `true` to enable **Setup steps:** 1. Create a channel at developers.line.biz 2. Issue a channel access token (long-lived, in Messaging API tab) 3. Set your webhook URL in the console **Tips:** LINE requires your webhook to be HTTPS with a valid certificate. Use ngrok or deploy to a server for development. ### Feishu (Lark) **Get credentials:** https://open.feishu.cn (or open.larksuite.com for Lark) **Minimum required:** `FEISHU_APP_ID` + `FEISHU_APP_SECRET` **Variables:** - `FEISHU_APP_ID` — From Feishu/Lark Developer Console → App Credentials - `FEISHU_APP_SECRET` — From App Credentials section - `FEISHU_DOMAIN` — `feishu.cn` (default) or `larksuite.com` - `FEISHU_ALLOWED_CHATS` — Allowed chat IDs (comma-separated) - `FEISHU_TEST_CHAT_ID` — For testing ### Mattermost **Get credentials:** Your Mattermost instance → System Console → Integrations → Bot Accounts **Minimum required:** `MATTERMOST_SERVER_URL` + `MATTERMOST_BOT_TOKEN` **Variables:** - `MATTERMOST_SERVER_URL` — e.g. `https://mattermost.yourcompany.com` - `MATTERMOST_BOT_TOKEN` — From System Console → Bot Accounts → Add Bot Account - `MATTERMOST_TEAM_ID` — Your team ID (from team URL or API) - `MATTERMOST_DM_POLICY` / `MATTERMOST_GROUP_POLICY` — `allow-all` or `allow-from` - `MATTERMOST_ALLOWED_USERS` / `MATTERMOST_ALLOWED_CHANNELS` — Restrict access - `MATTERMOST_REQUIRE_MENTION` — `true` to require @mention **Tips:** Enable Bot Accounts in System Console → Authentication → Bot Accounts. Self-hosted Mattermost is free. ### Nextcloud Talk **Get credentials:** Your Nextcloud instance → Settings → Security → App Passwords **Minimum required:** `NEXTCLOUD_URL` + `NEXTCLOUD_BOT_SECRET` **Variables:** - `NEXTCLOUD_URL` — Your Nextcloud URL (e.g. `https://cloud.yourserver.com`) - `NEXTCLOUD_BOT_SECRET` — Set when registering bot via Nextcloud Talk API - `NEXTCLOUD_WEBHOOK_PUBLIC_URL` — Publicly accessible URL for Talk webhooks - `NEXTCLOUD_WEBHOOK_PORT` / `NEXTCLOUD_WEBHOOK_PATH` — Webhook server settings - `NEXTCLOUD_ALLOWED_ROOMS` — Room tokens to allow ### Tlon (Urbit) **Get credentials:** Your Urbit ship access **Minimum required:** `TLON_SHIP` + `TLON_URL` + `TLON_CODE` **Variables:** - `TLON_SHIP` — Your ship name (e.g. `~sampel-palnet`) - `TLON_URL` — URL to your ship (e.g. `http://localhost:8080`) - `TLON_CODE` — Your ship's access code (from `+code` in Dojo) - `TLON_GROUP_CHANNELS` — Channels to listen in (group path format) - `TLON_DM_ALLOWLIST` — Allowed DM senders - `TLON_AUTO_DISCOVER_CHANNELS` — Auto-join channels ### Zalo (Vietnam messaging) **Get credentials:** https://developers.zalo.me **Minimum required:** `ZALO_APP_ID` + `ZALO_SECRET_KEY` + `ZALO_ACCESS_TOKEN` **Variables:** - `ZALO_APP_ID` / `ZALO_SECRET_KEY` — From Zalo Developer portal - `ZALO_ACCESS_TOKEN` / `ZALO_REFRESH_TOKEN` — OAuth tokens from Zalo - `ZALO_WEBHOOK_URL` / `ZALO_WEBHOOK_PATH` / `ZALO_WEBHOOK_PORT` — Webhook config ### Zalo User (Personal) Personal Zalo account connector (unofficial, no API key needed). **Variables:** - `ZALOUSER_COOKIE_PATH` — Path to exported Zalo session cookies - `ZALOUSER_IMEI` — Device IMEI for session (from official Zalo app) - `ZALOUSER_USER_AGENT` — Browser user agent string - `ZALOUSER_PROFILES` — Multiple account profiles (JSON) - `ZALOUSER_ALLOWED_THREADS` — Allowed conversation threads - `ZALOUSER_DM_POLICY` / `ZALOUSER_GROUP_POLICY` — Message policies ### ACP (Agent Communication Protocol) Internal agent-to-agent protocol for connecting multiple AI agents. **Variables:** - `ACP_GATEWAY_URL` — Gateway URL for the ACP hub - `ACP_GATEWAY_TOKEN` / `ACP_GATEWAY_PASSWORD` — Authentication credentials - `ACP_DEFAULT_SESSION_KEY` / `ACP_DEFAULT_SESSION_LABEL` — Session identification - `ACP_CLIENT_NAME` / `ACP_CLIENT_DISPLAY_NAME` — This agent's identity - `ACP_AGENT_ID` — Unique agent ID - `ACP_PERSIST_SESSIONS` — `true` to save sessions across restarts - `ACP_SESSION_STORE_PATH` — Where to save sessions ### MCP (Model Context Protocol) Connect to any MCP server for extended tool capabilities. **Variables:** - `mcp` — JSON configuration object for MCP servers **Tips:** MCP servers can provide tools (web search, code execution, file access, databases, etc.) directly to the AI. See https://modelcontextprotocol.io for available servers. ### IQ (Solana On-chain) > **Note:** The IQ plugin is an upstream elizaOS connector not included in the bundled `plugins.json` registry. Install from the remote registry if needed. On-chain chat via Solana blockchain. **Minimum required:** `SOLANA_PRIVATE_KEY` + `IQ_GATEWAY_URL` **Variables:** - `SOLANA_PRIVATE_KEY` — Solana wallet private key (base58 encoded) - `SOLANA_KEYPAIR_PATH` — Alternative: path to keypair JSON file - `SOLANA_RPC_URL` — e.g. `https://api.mainnet-beta.solana.com` - `IQ_GATEWAY_URL` — IQ protocol gateway URL - `IQ_AGENT_NAME` — Display name for your agent - `IQ_DEFAULT_CHATROOM` — Default chatroom to join - `IQ_CHATROOMS` — Additional chatrooms (comma-separated) ### Gmail Watch Monitors Gmail via Google Pub/Sub push notifications. **Setup:** Requires Google Cloud service account with Gmail API access. **Tips:** Uses `gog gmail watch serve` internally. Requires Google Cloud project with Gmail API enabled and Pub/Sub configured. ---
## Streaming (Live Broadcasting) Enable **`@elizaos/plugin-streaming`** once. It covers Twitch, YouTube, X, pump.fun, custom RTMP, and optional multiple named ingests via `streaming.rtmpSources` in config. ### Stream tab (`streaming`) Adds the Stream tab to the UI with RTMP destination management when the plugin is enabled. ### Twitch **Get credentials:** https://dashboard.twitch.tv → Settings → Stream **Variable:** `TWITCH_STREAM_KEY` — Your stream key (keep secret!) **Tips:** Never share your stream key — it lets anyone stream to your channel. Regenerate if leaked. ### YouTube **Get credentials:** https://studio.youtube.com → Go Live → Stream settings **Variables:** - `YOUTUBE_STREAM_KEY` — From YouTube Studio → Stream key - `YOUTUBE_RTMP_URL` — Default: `rtmp://a.rtmp.youtube.com/live2` (rarely needs changing) **Tips:** You need a YouTube channel with Live streaming enabled (may require phone verification). ### X (Twitter) Live stream to X using RTMP credentials generated for the active broadcast. **Get credentials:** From X Live Producer / Media Studio when you create a live stream **Variables:** - `X_STREAM_KEY` — Stream key for the broadcast - `X_RTMP_URL` — RTMP ingest URL for the broadcast session **Tips:** X RTMP credentials are often per-broadcast. Create the stream first, then copy both values directly into the plugin. ### pump.fun Stream to pump.fun using the platform's RTMP ingest credentials. **Get credentials:** From the pump.fun live streaming flow when you create a stream **Variables:** - `PUMPFUN_STREAM_KEY` — Stream key for pump.fun ingest - `PUMPFUN_RTMP_URL` — RTMP ingest URL for the current stream **Tips:** Treat both values as session credentials. If the stream refuses to start, re-create the broadcast and paste fresh values. ### Custom RTMP Stream to any platform (Facebook, TikTok, Kick, self-hosted RTMP, etc.) **Variables:** - `CUSTOM_RTMP_URL` — RTMP endpoint URL, e.g. `rtmp://live.kick.com/app` - `CUSTOM_RTMP_KEY` — Stream key from the platform **Common RTMP URLs:** - Facebook Live: `rtmps://live-api-s.facebook.com:443/rtmp/` - TikTok: `rtmp://push.tiktokcdn.com/third/` (need TikTok Live access) - Kick: `rtmp://ingest.global-contribute.live-video.net/app` --- ## General Tips **Required vs Optional:** Every plugin has minimum required fields. Start with just those — you can add optional settings later. **Testing before going live:** Most connectors have a "dry run" mode (e.g. `TWITTER_DRY_RUN=true`, `FARCASTER_DRY_RUN=true`, `BLUESKY_DRY_RUN=true`) — use this to verify setup without posting. **Policy fields:** Most connectors have `DM_POLICY` and `GROUP_POLICY` fields: - `allow-all` — respond to everyone - `allow-from` — only respond to accounts in the `ALLOW_FROM` list - `deny-all` — never respond (effectively disables that channel type) **Webhook vs Polling:** Connectors like LINE, Twilio, WhatsApp Cloud API, and Google Chat use webhooks (they push messages to your server). You need a publicly accessible URL. Use ngrok for local development: `ngrok http 3000`. **Rate limits:** Most platforms enforce rate limits. For Twitter especially, use conservative post intervals (90-180 minutes minimum).