Connect coding agents to hypothesis.sh for mobile push notifications and webhook testing.
The hypothesis.sh MCP (Model Context Protocol) server lets AI coding agents send push notifications to your iOS device and test webhook integrations. Agents can create webhook sessions, receive HTTP requests, and verify delivery — all through natural language commands.
Add the hypothesis MCP server to your agent's configuration:
claude mcp add hypothesis --transport sse https://hypothesis.sh/api/mcp/sseAdd to your .cursor/mcp.json:
{
"mcpServers": {
"hypothesis": {
"url": "https://hypothesis.sh/api/mcp/sse"
}
}
}Any MCP-compatible client can connect to:
https://hypothesis.sh/api/mcp/sseNo authentication required.
The MCP server exposes three tools that agents can call:
Send a push notification to a pre-registered iOS device.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| deviceId | string | yes | Device ID from the hypothesis.sh iOS app |
| title | string | yes | Notification title |
| body | string | yes | Notification body text |
Example:
Send a push notification to device abc-123 with title "Build Complete" and body "Your deployment finished successfully"Response:
On success, returns the APNS ID. On failure, returns an error message.
Finding your device ID:
Create a new webhook session for receiving HTTP requests.
Parameters: None
Example:
Create a webhook session so I can test incoming GitHub webhooksResponse:
Returns a JSON object with:
{
"sessionId": "55bc106c-49d4-4d8f-aec9-e801fdc3ede5",
"webhookUrl": "https://hypothesis.sh/api/webhook/55bc106c-49d4-4d8f-aec9-e801fdc3ede5"
}Use the webhookUrl to receive HTTP requests. The sessionId is used with list_webhook_events.
List recent webhook events received by a session.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| sessionId | string | yes | Session ID returned by create_webhook_session |
| limit | number | no | Maximum events to return (default: 50, max: 200) |
Example:
Show me the webhook events for session 55bc106c-49d4-4d8f-aec9-e801fdc3ede5Response:
Returns a JSON array of events, each containing:
method — HTTP verb (GET, POST, etc.)headers — Request headerspayload — Parsed JSON body (if applicable)rawBody — Raw body text (if not JSON)receivedAt — ISO 8601 timestampThe MCP server provides two prompt templates that guide agents through common workflows:
Step-by-step workflow for testing webhook integrations. Includes:
Usage:
Help me test webhooks using the webhook-testing workflowGuide for setting up CI/CD build and deployment notifications to your mobile device. Covers:
Usage:
Help me set up CI/CD notifications using the cicd-notification-setup workflowOnce you have a webhook URL from create_webhook_session, you can send HTTP requests to it using curl or any HTTP client:
curl -X POST https://hypothesis.sh/api/webhook/55bc106c-49d4-4d8f-aec9-e801fdc3ede5 \
-H "Content-Type: application/json" \
-d '{"event":"build","status":"success"}'The webhook accepts GET, POST, PUT, PATCH, and DELETE requests. CORS is fully open, so you can send requests from browsers or any cross-origin context.
Body parsing: If the request body is valid JSON, it's parsed and stored as payload. Otherwise, it's stored as rawBody.
Webhook sessions expire after 5 minutes of inactivity. If you try to send a request to an expired session, you'll receive:
HTTP 410 Gone
{"error": "session expired"}Handling expiry:
When your agent encounters a 410 error:
create_webhook_session to get a new sessionThe webhook-testing prompt template includes guidance on handling session expiry gracefully.
To protect the service, these limits apply:
Requests exceeding these limits receive HTTP 429 Too Many Requests or HTTP 413 Content Too Large.
1. Create a webhook session
2. Configure GitHub to send events to the webhook URL
3. Trigger an event in your GitHub repo
4. List the webhook events to verify delivery1. Get your device ID from the hypothesis.sh iOS app
2. Send a test push notification to verify it works
3. Configure your CI/CD system to call the push notification tool
4. Receive build/deployment notifications on your device1. Create a webhook session
2. Send test requests with different payloads
3. List events to inspect headers and body parsing
4. Iterate until your integration works correctlyThe device ID isn't registered. Install the hypothesis.sh iOS app and open it to register your device.
Check that the server has APNS environment variables configured (APNS_KEY_ID, APNS_TEAM_ID, APNS_KEY_P8, APNS_BUNDLE_ID). This is typically only an issue in local development — production deployments have these configured.
The session expired after 5 minutes of inactivity. Create a new session with create_webhook_session.
You've exceeded the 500 requests per hour limit. Wait for the rolling hour window to reset, or create a new session.
list_webhook_events with the correct session ID