Unofficial, not affiliated with Papertrade. High leverage can lose your whole margin. Alerts are best effort.
Papertrade Alerts docs
App GitHub

MCP server

Endpoint: https://papertrade-alerts.ninabrekkerese.workers.dev/mcp

Transport: MCP Streamable HTTP, stateless. POST JSON-RPC 2.0 (single message or batch). Protocol versions 2025-06-18, 2025-03-26 and 2024-11-05 are accepted. The reply is application/json, or one SSE message event when a client accepts only text/event-stream. GET with Accept: text/event-stream and DELETE answer 405. There are no sessions, cookies or OAuth: Origin is never used for authorization.

No tool signs, sends funds or places orders. Tools that touch the account only manage alert rules and notification destinations, and only for the caller's own subscription.

Authentication#

Discovery and preview tools need nothing. Subscription tools need the management token from create_subscription, either as the Authorization: Bearer ptal_... header (preferred, configure it once in your client) or as the token argument.

Tools#

ToolReads or writesWhat it does
get_service_statusreadStorage state, configured channels, limits, last cron poll
list_alert_typesreadEvery alert, its rule field, defaults and ranges
preview_wallet_alertsread (live API)Which alerts a wallet would trigger right now: distance to liquidation per position, session key expiry, pending rewards
validate_destinationreadSSRF-guard check of a Discord or webhook URL. No network request
create_subscriptionwriteNew subscription, token returned once
add_destinationwriteConnect a Discord webhook or https webhook you own. Signing secret returned once
test_destinationwriteDeliver one real test message. 5 per minute
create_alert_rulewriteWatch a wallet with rules. Idempotent
list_alert_rulesreadRules and destinations with health
delete_alert_rulewrite, destructiveStop watching one wallet

Every tool declares inputSchema, outputSchema and annotations. Results carry a text block and structuredContent. Tool failures use isError: true with a message that says how to recover; malformed calls use JSON-RPC errors (-32700, -32600, -32601, -32602).

preview_wallet_alerts#

{ "address": "0x...", "rules": { "liquidation": { "belowPct": 5 } } }

Returns positions[] (market, side, leverage, marginUsd, entryPrice, markPrice, bustPrice, distanceToLiquidationPct, wouldAlert), sessionKeys[], pendingRewardsUsdc, equityUsd and the rules applied. Nothing is stored.

add_destination#

{ "kind": "webhook", "url": "https://example.com/hooks/papertrade", "label": "ops" }

Refused: http:, URLs with credentials, localhost, private, loopback, link-local, CGNAT and reserved addresses, and internal-only names.

Raw examples#

URL=https://papertrade-alerts.ninabrekkerese.workers.dev/mcp
H='content-type: application/json'

curl -s $URL -H "$H" -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

curl -s $URL -H "$H" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

curl -s $URL -H "$H" -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_service_status","arguments":{}}}'

Limits#

Per client IP: 120 requests per minute overall, 12 writes per minute, 8 wallet previews per minute. Request bodies are capped at 64 KB and batches at 16 messages. Over the limit you get 429 with Retry-After. Account limits apply on top: 25 wallets, 6 channels, 60 alerts per hour. While storage is not ready, account tools return a clear error and discovery tools keep working. See Security and limits.

Raw markdown: /docs/mcp.md. Apache-2.0. Unofficial, not affiliated with Papertrade.