Production-ready MCP server for webhook ingestion and event relay
15 tools with consistent naming (verb_noun pattern) and basic descriptions. All tools have input schemas with typed parameters and descriptions. However, descriptions are generic and lack LLM-optimization guidance (e.g., 'Subscribe to webhook events' doesn't explain WHEN to use it vs poll/history). Output schemas are not documented. Error handling is absent, no recovery guidance, no actionable error messages. Missing parameter constraints (enums, ranges, formats). No mention of idempotency, side effects, or prerequisites. Composition is reasonable (single responsibility per tool), but chaining metadata (IDs needed for downstream calls) is not documented in responses.
Retrieve audit log entries
Delete a webhook source
Get available event types for a webhook source
Retrieve historical webhook events
List all webhook events
List all registered webhook sources
Poll for pending webhook events
Register a new webhook source
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does subscribe() return? Is it a subscription_id needed for poll?). Breaks tool chaining.
Descriptions lack LLM-optimization guidance. Generic 1-sentence descriptions (avg ~40 chars) do not explain WHEN to use each tool vs similar ones. E.g., 'Poll for pending webhook events' doesn't clarify: is this for real-time monitoring? Batch processing? How does it differ from history()?
No error handling or recovery guidance. Tools declare WRITE/DESTRUCTIVE risk but provide no error messages, retry logic, or actionable recovery steps. E.g., delete-source fails silently, LLM has no guidance on what went wrong or what to try next.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Replay a webhook event to a subscription
Rotate the secret key for a webhook source
Get health status of a webhook source
Get statistics about webhook events and sources
Subscribe to webhook events from a registered source
Unsubscribe from webhook events
Update a webhook source configuration
Parameter constraints missing. 'config' parameter in register() is type 'object' with no schema, enum, or format guidance. 'limit' and 'offset' parameters lack min/max bounds. LLMs will guess at valid values.
No idempotency or side-effect declarations. Agents retry on ambiguous failures, tools like subscribe(), replay(), and rotate-secret() must declare idempotency or risk duplicate side effects (duplicate subscriptions, duplicate replays, multiple secret rotations).