Webhooks by Wakeshift
What it does
A webhook URL that wakes your AI agent: every POST to it wakes the conversation watching it.
- Connects 클라우드에서 실행
- Account or key No key needed
- Category 개발자 도구
설치
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
검사 2/2 통과 · 내가 묻는 내용은 제작자 서버(try.wakeshift.ai)를 거쳐요 · ✓ 명령 확인 2026년 11월 13일
먼저: 어떤 AI를 쓰시나요?
쓰는 앱을 고르면 아래에 단계가 나옵니다.
Claude에 연결할 수 있지만 먼저 준비가 필요해요
주소에 {…} 부분이 있어 먼저 내 값으로 바꿔야 해요 · claude.ai나 데스크톱 앱에서 한 번 설정하면 채팅에서 쓸 수 있어요 · 무료 계정은 1개까지 · Team/Enterprise는 소유자(Owner)가 추가
Claude의 Connectors 페이지 열기
CustomizeConnectors
“Add” → “Custom” → “Web”를 누르고 이 2칸 채우기
여기서 복사해 Claude의 같은 이름 칸에 붙여 넣고 Continue를 누르세요
Name · 이름Webhooks by WakeshiftRemote MCP server URL · 주소https://try.wakeshift.ai/t/{link}/mcpClaude가 찾은 로그인 설정 화면에서 Continue를 누르고 · Authentication은 제작자 안내대로(Sign in now, Sign in when needed, No sign in) 고른 뒤 Add를 누르세요
채팅에서 켜기
+ConnectorsWebhooks by Wakeshift
해 보기
Webhooks by Wakeshift을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude가 Webhooks by Wakeshift을 쓰고 있다고 하거나 답에 Webhooks by Wakeshift 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
ChatGPT 연결은 요금제에 따라 달라요
전체 MCP: 웹 ChatGPT Business, Enterprise, Edu · Pro: 읽기/가져오기 권한으로 연결, 데이터를 바꾸는 도구는 안 될 수 있어요 · Plus: 공식 문서 미확인, 플러그인 화면에 사용자 지정 MCP 추가 항목이 보이면 시도해 볼 수 있어요 · 웹만 · 주소에 {…} 부분이 있어 먼저 내 값으로 바꿔야 해요
웹 ChatGPT에서 MCP 추가 페이지 열기
Plugins+Add custom MCP server
이름과 주소 입력
이름을 넣고 Connection에 주소를 붙여 넣은 뒤 경고에 체크하고 Create as a plugin을 누르세요
Name · 이름Webhooks by WakeshiftConnection · 주소https://try.wakeshift.ai/t/{link}/mcp채팅에서 Webhooks by Wakeshift 고르기
새 채팅을 열고 입력 전에 플러그인 목록에서 Webhooks by Wakeshift을 고르세요
해 보기
Webhooks by Wakeshift을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ ChatGPT가 Webhooks by Wakeshift을 쓰고 있다고 하거나 답에 Webhooks by Wakeshift 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 OpenAI 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Claude Code에 연결할 수 있지만 먼저 준비가 필요해요
주소에 {…} 부분이 있어 먼저 내 값으로 바꿔야 해요
터미널 열기
Mac: Command+스페이스를 누르고 Terminal 입력 · Windows: PowerShell 열기
이 명령을 붙여 넣고 Enter
claude mcp add --transport http --scope user webhooks 'https://try.wakeshift.ai/t/{link}/mcp'Claude Code에서 /mcp 입력
Webhooks by Wakeshift이 목록에 있고 연결됨으로 보이면 돼요
해 보기
Webhooks by Wakeshift을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude Code가 Webhooks by Wakeshift을 쓰고 있다고 하거나 답에 Webhooks by Wakeshift 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Cursor에 연결할 수 있지만 먼저 준비가 필요해요
주소에 {…} 부분이 있어 먼저 내 값으로 바꿔야 해요
Cursor의 MCP 설정 파일 열기
~/.cursor/mcp.json
이 설정을 붙여 넣고 빈 값을 채운 뒤 저장
{ "mcpServers": { "webhooks": { "url": "https://try.wakeshift.ai/t/{link}/mcp" } } }Cursor에서 AI 채팅을 Agent 모드로 열기
해 보기
Webhooks by Wakeshift을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Cursor가 Webhooks by Wakeshift을 쓰고 있다고 하거나 답에 Webhooks by Wakeshift 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Cursor 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
VS Code에 연결할 수 있지만 먼저 준비가 필요해요
주소에 {…} 부분이 있어 먼저 내 값으로 바꿔야 해요
VS Code의 MCP 설정 파일 열기
MCP: Open User Configuration
이 설정을 붙여 넣고 빈 값을 채운 뒤 저장
{ "servers": { "webhooks": { "type": "http", "url": "https://try.wakeshift.ai/t/{link}/mcp" } } }VS Code에서 AI 채팅을 Agent 모드로 열기
해 보기
Webhooks by Wakeshift을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ VS Code가 Webhooks by Wakeshift을 쓰고 있다고 하거나 답에 Webhooks by Wakeshift 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 VS Code 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Windsurf, Zed, Gemini CLI 같은 다른 MCP 앱은 추가 방법이 저마다 달라요. 앱 목록에서 확인하세요
웹으로 연결하는 앱용 주소
https://try.wakeshift.ai/t/{link}/mcpJSON 설정은 아래 “개발자용”에 있어요
개발자용: 터미널 명령과 JSON 설정
웹으로 연결
Claude Code
claude mcp add --transport http --scope user webhooks 'https://try.wakeshift.ai/t/{link}/mcp'Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"webhooks": {
"url": "https://try.wakeshift.ai/t/{link}/mcp"
}
}
}VS Code (mcp.json)
{
"servers": {
"webhooks": {
"type": "http",
"url": "https://try.wakeshift.ai/t/{link}/mcp"
}
}
}이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
한눈에 보기
어떤 앱에서 쓸 수 있나요
이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.
인터넷으로 연결하는 앱
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
할 수 있는 일
주소에 내 값이 필요해서 대신 도구 목록을 읽을 수 없어요.
기본 점검i
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 14일 점검
- ✓ 통과
제작자와 저장소 일치
레지스트리 이름이 도메인 wakeshift.ai 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
- ✓ 통과
계속 관리되고 있음
코드 마지막 변경: 7일 전
- – 해당 없음
라이선스 있음
해당 없음: wakeshift.ai 소유자가 직접 운영하는 클라우드 서버라 저장소 코드를 실행하지 않아요
- – 해당 없음
엔드포인트 응답
주소에 내 계정 값이 필요해서 대신 점검할 수 없어요
- – 해당 없음
OAuth로 로그인
주소에 내 계정 값이 필요해서 대신 점검할 수 없어요
- … 아직 점검 안 함
도구 설명에 숨겨진 지시 없음
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
토론
질문하고, 팁을 나누고, 안 되는 점을 알려 주세요. "도움이 됨"이 많은 순서예요.
사용자 리뷰
아직 리뷰가 없어요
개발자 도구 카테고리의 다른 서버와 비교i
- 이 카테고리의 다른 서버 5859개 중 0%보다 스타가 많아요
- 이 카테고리의 다른 서버 5859개 중 71%보다 최근에 레지스트리에 공개됐어요
- 기본 점검 결과가 이 카테고리의 다른 서버 5859개 중 100%와 같거나 더 좋아요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
자주 묻는 질문
Webhooks by Wakeshift, 안전한가요?
해당하는 기본 점검 2개 중 2개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
어떤 키나 코드가 필요한가요?
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
아직 관리되고 있나요?
GitHub 저장소는 마지막으로 7일 전 변경됐고, 최신 버전(1.0.0)은 9일 전 레지스트리에 올라왔어요.
어떤 앱에서 쓸 수 있나요?
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되므로 원격 MCP를 받는 앱에서도 쓸 수 있어요. 예: 웹 ChatGPT(Business 이상은 전체 MCP, Pro는 읽기 전용).
대신 쓸 수 있는 건 뭐가 있나요?
같은 카테고리에는: REA, GitHub, Serena MCP: the IDE for your agent
같은 카테고리의 다른 것
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
제작자의 README
README 열기
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Webhooks
A webhook URL that wakes your agent: get a link, add it to your agent (Claude Code, Codex, Cursor, Antigravity, opencode, Copilot CLI or any MCP client), ask the agent to watch, and every POST to your webhook URL (curl, Postman, GitHub, Stripe, Linear, your own app) wakes it. Wakeshift runs it at try.wakeshift.ai. Built on the TypeScript SDK, @wakeshift/sdk.
How it works
- Stateless links. A link's code is signed with
TRY_SECRETand names a random webhook ID and when it was made. The MCP URL (/t/ /mcp), the page (/l/), the webhook URLs (/in/, one token per signature check) and the signing secret are all derived from it. Nothing is stored. A link expires after 7 days without use; when it was last used is kept in the database (written at most every 5 minutes per instance). When it expires, Wakeshift is asked to forget the webhook (forgetUserwith the webhook ID, which is the app's user for it): its workspace, the conversations that watched it, their subscriptions and deliveries. The sweep queues it in the database in the transaction that deletes the link's own rows, and every instance works the queue every 10 minutes, retrying a failure with backoff (a minute, doubling, at most 6 hours) until Wakeshift says it's done. - The SDK user is the webhook; posts are an event.
webhook.received(argument: the webhook's ID; only the webhook's own SDK user, anyone with its link, may subscribe) carries what was posted:summary, a line saying what happened, then the parsed body and the headers that say who sent it. Every tool is wrapped withattached.events(the handlewake.attachreturns), and takes Wakeshift's arguments throughattached.inputs.watchsubscribes the calling conversation withcall.subscribe;unwatchends it withcall.unsubscribe. The wrapper adds one Wakeshift block to each tool's result: how the conversation is woken after a subscribe, pending messages and a Codex thread's beacon otherwise. A call that fails ends the subscription it made. A client that speaks MCP Events (ChatGPT) gets no conversation subscription: the block tells it to subscribe towebhook.receiveditself. A post becomesevent.emit.wake.attachaddssubscribe_events,unsubscribe_eventsandlist_subscriptions. - MCP: Streamable HTTP with sessions, no sign-in (the code in the URL is the credential). Nothing about a session lives in an instance: initialize's client name, version and capabilities are stored under the
Mcp-Session-Id, and each request builds the MCP server afresh from them on whichever instance it reaches (the SDK's transport in stateless mode; the session ID is checked here, 404 if unknown or another link's). So sessions survive restarts and need no affinity, and the client's name and capabilities (which decide how Cursor, opencode and the rest are woken, and whether a client subscribes itself) are right on every instance: the rebuilt server answersgetClientVersionandgetClientCapabilitiesfrom the stored initialize, and the wrapper reads them. Sessions idle for 7 days are dropped (the client initializes again). Tools:watch,unwatch,recent_posts,webhook_info. - Webhooks:
POST,PUTorPATCH/in/, any body up to 64 KB. The event'stextsays what happened: for GitHub (fromX-GitHub-Event)GitHub workflow_run completed: failure on main (tests) in acme/api; for StripeStripe invoice.payment_failed: in_…, USD 49.00, open (evt_…, test mode); for LinearLinear Issue create: ENG-123 Checkout page 500s; for anything elsePOST to your webhook(with(empty body)if it was), since the data has the rest: the text doesn't repeat the body, so a small post's data fits on one Monitor line (480 bytes) in full. Itsdatais the parsed body (body, orbody_base64), the method, content type, a few headers that say who sent it (includingLinear-EventandLinear-Delivery; never Authorization, cookies or signatures) and, for Stripe and Linear,source(the event type and ID). Retries are one publish: byIdempotency-Key,X-GitHub-Delivery,Linear-Delivery, or a Stripe event'sevt_ID. On a GitHub, Stripe or Linear URL only the service's own ID counts (Idempotency-Keyisn't signed, so a captured delivery replayed with a fresh one would wake the agent again); a Stripe URL uses only theevt_ID from the signed body.GETexplains how to post; a body more than 256 KB over the limit has its connection dropped rather than read. - Signature checks: the page's tabs give a URL per check, each its own token, so a checked URL can't be turned into the open one; the open URL keeps working for whoever has it, until the user replaces it (below). GitHub's
X-Hub-Signature-256andAuthorization: Beareruse secrets derived per webhook and per check (try_gh_…,try_bearer_…). Stripe and Linear make their own secret: the user pastes it into the page, and it's sealed into that URL's token (AES-256-GCM with a key derived fromTRY_SECRET). It's stored only in that form: the URL is kept as the webhook's checked URL (below) until the link expires. Stripe'sStripe-Signature(t=…,v1=…, HMAC-SHA256 oft.body) must be within 5 minutes; Linear'sLinear-Signature(hex HMAC-SHA256 of the body) needs awebhookTimestampwithin a minute. - A new open URL: the open tab's "Get a new URL" (
POST /l/ /rotate) replaces the open URL. Its token then carries the webhook's open-URL generation, kept per webhook in the database (hooks.open_gen), and a post or GET to an open URL of any other generation gets 410 (replaced), on every instance at once. The webhook ID (the SDK user, so its subscriptions), the link and MCP URL, the history and the checked URLs stay as they were, and the live view gets a line saying the URL changed. Only the link's code can ask (a webhook URL is a different capability, and can't), from this site's page: a request whoseOriginorSec-Fetch-Sitesays another site sent it gets 403. Ten an hour per webhook (429 past that). - Which URL the agent hears about:
watchandwebhook_infogive the checked URL the user last picked (a GitHub or bearer tab they opened, a Stripe or Linear URL they made, or the URL a service last posted to), and say which check it uses. It's kept for as long as the link lives. - Limits (counted in the database, atomically, so they hold across instances; fixed windows: the hour and the UTC day): 60 posts an hour and 500 a day for each of a webhook's URLs (429 with
Retry-After), so whoever has the open URL can't use up the checked one's. Refused posts (401, 413) don't count; retries do (each is still a request to Wakeshift, so a repeatedIdempotency-Keycan't get round the limits). 20,000 an hour across all webhooks, 30 new links an hour per address (an IPv6 address by its /64; kept as an HMAC of the address, for the hour).TRY_PER_HOUR,TRY_PER_DAY,TRY_GLOBAL_PER_HOURandTRY_LINKS_PER_HOURchange them, and the terms and privacy policy state the limits in use. - Overload: an instance takes 256 requests in flight (posts three quarters of that, so pages and tool calls keep some room) and 900 open streams (live views, MCP GET and listen streams); for one webhook, at most 20 live views and, apart, 20 agents' streams, so agents can't leave the page without one; 2 GET streams for one MCP session (a live view past that gets 429, a GET stream 405); past that, and when the database is away or out of connections, it answers 503 with
Retry-Afterand a plain message (JSON for webhooks, JSON-RPC for MCP, a page for pages), never a 500. A link's page still comes up when the database is slow, without its history; the live view retries and says so (below). Wakeshift's own 429 or 503 on publish becomes a 503 withRetry-Afterfor the poster. - The page's live view is SSE from this server (
/l/ /live): each post (received, refused, rate limited, the start of what was posted, and how many watching conversations the publish reached), and each watch and unwatch. Lines are kept in the database (the last 50 per webhook) and reach pages on every instance byNOTIFYon the webhook's channel (try_; each instanceLISTENs only for webhooks it has a page open for, and replays the recent lines whenever its connection comes back after a drop; it pings that connection every 30 seconds so a silent drop is noticed). A webhook's refused and rate-limited posts get at most 10 lines a minute per instance, so a flood of bad signatures doesn't push real posts out. The rest are counted, and once the minute is over (or the instance stops) each instance adds its count to the webhook's one line for that minute, which the page updates in place: one line a minute with the total across instances, written at most once a minute per webhook by each instance. A live view that doesn't keep up with what's written to it is dropped (EventSource reconnects). Each line goes with itsseqas its SSE ID, and a live view asks for the lines after the newest it has (?after=, orLast-Event-IDwhen EventSource reconnects by itself), so after a gap it shows what happened meanwhile (as far as the last 50 go). When the server refuses it (429, 503), EventSource gives up; the page tries again after 2 seconds, doubling to 30 at most (randomized a little), back to 2 once connected, and at once when the page is looked at again, the network comes back or the status poll gets an answer (liveConnectionin page.ts). The page shows who calledwatch, "sent to N watching conversations" per post, and whether an agent is connected right now and how (stream, hooks or polling): it polls/l/ /statusevery 10 seconds, which asks Wakeshift forwebhook.received's status with the webhook's ID (event.status, read-only).
Run it yourself
- In the Wakeshift console, open Build → New app and copy its key (
wst_…). - Create an empty Postgres database. Webhooks creates its tables when it starts (
migrations/). - Build the SDK, then Webhooks, from the repository's root:
(cd third_party/wakeshift-node && npm ci && npm run build)
cd webhooks && npm ci && npm run build
- Copy
.env.exampleto.env, fill it in, and run it:
| Variable | |
|---|---|
WAKESHIFT_KEY | The app's key from step 1 |
WAKESHIFT_CORE | Wakeshift's URL (default https://app.wakeshift.ai) |
TRY_SECRET | Signs links; 32 or more random bytes. Changing it ends every link |
TRY_DATABASE_URL | The database from step 2; every instance shares it |
TRY_DB_POOL | Connections per instance (default 3), plus one that listens for the live view |
PUBLIC_URL | Your copy's public URL (default http://localhost:$PORT) |
PORT | Listen port (default 8380) |
TRY_PROXY_HOPS | Proxies in front of it that append to X-Forwarded-For (Google's load balancer: 2); 0 uses the socket's address |
TRY_PER_HOUR, TRY_PER_DAY, TRY_GLOBAL_PER_HOUR, TRY_LINKS_PER_HOUR | Optional: the limits above |
set -a; . ./.env; set +a
npm start
- Open
PUBLIC_URL, get a link, and run the command its tab for your agent shows.
Testing
npm run lint
npm test # unit tests; needs WAKESHIFT_TEST_DATABASE_URL, a Postgres URL for a role that can create databases
The end-to-end and load tests run Webhooks against the Wakeshift server, so they run in Wakeshift's own repository.
Contributing
This repository is generated from Wakeshift's main repository. Pull requests are welcome: we apply them there and publish the result. See CONTRIBUTING.