Позволяет MCP server отправлять события и пробуждать подписанных AI агентов по завершении определенных задач приложения.
Также известен как wakeshift/wakeshift-node, @wakeshift/sdk
- Звёзды
- 0
- Инструменты
- —
- Загрузки, 30 дней
- —
- Последняя версия
- —
- Последний коммит
- 8 нояб. 2026 г.
- Лицензия
- Apache-2.0
Что такое Wakeshift MCP?
Wakeshift — это MCP server. Позволяет MCP server отправлять события и пробуждать подписанных AI агентов по завершении определенных задач приложения.
Сводка сгенерирована из README проекта
О Wakeshift MCP server
wakeshift-node позволяет пробуждать таких AI агентов, как Claude Code, Codex или ChatGPT, по завершении фоновых задач. Разработчики используют этот SDK, чтобы MCP server могли отправлять события в подписанные диалоги, гарантируя немедленное уведомление агента, как только конкретная задача приложения будет выполнена. Это реализуется через определение событий и их привязку к инструментам с помощью метода registerTool.
Для активации сервиса требуется переменная окружения WAKESHIFT_KEY. Если ключ отсутствует, сервер продолжает работать в штатном режиме без отправки уведомлений. Система поддерживает различные среды, включая Node.js 22.12 или выше, Cloudflare Workers с флагом nodejs_compat и Mastra. Также предусмотрен механизм watch для API без поддержки вебхуков, позволяющий серверу опрашивать обновления статуса каждые несколько секунд до завершения задачи.
Отличие этого инструмента заключается в автоматическом управлении жизненным циклом подписки. Он может использовать флаг once для завершения подписки после однократной доставки и берет на себя сложность сопоставления аргументов инструментов с конкретными триггерами событий. Это гарантирует, что соответствующее обновление получит только тот диалог, который инициировал конкретную задачу.
Что вы можете с ним делать
- 1Уведомление агентов после веб-краулингаAI агент может запустить сканирование сайта и получить автоматическое обновление по завершении процесса.
- 2Опрос API без вебхуковРазработчики могут использовать функцию watch для периодической проверки статуса внешнего API до выполнения задачи.
- 3Автоматизация рабочих процессов агентов на основе событийВы можете определить пользовательские события, которые инициируют отправку определенных полезных нагрузок обратно в AI клиент.
Взято из README проекта. Каждый вариант использования проверен на соответствие цитате из него.
Как установить Wakeshift MCP
Форматы проверены 10 ноя 2026Добавить в CursorДобавить в GooseУстановка Wakeshift MCP в Claude Code
$ claude mcp add wakeshift-node -- npx -y @wakeshift/sdkУстановка Wakeshift MCP в Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}Установка Wakeshift MCP в VS Code
.vscode/mcp.json
{
"servers": {
"wakeshift-node": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}Установка Wakeshift MCP в VS Code CLI
$ code --add-mcp '{"name":"wakeshift-node","type":"stdio","command":"npx","args":["-y","@wakeshift/sdk"]}'Установка Wakeshift MCP в Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}Установка Wakeshift MCP в Codex
$ codex mcp add wakeshift-node -- npx -y @wakeshift/sdkУстановка Wakeshift MCP в Codex config.toml
~/.codex/config.toml
[mcp_servers.wakeshift-node] command = "npx" args = ["-y", "@wakeshift/sdk"]
Установка Wakeshift MCP в Gemini CLI
$ gemini mcp add -s user wakeshift-node npx -- -y @wakeshift/sdkУстановка Wakeshift MCP в Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"wakeshift-node": {
"command": "npx",
"args": [
"-y",
"@wakeshift/sdk"
]
}
}
}Автоматические проверки
Запущено 15 нояб. 2026 г.Полный отчёт →Прошло наши автоматизированные проверки. Это не аудит безопасности: изучите код и предоставьте серверу минимально необходимый доступ. Как работают проверки
- Связанный и доступный исходный репозиторий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 ↗Пройдено
- Open source лицензия (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗Пройдено
- Коммит или релиз за последний год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 активируется путем предоставления WAKESHIFT_KEY. Без этого ключа сервер работает в обычном режиме без отправки событий.
Можно ли использовать Wakeshift, если мой API не поддерживает вебхуки?
Да, вы можете использовать метод watch для опроса статуса вашего API до завершения работы, а затем отправить событие.
Что произойдет, если вызов инструмента завершится ошибкой?
Если вызов инструмента завершится ошибкой, любая подписка, созданная во время этого вызова, будет автоматически аннулирована.