A production-ready Model Context Protocol (MCP) server that transforms webhook endpoints from automation platforms (n8n, Make.com, Zapier, FlowiseAI, etc.) into reliable, agent-callable tools for any MCP-compatible AI system.
Compatible with:
- π€ Claude Desktop (Anthropic's official desktop app)
- π§ Any MCP Client (VS Code extensions, custom applications, etc.)
- π Future MCP Services (growing ecosystem of MCP-enabled tools)
- π± Custom Integrations (build your own MCP client)
π¦ NPM Package: wyreup-mcp π GitHub Repository: tamler/wyreup-mcp
Turn any HTTP webhook into an MCP tool that AI agents can use reliably. Define your automation endpoints in a simple JSON manifest, and the server handles authentication, retries, rate limiting, health monitoring, and error handling automatically.
- Smart Retry Logic: Exponential backoff for transient failures
- Rate Limiting: Per-tool request throttling with sliding windows
- Health Monitoring: Real-time endpoint health tracking and statistics
- Timeout Management: Configurable timeouts per tool (great for slow automations)
- Multiple Auth Types: Header-based and JWT Bearer token authentication
- Environment Variables: Secure credential management via
valueFromEnv
andtokenFromEnv
- External Secrets: Store credentials in
~/.wyreup-secrets/
files - Per-Tool Auth: Each webhook can use different authentication methods
- JSON Schema Validation: Full input/output schema support with Zod validation
- Rich Error Handling: Structured error responses with debugging context
- Built-in Monitoring Tools: Health checks and rate limit status via MCP
- Hot Reload: Changes to manifest files are picked up automatically
- All HTTP Methods: GET, POST, PUT, PATCH, DELETE support
- Binary Data: Handle file downloads and binary responses
- Streaming Ready: Architecture prepared for real-time data streams
- Content Type Detection: Automatic handling of JSON, text, and binary responses
- β Uses official MCP SDK (v1.12.0+) with full STDIO and SSE support
- β Per-session SSE transports with isolated tool execution
- Supports transports: STDIO and SSE
- Tool Registration: Fully schema-based using
tools/list
andtools/call
- JSON-RPC 2.0: Strictly compliant request/response structure
# Install globally from npm
npm install -g wyreup-mcp
# Or run directly with npx (recommended)
npx wyreup-mcp --init
npx wyreup-mcp --validate
npx wyreup-mcp
NEW: Get started in under 2 minutes with the simplified webhook format! Perfect for rapid prototyping and low-code users.
{
"tools": [
{
"name": "get_quote",
"webhook": "https://wyreup.com/tools-mock/random-quote"
}
]
}
That's it! The system automatically infers:
- β Description: "Forward to random quote webhook"
- β Method: POST (default for webhooks)
- β
Input Schema: Empty object
{}
- β Output Schema: Auto-detects JSON, text, binary, or streaming responses
Supported Response Types:
- π JSON - Auto-parsed for structured data
- π Text/HTML - Plain text responses
- πΌοΈ Binary - Images, PDFs, files (base64 encoded)
- π Streaming - Real-time event streams
Test immediately:
echo '{
"tools": [
{
"name": "get_quote",
"webhook": "https://wyreup.com/tools-mock/random-quote"
}
]
}' > wyreup-simple.json
echo '{ "jsonrpc": "2.0", "id": "call-1", "method": "tools/call", "params": { "name": "get_quote", "arguments": {} } }' | npx wyreup-mcp --config wyreup-simple.json --transport stdio --debug
Simplified Format Syntax:
{
"tools": [
{
"name": "your_tool_name",
"webhook": "https://your-webhook-url.com/endpoint"
}
]
}
Mixed Format Support: You can combine simplified and full format tools in the same configuration file for maximum flexibility.
Skip the setup and test immediately with our live demo endpoints at wyreup.com
:
# Create a quick test configuration
echo '{
"tools": [
{
"name": "get_quote",
"description": "Get an inspirational quote",
"url": "https://wyreup.com/tools-mock/random-quote",
"method": "GET",
"input": {},
"output": {
"type": "object",
"properties": {
"quote": { "type": "string" }
}
}
},
{
"name": "get_time",
"description": "Get current UTC time",
"url": "https://wyreup.com/tools-mock/current-time",
"method": "GET",
"auth": {
"type": "header",
"name": "X-API-Key",
"value": "mock-secret-key"
},
"output": {
"type": "object",
"properties": {
"time": { "type": "string" }
}
}
}
]
}' > test-wyreup.json
# Test immediately
npx wyreup-mcp --validate --config test-wyreup.json
npx wyreup-mcp --config test-wyreup.json
Or use the comprehensive example configuration:
# Download the full example config with all advanced features
curl -o wyreup-example.json https://raw.githubusercontent.com/tamler/wyreup-mcp/main/wyreup-example.json
# Test all features
npx wyreup-mcp --validate --config wyreup-example.json
npx wyreup-mcp --config wyreup-example.json
# Run the full SSE test suite
npm run test:sse
npm run test:sse-client
Available Test Endpoints:
- π¨οΈ Random Quote -
GET /tools-mock/random-quote
(no auth) - β° Current Time -
GET /tools-mock/current-time
(API key:mock-secret-key
) - π Echo Service -
POST /tools-mock/echo
(API key:test-api-key-12345
) - β Error Testing -
POST /tools-mock/error
(always returns 500) - πΌοΈ Image Generation -
GET /tools-mock/generate-image
(returns base64 PNG) - π΅ Audio Generation -
GET /tools-mock/generate-audio
(returns base64 WAV with bytebeat music!)
The default wyreup.json
demonstrates both simplified and full formats:
{
"tools": [
{
"name": "get_quote",
"webhook": "https://wyreup.com/tools-mock/random-quote"
},
{
"name": "echo_message",
"description": "Echoes back the JSON body. Expects 'message' and 'detail'.",
"url": "https://wyreup.com/tools-mock/echo",
"public": false,
"input": { "message": "string", "detail": "string" },
"output": {
"received_message": "string",
"received_detail": "string",
"timestamp": "string"
},
"method": "POST",
"auth": {
"type": "header",
"name": "X-API-Key",
"value": "test-api-key-12345"
}
}
]
}
For comprehensive examples with all advanced features, see wyreup-example.json
.
For production deployments, you can add advanced features:
{
"tools": [
{
"name": "advanced_tool",
"description": "Production-ready tool with all features",
"url": "https://your-automation-platform.com/webhook/endpoint",
"method": "POST",
"timeout": 30000,
"maxRetries": 3,
"retryDelay": 1000,
"rateLimit": {
"requests": 10,
"window": 60000
},
"input": {
"type": "object",
"properties": {
"url": { "type": "string", "description": "URL to summarize" },
"max_words": { "type": "integer", "default": 150 }
},
"required": ["url"]
},
"output": {
"type": "object",
"properties": {
"summary": { "type": "string" },
"word_count": { "type": "integer" }
}
},
"auth": {
"type": "header",
"name": "X-API-Key",
"valueFromEnv": "SUMMARIZE_API_KEY"
}
}
]
}
Claude Desktop:
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json
):
{
"mcpServers": {
"wyreup": {
"command": "npx",
"args": ["wyreup-mcp"],
"cwd": "/path/to/your/project"
}
}
}
Other MCP Clients:
- VS Code Extensions: Use MCP extension settings
- Custom Applications: Connect via stdio transport on any platform
- Server Deployments: Use SSE transport mode (
--transport sse --port 3333
)
The server implements the standard MCP protocol, so it works with any compliant client.
Property | Type | Description |
---|---|---|
name |
string | Required. Unique tool identifier |
description |
string | Required. Human-readable description |
url |
string | Required. Full webhook URL |
method |
string | HTTP method (default: POST) |
timeout |
number | Request timeout in milliseconds (default: 30000) |
maxRetries |
number | Maximum retry attempts (default: 3) |
retryDelay |
number | Base retry delay in ms (default: 1000) |
rateLimit |
object | Rate limiting configuration |
input |
object | JSON Schema for input validation |
output |
object | JSON Schema for output description |
auth |
object | Authentication configuration |
authFrom |
object | External authentication source |
Header Authentication:
{
"auth": {
"type": "header",
"name": "Authorization",
"value": "Bearer secret-token"
}
}
Environment Variable:
{
"auth": {
"type": "header",
"name": "X-API-Key",
"valueFromEnv": "API_KEY"
}
}
JWT Bearer:
{
"auth": {
"type": "jwt",
"tokenFromEnv": "JWT_TOKEN"
}
}
External Secrets:
{
"authFrom": {
"user": "production-user"
}
}
Create ~/.wyreup-secrets/production-user.json
:
{
"tool_name": {
"type": "header",
"name": "Authorization",
"value": "Bearer your-secret-token"
}
}
{
"rateLimit": {
"requests": 30, // Max requests
"window": 60000 // Time window in ms
}
}
# Validation
npx wyreup-mcp --validate
npx wyreup-mcp --validate --config wyreup-example.json
# Server modes
npx wyreup-mcp # STDIO mode (default, used by Claude Desktop and local tools)
npx wyreup-mcp --transport sse # SSE mode for web clients (experimental)
# Development
npx wyreup-mcp --debug # Enable debug logging
npx wyreup-mcp --init # Create sample manifest
# SSE Testing (experimental)
npm run test:sse # Starts local SSE server with demo tools
npm run test:sse-client # Sends a tool call over SSE transport
These tools are automatically available and do not require configuration:
health-check
: Test individual webhook endpointshealth-status
: Get success rates and performance metricsrate-limit-status
: Monitor rate limiting usage
Example: Check health of all tools
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "health-status", "arguments": {}}, "id": 1}' | npx wyreup-mcp
To test SSE locally:
- Start the server with
--transport sse
- Your client must subscribe to
/sse
(EventSource) - Wait for the
endpoint
event to get the sessionId - Send
POST
requests to/messages?sessionId=...
- Each session gets its own transport and tool server instance
- Transport is cleaned up after tool execution or connection close
{
"name": "process_article",
"description": "Extract, summarize, and analyze web articles",
"url": "https://n8n.company.com/webhook/process-article",
"timeout": 45000,
"maxRetries": 2,
"input": {
"type": "object",
"properties": {
"url": { "type": "string", "description": "Article URL" },
"analysis_type": {
"type": "string",
"enum": ["summary", "sentiment", "keywords", "full"],
"default": "summary"
}
},
"required": ["url"]
}
}
{
"name": "notify_team",
"description": "Send notifications to team channels",
"url": "https://hooks.zapier.com/hooks/catch/slack-notify",
"timeout": 15000,
"rateLimit": { "requests": 30, "window": 60000 },
"input": {
"type": "object",
"properties": {
"channel": { "type": "string", "description": "#channel-name" },
"message": { "type": "string" },
"priority": {
"type": "string",
"enum": ["low", "normal", "high"],
"default": "normal"
}
},
"required": ["channel", "message"]
}
}
{
"name": "generate_report",
"description": "Generate PDF reports from data",
"url": "https://make.com/webhook/generate-pdf",
"timeout": 60000,
"input": {
"type": "object",
"properties": {
"template": { "type": "string" },
"data": { "type": "object" },
"format": { "type": "string", "enum": ["pdf", "docx"] }
}
},
"output": {
"binary": true,
"contentType": "application/pdf"
}
}
- Webhook Signature Verification: Validate incoming webhook signatures for security
- Response Caching: Cache responses for identical requests to reduce API calls
- Connection Pooling: Optimize HTTP connections for high-throughput scenarios
- Prometheus Metrics: Export detailed metrics for production monitoring
- Auto-Discovery: Automatically detect and configure tools from popular platforms
- Visual Tool Builder: Web UI for creating and testing webhook configurations
- Team Management: Multi-user authentication and permission systems
- Cloud Registry: Share and discover webhook tools across teams
- Native Platform Support: Pre-built templates for n8n, Make.com, Zapier, etc.
- OAuth Integration: Simplified authentication flows for supported platforms
- Batch Operations: Support for bulk webhook calls and parallel processing
- Real-time Subscriptions: WebSocket support for live data feeds
Contributions welcome! Please visit our GitHub repository to:
- Report Issues: GitHub Issues
- Submit Pull Requests: GitHub PRs
- View Source: GitHub Repository
Key areas for contribution:
- Platform Templates: Pre-configured tool definitions for popular automation platforms
- Performance Optimization: Enhance retry logic, connection handling, and response processing
- Security Features: Webhook signature verification, request sanitization
- Monitoring & Observability: Enhanced metrics, logging, and debugging tools
MIT License - Build amazing automations for AI agents!
Transform your automation workflows into AI-ready tools in minutes, not hours.