Skip to main content
Glama

πŸ€–πŸ‘ˆ Beep/Boop πŸ‘‰πŸ€– MCP Server

A Model Context Protocol (MCP) server for coordinating work between multiple AI agents in monorepos and shared codebases using a simple file-based signaling system.

🎯 Overview

The Beep/Boop coordination system prevents conflicts when multiple AI agents work in the same codebase by using two simple file types:

  • beep - Signals work is complete and directory is clear for new work

  • boop - Signals work is in progress by a specific agent

This prevents race conditions, merge conflicts, and ensures orderly collaboration between agents.

Related MCP server: AgentMode

πŸ“¦ Installation

npm install -g @thesammykins/beep-boop-mcp-server

Note: Package is automatically published via GitHub Actions when changes are pushed to main.

From Source

git clone https://github.com/thesammykins/beep_boop_mcp.git cd beep_boop_mcp npm install npm run build

πŸš€ Quick Start

1. Start the MCP Server

For NPM Installation

The server starts automatically when called by your MCP client. No manual startup required.

For Source Installation

# Development mode with hot reload npm run dev # Production mode npm start

2. Configure Your MCP Client

Add to your MCP client configuration (e.g., Claude Desktop):

For Global NPM Installation

{ "mcpServers": { "beep-boop-coordination": { "command": "beep-boop-mcp-server" } } }

For NPX (No Installation Required)

{ "mcpServers": { "beep-boop-coordination": { "command": "npx", "args": ["-y", "@thesammykins/beep-boop-mcp-server"] } } }

For Source Installation

{ "mcpServers": { "beep-boop-coordination": { "command": "node", "args": ["/path/to/beep-boop-mcp-server/dist/index.js"] } } }

3. Use in Your AI Agent Workflows

// Always check before starting work const status = await mcpClient.callTool('check_status', { directory: './src/components' }); // Claim the directory await mcpClient.callTool('update_boop', { directory: './src/components', agentId: 'my-agent-id', workDescription: 'Refactoring components' }); // Do your work... // Signal completion await mcpClient.callTool('end_work', { directory: './src/components', agentId: 'my-agent-id', message: 'Refactoring complete' });

πŸ”§ API Reference

Tools

check_status

Checks the current coordination status of a directory with optional stale file cleanup.

Parameters:

  • directory (string): Path to directory to check

  • maxAgeHours (number, optional): Maximum age in hours before boop files are considered stale (default: 24)

  • autoCleanStale (boolean, optional): Whether to automatically clean up stale boop files (default: false)

  • newAgentId (string, optional): Agent ID to use when claiming after stale cleanup

  • newWorkDescription (string, optional): Work description when claiming after cleanup

Returns:

  • Detailed status including file existence, agent info, age information, and next steps

  • Automatic cleanup of stale files when requested

Examples:

Basic status check:

{ "directory": "./src/auth" }

Check with automatic stale cleanup and claim:

{ "directory": "./src/auth", "maxAgeHours": 8, "autoCleanStale": true, "newAgentId": "claude-assistant-2", "newWorkDescription": "Continuing work after stale cleanup" }

update_boop

Claims a directory for work by creating/updating a boop file.

Parameters:

  • directory (string): Directory to claim

  • agentId (string): Your unique agent identifier

  • workDescription (string, optional): Description of planned work

Returns:

  • Success confirmation or conflict warning

end_work

Atomically completes work by removing boop file and creating beep file.

Parameters:

  • directory (string): Directory where work was completed

  • agentId (string): Agent identifier that did the work

  • message (string, optional): Completion message

Returns:

  • Confirmation of successful work completion

create_beep

Manually creates a beep file to signal work completion.

Parameters:

  • directory (string): Directory to mark as complete

  • message (string, optional): Completion message

Returns:

  • Confirmation beep file was created

update_user

Posts follow-up messages to captured Discord/Slack threads for bidirectional communication.

Parameters:

  • messageId (string): ID of the captured message to respond to

  • updateContent (string): Message content to send as an update

Returns:

  • Confirmation that the update was posted to the original platform

Use Cases:

  • Agent progress reports back to original Discord/Slack thread

  • Status updates during long-running tasks

  • Error notifications and recovery updates

  • Task completion confirmations

initiate_conversation

Proactively starts new conversations on Discord or Slack, enabling agents to notify users about work status, errors, or completion.

Parameters:

  • platform ("discord" | "slack"): Target platform for the conversation

  • channelId (string, optional): Channel ID to send message to (uses default if omitted)

  • content (string): Initial message content to send

  • agentId (string, optional): Agent ID for attribution

Returns:

  • Conversation details including message ID for follow-up updates

  • User response details if a reply is received within timeout period

  • Timeout notification if no user response within configured time limit

Conversation Flow Configuration:

  • BEEP_BOOP_CONVERSATION_TIMEOUT_MINUTES (default: 5) – How long to wait for user responses

  • BEEP_BOOP_CONVERSATION_POLL_INTERVAL_MS (default: 2000) – How often to check for responses

  • BEEP_BOOP_DISCORD_API_RETRY_ATTEMPTS (default: 3) – Retry attempts for Discord API failures

  • BEEP_BOOP_DISCORD_API_RETRY_BASE_DELAY_MS (default: 1000) – Base retry delay with exponential backoff

  • BEEP_BOOP_DISCORD_API_TIMEOUT_MS (default: 30000) – Individual Discord API call timeout

Use Cases:

  • Notify users about completed background work

  • Alert about system issues or failures discovered during routine checks

  • Report completion of scheduled tasks or maintenance

  • Send proactive status updates for long-running processes

  • Alert users when manual intervention is needed

check_listener_status

Monitors the health and connectivity of the HTTP listener service used for centralized tool delegation.

Parameters:

  • includeConfig (boolean, optional): Whether to include detailed configuration info

Returns:

  • Configuration overview (enabled/disabled status, URLs, timeouts)

  • Connectivity test results (health check, MCP endpoint verification)

  • Optional detailed configuration when requested

Use Cases:

  • Verify ingress service connectivity before delegation

  • Troubleshoot communication issues with centralized listener

  • Debug listener configuration problems

  • Health checks for distributed agent systems

  • Validate webhook and bot token configuration

πŸ“‘ Ingress/Listener System

The Beep/Boop MCP Server includes a powerful ingress system that captures messages from Discord and Slack, enabling bidirectional communication between AI agents and users.

Message Capture Workflow

  1. Discord/Slack Bot receives mentions or messages in configured channels

  2. Message Storage saves captured messages to .beep-boop-inbox/messages/

  3. HTTP API provides programmatic access to captured messages (port 7077)

  4. Agent Processing handles messages via MCP tools and posts updates using update_user

  5. Message Acknowledgment moves processed messages to processed/ directory

Quick Setup

Start Ingress Server

# Start the ingress listener npm run listen # Server will start on http://localhost:7077

Required Environment Variables

For Discord Integration:

BEEP_BOOP_INGRESS_ENABLED=true BEEP_BOOP_INGRESS_PROVIDER=discord BEEP_BOOP_DISCORD_BOT_TOKEN=your_discord_bot_token BEEP_BOOP_INGRESS_HTTP_AUTH_TOKEN=your_auth_token # Optional but recommended

For Slack Integration:

BEEP_BOOP_INGRESS_ENABLED=true BEEP_BOOP_INGRESS_PROVIDER=slack BEEP_BOOP_SLACK_APP_TOKEN=xapp-your_app_token # Socket Mode required BEEP_BOOP_SLACK_BOT_TOKEN=xoxb-your_bot_token # Bot token with proper scopes BEEP_BOOP_INGRESS_HTTP_AUTH_TOKEN=your_auth_token # Optional but recommended

HTTP API Endpoints

Once the ingress server is running on port 7077, you can interact with captured messages:

# List all captured messages curl -H "Authorization: Bearer YOUR_AUTH_TOKEN" \ http://localhost:7077/messages # Get specific message details curl -H "Authorization: Bearer YOUR_AUTH_TOKEN" \ http://localhost:7077/messages/MESSAGE_ID # Acknowledge/process a message (moves to processed/) curl -X POST -H "Authorization: Bearer YOUR_AUTH_TOKEN" \ http://localhost:7077/messages/MESSAGE_ID/ack

Message Format

Captured messages are stored as JSON with rich metadata:

{ "id": "uuid-string", "platform": "discord" | "slack", "content": "@bot-name please help me deploy the application", "author": "username", "channel": { "id": "channel_id", "name": "general" }, "timestamp": "2024-08-20T10:30:00.000Z", "replyContext": { // Platform-specific reply information for update_user } }

Integration with Coordination

The ingress system works seamlessly with beep/boop coordination:

// Agent receives Discord/Slack message asking for deployment const message = await getMessageFromInbox(messageId); // Check if deployment directory is available const status = await mcpClient.callTool('check_status', { directory: './deploy' }); if (status.includes('WORK_IN_PROGRESS')) { // Notify user that deployment is already in progress await mcpClient.callTool('update_user', { messageId: message.id, updateContent: "Deployment already in progress by another agent. Will queue your request." }); return; } // Claim deployment directory and notify user await mcpClient.callTool('update_boop', { directory: './deploy', agentId: 'deploy-agent', workDescription: 'Production deployment' }); await mcpClient.callTool('update_user', { messageId: message.id, updateContent: "πŸš€ Starting deployment process. I'll update you with progress..." }); // Perform deployment work... // Complete work and notify await mcpClient.callTool('end_work', { directory: './deploy', agentId: 'deploy-agent', message: 'Production deployment completed successfully' }); await mcpClient.callTool('update_user', { messageId: message.id, updateContent: "βœ… Deployment completed successfully! Application is now live." });

Bot Setup Requirements

Discord Bot Permissions:

  • Guild Messages Intent

  • Message Content Intent

  • Send Messages permission in target channels

Slack App Configuration:

  • Socket Mode enabled with app-level token

  • Bot token with app_mentions:read and chat:write scopes

  • Event subscriptions for app_mention events

See docs/INGRESS.md and docs/SCOPES_INTENTS.md for detailed setup instructions.

πŸ—οΈ Architecture

File Format

Beep File (beep)

{ "completedAt": "2024-08-20T10:30:00.000Z", "message": "Refactoring completed successfully", "completedBy": "claude-assistant" }

Boop File (boop)

{ "startedAt": "2024-08-20T10:00:00.000Z", "agentId": "claude-assistant", "workDescription": "Refactoring authentication components" }

State Machine

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NO_COORDINATION │───▢│ WORK_IN_PROGRESS β”‚ β”‚ (no files) β”‚ β”‚ (boop exists) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–² β”‚ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ WORK_ALLOWED │◀───│ end_work() β”‚ β”‚ (beep exists) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Error States

  • INVALID_STATE: Both beep and boop files exist (requires manual cleanup)

  • WORK_ALREADY_IN_PROGRESS: Another agent has claimed the directory

  • AGENT_MISMATCH: Wrong agent trying to end work

🎯 Best Practices

Directory Granularity

  • βœ… Good: ./src/auth-service/, ./packages/ui-components/

  • ❌ Too granular: ./src/auth-service/login.ts

  • ❌ Too broad: ./src/ (entire source)

Agent ID Guidelines

  • Use descriptive, unique identifiers: claude-assistant-1, gpt4-refactor-bot

  • Avoid generic names: agent, ai, assistant

  • Include version/instance info for disambiguation

Git Integration

  • βœ… Automatic .gitignore: Coordination files are automatically added to .gitignore

  • βœ… Repository Clean: beep and boop files won't be committed to version control

  • βš™οΈ Configurable: Use BEEP_BOOP_MANAGE_GITIGNORE=false to disable if needed

  • πŸ”§ Smart Detection: Only adds entries if they don't already exist

Error Handling

  • Always check status before claiming work

  • Provide graceful fallbacks when directories are busy

  • Never force-override another agent's coordination files

πŸ” Troubleshooting

Common Issues

"Directory is busy" - Another agent is working

# Check who's working check_status -> shows agentId and timestamps # Options: # 1. Wait for work to complete # 2. Work in different directory # 3. If boop file is stale (>30min), alert user

"Invalid state" - Both beep and boop exist

# Manual intervention required # Check file timestamps and contents # Remove appropriate file based on actual state

Permission errors

  • Verify directory exists and is writable

  • Check file system permissions

  • Agent may need elevated access

Debug Mode

NODE_ENV=development npm start

Log Files

Server logs errors to stderr to avoid interfering with MCP protocol on stdout.

πŸ§ͺ Testing

Ingress Listener (Discord/Slack)

Quick test (Discord provider, placeholder token):

  • Do not paste secrets inline; export via your shell or MCP config.

  • Start with Discord first using a placeholder to validate wiring (HTTP starts, Discord login will fail fast with TokenInvalid, which confirms the path):

BEEP_BOOP_INGRESS_ENABLED=true \ BEEP_BOOP_INGRESS_PROVIDER=discord \ BEEP_BOOP_DISCORD_BOT_TOKEN={{DISCORD_BOT_TOKEN}} \ BEEP_BOOP_INGRESS_HTTP_AUTH_TOKEN={{INGRESS_TOKEN}} \ BEEP_BOOP_LOG_LEVEL=debug \ npm run listen

You should see:

  • Config summary

  • HTTP endpoint online (http://localhost:7077)

  • Discord TokenInvalid (expected when using a placeholder)

HTTP endpoint usage (replace token if configured):

curl -H "Authorization: Bearer {{INGRESS_TOKEN}}" http://localhost:7077/messages curl -H "Authorization: Bearer {{INGRESS_TOKEN}}" http://localhost:7077/messages/<MESSAGE_ID> curl -X POST -H "Authorization: Bearer {{INGRESS_TOKEN}}" http://localhost:7077/messages/<MESSAGE_ID>/ack

To actually test Discord end-to-end, set a valid BEEP_BOOP_DISCORD_BOT_TOKEN and invite the bot to your server with intents enabled (Guilds, Guild Messages, Message Content). Mention the bot to create a captured message and get an immediate ack reply.

To test Slack, set:

  • BEEP_BOOP_INGRESS_PROVIDER=slack

  • BEEP_BOOP_SLACK_APP_TOKEN=xapp-… (Socket Mode app-level token with connections:write)

  • BEEP_BOOP_SLACK_BOT_TOKEN=xoxb-… (bot token with app_mentions:read, chat:write; add history scopes as needed if you want to capture non-mention messages)

Then run:

npm run listen

See docs/INGRESS.md and docs/SCOPES_INTENTS.md for full setup.

Run the test suite:

npm test

Test with a real MCP client:

# Terminal 1: Start server npm run dev # Terminal 2: Test with MCP client echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js

🀝 Integration Examples

MCP tool: update_user

Agents can post follow-up updates back to the original Slack thread or Discord channel for a captured message.

Input fields:

  • messageId: ID of the captured message (from the local inbox)

  • updateContent: message text to send

Example (pseudo):

{ "tool": "update_user", "params": { "messageId": "2b1b8e02-6c6b-4a3d-9f0f-123456789abc", "updateContent": "I'll start preparing a deployment plan and report back within 10 minutes." } }

With Task Planners

async function findAvailableWork(tasks: Task[]) { const available = []; for (const task of tasks) { const status = await checkStatus(task.directory); if (!status.includes('WORK_IN_PROGRESS')) { available.push(task); } } return available; }

With CI/CD

- name: Check work coordination run: | if [ -f "boop" ]; then echo "Work in progress, skipping deployment" exit 1 fi

With Monitoring

// Alert on stale boop files const boopAge = Date.now() - boopTimestamp.getTime(); if (boopAge > 30 * 60 * 1000) { // 30 minutes alertUser(`Stale boop file: ${directory}`); }

πŸ› οΈ Development

Project Structure

src/ β”œβ”€β”€ index.ts # Main MCP server entry point β”œβ”€β”€ types.ts # TypeScript interfaces β”œβ”€β”€ config.ts # Configuration management β”œβ”€β”€ file-operations.ts # Core beep/boop logic β”œβ”€β”€ tools.ts # MCP tool implementations β”œβ”€β”€ notification-service.ts # Discord/Slack webhook notifications β”œβ”€β”€ http-listener-client.ts # HTTP client for ingress server └── ingress/ # Message capture and processing β”œβ”€β”€ index.ts # Ingress server entry point β”œβ”€β”€ discord-listener.ts # Discord bot integration β”œβ”€β”€ slack-listener.ts # Slack bot integration └── inbox.ts # Message storage and retrieval root/ β”œβ”€β”€ test-webhooks.ts # Webhook integration testing script β”œβ”€β”€ .beep-boop-inbox/ # Message storage directory (auto-created) β”‚ β”œβ”€β”€ messages/ # Captured messages from Discord/Slack β”‚ └── processed/ # Acknowledged/processed messages └── example-configs/ # Environment-specific configurations β”œβ”€β”€ select-config.sh # Interactive config selection script β”œβ”€β”€ mcp-config.development.json β”œβ”€β”€ mcp-config.production.json β”œβ”€β”€ mcp-config.ci.json └── mcp-config.enterprise.json docs/ β”œβ”€β”€ AGENT_COORDINATION_RULE.md # Core coordination principles β”œβ”€β”€ BEEP_BOOP_RULE.md # Tool usage reference β”œβ”€β”€ CONFIGURATION.md # Environment variables guide β”œβ”€β”€ INGRESS.md # Discord/Slack integration guide β”œβ”€β”€ SCOPES_INTENTS.md # Bot permissions setup └── stale-cleanup-example.md # Advanced cleanup scenarios

Building and Testing

# Development commands npm run dev # Development mode with hot reload npm run build # Compile TypeScript to dist/ npm start # Start production server npm run listen # Start ingress server for Discord/Slack # Testing commands npm test # Run test suite (build verification) npm run test:webhooks # Test Discord/Slack webhook integrations npx tsc --noEmit # TypeScript compilation check # Configuration management npm run config # Interactive configuration selection npm run config:dev # Apply development configuration npm run config:prod # Apply production configuration npm run config:ci # Apply CI/CD configuration npm run config:enterprise # Apply enterprise configuration

Contributing

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/my-feature

  3. Make changes with tests

  4. Push to your branch: git push origin feature/my-feature

  5. Create a Pull Request

Automated Publishing

This project uses GitHub Actions for automated testing and publishing:

  • Feature Branches: Tests run automatically on push

  • Main Branch: Automatic version bumping, npm publishing, and GitHub releases

  • Version Bumping: Based on commit message keywords:

    • BREAKING/major: Major version (1.0.0 β†’ 2.0.0)

    • feat/feature/minor: Minor version (1.0.0 β†’ 1.1.0)

    • Everything else: Patch version (1.0.0 β†’ 1.0.1)

See GitHub Workflow Setup for detailed configuration.

πŸ“„ License

MIT License - see LICENSE file

πŸ“ Documentation & Examples

Documentation

Example Configurations

πŸ“ž Support

For issues and questions:


Built with ❀️ for AI agent collaboration

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thesammykins/beep_boop_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server