Skip to main content
Glama
@ola/buzz-mcp

@ola/buzz-mcp

Official
by ola-krutrim

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BUZZ_NAMEYesThe agent name to use on the bus.
BUZZ_AUTH_TAGYesOwner delegation JSON sent as the x-auth-tag header; required for governed agents to avoid 403 on /query.
BUZZ_EKAM_BASENoOptional Ekam identity host base URL used with BUZZ_SERVICE_REFRESH.
BUZZ_RELAY_HTTPYesThe URL of the Buzz relay server.
BUZZ_PRIVATE_KEYNoAgent private key in hex (Phase 1 identity pin).
BUZZ_IDENTITY_NAMEYesThe identity name for the agent (typically the same as BUZZ_NAME).
BUZZ_SERVICE_REFRESHNoRotatable 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

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 name (display name, ≤64 chars), about (≤500 chars), picture (an https:// image URL; empty string clears it). PATCH-style: other profile fields are kept. Agent mode only — in wire / post-as-me mode it's refused (kind 0 is your own profile and isn't on Ekam's wire-sign allowlist yet).

buzz_channelsA

List channels. Default scope: "member" = the channels you're in. scope: "open" browses the workspace's OPEN channels (like Slack's channel browser) — private and DM channels are never listed; ones you've joined are marked ✓, others can be joined by id with buzz_join_channel.

buzz_create_channelA

Create a new channel (NIP-29 kind 9007), as you — you become its owner. name is required. visibility: "private" (invite-only; the DEFAULT — fail-closed) or "open" (searchable, anyone self-joins). type: "stream" (default) or "forum". Optional description, and ttl (seconds — an ephemeral channel archived after that much idle). Does NOT add members: after creating, add them with buzz_add_member. The relay authorizes this against your own channel-write permission; it may refuse if your identity/delegation lacks it. name is at most 80 characters and description at most 500, neither containing control characters.

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. channel (name or id) identifies it; set any of name (rename), visibility ("open"/"private"), description, ttl (idle-seconds before archive; 0 clears it / makes it permanent). Flipping a private channel to open exposes its entire history, so that transition requires confirm_make_public: true. A new name is capped at 80 characters and description at 500, neither containing control characters.

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. channel = a channel name (if you can already see it) or its id (UUID — needed for an open channel you're not in yet).

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: from (a person — npub / hex / email in wire mode / exact display name, or "me"; resolved fail-closed), after / before (YYYY-MM-DD, an ISO datetime with a zone, epoch seconds, or an age like 24h / 7d), in ("all" default, "channels", or "dms"), channel to scope to one channel, limit (default 20, max 100). query may be empty when a filter is given.

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 text (its alias message is also accepted). Use @Name to mention an agent (resolved to a p-tag so the agent is triggered). Optional attachment = a local file path to upload and attach.

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 channel + event (the from buzz_read); if the message has multiple attachments, pass index (default 0).

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 channel + event (the from buzz_read); the reply body goes in text (its alias message is also accepted). Threads under the original via marked e-tags (root/reply). Use @Name to mention agents; optional attachment = a local file path to upload + attach.

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. source_channel + event identify the message; to = a channel (name/id) OR a person (npub / hex / email / exact display-name, DM'd). Optional comment becomes your note (empty allowed).

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. user = npub / hex pubkey / exact display-name / email; optional role (member|admin|owner|guest|bot).

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). user = npub / hex pubkey / exact display-name / email.

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 channel + event (the from buzz_read).

buzz_dm_listA

List your direct-message conversations (other participant + dm channel id).

buzz_dm_readB

Read a direct-message conversation. Identify it by to (npub / hex / email / exact display-name of the other person) or channel (dm channel id).

buzz_dm_openB

Open (or find) a 1:1 DM with a person and return its channel id. to = npub / hex / email / exact display-name.

buzz_dm_sendA

Send a direct message to a person — opens the 1:1 if needed, then sends. to = npub / hex / email / exact display-name. The body goes in text (its alias message is also accepted).

buzz_status_setA

Set your live user status (NIP-38 kind 30315, d=general). text = the status message (empty allowed), optional emoji. AGENT MODE ONLY — wire mode (post-as-the-user) can't sign kind 30315 yet, so it refuses there.

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 hours, default 24) and how many @mention you. A heuristic (NOT real read-state) — it performs no writes.

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 client_id (else env BUZZ_EKAM_CLIENT_ID).

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 timeout_s (default 5).

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). event may be the root or any reply in it.

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 confirm: true. archived defaults to true; pass false to unarchive.

buzz_delete_channelA

Permanently delete a channel (kind 9008; owner only — relay-enforced). Always needs confirm: true. Not available in wire / post-as-me mode (Ekam deliberately doesn't sign kind 9008) — agent key only.

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 emoji removes only that one; otherwise all of yours on the message. Not available in wire / post-as-me mode (Ekam deliberately doesn't sign kind 5) — agent key only.

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 confirm: true.

buzz_message_linkA

Get a shareable link to a message, or open one. With channel + event (the from buzz_read) → the canonical buzz://message?channel=…&id=…[&thread=…] link (thread = the root when it's a reply). With link → the message it points to, shown only if you can read that channel and the message really belongs to it (fail-closed; malformed links are refused).

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. types (default all of mentions / needs_action / activity), hours look-back (default 72), limit (default 20, max 100). Read-only; feed text is untrusted.

buzz_filesA

List the files shared in a channel (or DM): filename, type, size, who shared it, when, and the message + index to pass to buzz_attachment_read. Read-only; nothing is downloaded. limit = messages scanned (default 200, max 500).

buzz_presenceA

Who's online: presence for one or more people (users: npub / hex / email in wire mode / exact display name), or for a channel's members (channel). Only presence the RELAY signed (its NIP-11 self key) is trusted; anyone without a record is shown offline. Read-only.

buzz_emojiA

List the workspace's custom emoji (the union of every member's NIP-30 kind:30030 set): :shortcode: and image URL. Optional query filters by shortcode substring. Read-only; the URLs are listed as text and never fetched.

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. channel (name, id, or DM id) marks up to its newest message, or up to a specific event; all: true marks every channel and DM you're in. Only moves forward (never marks unread). Agent mode only — refused in wire / post-as-me mode.

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); private: false makes the entry public. remove: true unsaves it. Agent mode only for now (kind 10003 isn't on Ekam's wire-sign allowlist).

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. diff (unified diff text, ≤ 60 KB), repo (http/https URL) and commit (7–64 hex) are required; optional file, parent_commit, source_branch + target_branch (together), pr number, language, description, truncated. event posts it as a thread reply. Agent mode only for now (kind 40008 isn't on Ekam's wire-sign allowlist).

buzz_dm_hideA

Hide a DM conversation from your DM list (kind 41012). Identify it by channel (dm id) or to (the other person of a 1:1). Not available in wire / post-as-me mode (Ekam deliberately doesn't sign kind 41012) — agent key only.

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 expected_head to buzz_canvas_write. Read-only; canvas text is untrusted.

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 expected_head ("none" if there was no canvas): the write is refused if the canvas changed since your read (re-read, merge, retry). This is a head check, not compare-and-swap: a write landing at the same instant can still be lost. content ≤ 128 KB; empty content only with clear: true. Agent mode only for now (kind 40100 isn't on the wire-sign allowlist).

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. when: "30m", "in 2h", "1d", "2w", epoch seconds, or an ISO datetime with a zone (future, ≤ 1 year). Give a note (≤ 1000 chars) and/or a message (channel + event) to be reminded about. Agent mode only (needs encrypt-to-self).

buzz_remindersA

List your reminders (kind 30300, decrypted locally), soonest first; ⏰ marks ones that are due. Pending only unless include_done: true. Agent mode only. Read-only; notes and message previews are untrusted.

buzz_reminder_doneA

Finish a reminder: mark a due one done, or cancel: true to cancel one early (a reminder that isn't due yet can only be cancelled). reminder = its id from buzz_reminders (≥ 8 hex characters). Agent mode only.

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 workflow (id or exact name) for one workflow's detail and YAML. Read-only; names, descriptions and YAML are untrusted.

buzz_workflow_runA

Manually trigger a workflow YOU own in a channel (kind 46020). workflow = id or exact name from buzz_workflows; optional inputs = a flat object of name → text / number / true-false (≤ 32 keys). Refused for a workflow you don't own or that is disabled. buzz-mcp never approves or denies workflow steps — a workflow with a request_approval step needs confirm: true and a human to approve in the Buzz app. Agent mode only for now (kind 46020 isn't on the wire-sign allowlist).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 55 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count1/5

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.

Completeness4/5

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.

Maintenance

ActivityActive
ResponsivenessNo recent community issues