Skip to main content
Glama

EasyWebhook-MCP Server

Send webhooks to any HTTP endpoint from Claude Desktop with .env file support!

MCP Docker License

Overview

EasyWebhook-MCP is a Model Context Protocol (MCP) server that enables Claude to send webhooks to Discord, Slack, or any custom HTTP endpoint. It provides a secure interface for AI assistants to send webhook requests to various services without requiring direct API access or file system permissions. Now with .env for easy webhook management!

✨ Features

🎯 Core Capabilities

  • βœ… Send webhooks to any HTTP endpoint

  • βœ… Support for GET, POST, PUT, PATCH, DELETE methods

  • βœ… Custom headers and JSON payloads

  • βœ… Discord embeds with title, color, and fields

  • βœ… Slack integration for team notifications

  • βœ… Store webhooks in .env file for easy management

  • βœ… Reference webhooks by alias - no more copy/paste!

  • βœ… Detailed response feedback with status codes

  • βœ… Error handling with clear error messages

πŸ” Security

  • No file system access required

  • Runs in isolated Docker container as non-root user

  • Webhook URLs masked in list output

  • 30-second timeout protection prevents hanging

  • HTTPS recommended for all webhook URLs

  • .env file protected by .gitignore

πŸ› οΈ Available Tools

Alias-Based Tools (use stored webhooks from .env):

  • list_webhooks - List all configured webhook aliases

  • send_webhook_by_alias - Send webhook using stored alias

  • send_discord_webhook_by_alias - Discord embed by alias (supports title, color, username, avatar)

  • send_slack_webhook_by_alias - Slack message by alias

Direct URL Tools (pass webhook URL each time):

  • send_webhook - Universal webhook sender (GET, POST, PUT, PATCH, DELETE)

  • send_discord_webhook - Discord embed with URL (supports title, color, username, avatar)

  • send_slack_webhook - Slack message with URL

πŸš€ Quick Start

Prerequisites

  • Docker Desktop with MCP Toolkit

  • Claude Desktop app

Installation

1. Create .env file:

cd c:\Users\plgon\Downloads\EasyWebhook-MCP copy .env.example .env notepad .env

Add your webhooks:

DISCORD_WEBHOOK=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN SLACK_WEBHOOK=https://hooks.slack.com/services/YOUR/WEBHOOK/URL MY_CUSTOM_API=https://api.example.com/webhook

2. Build Docker image:

docker build -t easywebhook-mcp-server .

3. Configure Claude Desktop:

# Copy catalog copy custom.yaml $env:USERPROFILE\.docker\mcp\catalogs\custom.yaml # Update registry notepad $env:USERPROFILE\.docker\mcp\registry.yaml

Add to registry under registry::

easywebhook: ref: ""

Update Claude config at %APPDATA%\Claude\claude_desktop_config.json:

{ "mcpServers": { "mcp-toolkit-gateway": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/var/run/docker.sock:/var/run/docker.sock", "-v", "C:\\Users\\plgon\\.docker\\mcp:/mcp", "docker/mcp-gateway", "--catalog=/mcp/catalogs/docker-mcp.yaml", "--catalog=/mcp/catalogs/custom.yaml", "--config=/mcp/config.yaml", "--registry=/mcp/registry.yaml", "--tools-config=/mcp/tools.yaml", "--transport=stdio" ] } } }

4. Restart Claude Desktop

πŸ’‘ Usage Examples

List configured webhooks:

You: "List my webhooks" Claude: πŸ“‹ Stored Webhooks: β€’ DISCORD_WEBHOOK: https://discord.com/api/webh... β€’ SLACK_WEBHOOK: https://hooks.slack.com/serv... β€’ MY_CUSTOM_HOOK: https://example.com/webhook...

Simple Discord message:

You: "Send Discord message using DISCORD_WEBHOOK saying 'Hello World!'" Claude: βœ… Discord embed sent successfully!

Discord with title and color:

You: "Send to DISCORD_WEBHOOK with title 'Deployment Status' message 'All systems operational' and color 00FF00" Claude: βœ… Discord embed sent successfully! πŸ“Œ Title: Deployment Status

Discord with full embed (JSON):

You: "Send to DISCORD_WEBHOOK: {'title': 'Server Metrics', 'description': 'Current status', 'color': 3447003, 'fields': [{'name': 'CPU', 'value': '45%', 'inline': true}, {'name': 'RAM', 'value': '62%', 'inline': true}]}" Claude: βœ… Discord embed sent successfully!

Slack message:

You: "Send to SLACK_WEBHOOK: 'Deployment complete'" Claude: βœ… Slack message sent successfully!

Custom webhook:

You: "Use MY_CUSTOM_HOOK to send {\"status\": \"active\", \"uptime\": 3600}" Claude: βœ… Webhook sent successfully! πŸ“Š Status: 200

Using Direct URLs

Generic webhook:

You: "Send POST webhook to https://example.com/hook with payload {\"test\": true}" Claude: βœ… Webhook sent successfully!

Discord with URL:

You: "Send Discord webhook to [URL] with message 'Alert!' and color FF0000" Claude: βœ… Discord embed sent successfully!

Payload Formats

Simple text:

{"message": "Hello World"}

JSON payload:

{"title": "Alert", "status": "active", "priority": 1}

Custom headers:

{"Authorization": "Bearer token123", "X-Custom-Header": "value"}

Or comma-separated:

"Authorization: Bearer token123, X-Custom-Header: value"

πŸ“ Architecture

Claude Desktop β†’ MCP Gateway β†’ EasyWebhook MCP Server β†’ Target Webhook URL ↓ .env file (local) ↓ Discord/Slack/Custom API

πŸ“š Documentation

🎯 Why Use .env Files?

Before:

❌ Copy/paste long URLs every time ❌ Risk of typos ❌ Hard to manage multiple webhooks

After:

βœ… Simple aliases like "DISCORD_WEBHOOK" βœ… Store once, use everywhere βœ… Easy to update and manage βœ… More secure (URLs in local file)

πŸ”§ Updating Webhooks

  1. Edit .env file

  2. Rebuild: docker build -t easywebhook-mcp-server .

  3. Restart Claude Desktop

πŸ”§ Development

Local Testing

# Run server directly python easywebhook_server.py # Test MCP protocol echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python easywebhook_server.py

Testing Webhooks

Discord Webhook:

Create a webhook in Discord: Server Settings β†’ Integrations β†’ Webhooks

Slack Webhook:

Create an app at api.slack.com/apps and enable Incoming Webhooks

Custom Webhook:

Any HTTP endpoint that accepts POST/GET/PUT/PATCH/DELETE requests

πŸ› Troubleshooting

Tools Not Appearing

  • Verify Docker image built successfully: docker images | grep easywebhook

  • Check catalog and registry files for syntax errors

  • Ensure Claude Desktop config includes custom catalog path

  • Restart Claude Desktop completely (quit and reopen)

Webhook Failures

  • Verify the webhook URL is correct and accessible

  • Check that the webhook hasn't been deleted or revoked

  • Ensure payload format matches the expected format for the service

  • Review error messages for HTTP status codes

Timeout Errors

  • Webhook endpoint may be slow or unavailable

  • Check network connectivity

  • Verify the target service is operational

"No webhook found for alias"

  • Check .env file exists in project directory

  • Verify alias name matches (case-insensitive)

  • Rebuild Docker image: docker build -t easywebhook-mcp-server .

  • Ensure the URL starts with http:// or https://

Invalid URL Errors

  • Ensure URL includes http:// or https://

  • Verify no typos in the webhook URL

  • Check that the URL is properly formatted

Full troubleshooting guide in

πŸ“ Project Structure

EasyWebhook-MCP/ β”œβ”€β”€ .env.example # Webhook configuration template β”œβ”€β”€ .env # Your webhooks (create this) β”œβ”€β”€ .gitignore # Git ignore rules (protects .env) β”œβ”€β”€ easywebhook_server.py # Main MCP server β”œβ”€β”€ requirements.txt # Python dependencies β”œβ”€β”€ Dockerfile # Docker configuration β”œβ”€β”€ custom.yaml # MCP catalog definition β”œβ”€β”€ README.md # This file (complete documentation) β”œβ”€β”€ QUICK_START.md # Fast setup guide β”œβ”€β”€ SETUP_GUIDE.md # Detailed instructions β”œβ”€β”€ VISUAL_GUIDE.txt # Visual walkthrough β”œβ”€β”€ CHANGELOG.md # Version history └── CLAUDE.md # Implementation guide

🀝 Contributing

Contributions are welcome! This is an open-source MCP server and we'd love your help making it better.

Ways to Contribute

  • πŸ› Report bugs - Open an issue describing the problem

  • πŸ’‘ Suggest features - Share ideas for new tools or improvements

  • πŸ“ Improve documentation - Fix typos, clarify instructions, add examples

  • πŸ”§ Submit code - Fix bugs, add features, improve performance

  • ⭐ Star the repo - Show your support!

Development Setup

  1. Fork and clone the repository

    git clone https://github.com/YOUR_USERNAME/EasyWebhook-MCP.git cd EasyWebhook-MCP
  2. Create a

    cp .env.example .env # Add your test webhook URLs
  3. Make your changes

    • Follow existing code style

    • Use single-line docstrings for MCP tools

    • Add error handling for new features

    • Test thoroughly before submitting

  4. Test your changes

    # Build Docker image docker build -t easywebhook-mcp-server . # Test locally python easywebhook_server.py
  5. Submit a pull request

    • Describe what your PR does

    • Reference any related issues

    • Include examples if adding new features

Adding New Tools

To add a new webhook tool:

  1. Add the function to

    @mcp.tool() async def send_my_service_webhook(webhook_url: str = "", message: str = "") -> str: """Send a message to MyService using a webhook URL."" # Single-line only! # Implementation here return "βœ… Message sent successfully!"
  2. Use these guidelines:

    • Decorate with @mcp.tool()

    • Use single-line docstrings only (multi-line causes errors)

    • Use empty string defaults: param: str = "" not param: str = None

    • Return formatted strings with emojis (βœ… ❌ ⚠️ πŸ“Š)

    • Add comprehensive error handling

    • Log actions to stderr

  3. Update

    tools: - name: send_my_service_webhook
  4. Update documentation

    • Add usage examples to README.md

    • Update SETUP_GUIDE.md if needed

    • Update CHANGELOG.md

  5. Rebuild and test

    docker build -t easywebhook-mcp-server . # Test in Claude Desktop

Code Style Guidelines

  • Python: Follow PEP 8, use async/await for HTTP operations

  • Error messages: User-friendly with emoji indicators

  • Logging: Use logger.info() and logger.error() for important events

  • Security: Never log full webhook URLs, mask sensitive data

  • Type hints: Use simple types (str, int), avoid Optional/Union

Testing Guidelines

Before submitting:

  • βœ… Test all new tools with real webhook URLs

  • βœ… Test error conditions (invalid URLs, timeouts, etc.)

  • βœ… Verify changes work in Docker container

  • βœ… Check that Claude Desktop recognizes new tools

  • βœ… Ensure no secrets are hardcoded or logged

Documentation Guidelines

  • Keep README.md concise and user-focused

  • Add detailed examples for complex features

  • Update CHANGELOG.md for all changes

  • Use clear, friendly language

  • Include emoji for visual clarity 🎨

Getting Help

  • Questions? Open a discussion or issue

  • Stuck? Check CLAUDE.md for implementation details

  • Need examples? See existing tools in easywebhook_server.py

License

By contributing, you agree that your contributions will be licensed under the MIT License.

πŸ“„ License

MIT License - Use freely in your projects

πŸ”— Resources

βš™οΈ Response Format

All tools return formatted strings with:

  • βœ… Success indicators

  • ❌ Error messages

  • πŸ“Š Status codes

  • 🌐 URL information

  • ⚑ Method used

  • πŸ“„ Response previews (first 200 chars)

⚠️ Limitations

  • Maximum 30-second timeout per request

  • Response body limited to 200 characters in output

  • JSON payload format required for most structured data

  • No support for file uploads via webhooks

πŸŽ‰ What's New in v2.0

  • ✨ .env file support for webhook storage

  • πŸ”§ Four new alias-based tools

  • πŸ“‹ list_webhooks tool to view configurations

  • πŸ”’ Enhanced security with URL masking

  • 🎨 Discord embeds with full customization (title, color, fields)

  • πŸ“š Comprehensive documentation


Ready to send webhooks from Claude? Follow QUICK_START.md to get started in 5 minutes! πŸš€

-
security - not tested
F
license - not found
-
quality - not tested

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/plgonzalezrx8/EasyWebhook-MCP'

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