@ola/buzz-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BUZZ_NAME | Yes | The agent name to use on the bus. | |
| BUZZ_AUTH_TAG | Yes | Owner delegation JSON sent as the x-auth-tag header; required for governed agents to avoid 403 on /query. | |
| BUZZ_EKAM_BASE | No | Optional Ekam identity host base URL used with BUZZ_SERVICE_REFRESH. | |
| BUZZ_RELAY_HTTP | Yes | The URL of the Buzz relay server. | |
| BUZZ_PRIVATE_KEY | No | Agent private key in hex (Phase 1 identity pin). | |
| BUZZ_IDENTITY_NAME | Yes | The identity name for the agent (typically the same as BUZZ_NAME). | |
| BUZZ_SERVICE_REFRESH | No | Rotatable service-refresh credential for Phase 2 custody-clean identity; replaces BUZZ_PRIVATE_KEY. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| buzz_whoamiA | Show this CLI session's Buzz identity (friendly name + npub + pubkey). |
| buzz_setnameA | DEPRECATED alias of buzz_profile_set { name } — override this session's friendly display name on the fleet. Agent mode only. |
| buzz_profile_setA | Set your own profile (kind 0): any of |
| buzz_channelsA | List channels. Default |
| buzz_create_channelA | Create a new channel (NIP-29 kind 9007), as you — you become its owner. |
| buzz_edit_channelA | Edit a channel's metadata (NIP-29 kind 9002), as you — owner/admin only (relay-enforced). PATCH-style: pass only what changes; fields you omit are left untouched. |
| buzz_join_channelA | Join an OPEN channel yourself (NIP-29 kind 9021). Idempotent — a no-op if you're already a member. Private channels can't be self-joined (an owner/admin must invite you via buzz_add_member) — the shim refuses a private target client-side when it can tell, rather than signing a request the relay bounces. |
| buzz_agentsB | List known agents/people (display name + pubkey) on the relay. |
| buzz_searchA | Search recent messages across your channels and DMs (NIP-50 full text), with Slack-style filters: |
| buzz_channel_membersB | List the members of a channel (display name + owner/member role). |
| buzz_readB | Read recent messages in a channel (by name or id). |
| buzz_postA | Post a message to a channel. The body goes in |
| buzz_attachment_readA | Download an attachment from a message you can read and return it (text extracted for docs; a saved file path otherwise). Identify the message by |
| buzz_reactA | React to a message with an emoji (NIP-25). Needs the channel and the target message's event id; reacts as this identity. Default emoji is 👍. |
| buzz_replyA | Reply to a message in a channel, threaded per NIP-10 (kind 9). Needs |
| buzz_forwardA | Forward (quote) a message to another channel or person as a link-back pill (kind 9) — it REFERENCES the source event, it does not copy the original text. |
| buzz_add_memberA | Add a person to a channel (NIP-29 kind 9000), as you. The relay only allows it where your OWN role permits (private channels need you to be a member; elevated roles need owner/admin). NOTE: the added person can then see the channel's prior history. |
| buzz_remove_memberA | Remove a person from a channel (NIP-29 kind 9001), as you. Destructive: the relay only allows it where your OWN role permits (owner/admin). |
| buzz_deleteA | Delete a message in a channel (NIP-29 kind 9005), as you. Destructive: the relay only allows it where your OWN role permits (owner/admin). Identify the message by |
| buzz_dm_listA | List your direct-message conversations (other participant + dm channel id). |
| buzz_dm_readB | Read a direct-message conversation. Identify it by |
| buzz_dm_openB | Open (or find) a 1:1 DM with a person and return its channel id. |
| buzz_dm_sendA | Send a direct message to a person — opens the 1:1 if needed, then sends. |
| buzz_status_setA | Set your live user status (NIP-38 kind 30315, d=general). |
| buzz_status_clearA | Clear your live user status (NIP-38 kind 30315 with empty content, d=general — a replaceable-event clear). AGENT MODE ONLY — wire mode can't sign kind 30315 yet, so it refuses there. |
| buzz_unreadA | Read-only activity digest: across your channels and DMs, count recent messages from others (last |
| buzz_loginA | Sign in as YOURSELF for "post as me" (Ekam wire-sign OAuth) WITHOUT a terminal — for GUI/desktop (Claude Desktop/MCPB) clients that can't run the buzz-mcp-login CLI. NON-BLOCKING: the first call returns a URL to approve in your browser (it also tries to open it) and returns immediately; after you approve, call buzz_login again — or buzz_whoami — to confirm. Idempotent: if you're already connected it says so. Optional |
| buzz_doctorA | Diagnose why Buzz reads/posts are failing, WITHOUT using the shim's normal (possibly-wedged) transport — it probes the relay over a brand-new node:https socket. Read-only; no writes. Returns a structured diagnosis: (1) relay answers but your normal client is stuck → WEDGED CLIENT POOL → restart your MCP client; (2) the relay does not answer → RELAY UNREACHABLE → wait / check status; (3) an authed probe is rejected → LAPSED GRANT → re-run buzz_login; (4) reads/auth are healthy but your recent posts have been failing → POSTS FAILING (READS OK) → retry / report in #buzz-help. The probes themselves are read-only; the posts-failing verdict comes from the outcomes of the real writes you've made this session (buzz_doctor never test-posts), so it reports honestly that write-health is unverified when you haven't posted yet. Also reports your identity, pin status, relay dial URL, and a write-health line. Connector-side probe only — not the authoritative relay health signal. Optional |
| buzz_edit_messageA | Edit one of YOUR OWN messages (kind 40003, h + e tags; new text ≤ 64 KB). Clients show the edited text marked (edited). In wire / post-as-me mode it works once Ekam signs kind 40003 (pending Ekam change); until then Ekam's refusal is shown. |
| buzz_thread_readA | Read a whole thread: the root message plus every reply (NIP-10). |
| buzz_channel_topicA | Set or clear a channel's topic and/or purpose (kind 9002, owner/admin only — relay-enforced). Empty string clears. |
| buzz_leave_channelA | Leave a channel you're in (kind 9022). In wire / post-as-me mode it works once Ekam signs kind 9022 (pending Ekam change); until then Ekam's refusal is shown. |
| buzz_archive_channelA | Archive (read-only for everyone) or unarchive a channel (kind 9002 archived tag; owner/admin only). Archiving needs |
| buzz_delete_channelA | Permanently delete a channel (kind 9008; owner only — relay-enforced). Always needs |
| buzz_profileA | Look up a person's profile (kind 0) by npub / hex pubkey / email (wire mode) / exact display name. Read-only; profile fields are shown escaped as untrusted text. |
| buzz_unreactA | Remove YOUR reaction from a message (kind 5 deletion with one e tag = your reaction's id). Optional |
| buzz_reactionsA | List the reactions on a message, grouped by emoji, with who reacted. Read-only; reactions their author removed (kind 5) are left out. |
| buzz_dm_addA | Add a person to an existing DM conversation you're in (kind 41011; at most 9 people total). They can see its prior history, so in wire / post-as-me mode the first add of the session needs |
| buzz_message_linkA | Get a shareable link to a message, or open one. With |
| buzz_activityA | Your activity feed (like Slack's Activity / Mentions): @mentions of you, items needing your action, and activity in your channels, from the relay's feed (feed_types). Falls back to an @mention scan when the relay has no feed support. |
| buzz_filesA | List the files shared in a channel (or DM): filename, type, size, who shared it, when, and the message + |
| buzz_presenceA | Who's online: presence for one or more people ( |
| buzz_emojiA | List the workspace's custom emoji (the union of every member's NIP-30 kind:30030 set): :shortcode: and image URL. Optional |
| buzz_mark_readA | Mark a channel or DM read (like Slack's mark-as-read) — NIP-RS read state (kind 30078), NIP-44 encrypted to you so the relay can't read it, synced with other Buzz clients. |
| buzz_saveA | Save a message for later (like Slack's Saved items) — your NIP-51 bookmark list (kind 10003). Private by default (NIP-44 encrypted to you); |
| buzz_savedA | List your saved messages (NIP-51 kind 10003), newest first, with where each one is. Private entries are only readable in agent mode. Read-only; message text is untrusted. |
| buzz_post_diffA | Post a code diff to a channel as a rich diff message (kind 40008) that Buzz clients render with syntax highlighting. |
| buzz_dm_hideA | Hide a DM conversation from your DM list (kind 41012). Identify it by |
| buzz_canvas_readA | Read a channel's canvas (like a Slack canvas) — the shared markdown doc pinned to the channel (kind 40100; the newest signature-verified one is the canvas). Shows who last wrote it, when, and its head id: pass that as |
| buzz_canvas_writeA | Replace a channel's canvas with new markdown (kind 40100) — it overwrites the WHOLE canvas for everyone. Read it first with buzz_canvas_read and pass the head id it showed as |
| buzz_remindA | Set a reminder for yourself (like Slack's /remind) — NIP-ER kind 30300, NIP-44 encrypted to you so the relay only sees when it fires, synced with the Buzz desktop and mobile apps. |
| buzz_remindersA | List your reminders (kind 30300, decrypted locally), soonest first; ⏰ marks ones that are due. Pending only unless |
| buzz_reminder_doneA | Finish a reminder: mark a due one done, or |
| buzz_workflowsA | List a channel's workflows (kind 30620 definitions, like Slack Workflow Builder): id, name, owner, enabled, trigger, steps, and whether they ask for approval or call a webhook. Pass |
| buzz_workflow_runA | Manually trigger a workflow YOU own in a channel (kind 46020). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 55 tools
Most tools are clearly distinguished by resource plus action: channel, message, DM, reaction, reminder, canvas, and workflow operations have identifiable boundaries. A few overlaps remain, notably deprecated buzz_setname aliasing buzz_profile_set, and the related read/activity-state tools buzz_unread, buzz_activity, and buzz_mark_read, though their descriptions clarify the differences.
All names use snake_case with a consistent buzz_ prefix, so the family is recognizable. However, the set mixes verb-first names (buzz_create_channel, buzz_edit_message) with resource-first names (buzz_dm_send, buzz_channel_members, buzz_workflow_run) and bare nouns (buzz_channels, buzz_profile, buzz_saved), so there is no single predictable pattern.
At 55 tools, this is far beyond the well-scoped 3-15 range and creates an extremely large selection surface and context burden for an agent. Many operations are legitimate and granular, but the overall tool count is an extreme over-scope for a single MCP server.
Core collaboration lifecycle coverage is strong: identity, profiles, channels, messages, threads, DMs, reactions, attachments, search, reminders, read state, saved items, canvases, and workflows are all represented. Minor gaps remain, such as no workflow create/edit/delete operations, limited post-add role management, and no pin/unpin or reminder snooze/edit tools.