MCP Resources Reference

Resources provide read-only access to your webhook data. Each resource has a unique URI and returns structured data in a consistent format.

Resource URIs

All resources follow the pattern: webhook://[type]/[identifier]
URIDescription
webhook://events/recentLast 100 webhook events
webhook://requests/recentLast 100 webhook requests
webhook://webhooks/listAll configured webhooks

webhook://events/recent

Returns the most recent webhook events across all your webhooks.

Response Schema

{
  "uri": "webhook://events/recent",
  "mimeType": "application/json",
  "text": {
    "events": [
      {
        "id": "evt_1234567890",
        "webhookId": "wh_stripe_prod",
        "status": "success" | "failed" | "pending",
        "createdAt": "2024-01-15T10:30:00.000Z",
        "provider": "stripe" | "github" | "clerk" | "custom",
        "eventType": "payment_intent.succeeded",
        "payload": {
          // Event-specific payload data
        },
        "error": "Connection timeout", // Only if status is failed
        "retryCount": 0,
        "nextRetryAt": "2024-01-15T10:35:00.000Z" // Only if retries scheduled
      }
    ],
    "metadata": {
      "count": 100,
      "hasMore": true,
      "oldestEventAt": "2024-01-15T08:00:00.000Z",
      "newestEventAt": "2024-01-15T10:30:00.000Z"
    }
  }
}

Event Status Values

StatusDescription
successEvent processed successfully
failedEvent processing failed
pendingEvent queued for processing

Provider Values

ProviderDescription
stripeStripe payment webhooks
githubGitHub repository events
clerkClerk authentication events
customCustom webhook providers

webhook://requests/recent

Returns the most recent webhook HTTP requests made by your webhooks.

Response Schema

{
  "uri": "webhook://requests/recent",
  "mimeType": "application/json",
  "text": {
    "requests": [
      {
        "id": "req_0987654321",
        "eventId": "evt_1234567890",
        "webhookId": "wh_stripe_prod",
        "status": "success" | "failed" | "timeout",
        "statusCode": 200,
        "duration": 245, // milliseconds
        "createdAt": "2024-01-15T10:30:05.000Z",
        "method": "POST",
        "url": "https://api.example.com/webhooks/stripe",
        "headers": {
          "content-type": "application/json",
          "x-stripe-signature": "...",
          "user-agent": "Stripe/1.0"
        },
        "requestBody": {
          // Request payload
        },
        "responseBody": {
          // Response payload
        },
        "error": "Connection refused" // Only if failed
      }
    ],
    "metadata": {
      "count": 100,
      "hasMore": true,
      "oldestRequestAt": "2024-01-15T08:00:05.000Z",
      "newestRequestAt": "2024-01-15T10:30:05.000Z"
    }
  }
}

Request Status Values

StatusDescription
successRequest completed with 2xx status
failedRequest failed with 4xx/5xx status
timeoutRequest timed out

Common Status Codes

CodeDescription
200OK - Request successful
201Created - Resource created
400Bad Request - Invalid payload
401Unauthorized - Invalid signature
404Not Found - Endpoint not found
500Internal Server Error
502Bad Gateway
503Service Unavailable
504Gateway Timeout

webhook://webhooks/list

Returns all configured webhooks in your organization.

Response Schema

{
  "uri": "webhook://webhooks/list",
  "mimeType": "application/json",
  "text": {
    "webhooks": [
      {
        "id": "wh_stripe_prod",
        "name": "Stripe Production",
        "description": "Production Stripe payment events",
        "provider": "stripe",
        "url": "https://unhook.sh/wh_stripe_prod",
        "targetUrl": "https://api.example.com/webhooks/stripe",
        "active": true,
        "createdAt": "2024-01-01T00:00:00.000Z",
        "updatedAt": "2024-01-15T09:00:00.000Z",
        "configuration": {
          "retryEnabled": true,
          "maxRetries": 3,
          "retryDelay": 300, // seconds
          "timeout": 30, // seconds
          "headers": {
            "x-api-key": "***" // Sensitive values masked
          }
        },
        "stats": {
          "totalEvents": 1523,
          "successfulEvents": 1456,
          "failedEvents": 67,
          "lastEventAt": "2024-01-15T10:30:00.000Z"
        }
      }
    ],
    "metadata": {
      "count": 5,
      "activeWebhooks": 4,
      "inactiveWebhooks": 1
    }
  }
}

Webhook Fields

id
string
Unique identifier for the webhook
name
string
Human-readable name
description
string
Optional description of the webhook’s purpose
provider
string
The webhook provider (stripe, github, clerk, custom)
url
string
The Unhook URL to configure with the provider
targetUrl
string
Your endpoint that receives the webhooks
active
boolean
Whether the webhook is currently active
configuration
object
Webhook-specific configuration settings
stats
object
Basic statistics about webhook performance

Data Limits

Resources are designed to provide quick access to recent data:
  • Events: Limited to 100 most recent events
  • Requests: Limited to 100 most recent requests
  • Webhooks: No limit (typically < 50 per organization)
For historical data or larger datasets, use the search tools instead.

Common Patterns

Checking Recent Failures

To quickly identify recent issues:
  1. Read webhook://events/recent
  2. Filter events with status: "failed"
  3. Use event IDs to search for related requests

Monitoring Webhook Health

To assess webhook performance:
  1. Read webhook://webhooks/list
  2. Check the stats field for each webhook
  3. Identify webhooks with high failure rates

Debugging Specific Events

To investigate a particular event:
  1. Read webhook://events/recent
  2. Find the event by ID or characteristics
  3. Note the webhookId and eventId
  4. Use tools to analyze the event details

Error Responses

If a resource cannot be accessed, the response will include an error:
{
  "uri": "webhook://events/recent",
  "mimeType": "application/json",
  "error": {
    "code": "PERMISSION_DENIED",
    "message": "No access to organization webhooks"
  }
}

Common Error Codes

CodeDescription
NOT_FOUNDResource does not exist
PERMISSION_DENIEDNo access to resource
INTERNAL_ERRORServer error occurred

Best Practices

  1. Cache resource data - Resources update in real-time, but caching for 30-60 seconds is acceptable
  2. Use metadata - Check hasMore to know if older data exists
  3. Combine with tools - Resources show recent data; use tools for historical analysis
  4. Monitor regularly - Set up periodic checks of webhook health
  5. Handle errors gracefully - Always check for error responses

Next Steps