pumble-mcp
OfficialBased on the provided schema, you can use this MCP server for basic Pumble workspace messaging and directory access.
Send messages to channels by channel name or ID, optionally as a bot.
List messages in a channel with optional limit and pagination cursor.
Edit existing messages using channel ID and message ID.
List visible channels, including DMs and group DMs.
Send direct messages to users by email or userId.
List workspace users to resolve names, emails, and user IDs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pumble-mcp send a message to #general saying hello"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@infralayers/pumble-mcp
Universal, production-ready Model Context Protocol (MCP) server for Pumble. It connects autonomous AI agents and LLMs to your Pumble workspace with 100% official REST API coverage (26 tools), sub-millisecond in-memory entity resolution, affirmative execution receipts, and built-in anti-loop security guardrails.
Works seamlessly across Cursor, Cline / Roo Code, Windsurf, Claude Desktop, Claude Code CLI, Google Antigravity, Zed, and any custom agent framework.
Security note: the Pumble API key you configure grants broad, workspace-wide access. Read the Security / Permissions section before installing.
⚡ Highlights & Performance
100% Official REST API Coverage: 26 autonomous tools covering messaging, threads, scheduling, reactions, channel operations, user directories, and status updates.
Ultra-Low Latency (~0.05ms Resolution): Standard API calls take ~1,500ms to resolve user and channel identifiers over the network. Our in-memory RAM cache reduces steady-state lookups to ~0.05ms (30,000x faster), completely eliminating network penalties.
Boot-Time Prefetching: Users and channels are prefetched in parallel during server startup without blocking the client MCP handshake.
Write-Through In-Place Updates: Channel creation, member additions/removals, and custom status updates sync directly to the local RAM cache in 0ms.
Affirmative Execution Receipts: Mutation tools return structured receipts (
ok: true,delivered: true,status: "Verification complete") that eliminate compulsive post-action read loops (e.g.list_messagesspam).Loop-Prevention Circuit Breaker: Finite State Machine (FSM) guardrail locks out speculative reconnaissance and fast-fails missing entities with actionable guidance.
Security Challenge Gate (
AUTH-XXXX): Destructive actions (deleting messages, removing members) require single-use, time-limited confirmation codes, stopping accidental deletions.
Related MCP server: plutio-mcp
💾 Memory Footprint: Scaling in Large Workspaces
A common concern with in-memory caching is memory consumption in large organizations. This server uses an optimized, lean data model that retains only essential routing identifiers (id, name, email for users; id, name, channelType, userIds for channels):
Workspace Scale | Entities Cached | Estimated RAM Footprint | Memory Impact |
Small Team | 50 users, 20 channels | ~15 KB | Negligible |
Mid-Size Company | 1,000 users, 100 channels | ~230 KB | < 0.25 MB |
Enterprise Workspace | 5,000 users, 500 channels | ~1.1 MB | ~1 MB |
Massive Workspace | 20,000 users, 2,000 channels | ~4.5 MB | < 5 MB |
Takeaway: Even in an enterprise workspace with thousands of users and hundreds of channels, the cache consumes less than 5 MB of RAM—a microscopic fraction of Node.js's standard baseline memory (~30 MB). The cache operates with a 60-second TTL, ensuring fresh data without memory leaks or bloat.
🚀 Quick Start (Zero-Install via npx)
Run directly with npx in any MCP-compliant client without cloning or manual building:
Standard MCP Configuration
Works out of the box in Cursor, Cline / Roo Code, Windsurf, Claude Desktop, and Antigravity.
Add this block to your client's MCP configuration file (e.g. claude_desktop_config.json, .cursor/mcp.json, or Cline MCP settings):
{
"mcpServers": {
"pumble": {
"command": "npx",
"args": ["-y", "@infralayers/pumble-mcp"],
"env": {
"PUMBLE_API_KEY": "<your-pumble-api-key>"
}
}
}
}CLI Agents (Claude Code, Gemini CLI, Terminal)
Register directly from your shell:
# Claude Code CLI
claude mcp add pumble --env PUMBLE_API_KEY="<your-pumble-api-key>" -- npx -y @infralayers/pumble-mcpVerify your registered tools:
claude mcp list🔑 Getting Your Pumble API Key
In your Pumble workspace, install the API Key addon (Apps & Integrations).
Generate a key from the addon's settings. Pumble shows it once as an ephemeral message — copy it immediately.
Pass the key in your client's
envconfiguration asPUMBLE_API_KEY.
🛠️ Complete 26-Tool Reference
Architecture Note: All tools natively accept human-readable fuzzy names, emails, and exact IDs, automatically resolving them via the backend to prevent the AI from wasting context tokens on manual lookups. Ambiguous names will safely throw an error requesting clarification.
1. Messages & Threads (8 Tools)
Tool | Pumble Endpoint | Notes & Parameters |
|
| Send a message to any channel or DM. Takes |
|
| List messages in a channel or DM. Takes |
|
| Fetch a single message by ID. Takes |
|
| Edit an existing message. Takes |
|
| Delete a message. Takes |
|
| Reply to a message to start or continue a thread. Takes |
|
| Fetch replies in a thread. Takes |
|
| Search messages across the workspace by |
2. Scheduled Messages (5 Tools)
Tool | Pumble Endpoint | Notes & Parameters |
|
| Schedule a future message. Takes |
|
| List queued scheduled messages. Supports optional destination filters, |
|
| Inspect a scheduled message by its |
|
| Modify a scheduled message's |
|
| Cancel and delete a queued scheduled message. Takes |
3. Reactions (2 Tools)
Tool | Pumble Endpoint | Notes & Parameters |
|
| Add an emoji reaction to a message. Takes |
|
| Remove an emoji reaction from a message. Takes |
4. Channels & Membership (5 Tools)
Tool | Pumble Endpoint | Notes & Parameters |
|
| List all visible channels (public, private, and direct). Guarded against unnecessary agent discovery loops. |
|
| Hydrate full channel details, including resolved member lists with names and emails. |
|
| Create a new channel. Takes |
|
| Add workspace members to a channel. Takes |
|
| Remove a member from a channel. Takes |
5. Workspace, Users & Status (6 Tools)
Tool | Pumble Endpoint | Notes & Parameters |
|
| Send a 1-on-1 direct message. Takes |
|
| Send a multi-person group direct message. Takes |
|
| List workspace users. Guarded against speculative agent reconnaissance. |
|
| Get account and profile details of the authenticated bot / API key owner. |
|
| List all user groups configured in the Pumble workspace. |
|
| Set or clear custom status text, emoji, and expiration duration. Write-through to cache in 0ms. |
🛡️ Security / Permissions
This server hands a single static Pumble API key to an MCP server that any connected client or LLM session can invoke. Understand the blast radius before installing:
Blast Radius & Capabilities
The API key inherits the full visibility and privileges of the Pumble user who generated it. It is a password-equivalent secret.
With these twenty-six tools, anyone able to invoke this server can, as you:
Messages: Read, send, edit, delete, and reply to messages in any channel or DM the key can access.
Scheduled Messages: Queue messages to post later in any channel or DM, and read, rewrite, redirect, or delete anything already queued.
Workspace Search: Search across workspace history by text, author, or channel.
Direct Messages: Send 1-on-1 and group DMs to any user in the workspace.
User Directory: Enumerate every workspace member's name and email address.
Channel Membership: Create channels, add users to channels, or remove users from channels.
Reactions & Status: Add/remove emoji reactions and modify your profile's custom status.
Built-in Agent Defenses
Destructive Challenge Gates (
AUTH-XXXX): Destructive operations (remove_user_from_channel,delete_scheduled_message,delete_message) cannot be executed speculatively by autonomous agents. If called without human authorization, the server intercepts execution and issues a dynamic 60-second runtime confirmation token challenge requiring human verification.Missing Entity Fast-Fail: Missing users or channels fail immediately with a strict directive stopping partial batches or hallucinations.
Recommendations & Best Practices
Never commit
.env:.envis gitignored by default. Never paste your API key into logs, commit messages, or chat transcripts.Key Rotation: If a key is ever exposed, rotate it immediately in Pumble (Apps & Integrations > API Key Addon), update your environment, and revoke the old key.
Dedicated Service Account: If your Pumble workspace allows it, generate the key from a dedicated service account rather than an individual admin user's personal account.
💻 Local Development
1. Clone & Install
git clone https://github.com/infralayers/pumble-mcp.git
cd pumble-mcp
npm install2. Configure Environment
The server reads PUMBLE_API_KEY from its environment. It does not load a .env file on its own.
For development, export it in your shell (or add to ~/.bashrc):
export PUMBLE_API_KEY="<your-pumble-api-key>"3. Development Scripts
npm run dev # Watch mode via tsx
npm run typecheck # Typecheck without emitting (tsc --noEmit)
npm test # Run unit tests via vitest
npm run build # Compile TypeScript to dist/
npm start # Run compiled server (node dist/index.js)To run your local build directly in an MCP client:
{
"command": "node",
"args": ["/absolute/path/to/pumble-mcp/dist/index.js"],
"env": {
"PUMBLE_API_KEY": "<your-pumble-api-key>"
}
}📄 License
MIT License. Copyright (c) 2026 InfraLayers.
Available Tools
26 toolsadd_reactionB
Add an emoji reaction to a message by ID.
Inputs: reaction (required), messageId (required), channelIdentifier (required).
add_users_to_channel_via_name_or_idC
Add users to a channel by names or emails. Resolves entities natively.
Inputs: userIdentifiers (required), channelIdentifier (required).
create_channelB
Create a new public or private channel.
Inputs: name (required), type.
create_scheduled_message_via_name_or_idB
Schedule a message for future delivery to a channel or user.
Inputs: text (required), sendAt (required), userIdentifier, channelIdentifier.
delete_messageB
Delete a message by ID in a channel. Destructive; requires confirmation code.
Inputs: confirm (required), messageId (required), channelIdentifier (required), confirmationToken.
delete_scheduled_message_via_name_or_idA
Delete a scheduled message before delivery. Destructive; requires confirmation code.
Inputs: confirm (required), scheduledMessageId (required), confirmationToken.
edit_messageC
Edit a previously sent message by ID.
Inputs: text (required), messageId (required), channelIdentifier (required).
edit_scheduled_message_via_name_or_idC
Edit text, target, or send time of a scheduled message.
Inputs: scheduledMessageId (required), text, sendAt, userIdentifier, +1 more.
get_channel_detail_via_channel_name_or_idA
Get details of a specific channel. Use ONLY when the caller explicitly requests channel metadata.
Inputs: channelIdentifier (required).
get_message_via_idC
Get full details of a specific message by ID and channel name or ID.
Inputs: messageId (required), channelIdentifier (required).
get_my_infoB
Get profile information of the authenticated user/bot.
Inputs: no named parameters.
get_scheduled_message_via_name_or_idB
Get details of a specific scheduled message by ID.
Inputs: scheduledMessageId (required).
list_channels_only_when_user_callsA
List all visible channels. Use ONLY when the caller explicitly asks to view the channel directory.
Inputs: no named parameters.
list_messages_via_name_or_idB
List messages from a channel or direct message (DM) conversation. Resolves names natively.
Inputs: limit, cursor, userIdentifier, channelIdentifier.
list_scheduled_messagesB
List scheduled messages, optionally filtered by channel or user.
Inputs: limit, cursor, userIdentifier, channelIdentifier.
list_thread_replies_via_channel_name_or_idC
List all replies in a message thread. Resolves names natively.
Inputs: messageId (required), channelIdentifier (required), limit, cursor.
list_user_groupsB
List workspace user groups.
Inputs: no named parameters.
list_users_not_for_id_lookupA
List all workspace users. Use ONLY when the caller explicitly asks to view the user directory.
Inputs: no named parameters.
remove_reactionC
Remove an emoji reaction from a message by ID.
Inputs: reaction (required), messageId (required), channelIdentifier (required).
remove_user_from_channel_via_name_or_idB
Remove a user from a channel. Destructive; requires confirmation code.
Inputs: confirm (required), userIdentifier (required), channelIdentifier (required), confirmationToken.
reply_message_via_channel_name_or_idB
Reply to a message in a channel or DM thread using parent messageId. Resolves names natively.
Inputs: text (required), messageId (required), channelIdentifier (required), asBot.
search_messagesA
Search message history by text query (~15s indexing delay). Do not use for user/channel ID lookups.
Inputs: text (required), after, before, fromUserIdentifiers, +1 more.
send_dm_via_name_email_or_idB
Send a 1-on-1 direct message. Resolves user names/emails natively.
Inputs: text (required), userIdentifier (required).
send_group_dm_via_names_emails_or_idsC
Send a group direct message to multiple users. Resolves names/emails natively.
Inputs: text (required), userIdentifiers (required).
send_message_via_channel_name_or_idB
Send a message to a public or private channel. Resolves channel names natively.
Inputs: text (required), channelIdentifier (required), asBot.
update_my_custom_statusC
Update the custom status of the authenticated user.
Inputs: code, status, expiresAt, expiration.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 26 tools
Tools mostly target distinct resource+action pairs (send vs reply vs schedule vs edit vs delete message, channel vs DM vs group DM, reactions, threads). Some names awkwardly embed usage guidance (list_channels_only_when_user_calls, list_users_not_for_id_lookup), but this actually reduces misselection. Minor overlap between send_message_via_channel_name_or_id and send_dm/send_group_dm, but descriptions clarify.
Most tools follow verb_noun but with inconsistent long suffixes (via_channel_name_or_id, via_name_email_or_id, via_names_emails_or_ids, via_name_or_id), while others (edit_message, delete_message, add_reaction) drop the suffix entirely. Two tools embed conditional instructions in the name (only_when_user_calls, not_for_id_lookup), breaking the pattern. Still readable but mixed conventions.
At 26 tools it sits just over the heavy threshold, and the surface spans messages, channels, DMs, threads, reactions, scheduled messages, users, groups, and status. Each tool does map to a distinct operation, but the set feels large and could be consolidated (e.g. the via_name_or_id variants).
Strong coverage of the chat domain: full message lifecycle, threads, reactions, DMs/group DMs, channel create and membership management, and complete scheduled-message CRUD. Gaps remain (no channel delete/archive/update, no file/attachment handling, user groups are list-only), but core workflows are covered.
Maintenance
Related MCP Connectors
Manage Redbooth tasks, task lists, comments, tags and files from Claude and other AI assistants.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Messaging tools for AI agents: send messages, manage chats, groups and channels.
Related MCP Servers
- FlicenseAqualityNot gradedmaintenanceEnables two-way communication between Claude and Slack for posting messages, managing threads, and handling files. It specifically supports asynchronous workflows by allowing Claude to poll for remote user replies and send task notifications.9-
- AlicenseNot gradedqualityDmaintenanceEnables Claude and other MCP clients to interact with Plutio's business platform resources including CRM, projects, invoicing, and more through structured tools.109 npm5MIT
- AlicenseBqualityCmaintenanceEnables Claude to manage WhatsApp templates, flows, and send messages through the WhatsApp Cloud API.3119 npmMIT
- AlicenseAqualityAmaintenanceEnables Claude clients to read and modify workplace and facilities management data through a REST API, with every write and state-changing tool gated behind a user confirmation prompt or a single-use confirmation token.53375 npm1MIT