@shoutkol/pumble-mcp-server
v1.0.3
Published
MCP server for Pumble
Maintainers
Readme
Pumble MCP Server
A Model Context Protocol (MCP) server for Pumble, built with TypeScript using Test-Driven Development (TDD).
📦 Published on npm: @shoutkol/pumble-mcp-server
Overview
This MCP server provides integration with Pumble's API, allowing you to send messages, manage channels, react to messages, and interact with your Pumble workspace through MCP-compatible clients.
Prerequisites
- Node.js (v18 or higher)
- A Pumble API key (see API Key Setup)
Installation
Using npm (Recommended)
The package is published on npm: @shoutkol/pumble-mcp-server
No installation needed! Use it directly with npx:
npx -y @shoutkol/pumble-mcp-serverOr install globally:
npm install -g @shoutkol/pumble-mcp-serverLocal Development
For local development and contributing:
# Clone the repository
git clone https://github.com/shoutkol/pumble-mcp-server.git
cd pumble-mcp-server
# Install dependencies
pnpm install
# Build the project
pnpm buildAPI Key Setup
To use this MCP server, you need a Pumble API key. Generate one by:
- Installing the API app in your Pumble workspace
- Typing
/api-keys generatein any Pumble channel - Copying the generated API key from the ephemeral message
Configuration
The API key can be provided in two ways:
MCP Server Configuration (Recommended): Provide the API key in your MCP client configuration:
{ "mcpServers": { "pumble": { "command": "npx", "args": ["-y", "@shoutkol/pumble-mcp-server"], "initializationOptions": { "apiKey": "your-api-key-here" } } } }Environment Variable: Set the
PUMBLE_API_KEYenvironment variable:export PUMBLE_API_KEY="your-api-key-here"Then use it with:
npx -y @shoutkol/pumble-mcp-server
Development
# Run in development mode with hot reload
pnpm dev
# Build the project
pnpm build
# Run the built server
pnpm start
# Watch mode for building
pnpm watch
# Run tests
pnpm test
# Run tests in watch mode
pnpm test:watchTesting with MCP Inspector
You can test the MCP server interactively using the MCP Inspector. To run it with your API key:
Option 1: Inline (single command)
PUMBLE_API_KEY="your-api-key-here" npx @modelcontextprotocol/inspector -- tsx src/index.tsOption 2: Export first, then run
export PUMBLE_API_KEY="your-api-key-here"
npx @modelcontextprotocol/inspector -- tsx src/index.tsOption 3: Using dotenv-cli
Create a .env file in your project root:
PUMBLE_API_KEY=your-api-key-hereThen run:
# Install dotenv-cli if needed: pnpm add -D dotenv-cli
npx dotenv-cli npx @modelcontextprotocol/inspector -- tsx src/index.tsThe inspector will open a web interface at http://localhost:6274 where you can:
- View all available tools
- Test tool calls interactively
- See request/response details
- Debug API interactions
Note: Replace "your-api-key-here" with your actual Pumble API key (generated with /api-keys generate in Pumble).
Testing
This project uses Test-Driven Development (TDD) with Vitest. Tests are located in src/__tests__/.
Running Tests
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watchTDD Workflow
The project follows the Red-Green-Refactor cycle:
- Red: Write tests first that define the desired functionality
- Green: Implement minimal code to make tests pass
- Refactor: Improve code while keeping tests green
Available Tools
pumble_validate_api_key
Validates the Pumble API key by making a test API call.
Parameters: None
Example:
{
"tool": "pumble_validate_api_key",
"arguments": {}
}pumble_send_message
Send a message to a Pumble channel.
Parameters:
text(string, required): The message text to sendchannel(string, optional): The channel name (use eitherchannelorchannelId)channelId(string, optional): The channel ID (use eitherchannelorchannelId)asBot(boolean, optional): Whether to send the message as a bot (default:true)
Example:
{
"tool": "pumble_send_message",
"arguments": {
"text": "Hello from MCP!",
"channel": "general",
"asBot": true
}
}pumble_send_reply
Reply to a specific message in a Pumble channel.
Parameters:
text(string, required): The reply textmessageId(string, required): The ID of the message to reply tochannel(string, optional): The channel name (use eitherchannelorchannelId)channelId(string, optional): The channel ID (use eitherchannelorchannelId)asBot(boolean, optional): Whether to send the reply as a bot (default:true)
Example:
{
"tool": "pumble_send_reply",
"arguments": {
"text": "This is a reply",
"messageId": "65c4ba025f3c124940579c7f",
"channel": "general",
"asBot": true
}
}pumble_add_reaction
Add an emoji reaction to a message.
Parameters:
messageId(string, required): The ID of the message to react toreaction(string, required): The emoji reaction code (e.g.,:grin:)
Example:
{
"tool": "pumble_add_reaction",
"arguments": {
"messageId": "65c4a8ab99f15a6b2150e0f0",
"reaction": ":grin:"
}
}pumble_create_channel
Create a new channel in Pumble.
Parameters:
name(string, required): The name of the channeltype(string, required): The channel type (PUBLICorPRIVATE)description(string, optional): Optional channel description
Example:
{
"tool": "pumble_create_channel",
"arguments": {
"name": "my-new-channel",
"type": "PUBLIC",
"description": "A new channel created via MCP"
}
}pumble_delete_message
Delete a message from a Pumble channel.
Parameters:
messageId(string, required): The ID of the message to deletechannel(string, optional): The channel name (use eitherchannelorchannelId)channelId(string, optional): The channel ID (use eitherchannelorchannelId)
Example:
{
"tool": "pumble_delete_message",
"arguments": {
"messageId": "65c4ba025f3c124940579c7f",
"channel": "general"
}
}pumble_list_messages
List messages in a Pumble channel.
Parameters:
channel(string, optional): The channel name (use eitherchannelorchannelId)channelId(string, optional): The channel ID (use eitherchannelorchannelId)cursor(string, optional): Optional cursor for paginationlimit(number, optional): Optional limit for number of messages
Example:
{
"tool": "pumble_list_messages",
"arguments": {
"channel": "general",
"limit": 50
}
}pumble_list_channels
List all channels and DMs in the workspace.
Parameters: None
Example:
{
"tool": "pumble_list_channels",
"arguments": {}
}pumble_list_users
List all users in the workspace.
Parameters: None
Example:
{
"tool": "pumble_list_users",
"arguments": {}
}Usage
This MCP server can be used with MCP-compatible clients. Configure it in your MCP client settings to use stdio transport.
Installation via npm (npx)
Once published to npm, users can run this MCP server directly without installing it:
npx -y @shoutkol/pumble-mcp-serverOr with an API key:
PUMBLE_API_KEY="your-api-key-here" npx -y @shoutkol/pumble-mcp-serverClaude Desktop
Find your Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
Add the Pumble MCP server configuration:
Using npx (Recommended):
{
"mcpServers": {
"pumble": {
"command": "npx",
"args": ["-y", "@shoutkol/pumble-mcp-server"],
"initializationOptions": {
"apiKey": "your-pumble-api-key"
}
}
}
}Using local installation:
{
"mcpServers": {
"pumble": {
"command": "node",
"args": ["/absolute/path/to/pumble-mcp-server/dist/index.js"],
"initializationOptions": {
"apiKey": "your-pumble-api-key"
}
}
}
}Using environment variable:
{
"mcpServers": {
"pumble": {
"command": "npx",
"args": ["-y", "@shoutkol/pumble-mcp-server"],
"env": {
"PUMBLE_API_KEY": "your-pumble-api-key"
}
}
}
}Restart Claude Desktop to load the new configuration.
Verify connection: Open Claude Desktop and check that the Pumble tools are available in the MCP tools list.
Cline (VS Code Extension)
Install Cline from the VS Code marketplace.
Open VS Code settings (Cmd/Ctrl + ,) and search for "Cline".
Add MCP server configuration in your VS Code settings.json:
{
"cline.mcpServers": {
"pumble": {
"command": "npx",
"args": ["-y", "@shoutkol/pumble-mcp-server"],
"env": {
"PUMBLE_API_KEY": "your-pumble-api-key"
}
}
}
}- Reload VS Code to activate the configuration.
Other MCP Clients
For other MCP-compatible clients, configure the server using stdio transport:
- Command:
npx(ornodefor local installation) - Args:
["-y", "@shoutkol/pumble-mcp-server"](or["/path/to/dist/index.js"]for local) - API Key: Provide via
initializationOptions.apiKeyorPUMBLE_API_KEYenvironment variable
Using the Tools
Once configured, you can use the Pumble tools through your MCP client:
- Send messages to channels
- Reply to messages in threads
- Add reactions to messages
- Create channels (public or private)
- List channels, users, and messages
- Delete messages
The tools will appear in your MCP client's tool list and can be invoked through natural language or direct tool calls.
Deployment
Local Deployment
Prerequisites:
- Node.js v18 or higher
- pnpm installed globally
Steps:
- Clone or download the repository:
git clone <repository-url>
cd pumble-mcp-server- Install dependencies:
pnpm install- Build the project:
pnpm build- Set up API key:
export PUMBLE_API_KEY="your-api-key-here"- Run the server:
pnpm startThe server runs on stdio transport and communicates with MCP clients via standard input/output.
Publishing to npm
To enable npx usage, publish the package to npm:
Manual Publishing:
Build the project:
pnpm buildLogin to npm:
npm loginPublish:
npm publishVerify it works:
npx -y @shoutkol/pumble-mcp-server
Automated Publishing with GitHub Actions:
The repository includes a GitHub Actions workflow for automated publishing to npm:
Set up npm token:
- Go to https://www.npmjs.com/settings/shoutkol/packages
- Create an "Automation" access token
- Add it as a secret named
NPM_TOKENin your GitHub repository settings:- Go to: Settings → Secrets and variables → Actions
- Click "New repository secret"
- Name:
NPM_TOKEN - Value: Your npm automation token
- Click "Add secret"
Create a release:
- Go to: https://github.com/shoutkol/pumble-mcp-server/releases/new
- Create a new release with a version tag (e.g.,
v0.1.0) - The workflow will automatically:
- Run tests
- Build the project
- Publish to npm registry at https://www.npmjs.com/settings/shoutkol/packages
Manual trigger:
- Go to Actions → Publish to npm → Run workflow
- Enter the version number and run
The workflow ensures that only tested and built code is published to npm.
Production Considerations
Security:
- Never commit API keys to version control
- Use environment variables or secret management services
- Consider using different API keys for development and production
Monitoring:
- Add logging for API calls and errors
- Monitor API rate limits
- Set up alerts for failures
Performance:
- The server is lightweight and runs on stdio
- No HTTP server overhead
- Consider connection pooling if handling multiple clients
Scaling:
- MCP servers typically run one instance per client connection
- For multiple clients, run multiple instances
- Consider using process managers like PM2 for local deployments
Environment Variables
| Variable | Description | Required |
|----------|-------------|----------|
| PUMBLE_API_KEY | Your Pumble API key | Yes |
Troubleshooting
Server won't start:
- Verify Node.js version (v18+)
- Check that
dist/index.jsexists (runpnpm build) - Verify API key is set correctly
Tools not appearing:
- Check MCP client logs for connection errors
- Verify the server path in configuration is absolute (if using local installation)
- Ensure the server process has execute permissions
API errors:
- Validate your API key with
pumble_validate_api_keytool - Check API rate limits
- Verify network connectivity to Pumble API
Connection issues:
- Ensure stdio transport is configured correctly
- Check that the server process is running
- Review MCP client logs for detailed error messages
CI/CD
This project uses GitHub Actions for continuous integration and deployment:
Workflows
CI (
ci.yml): Runs on every push and pull request- Runs tests
- Builds the project
- Type checks the code
Publish to npm (
publish-npm.yml): Runs on releases- Runs tests
- Builds the project
- Publishes to npm registry at https://www.npmjs.com/settings/shoutkol/packages
Setting up Automated Publishing
Create npm access token:
- Go to https://www.npmjs.com/settings/shoutkol/packages
- Create a new "Automation" access token
- Copy the token
Add secret to GitHub:
- Go to your repository → Settings → Secrets and variables → Actions
- Click "New repository secret"
- Name:
NPM_TOKEN - Value: Your npm token
- Click "Add secret"
Create a release:
- Go to Releases → Create a new release
- Tag:
v1.0.0(or your version) - Title:
Release v1.0.0 - Description: Release notes
- Click "Publish release"
- The workflow will automatically publish to npm
Project Structure
.
├── .github/
│ └── workflows/
│ ├── ci.yml # CI workflow
│ └── publish-npm.yml # npm publishing workflow
├── src/
│ ├── index.ts # Main server entry point
│ ├── pumble-client.ts # Pumble API client
│ └── __tests__/
│ └── index.test.ts # Test suite
├── dist/ # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
├── vitest.config.ts # Vitest configuration
└── README.mdError Handling
The server provides comprehensive error handling:
- Missing API Key: Clear error message if API key is not configured
- API Errors: Detailed error messages with status codes from Pumble API
- Network Errors: Handles network failures gracefully
- Invalid Parameters: Validates required parameters and provides helpful error messages
API Reference
This server integrates with the Pumble API Addon. For more information about the Pumble API, see the official documentation.
Base URL: https://pumble-api-keys.addons.marketplace.cake.com
Authentication: All requests use the Api-Key header with your generated API key.
Docker Deployment
This MCP server can be deployed as a Docker container with HTTP/Streamable HTTP transport support, similar to gitlab-mcp.
Building the Docker Image
docker build -t pumble-mcp-server .Running with Docker
docker run -i --rm \
-p 3000:3000 \
-e PUMBLE_API_KEY=your-api-key \
pumble-mcp-serverThe server will be available at:
- Streamable HTTP endpoint:
http://localhost:3000/mcp - Health check:
http://localhost:3000/health
Using HTTP Transport
The HTTP server uses Streamable HTTP transport, which allows MCP clients to connect over HTTP instead of stdio.
Claude Desktop Configuration
{
"mcpServers": {
"pumble": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}Cline (VS Code) Configuration
{
"cline.mcpServers": {
"pumble": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}Note: For HTTP transport, set the PUMBLE_API_KEY environment variable in the Docker container or pass it via the Authorization header.
Deploying to Docker Hub
Login to Docker Hub:
docker loginSet your Docker Hub username:
export DOCKER_USERNAME=your-dockerhub-usernameBuild and push using the script:
./deploy-dockerhub.shOr manually:
# Build the image docker build -t your-username/pumble-mcp-server:latest . # Push to Docker Hub docker push your-username/pumble-mcp-server:latestRun from Docker Hub:
docker run -p 3000:3000 \ -e PUMBLE_API_KEY=your-api-key \ your-username/pumble-mcp-server:latest
Deploying to Google Cloud Run
Set environment variables:
export GCP_PROJECT_ID=your-project-id export PUMBLE_API_KEY=your-api-keyDeploy using the script:
./deploy-gcp.shOr manually:
# Build and push docker build -t gcr.io/YOUR_PROJECT_ID/pumble-api-server . docker push gcr.io/YOUR_PROJECT_ID/pumble-api-server # Deploy to Cloud Run gcloud run deploy pumble-api-server \ --image gcr.io/YOUR_PROJECT_ID/pumble-api-server \ --platform managed \ --region us-central1 \ --allow-unauthenticated \ --set-env-vars PUMBLE_API_KEY=your-api-key \ --port 3000
Running Modes
The server supports two modes:
Stdio Mode (default): For local MCP clients
pnpm start # or node dist/index.jsHTTP Mode: For remote access and Docker deployment
pnpm start:http # or node dist/http-server.js
License
MIT
