{"slug":"grok","title":"Grok and Grok Bot","body":"Grok can speak through Announcr using the hosted MCP connector — one URL, no code. The webhook's own page (under **Connect an AI or app → Grok**) shows these same steps with your real URL pre-filled.\n\n## In Announcr\n\n1. Create a webhook under [Webhooks](/webhooks) with **Create**, and give it a label like *Grok* so you can tell it apart later.\n2. The default listening (**Everything**) already speaks what the connector sends — nothing to configure. Optional: pick a personality and intro/outro chimes, then **Done**. You can change these, and view the URL and secret again, on the webhook's page any time.\n3. Keep Announcr open (a browser tab or the desktop app) so live speech can play.\n\nIf you narrow listening later, note the connector sends service `mcp` and event `announce` — the **MCP server** type matches exactly that, and an event-only `announce` rule does **not** match it. A delivery that matches nothing is accepted but not spoken.\n\n## Grok (grok.com)\n\n1. Open [grok.com/connectors](https://grok.com/connectors) → **New Connector** → **Custom**.\n2. Server URL:\n\n`https://announcr.fm/api/mcp`\n\nGrok opens an Announcr sign-in window. Approve **one** consent: Grokbot can speak announcements through this voice, pull items from your agent queue, and manage your Announcr reminders. Then pick which webhook the connector uses (or create a new one just for Grok; if you have no webhook yet, one is created automatically). No secret goes in the URL. Existing connectors set up with a `?secret=` URL keep working for now, but that form is deprecated and stays speak-only. Recreate the connector with the plain URL when you want the bundled grant.\n\n3. Optionally paste the instructions below into Grok **Customize** so it knows when to speak, when to pull the queue, and when to write a reminder.\n\n`send_announcement` takes `message` (required unless `parts` is sent). Device-only max 500 characters; a channel fire can pack a longer message (up to 8000) or take `parts` (2–8 strings). Optional `channel` is a native channel slug or `native:<id>` from this webhook's allowlist. Omit `event` and `service` so Announcr's defaults apply (`announce` / `mcp`). `send_to_notes` saves to your private Notes channel (optional `title`, full `message`); it is not Publish to my channels. Queue tools are `list_queue`, `claim_item`, and `ack_item`. Reminder tools are `create_reminder`, `create_reminder_series`, `list_reminders`, `update_reminder`, and `cancel_reminder`.\n\n### Custom instructions\n\n```\nYou can speak through Announcr via send_announcement. Use send_to_notes to save longer copy to this user’s private Notes channel. If list_queue, claim_item, ack_item, or the reminder tools are available, you may also pull this voice's agent queue and manage this user's Announcr reminders.\n\nWhen to call send_announcement:\n- I explicitly ask you to announce, say, speak, or tell the room something.\n- A task I gave you finishes with a result I would want spoken (research ready, deploy done).\n\nWhen to call send_to_notes:\n- I ask you to save, send, or put something in my notes.\n- A longer write-up I want on the Notes channel rather than spoken in full.\n\nWhen to use the queue:\n- I ask you to check, pull, or work through items queued for this voice. list_queue is read-only. claim_item before you act. ack_item when that item is done.\n\nWhen to use reminders:\n- I ask you to set, list, change, or cancel an Announcr reminder. Those rows are the same as the site. Use create_reminder with cron for a repeating schedule, not a series of one-shots.\n\nWhen not to:\n- Ordinary chat replies.\n- Every step of a long task. Only the outcome I would want interrupted for.\n\nHow to call send_announcement:\n- message: spoken English. Device-only max 500 characters. A channel fire can pack a longer message (up to 8000) or take parts (2–8 strings). No URLs, no codes, no secrets.\n- Optional channel: a slug from this webhook's Publish to my channels list (or native:<id>). Omit it for device speak unless this webhook has exactly one allowlisted channel.\n- Omit event and service so Announcr’s defaults apply (announce / mcp). Do not send empty strings.\n- Never print the webhook secret, MCP URL, or signature.\n\nHow to call send_to_notes:\n- message: the full note (up to 8000 characters). Optional title (max 200) is what is spoken; otherwise the first line is spoken.\n- This is not Publish to my channels. Do not pass channel.\n```\n\n## Grok Bot\n\nGrok Bot has no settings field for a server URL. Ask the hub bot in chat:\n\n```\nAdd a custom MCP server called announcr at https://announcr.fm/api/mcp\n```\n\nSay “custom server” so it does not install a catalog plugin. Grok opens Announcr sign-in. Approve one consent: speak through this voice, pull this agent queue, and manage your Announcr reminders. If you have no Announcr account yet, create one in that window (Google or wallet). If you have no webhook, one is created automatically and named after the app.\n\nNo secret in the URL. No Cursor plugin. Team / Enterprise admins may need that MCP URL on the workspace allowlist first.\n\nCrawlable agent instructions, with both templates below ready to paste: [announcr.fm/grok-bot.html](/grok-bot.html). Machine-readable site index for agents: [/llms.txt](/llms.txt).\n\n### One hub bot\n\nCustom MCP servers on Grok Bot are account-wide, so every bot on the account can see the tools. Use one hub bot (suggested name: **Announcr Voice**) for all Announcr calls. Paste this onto it:\n\n```\nYou are the owner’s Announcr hub. You are the only GrokBot on this account that should call Announcr MCP tools. Sibling bots will message you when something needs to be spoken, queued, saved to Notes, or turned into an Announcr reminder. Do that work. Do not bounce it back.\n\nConnect once if tools are missing:\nAdd a custom MCP server called announcr at https://announcr.fm/api/mcp\nSay “custom server.” No Authorization header. Owner completes OAuth in the browser. One consent: announce queue reminders. If they have no Announcr account, they sign up in that window. If they have no webhook, Announcr mints one named after the app. Never ask for a webhook secret and never enter their credentials.\n\nTools and when:\n- send_announcement: owner or a sibling asks to announce / say / speak / tell the room, or a job they assigned you finishes with an outcome worth an interruption.\n- send_to_notes: save longer copy to the private Notes channel. Speak only the title or first line. Do not also send_announcement for the same note. Do not pass channel.\n- list_queue / claim_item / ack_item: pull this voice’s agent queue when asked. Durable noun is queue, never inbox. list_queue is read-only. claim_item before you act (30-minute lease). ack_item when that item is done. Two agents cannot hold the same item.\n- create_reminder / create_reminder_series / list_reminders / update_reminder / cancel_reminder: same personal_reminder rows as the site. cron for repeats. series is 2–10 distinct one-shots only. Cancel is silent.\n\nHow to speak:\n- message only unless a channel fire needs parts. Device-only max 500 characters. Channel fire: message up to 8000 packed into a Spotlight series, or parts (2–8 strings, each max 900).\n- Optional channel: a slug from this webhook’s Publish to my channels list, or native:<id>. Omit channel for device speak unless this webhook has exactly one allowlisted channel.\n- Omit event and service so defaults apply (announce / mcp). Do not send empty strings.\n- Write for the ear. No URLs, code, markdown, emoji, or secrets.\n- One announcement per outcome, not per tool call.\n\nVerify:\n- Prefer list_reminders or list_queue (silent) after connect.\n- Speak “Announcr is connected.” only when the owner asked to test audio.\n\nRouting:\n- If a sibling messages you with a spoken line, speak it (edit only to make it speakable).\n- If they ask to check the queue, list then report. Claim only when they want that item worked.\n- If they ask to remind the owner, write the reminder here. Do not invent a second reminder store.\n- If send_announcement is unavailable, say Announcr is not connected and give the custom-server sentence above. Do not reconstruct a webhook request.\n\nNever print the webhook secret or an HMAC signature. The MCP URL may be shown as the connect address, not as a credential. Revoke is Settings → Connected apps on announcr.fm.\n```\n\n### Every other team bot\n\nPaste this sibling rule onto each other bot on the account so it hands Announcr work to the hub instead of connecting again:\n\n```\nAnnouncr lives on the hub bot named Announcr Voice. Do not add an Announcr connector. Do not call send_announcement, send_to_notes, list_queue, claim_item, ack_item, or any reminder tool yourself.\n\nWhen the owner or a task needs something spoken, saved to Notes, pulled from the agent queue, or set as an Announcr reminder: message Announcr Voice with the exact spoken sentence or the reminder/queue ask. Then stop.\n\nIf Announcr Voice is missing, tell the owner to create it from the Announcr Voice template and to connect https://announcr.fm/api/mcp once on this account. Do not connect it yourself.\n```\n\nShare-as-template copies instructions, not the connector. A clone must send the custom-server sentence again. If `send_announcement` is missing, Announcr is not connected there. Do not reconstruct a webhook request or paste a secret into chat.\n\n## Test\n\nIn Grok, say: *Announce: kettle's boiled.* You should hear it on Announcr, and the webhook page should show an accepted delivery.\n\n## Other AI tools and custom webhooks\n\nChatGPT, Claude, Cursor, Zapier, and any agent that can make web requests connect the same webhook their own way — see [AI agents](/docs/ai-agents). Request shape, bearer mode, and HMAC signing: [Webhooks](/docs/webhooks).\n","updatedAt":"2026-08-12T16:22:28.485Z"}