특정 애플리케이션 작업이 완료되었을 때 MCP server가 이벤트를 푸시하고 구독 중인 AI agent를 깨울 수 있도록 합니다.
다른 이름 wakeshift/wakeshift-node, @wakeshift/sdk
- 스타
- 0
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 8일
- 라이선스
- Apache-2.0
Wakeshift MCP란?
Wakeshift은(는) MCP server입니다. 특정 애플리케이션 작업이 완료되었을 때 MCP server가 이벤트를 푸시하고 구독 중인 AI agent를 깨울 수 있도록 합니다.
프로젝트 README에서 생성된 요약
Wakeshift MCP server 정보
wakeshift-node는 백그라운드 작업이 완료되었을 때 Claude Code, Codex 또는 ChatGPT와 같은 AI agent를 깨워주는 기능을 제공합니다. 개발자는 이 SDK를 사용하여 MCP server가 구독 중인 대화에 이벤트를 푸시할 수 있으며, 특정 애플리케이션 작업이 완료되는 즉시 agent가 알림을 받을 수 있도록 보장합니다. 이는 이벤트를 정의하고 registerTool 메서드를 통해 도구에 연결하는 방식으로 작동합니다.
서비스를 활성화하려면 WAKESHIFT_KEY 환경 변수가 필요합니다. 키가 없으면 서버는 알림을 보내지 않고 정상적으로 계속 작동합니다. 이 시스템은 Node.js 22.12 이상, nodejs_compat 플래그를 사용하는 Cloudflare Workers, Mastra 등 다양한 환경을 지원합니다. 또한 웹훅이 없는 API를 위한 watch 메커니즘을 제공하여, 작업이 완료될 때까지 서버가 몇 초마다 상태 업데이트를 폴링할 수 있도록 합니다.
이 도구는 구독 라이프사이클을 자동으로 관리한다는 점에서 차별화됩니다. once 플래그를 사용하여 단일 전달 후 구독을 종료할 수 있으며, 도구 인수를 특정 이벤트 트리거에 매핑하는 복잡한 과정을 처리합니다. 또한 특정 작업을 시작한 대화에만 해당 업데이트가 전달되도록 보장합니다.
활용 사례
- 1웹 크롤링 후 agent 알림AI agent가 웹사이트 크롤링을 시작하고 프로세스가 완료되면 자동으로 업데이트를 받을 수 있습니다.
- 2웹훅 없는 API 폴링개발자는 watch 함수를 사용하여 작업이 완료될 때까지 외부 API 상태를 주기적으로 확인할 수 있습니다.
- 3이벤트 기반 agent 워크플로우 자동화AI 클라이언트로 특정 페이로드를 전송하도록 트리거하는 커스텀 이벤트를 정의할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Wakeshift MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 Wakeshift MCP 설치
$ claude mcp add wakeshift-node -- npx -y @wakeshift/sdkCursor에 Wakeshift MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}VS Code에 Wakeshift MCP 설치
.vscode/mcp.json
{
"servers": {
"wakeshift-node": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}VS Code CLI에 Wakeshift MCP 설치
$ code --add-mcp '{"name":"wakeshift-node","type":"stdio","command":"npx","args":["-y","@wakeshift/sdk"]}'Claude Desktop에 Wakeshift MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}Codex에 Wakeshift MCP 설치
$ codex mcp add wakeshift-node -- npx -y @wakeshift/sdkCodex config.toml에 Wakeshift MCP 설치
~/.codex/config.toml
[mcp_servers.wakeshift-node] command = "npx" args = ["-y", "@wakeshift/sdk"]
Gemini CLI에 Wakeshift MCP 설치
$ gemini mcp add -s user wakeshift-node npx -- -y @wakeshift/sdkGemini settings.json에 Wakeshift MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}자동 검사
2026년 11월 15일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능wakeshift/wakeshift-node is public and reachablegithub.com/wakeshift/wakeshift-node ↗통과
- 패키지가 이 저장소를 소스로 명시@wakeshift/sdk names wakeshift/wakeshift-node as sourcenpmjs.com/package/@wakeshift/sdk ↗통과
- 빌드 출처(Sigstore 증명)Sigstore attestation for @wakeshift/sdknpmjs.com/package/@wakeshift/sdk/v/0.11.1#provenance ↗통과
- 오픈 소스 라이선스 (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-08github.com/wakeshift/wakeshift-node ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from @wakeshift/sdk통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기@wakeshift/sdk
Wakeshift lets an MCP server wake the AI agents that use it. Let agents subscribe to things in your app: define your events, add one argument to the tool that starts the work, and Wakeshift wakes the conversation that asked, whether it's Claude Code, Codex, ChatGPT or another.
Install
npm install @wakeshift/sdk @modelcontextprotocol/server zod
On @modelcontextprotocol/sdk 1.x, install @wakeshift/sdk @modelcontextprotocol/sdk zod instead.
Quickstart
A crawler that wakes the conversation that started a crawl:
import { McpServer, createMcpHandler } from "@modelcontextprotocol/server"
import { z } from "zod"
import { Wakeshift } from "@wakeshift/sdk"
const wake = new Wakeshift() // reads WAKESHIFT_KEY; without one, Wakeshift is off and the server runs as before
const crawlFinished = wake.defineEvent("crawl.finished", {
description: "A crawl finished",
args: z.object({ job: z.string() }),
payload: z.object({ status: z.string(), pages: z.number() }),
})
export const handler = createMcpHandler(() => {
const server = new McpServer({ name: "crawler", version: "1.0.0" })
const attached = wake.attach(server)
attached.registerTool(
"start_crawl",
{ description: "Crawl a site.", inputSchema: z.object({ url: z.string() }), subscribes: [crawlFinished] },
async ({ url }, ctx, call) => {
const job = crypto.randomUUID() // your tool minted the ID, so only this conversation can know it
await call.subscribe(crawlFinished, { job }, { once: true })
startCrawl(url, job)
return `Crawl ${job} started.`
},
)
return server
})
// When the crawl finishes, in your worker or webhook handler:
export async function onCrawlFinished(job: string, pages: number) {
await crawlFinished.emit({ job }, { status: "completed", pages })
}
What just happened:
- The key comes from
WAKESHIFT_KEY. Without one, Wakeshift is off: every call still works, nothing is sent, and your server runs as it would without it. Construction makes no network request. registerToolis your MCP SDK's own, withsubscribesadded andcallappended to the handler. Your input schema stays yours: Wakeshift adds its arguments intools/listand strips them before your code runs.- Only your tools can subscribe to
crawl.finished, because it declares neitherpersonal,authorizenorpublic. That's the safe default for IDs your tool mints. onceends the subscription after one delivery, and a call that fails ends what it subscribed.emitwakes every conversation subscribed with those arguments. Withouttext, the agent reads the description and the arguments.
No webhook? Watch
If your API can't call you back, check its status until the work is done, and emit once:
crawlFinished.watch({ job }, async ({ signal }) => {
const s = await api.status(job, { signal })
return s.done ? { status: s.state, pages: s.pages } : undefined // undefined: keep waiting
}, { every: "10s", timeout: "2h" })
It runs in this process (a restart or a serverless freeze ends it), at most 10 checks at once, and emits once even if a webhook got there first with the same id. To start it however the subscription was made, call it from the event's onSubscribe: ({ args }) => crawlFinished.watch(args, check). await wake.close() stops every watch on shutdown.
Unit tests
import { createTestClient, createToolCall, withCall } from "@wakeshift/sdk/testing"
const wake = createTestClient() // enabled and offline: records wake.emits and wake.subscriptions
const call = createToolCall() // a typed ToolCall for a handler you call directly
await startCrawlHandler({ url: "https://x.test" }, ctx, call)
assert.equal(call.subscriptions[0].event, "crawl.finished")
await withCall(wake, call, () => wrappedHandler()) // wake.currentCall() returns call inside
To keep a real client off in tests whatever the environment says, construct it with new Wakeshift({ key: "" }).
Signing people in, webhooks, tools registered elsewhere (wrap and wake.currentCall()), testing, and who may subscribe: wakeshift.ai/docs.
Compatibility
| Node | 22.12 or later (ES modules; CommonJS loads it with require()). Node 20.19 or later runs it too (20.x is past end of life): like 22.12, it has require() of ES modules on by default, which attach on @modelcontextprotocol/sdk 1.x needs |
| MCP SDKs | @modelcontextprotocol/server 2.3 or later, or @modelcontextprotocol/sdk 1.23 or later |
| zod | 3.25 or later, or 4 |
| TypeScript | 5.8 or later; for CommonJS, module: nodenext |
| Cloudflare Workers | with the nodejs_compat flag |
| Mastra | @mastra/mcp 2.7 or later, through @wakeshift/sdk/mastra |
| A runtime with no MCP SDK server (xmcp, hand-rolled JSON-RPC) | @wakeshift/sdk/tools |
| Unit tests | @wakeshift/sdk/testing |
Wakeshift MCP 질문
Wakeshift MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add wakeshift-node -- npx -y @wakeshift/sdk를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
Wakeshift MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
Wakeshift를 어떻게 활성화하나요?
WAKESHIFT_KEY를 제공하여 Wakeshift를 활성화할 수 있습니다. 이 키가 없으면 서버는 이벤트를 전송하지 않고 일반 모드로 동작합니다.
API가 웹훅을 지원하지 않아도 Wakeshift를 사용할 수 있나요?
네, watch 메서드를 사용하여 작업이 완료될 때까지 API 상태를 폴링한 후 이벤트를 발생시킬 수 있습니다.
도구 호출(tool call)이 실패하면 어떻게 되나요?
도구 호출이 실패하면 해당 호출 중에 생성된 모든 구독이 자동으로 종료됩니다.