Skip to main content
Glama
infralayers

pumble-mcp

Official
by infralayers

pumble-mcp

A small MCP server that wraps Pumble's "API Key addon" REST API, exposing nineteen tools to any MCP client, covering messages and threads, scheduled messages, reactions, search, channel and membership management, direct messages, and the workspace user directory. See SPEC.md for the full design.

Security note: the Pumble API key you configure grants broad, workspace-wide access. Read the Security / Permissions section before installing.

1. Get a Pumble API key

  1. In your Pumble workspace, install the API Key addon (Apps/Integrations).

  2. Generate a key from the addon's settings. Pumble shows it once as an ephemeral message — copy it immediately.

Related MCP server: plutio-mcp

2. Configure the key

The server reads PUMBLE_API_KEY from its own environment. It does not load a .env file on its own, so set the variable one of these two ways.

For running the server directly (npm run dev, npm start), export it in your shell — add this to ~/.bashrc to make it stick:

export PUMBLE_API_KEY="<your key>"

For normal use through an MCP client, pass it in the client's env block instead — see step 4. That is the usual path, and it needs nothing in your shell.

.env.example lists the variables the server understands. If you keep a local .env for your own tooling, it is gitignored — never commit it.

3. Install, build

npm install
npm run build

4. Register with an MCP client

The server speaks MCP over stdio, so any MCP-capable client can run it. Point the client at the built entry point using an absolute path, and pass PUMBLE_API_KEY through the environment:

{
  "command": "node",
  "args": ["/absolute/path/to/pumble-mcp/dist/index.js"],
  "env": { "PUMBLE_API_KEY": "<your key>" }
}

Claude Code can write that entry for you. Run this from the project root so $(pwd) resolves correctly:

claude mcp add pumble --env PUMBLE_API_KEY="$PUMBLE_API_KEY" -- node "$(pwd)/dist/index.js"

Once registered, all nineteen tools are available in future sessions. Verify with:

claude mcp list

Development

npm run dev         # watch mode
npm run typecheck   # tsc --noEmit
npm test            # vitest

Tools

Messages & threads

Tool

Pumble endpoint

Notes

pumble_send_message

POST /sendMessage

channel or channelId (exactly one), text, asBot (default false — posts as your own user)

pumble_list_messages

GET /listMessages

channel or channelId (exactly one), optional cursor/limit; returns { hasMoreAfter, hasMoreBefore, messages }

pumble_edit_message

POST /editMessage

messageId, channelId, text

pumble_reply_message

POST /sendReply

messageId, channelIdentifier, text, asBot (default false); starts or continues a thread

pumble_list_thread_replies

GET /fetchThreadReplies

messageId, channelIdentifier, optional cursor/limit; returns a bare array of replies, newest first

pumble_search_messages

GET /searchMessages

At least one of text, fromUser, inChannel; user and channel names resolve to IDs automatically

channelIdentifier accepts either a channel name or a 24-character ID — names are resolved for you, and an ambiguous name is rejected rather than guessed.

Thread paging is inclusive: cursor names the reply to resume from and that reply comes back again, so cursor plus limit: N returns N + 1 items. The response carries no hasMore flag; a short page means the end.

Scheduled messages

Tool

Pumble endpoint

Notes

pumble_create_scheduled_message

POST /createScheduledMessage

channel, channelId, userId, or email (exactly one), text, sendAt (ISO string or epoch ms)

pumble_list_scheduled_messages

GET /fetchScheduledMessages

Optional channel/channelId/userId/email (at most one), cursor, limit; returns { scheduledMessages, hasMore }

pumble_edit_scheduled_message

POST /editScheduledMessage

scheduledMessageId plus any of text, sendAt, or a new destination — a scheduled message can be moved to another channel

pumble_delete_scheduled_message

DELETE /deleteScheduledMessage

scheduledMessageId and confirm: truedestructive, the confirmation is mandatory

Naming a destination by anything other than channelId costs an extra lookup: these endpoints only accept channelId, so channel names, user IDs, and emails are resolved first. Targeting a person resolves to the existing DM channel with them — Pumble creates one only after a first message, so DM someone before scheduling to them.

Editing is read-modify-write because Pumble rejects an edit missing any of channelId, text, or sendAt; fields you leave out are read back and resent unchanged. There is no separate "get" tool — listing already returns whole messages.

Reactions

Tool

Pumble endpoint

Notes

pumble_add_reaction

POST /addReaction

messageId, channelId, reaction (emoji code, e.g. :thumbsup:)

pumble_remove_reaction

POST /removeReaction

messageId, channelId, reaction

Channels

Tool

Pumble endpoint

Notes

pumble_list_channels

GET /listChannels

No input; returns every channel visible to the key, including DM (channelType DIRECT) and group-DM channels

pumble_get_channel

GET /getChannel

channel or channelId (exactly one)

pumble_create_channel

POST /createChannel

name, type (PUBLIC or PRIVATE)

pumble_add_users_to_channel

POST /addUsersToChannel

channel or channelId (exactly one), users — an array of names, emails, or IDs

pumble_remove_user_from_channel

POST /removeUserFromChannel

channel or channelId (exactly one), user, and confirm: truedestructive, the confirmation is mandatory

Workspace

Tool

Pumble endpoint

Notes

pumble_send_dm

POST /dmUser

userId or email (exactly one), text

pumble_list_users

GET /listUsers

No input; returns every workspace member's id, name, email

Security / Permissions

This server hands a single static Pumble API key to an MCP server that any connected client can call. Understand the blast radius before installing:

  • The API key inherits the full visibility and privileges of the Pumble user who generated it. It is a password-equivalent secret.

  • With these nineteen tools, anyone able to invoke this server (including any model or client session configured with it) can, as you:

    • read, send, edit, and reply to messages in any channel the key can see, including thread replies;

    • queue messages to post later in any channel or DM, and read, rewrite, redirect, or cancel anything already queued — a scheduled message can fire long after the session that created it has ended;

    • search across the workspace by text, author, or channel (pumble_search_messages) — this makes bulk retrieval far easier than reading channels one at a time;

    • send direct messages to any user (pumble_send_dm);

    • enumerate every workspace member's name and email (pumble_list_users);

    • read DM historypumble_list_channels returns DM channels (channelType DIRECT), whose channelId feeds pumble_list_messages;

    • create channels and change who is in them — adding members exposes channel history to those users, and removing them revokes access (pumble_remove_user_from_channel demands confirm: true, which stops an accidental call but not a deliberate one);

    • react to messages as you (pumble_add_reaction).

  • There is no per-tool scoping and no read-only mode: one key means full read/write across channels, DMs, and the user directory.

Recommendations:

  • Never commit .env (it is gitignored). Do not paste the key into logs, issues, or chat.

  • If the key is ever exposed, rotate it: generate a new key in the API Key addon, update .env, confirm it works, then revoke the old key.

  • If your workspace allows it, generate the key from a dedicated, least-privilege service account rather than a full-admin user.

Available Tools

6 tools
pumble_edit_messageB

Edit the text of an existing Pumble message.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe new message text
channelIdYesThe ID of the channel the message is in
messageIdYesThe ID of the message to edit

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It only states the operation without revealing whether edits are reversible, require specific permissions, or affect other users. Critical context for a mutation tool is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action, though it sacrifices behavioral detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (three required params, no output schema, no annotations), the description is insufficient. It omits behavioral context such as permissions, side effects, and prerequisites, leaving the agent underinformed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all three parameters have descriptions). The tool description adds no extra semantic information beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Edit the text of an existing Pumble message' clearly identifies the action (edit), resource (text of an existing message), and distinguishes from sibling tools like pumble_send_message (send new) and pumble_list_messages (list existing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., pumble_send_message for new messages), nor does it mention prerequisites like permissions or message ownership. Without this, an agent may misuse the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pumble_list_channelsA

List all Pumble channels visible to the API key, including DMs (channelType DIRECT) and group DMs. Use the channel's id with pumble_list_messages to read a DM conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only mentions scope (visible to API key, including DMs). Lacks details on rate limits, authentication requirements, empty results, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences with no redundancy. Main action and key guidance front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description does not explain return structure (e.g., list of objects with id, name, type). Omits pagination or limits. Acceptable for a simple list but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is trivially 100%. Description does not need to add parameter meaning, baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'List' and resource 'Pumble channels', specifies inclusion of DMs and group DMs. Distinguishes from sibling by mentioning use with pumble_list_messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use channel id with pumble_list_messages for DMs, but does not cover when not to use or alternative contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pumble_list_messagesB

List messages in a Pumble channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of messages to fetch
cursorNoPagination cursor
channelNoChannel name (provide this OR channelId)
channelIdNoChannel ID (provide this OR channel)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist; description omits pagination behavior, ordering, error handling, or what happens if channel not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear purpose, but could include more context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description lacks details on pagination and ordering, but tool is simple; adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters; description adds no extra meaning beyond parameter names and schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'List' and the resource 'messages in a Pumble channel', distinguishing it from siblings like send or edit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs other tools; no exclusions or context about filtering beyond channel.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pumble_list_usersA

List all people in the Pumble workspace (id, name, email). Use this to resolve a person's userId for pumble_send_dm, or find their DM channelId via pumble_list_channels (channelType DIRECT) to read a conversation with pumble_list_messages.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description clearly indicates a read-only list operation without side effects. It does not disclose potential limits or authentication requirements, but for a zero-param tool, the information is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first defines purpose, second provides usage guidance. Front-loaded and highly concise with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the tool's functionality and output usage for a simple list operation with no output schema. It is complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so the description does not need to add param meaning. Baseline of 4 is appropriate given 0 parameters and 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all people in the Pumble workspace' with attributes (id, name, email). It also differentiates from siblings by mentioning its role in resolving userId and DM channelId.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool (to resolve userId for pumble_send_dm or find DM channelId via pumble_list_channels) and references sibling tools for further actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pumble_send_dmA

Send a direct message to a person in Pumble, as your own user. Use pumble_list_users to find their userId/email first if unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe message text to send
emailNoRecipient's email (provide this OR userId)
userIdNoRecipient's user ID (provide this OR email)

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It discloses no behavioral traits beyond the basic send action. Missing details on authentication requirements, message formatting, delivery guarantees, or rate limits. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. Key information is front-loaded: action, target, identity. Suggestions follow logically. Excellent efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the main usage context: sending a DM as the authenticated user. Mentions prerequisite action (list users). For a simple tool with no output schema and only three parameters, this is largely complete. Lacks error handling details, but acceptable for a basic send operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, meaning all parameters (text, email, userId) have descriptions in the input schema. The description adds a hint about using pumble_list_users to obtain userId/email but does not enrich parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states sending a direct message to a person in Pumble, using 'your own user'. It distinguishes from siblings like pumble_send_message (channel message) by specifying 'direct message' and from pumble_edit_message (edit). The reference to pumble_list_users further clarifies its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: 'as your own user' and suggests using pumble_list_users to find recipient identifiers. Does not explicitly state when not to use (e.g., for channel messages), but the sibling tools imply alternatives. The guidance is practical and helps avoid errors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pumble_send_messageA

Send a message to a Pumble channel, as your own user by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe message text to send
asBotNoSend as the bot identity instead of the API key's user
channelNoChannel name (provide this OR channelId)
channelIdNoChannel ID (provide this OR channel)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided; the description only notes the default user identity. It lacks disclosure of key behaviors such as rate limits, permissions required, error handling, or response format. The phrase 'by default' hints at the asBot option but does not fully describe behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the action. It is concise and contains no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is minimal. It does not explain return values or success/failure indicators, which would be helpful for a write operation. However, it is adequate for a simple send action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all parameters described), setting a baseline of 3. The description adds minimal extra value beyond the schema, only reinforcing the default identity. No new parameter semantics are introduced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'send', the resource 'Pumble channel', and the default scope 'as your own user'. It distinguishes from siblings like pumble_send_dm (direct message) and pumble_edit_message (edit).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for sending messages to channels, but does not explicitly state when to use alternatives like pumble_send_dm for DMs or pumble_edit_message for edits. No when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedpumble_edit_message
    • First observedpumble_list_channels
    • First observedpumble_list_messages
    • First observedpumble_list_users
    • First observedpumble_send_dm
    • First observedpumble_send_message

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct action: edit, list channels, list messages, list users, send DM, send message. Descriptions clearly differentiate between sending to a channel vs a DM, and note how to find DM channel IDs. No ambiguity.

Naming Consistency5/5

All tools follow a consistent 'pumble_verb_noun' pattern in snake_case (e.g., pumble_edit_message, pumble_list_channels), making the set predictable and easy to navigate.

Tool Count5/5

With 6 tools, the server covers essential messaging operations (read, send, edit) for both channels and DMs, plus user listing. The count feels well-scoped without unnecessary duplication.

Completeness4/5

Core workflows are covered: reading and sending messages to channels and DMs, editing messages, and listing users. Minor gaps like delete message or thread support are acceptable for a succinct tool surface.

Maintenance

ActivitySlowing
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    Enables 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude and other MCP clients to interact with Plutio's business platform resources including CRM, projects, invoicing, and more through structured tools.
    17 npm
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLMs like Claude to interact with Pipedrive CRM data through a standardized interface, providing 22 tools for managing deals, persons, organizations, activities, and more.
    22
    1
    MIT