diff --git a/.changeset/mcp-toolkit-initial.md b/.changeset/mcp-toolkit-initial.md deleted file mode 100644 index 55b176c..0000000 --- a/.changeset/mcp-toolkit-initial.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -"@upstash/mcp-toolkit": minor ---- - -Add `@upstash/mcp-toolkit`: durable building blocks for MCP servers on the official TypeScript SDK. - -`@upstash/mcp-toolkit/tasks` — long-running tools. A task tool answers immediately with a task id; -the model polls the shared `task_status` tool for progress and the result, and can stop the task -with `task_cancel`. They are ordinary MCP tools, so they work in every client today. The record -lives in a `TaskStore` and the work runs behind a `TaskDispatcher`, and the dispatcher owns its -delivery endpoint (`export const POST = tasks.createExecuteHandler()`) and always verifies QStash's -signature against the URL it published to. Tasks are declared once at module scope with -`tasks.define(...)` and attached to each request's server with `tasks.register(server)`. A required -`principal` scopes tasks to their caller (and subscriptions to theirs); handlers get it as -`task.principal`, and an optional `authorize` on `tasks.define` checks the arguments before a task -is stored or queued. - -`@upstash/mcp-toolkit/events` — MCP Events with webhook delivery, as ChatGPT ships it. Typed -`events.define(...)` handles with `emit(payload)`: the payload's values route the event and are what -the required `authorize` is checked against, at subscribe and again before every delivery. -`events/list`, `events/subscribe` and `events/unsubscribe` are registered on your server, with a -signed verification challenge, deterministic subscription ids, expiry and refresh, a configurable -limit of live subscriptions per subscriber (8 by default), SSRF checks on callback URLs, and signing -secrets encrypted at rest. `QStashDelivery` signs each attempt with -Standard Webhooks and lets QStash retry failures (`export const POST = events.createDeliveryHandler()`). - -A handler that returns a tool error (`isError: true`) fails its task without a retry, and -`task_status` shows that error the way the synchronous tool would. The model only ever sees a -failure's `code` and `message`: transport details stay in the store, and dispatch errors are logged. - -The package uses WebCrypto only, so it runs on Node and edge runtimes. - -`@upstash/mcp-toolkit/upstash` holds the Upstash backends for both: `RedisTaskStore`, -`QStashDispatcher`, `WorkflowDispatcher`, `RedisSubscriptionStore` and `QStashDelivery`. -`@upstash/redis`, `@upstash/qstash` and `@upstash/workflow` are regular dependencies. diff --git a/examples/mcp-toolkit-demo/CHANGELOG.md b/examples/mcp-toolkit-demo/CHANGELOG.md new file mode 100644 index 0000000..432fc46 --- /dev/null +++ b/examples/mcp-toolkit-demo/CHANGELOG.md @@ -0,0 +1,8 @@ +# mcp-toolkit-demo + +## 0.1.1 + +### Patch Changes + +- Updated dependencies [5644daa] + - @upstash/mcp-toolkit@0.1.0 diff --git a/examples/mcp-toolkit-demo/package.json b/examples/mcp-toolkit-demo/package.json index 8e57d77..7cd1b33 100644 --- a/examples/mcp-toolkit-demo/package.json +++ b/examples/mcp-toolkit-demo/package.json @@ -1,6 +1,6 @@ { "name": "mcp-toolkit-demo", - "version": "0.1.0", + "version": "0.1.1", "private": true, "scripts": { "dev": "next dev", diff --git a/packages/mcp-toolkit/CHANGELOG.md b/packages/mcp-toolkit/CHANGELOG.md new file mode 100644 index 0000000..a39399c --- /dev/null +++ b/packages/mcp-toolkit/CHANGELOG.md @@ -0,0 +1,37 @@ +# @upstash/mcp-toolkit + +## 0.1.0 + +### Minor Changes + +- 5644daa: Add `@upstash/mcp-toolkit`: durable building blocks for MCP servers on the official TypeScript SDK. + + `@upstash/mcp-toolkit/tasks` — long-running tools. A task tool answers immediately with a task id; + the model polls the shared `task_status` tool for progress and the result, and can stop the task + with `task_cancel`. They are ordinary MCP tools, so they work in every client today. The record + lives in a `TaskStore` and the work runs behind a `TaskDispatcher`, and the dispatcher owns its + delivery endpoint (`export const POST = tasks.createExecuteHandler()`) and always verifies QStash's + signature against the URL it published to. Tasks are declared once at module scope with + `tasks.define(...)` and attached to each request's server with `tasks.register(server)`. A required + `principal` scopes tasks to their caller (and subscriptions to theirs); handlers get it as + `task.principal`, and an optional `authorize` on `tasks.define` checks the arguments before a task + is stored or queued. + + `@upstash/mcp-toolkit/events` — MCP Events with webhook delivery, as ChatGPT ships it. Typed + `events.define(...)` handles with `emit(payload)`: the payload's values route the event and are what + the required `authorize` is checked against, at subscribe and again before every delivery. + `events/list`, `events/subscribe` and `events/unsubscribe` are registered on your server, with a + signed verification challenge, deterministic subscription ids, expiry and refresh, a configurable + limit of live subscriptions per subscriber (8 by default), SSRF checks on callback URLs, and signing + secrets encrypted at rest. `QStashDelivery` signs each attempt with + Standard Webhooks and lets QStash retry failures (`export const POST = events.createDeliveryHandler()`). + + A handler that returns a tool error (`isError: true`) fails its task without a retry, and + `task_status` shows that error the way the synchronous tool would. The model only ever sees a + failure's `code` and `message`: transport details stay in the store, and dispatch errors are logged. + + The package uses WebCrypto only, so it runs on Node and edge runtimes. + + `@upstash/mcp-toolkit/upstash` holds the Upstash backends for both: `RedisTaskStore`, + `QStashDispatcher`, `WorkflowDispatcher`, `RedisSubscriptionStore` and `QStashDelivery`. + `@upstash/redis`, `@upstash/qstash` and `@upstash/workflow` are regular dependencies. diff --git a/packages/mcp-toolkit/package.json b/packages/mcp-toolkit/package.json index 999f935..c4847fc 100644 --- a/packages/mcp-toolkit/package.json +++ b/packages/mcp-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@upstash/mcp-toolkit", - "version": "0.0.0", + "version": "0.1.0", "description": "Durable building blocks for MCP servers on the official TypeScript SDK: long-running tools (tasks) and webhook events, with Upstash Redis, QStash and Workflow backends.", "license": "MIT", "repository": { diff --git a/packages/mcp-toolkit/src/version.ts b/packages/mcp-toolkit/src/version.ts index 5df3807..a05375c 100644 --- a/packages/mcp-toolkit/src/version.ts +++ b/packages/mcp-toolkit/src/version.ts @@ -1,2 +1,2 @@ // Generated by scripts/sync-version.mjs (run by `pnpm ci:version`) — do not edit by hand. -export const VERSION = "0.0.0"; +export const VERSION = "0.1.0";