From ce3378da5549e3ca5f4e9518a27a7df9105c5d27 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 1 May 2026 04:13:08 +0000
Subject: [PATCH 1/5] codegen metadata
---
.stats.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.stats.yml b/.stats.yml
index 8ae82e5..f0950f5 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 57
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-0b411dea232f8dd039e007e441b19f1ba1e868ffb0d649e69a7f7a5054340725.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-82078049e66ce9935b13d50c1c3cd285d2bf5ce771e505522f581d7cc5073bcf.yml
openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052
config_hash: bd2fa008de5444a955c7186113b74955
From 47c3af943377feb7fffc71b87789b358ab858a75 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 1 May 2026 18:18:01 +0000
Subject: [PATCH 2/5] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f0950f5..7ef5605 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 57
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-82078049e66ce9935b13d50c1c3cd285d2bf5ce771e505522f581d7cc5073bcf.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-001f1dd1fc491aaf408943a45e209c218b5fd184fd01a17b351bcad2c3fe5529.yml
openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052
-config_hash: bd2fa008de5444a955c7186113b74955
+config_hash: 6f938d0f7e35ade87ce5236f25f53e2c
From 822bf194eb629ca425d35f1a80032589ed73774f Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Sat, 2 May 2026 07:22:28 +0000
Subject: [PATCH 3/5] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 7ef5605..03a8d91 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 57
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-001f1dd1fc491aaf408943a45e209c218b5fd184fd01a17b351bcad2c3fe5529.yml
-openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-a0f7bbd3d10a35e0bcba6b5a9fb3de10633907542bd0c26dc01fa0a403ccf026.yml
+openapi_spec_hash: 79624b2774b1fa57d050b2ac9b9c6762
config_hash: 6f938d0f7e35ade87ce5236f25f53e2c
From ae9b669a64fddf136e4809818a576c12f85e2ee6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Sun, 3 May 2026 06:12:30 +0000
Subject: [PATCH 4/5] refactor(triggers): align with the MCP Events spec
proposal (breaking) (#2201)
---
.stats.yml | 8 +-
api.md | 40 +---
src/client.ts | 23 --
src/resources/connections/connections.ts | 42 ++--
src/resources/connections/index.ts | 19 +-
src/resources/connections/subscriptions.ts | 132 -----------
src/resources/connections/triggers.ts | 215 ++++++++++--------
src/resources/index.ts | 10 -
src/resources/subscriptions.ts | 167 --------------
.../connections/subscriptions.test.ts | 75 ------
.../connections/triggers.test.ts | 67 +++---
tests/api-resources/subscriptions.test.ts | 62 -----
12 files changed, 175 insertions(+), 685 deletions(-)
delete mode 100644 src/resources/connections/subscriptions.ts
delete mode 100644 src/resources/subscriptions.ts
delete mode 100644 tests/api-resources/connections/subscriptions.test.ts
delete mode 100644 tests/api-resources/subscriptions.test.ts
diff --git a/.stats.yml b/.stats.yml
index 03a8d91..462f1ea 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 57
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-a0f7bbd3d10a35e0bcba6b5a9fb3de10633907542bd0c26dc01fa0a403ccf026.yml
-openapi_spec_hash: 79624b2774b1fa57d050b2ac9b9c6762
-config_hash: 6f938d0f7e35ade87ce5236f25f53e2c
+configured_endpoints: 50
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-103fdd6319cf0037bc9f0faa6fc595c13ee91397edc22c085ba91c7fbfa3dd0b.yml
+openapi_spec_hash: e32081028e9ae6d63fba5aaaf6d9c9e7
+config_hash: f11b7bb2bae11f389798bfecb58745e4
diff --git a/api.md b/api.md
index 8a4efeb..390f242 100644
--- a/api.md
+++ b/api.md
@@ -178,22 +178,6 @@ Methods:
- client.tokens.create({ ...params }) -> CreateTokenResponse
-# Subscriptions
-
-Types:
-
-- CreateSubscriptionRequest
-- CreateSubscriptionResponse
-- Subscription
-- SubscriptionList
-- SubscriptionDeleteResponse
-
-Methods:
-
-- client.subscriptions.create(namespace, { ...params }) -> Subscription
-- client.subscriptions.list(namespace) -> SubscriptionList
-- client.subscriptions.delete(subscriptionID, { ...params }) -> SubscriptionDeleteResponse
-
# Connections
Types:
@@ -226,32 +210,22 @@ Methods:
- client.connections.tools.call(toolPath, { ...params }) -> ToolCallResponse
- client.connections.tools.get(toolPath, { ...params }) -> ToolResponse
-## Subscriptions
-
-Types:
-
-- SubscriptionDeleteResponse
-
-Methods:
-
-- client.connections.subscriptions.create(connectionID, { ...params }) -> Subscription
-- client.connections.subscriptions.list(connectionID, { ...params }) -> SubscriptionList
-- client.connections.subscriptions.delete(subscriptionID, { ...params }) -> SubscriptionDeleteResponse
-
## Triggers
Types:
- CreateTriggerRequest
+- DeleteTriggerRequest
- TriggerDefinition
- TriggerDefinitionList
-- TriggerInstance
-- TriggerDeleteResponse
+- TriggerDelivery
+- TriggerSubscription
+- UnsubscribeDelivery
+- TriggerUnsubscribeResponse
Methods:
-- client.connections.triggers.create(triggerName, { ...params }) -> TriggerInstance
- client.connections.triggers.list(connectionID, { ...params }) -> TriggerDefinitionList
-- client.connections.triggers.delete(triggerID, { ...params }) -> TriggerDeleteResponse
- client.connections.triggers.get(triggerName, { ...params }) -> TriggerDefinition
-- client.connections.triggers.getInstance(triggerID, { ...params }) -> TriggerInstance
+- client.connections.triggers.subscribe(triggerName, { ...params }) -> TriggerSubscription
+- client.connections.triggers.unsubscribe(triggerName, { ...params }) -> TriggerUnsubscribeResponse
diff --git a/src/client.ts b/src/client.ts
index 5898f85..754bab1 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -49,16 +49,6 @@ import {
SkillUploadResponse,
Skills,
} from './resources/skills';
-import {
- CreateSubscriptionRequest,
- CreateSubscriptionResponse,
- Subscription,
- SubscriptionCreateParams,
- SubscriptionDeleteParams,
- SubscriptionDeleteResponse,
- SubscriptionList,
- Subscriptions,
-} from './resources/subscriptions';
import {
Constraint,
CreateTokenRequest,
@@ -848,7 +838,6 @@ export class Smithery {
namespaces: API.Namespaces = new API.Namespaces(this);
organizations: API.Organizations = new API.Organizations(this);
tokens: API.Tokens = new API.Tokens(this);
- subscriptions: API.Subscriptions = new API.Subscriptions(this);
connections: API.Connections = new API.Connections(this);
}
@@ -858,7 +847,6 @@ Smithery.Skills = Skills;
Smithery.Namespaces = Namespaces;
Smithery.Organizations = Organizations;
Smithery.Tokens = Tokens;
-Smithery.Subscriptions = Subscriptions;
Smithery.Connections = Connections;
export declare namespace Smithery {
@@ -937,17 +925,6 @@ export declare namespace Smithery {
type TokenCreateParams as TokenCreateParams,
};
- export {
- Subscriptions as Subscriptions,
- type CreateSubscriptionRequest as CreateSubscriptionRequest,
- type CreateSubscriptionResponse as CreateSubscriptionResponse,
- type Subscription as Subscription,
- type SubscriptionList as SubscriptionList,
- type SubscriptionDeleteResponse as SubscriptionDeleteResponse,
- type SubscriptionCreateParams as SubscriptionCreateParams,
- type SubscriptionDeleteParams as SubscriptionDeleteParams,
- };
-
export {
Connections as Connections,
type Connection as Connection,
diff --git a/src/resources/connections/connections.ts b/src/resources/connections/connections.ts
index 4982085..8b4a5a9 100644
--- a/src/resources/connections/connections.ts
+++ b/src/resources/connections/connections.ts
@@ -1,14 +1,6 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from '../../core/resource';
-import * as SubscriptionsAPI from './subscriptions';
-import {
- SubscriptionCreateParams,
- SubscriptionDeleteParams,
- SubscriptionDeleteResponse,
- SubscriptionListParams,
- Subscriptions,
-} from './subscriptions';
import * as ToolsAPI from './tools';
import {
Tool,
@@ -23,16 +15,18 @@ import {
import * as TriggersAPI from './triggers';
import {
CreateTriggerRequest,
- TriggerCreateParams,
+ DeleteTriggerRequest,
TriggerDefinition,
TriggerDefinitionList,
- TriggerDeleteParams,
- TriggerDeleteResponse,
- TriggerGetInstanceParams,
+ TriggerDelivery,
TriggerGetParams,
- TriggerInstance,
TriggerListParams,
+ TriggerSubscribeParams,
+ TriggerSubscription,
+ TriggerUnsubscribeParams,
+ TriggerUnsubscribeResponse,
Triggers,
+ UnsubscribeDelivery,
} from './triggers';
import { APIPromise } from '../../core/api-promise';
import { RequestOptions } from '../../internal/request-options';
@@ -40,7 +34,6 @@ import { path } from '../../internal/utils/path';
export class Connections extends APIResource {
tools: ToolsAPI.Tools = new ToolsAPI.Tools(this._client);
- subscriptions: SubscriptionsAPI.Subscriptions = new SubscriptionsAPI.Subscriptions(this._client);
triggers: TriggersAPI.Triggers = new TriggersAPI.Triggers(this._client);
/**
@@ -552,7 +545,6 @@ export namespace ConnectionSetParams {
}
Connections.Tools = Tools;
-Connections.Subscriptions = Subscriptions;
Connections.Triggers = Triggers;
export declare namespace Connections {
@@ -579,25 +571,19 @@ export declare namespace Connections {
type ToolGetParams as ToolGetParams,
};
- export {
- Subscriptions as Subscriptions,
- type SubscriptionDeleteResponse as SubscriptionDeleteResponse,
- type SubscriptionCreateParams as SubscriptionCreateParams,
- type SubscriptionListParams as SubscriptionListParams,
- type SubscriptionDeleteParams as SubscriptionDeleteParams,
- };
-
export {
Triggers as Triggers,
type CreateTriggerRequest as CreateTriggerRequest,
+ type DeleteTriggerRequest as DeleteTriggerRequest,
type TriggerDefinition as TriggerDefinition,
type TriggerDefinitionList as TriggerDefinitionList,
- type TriggerInstance as TriggerInstance,
- type TriggerDeleteResponse as TriggerDeleteResponse,
- type TriggerCreateParams as TriggerCreateParams,
+ type TriggerDelivery as TriggerDelivery,
+ type TriggerSubscription as TriggerSubscription,
+ type UnsubscribeDelivery as UnsubscribeDelivery,
+ type TriggerUnsubscribeResponse as TriggerUnsubscribeResponse,
type TriggerListParams as TriggerListParams,
- type TriggerDeleteParams as TriggerDeleteParams,
type TriggerGetParams as TriggerGetParams,
- type TriggerGetInstanceParams as TriggerGetInstanceParams,
+ type TriggerSubscribeParams as TriggerSubscribeParams,
+ type TriggerUnsubscribeParams as TriggerUnsubscribeParams,
};
}
diff --git a/src/resources/connections/index.ts b/src/resources/connections/index.ts
index aefb460..3694b3d 100644
--- a/src/resources/connections/index.ts
+++ b/src/resources/connections/index.ts
@@ -12,13 +12,6 @@ export {
type ConnectionGetParams,
type ConnectionSetParams,
} from './connections';
-export {
- Subscriptions,
- type SubscriptionDeleteResponse,
- type SubscriptionCreateParams,
- type SubscriptionListParams,
- type SubscriptionDeleteParams,
-} from './subscriptions';
export {
Tools,
type Tool,
@@ -32,13 +25,15 @@ export {
export {
Triggers,
type CreateTriggerRequest,
+ type DeleteTriggerRequest,
type TriggerDefinition,
type TriggerDefinitionList,
- type TriggerInstance,
- type TriggerDeleteResponse,
- type TriggerCreateParams,
+ type TriggerDelivery,
+ type TriggerSubscription,
+ type UnsubscribeDelivery,
+ type TriggerUnsubscribeResponse,
type TriggerListParams,
- type TriggerDeleteParams,
type TriggerGetParams,
- type TriggerGetInstanceParams,
+ type TriggerSubscribeParams,
+ type TriggerUnsubscribeParams,
} from './triggers';
diff --git a/src/resources/connections/subscriptions.ts b/src/resources/connections/subscriptions.ts
deleted file mode 100644
index 58dd9b7..0000000
--- a/src/resources/connections/subscriptions.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-import { APIResource } from '../../core/resource';
-import * as SubscriptionsAPI from '../subscriptions';
-import { APIPromise } from '../../core/api-promise';
-import { RequestOptions } from '../../internal/request-options';
-import { path } from '../../internal/utils/path';
-
-export class Subscriptions extends APIResource {
- /**
- * Create a connection-scoped subscription that receives events from one
- * connection.
- *
- * @example
- * ```ts
- * const subscription =
- * await client.connections.subscriptions.create(
- * 'connectionId',
- * {
- * namespace: 'namespace',
- * secret:
- * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- * url: 'https://my-app.example.com/events',
- * },
- * );
- * ```
- */
- create(
- connectionID: string,
- params: SubscriptionCreateParams,
- options?: RequestOptions,
- ): APIPromise {
- const { namespace, ...body } = params;
- return this._client.post(path`/${namespace}/${connectionID}/.subscriptions`, {
- body,
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-
- /**
- * List trigger subscriptions scoped to a single connection.
- *
- * @example
- * ```ts
- * const subscriptionList =
- * await client.connections.subscriptions.list(
- * 'connectionId',
- * { namespace: 'namespace' },
- * );
- * ```
- */
- list(
- connectionID: string,
- params: SubscriptionListParams,
- options?: RequestOptions,
- ): APIPromise {
- const { namespace } = params;
- return this._client.get(path`/${namespace}/${connectionID}/.subscriptions`, {
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-
- /**
- * Delete a connection-scoped trigger subscription.
- *
- * @example
- * ```ts
- * const subscription =
- * await client.connections.subscriptions.delete(
- * 'subscriptionId',
- * {
- * namespace: 'namespace',
- * connectionId: 'connectionId',
- * },
- * );
- * ```
- */
- delete(
- subscriptionID: string,
- params: SubscriptionDeleteParams,
- options?: RequestOptions,
- ): APIPromise {
- const { namespace, connectionId } = params;
- return this._client.delete(path`/${namespace}/${connectionId}/.subscriptions/${subscriptionID}`, {
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-}
-
-export interface SubscriptionDeleteResponse {
- success: true;
-}
-
-export interface SubscriptionCreateParams {
- /**
- * Path param
- */
- namespace: string;
-
- /**
- * Body param: Standard Webhooks signing secret generated and stored by the
- * receiver
- */
- secret: string;
-
- /**
- * Body param: HTTPS webhook destination
- */
- url: string;
-}
-
-export interface SubscriptionListParams {
- namespace: string;
-}
-
-export interface SubscriptionDeleteParams {
- namespace: string;
-
- connectionId: string;
-}
-
-export declare namespace Subscriptions {
- export {
- type SubscriptionDeleteResponse as SubscriptionDeleteResponse,
- type SubscriptionCreateParams as SubscriptionCreateParams,
- type SubscriptionListParams as SubscriptionListParams,
- type SubscriptionDeleteParams as SubscriptionDeleteParams,
- };
-}
diff --git a/src/resources/connections/triggers.ts b/src/resources/connections/triggers.ts
index f179fa2..2ec0605 100644
--- a/src/resources/connections/triggers.ts
+++ b/src/resources/connections/triggers.ts
@@ -6,32 +6,6 @@ import { RequestOptions } from '../../internal/request-options';
import { path } from '../../internal/utils/path';
export class Triggers extends APIResource {
- /**
- * Create a trigger instance for a connection using the trigger's declared params.
- *
- * @example
- * ```ts
- * const triggerInstance =
- * await client.connections.triggers.create('triggerName', {
- * namespace: 'namespace',
- * connectionId: 'connectionId',
- * params: { foo: 'bar' },
- * });
- * ```
- */
- create(
- triggerName: string,
- params: TriggerCreateParams,
- options?: RequestOptions,
- ): APIPromise {
- const { namespace, connectionId, ...body } = params;
- return this._client.post(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, {
- body,
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-
/**
* List trigger types exposed by a connection.
*
@@ -56,79 +30,92 @@ export class Triggers extends APIResource {
}
/**
- * Delete a trigger instance and deregister its upstream webhook.
+ * Get the schema for a single trigger type.
*
* @example
* ```ts
- * const trigger = await client.connections.triggers.delete(
- * 'triggerId',
- * {
+ * const triggerDefinition =
+ * await client.connections.triggers.get('triggerName', {
* namespace: 'namespace',
* connectionId: 'connectionId',
- * triggerName: 'triggerName',
- * },
- * );
+ * });
* ```
*/
- delete(
- triggerID: string,
- params: TriggerDeleteParams,
+ get(
+ triggerName: string,
+ params: TriggerGetParams,
options?: RequestOptions,
- ): APIPromise {
- const { namespace, connectionId, triggerName } = params;
- return this._client.delete(path`/${namespace}/${connectionId}/.triggers/${triggerName}/${triggerID}`, {
+ ): APIPromise {
+ const { namespace, connectionId } = params;
+ return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, {
defaultBaseURL: 'https://smithery.run',
...options,
});
}
/**
- * Get the schema for a single trigger type.
+ * Subscribe to (or refresh) a trigger. Supplying the same (params, delivery.url)
+ * refreshes the TTL and may rotate the secret.
*
* @example
* ```ts
- * const triggerDefinition =
- * await client.connections.triggers.get('triggerName', {
- * namespace: 'namespace',
- * connectionId: 'connectionId',
- * });
+ * const triggerSubscription =
+ * await client.connections.triggers.subscribe(
+ * 'triggerName',
+ * {
+ * namespace: 'namespace',
+ * connectionId: 'connectionId',
+ * delivery: {
+ * secret:
+ * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
+ * url: 'https://my-app.example.com/events',
+ * },
+ * params: { foo: 'bar' },
+ * },
+ * );
* ```
*/
- get(
+ subscribe(
triggerName: string,
- params: TriggerGetParams,
+ params: TriggerSubscribeParams,
options?: RequestOptions,
- ): APIPromise {
- const { namespace, connectionId } = params;
- return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, {
+ ): APIPromise {
+ const { namespace, connectionId, ...body } = params;
+ return this._client.post(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, {
+ body,
defaultBaseURL: 'https://smithery.run',
...options,
});
}
/**
- * Get a specific trigger instance for a connection.
+ * Unsubscribe by subscription key (params + delivery.url). Eager teardown —
+ * subscriptions also expire naturally on TTL.
*
* @example
* ```ts
- * const triggerInstance =
- * await client.connections.triggers.getInstance(
- * 'triggerId',
+ * const response =
+ * await client.connections.triggers.unsubscribe(
+ * 'triggerName',
* {
* namespace: 'namespace',
* connectionId: 'connectionId',
- * triggerName: 'triggerName',
+ * delivery: {
+ * url: 'https://my-app.example.com/events',
+ * },
+ * params: { foo: 'bar' },
* },
* );
* ```
*/
- getInstance(
- triggerID: string,
- params: TriggerGetInstanceParams,
+ unsubscribe(
+ triggerName: string,
+ params: TriggerUnsubscribeParams,
options?: RequestOptions,
- ): APIPromise {
- const { namespace, connectionId, triggerName } = params;
- return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}/${triggerID}`, {
+ ): APIPromise {
+ const { namespace, connectionId, ...body } = params;
+ return this._client.delete(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, {
+ body,
defaultBaseURL: 'https://smithery.run',
...options,
});
@@ -136,12 +123,23 @@ export class Triggers extends APIResource {
}
export interface CreateTriggerRequest {
+ delivery: TriggerDelivery;
+
/**
* Trigger-specific parameters defined by the trigger inputSchema
*/
params: { [key: string]: unknown };
}
+export interface DeleteTriggerRequest {
+ delivery: UnsubscribeDelivery;
+
+ /**
+ * The same params used at subscribe time. Forms part of the subscription key.
+ */
+ params: { [key: string]: unknown };
+}
+
export interface TriggerDefinition {
/**
* Supported delivery modes
@@ -168,38 +166,55 @@ export interface TriggerDefinition {
export type TriggerDefinitionList = Array;
-export interface TriggerInstance {
+export interface TriggerDelivery {
/**
- * Stable trigger instance id generated by Smithery
+ * Standard Webhooks signing secret (whsec\_). The
+ * upstream MCP server signs each delivery with this.
*/
- id: string;
+ secret: string;
/**
- * Connection id the trigger belongs to
+ * HTTPS webhook destination where the upstream MCP server delivers events.
*/
- connection_id: string;
+ url: string;
+}
+export interface TriggerSubscription {
/**
- * ISO 8601 timestamp
+ * Stable subscription id derived from (namespace, connection, name, params,
+ * delivery.url). Used by the receiver to route via X-MCP-Subscription-Id.
*/
- created_at: string;
+ id: string;
/**
- * Trigger name
+ * ISO 8601 timestamp at which the subscription expires unless refreshed.
*/
- name: string;
+ refreshBefore: string;
+}
+export interface UnsubscribeDelivery {
/**
- * Trigger instance parameters
+ * The delivery URL of the subscription to remove. Together with name+params it
+ * forms the subscription key.
*/
- params: { [key: string]: unknown };
+ url: string;
}
-export interface TriggerDeleteResponse {
+export interface TriggerUnsubscribeResponse {
success: true;
}
-export interface TriggerCreateParams {
+export interface TriggerListParams {
+ namespace: string;
+}
+
+export interface TriggerGetParams {
+ namespace: string;
+
+ connectionId: string;
+}
+
+export interface TriggerSubscribeParams {
/**
* Path param
*/
@@ -210,49 +225,53 @@ export interface TriggerCreateParams {
*/
connectionId: string;
+ /**
+ * Body param
+ */
+ delivery: TriggerDelivery;
+
/**
* Body param: Trigger-specific parameters defined by the trigger inputSchema
*/
params: { [key: string]: unknown };
}
-export interface TriggerListParams {
- namespace: string;
-}
-
-export interface TriggerDeleteParams {
- namespace: string;
-
- connectionId: string;
-
- triggerName: string;
-}
-
-export interface TriggerGetParams {
+export interface TriggerUnsubscribeParams {
+ /**
+ * Path param
+ */
namespace: string;
+ /**
+ * Path param
+ */
connectionId: string;
-}
-
-export interface TriggerGetInstanceParams {
- namespace: string;
- connectionId: string;
+ /**
+ * Body param
+ */
+ delivery: UnsubscribeDelivery;
- triggerName: string;
+ /**
+ * Body param: The same params used at subscribe time. Forms part of the
+ * subscription key.
+ */
+ params: { [key: string]: unknown };
}
export declare namespace Triggers {
export {
type CreateTriggerRequest as CreateTriggerRequest,
+ type DeleteTriggerRequest as DeleteTriggerRequest,
type TriggerDefinition as TriggerDefinition,
type TriggerDefinitionList as TriggerDefinitionList,
- type TriggerInstance as TriggerInstance,
- type TriggerDeleteResponse as TriggerDeleteResponse,
- type TriggerCreateParams as TriggerCreateParams,
+ type TriggerDelivery as TriggerDelivery,
+ type TriggerSubscription as TriggerSubscription,
+ type UnsubscribeDelivery as UnsubscribeDelivery,
+ type TriggerUnsubscribeResponse as TriggerUnsubscribeResponse,
type TriggerListParams as TriggerListParams,
- type TriggerDeleteParams as TriggerDeleteParams,
type TriggerGetParams as TriggerGetParams,
- type TriggerGetInstanceParams as TriggerGetInstanceParams,
+ type TriggerSubscribeParams as TriggerSubscribeParams,
+ type TriggerUnsubscribeParams as TriggerUnsubscribeParams,
};
}
diff --git a/src/resources/index.ts b/src/resources/index.ts
index 87c4092..74c53ea 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -57,16 +57,6 @@ export {
type SkillUploadParams,
type SkillListResponsesSkillsPage,
} from './skills';
-export {
- Subscriptions,
- type CreateSubscriptionRequest,
- type CreateSubscriptionResponse,
- type Subscription,
- type SubscriptionList,
- type SubscriptionDeleteResponse,
- type SubscriptionCreateParams,
- type SubscriptionDeleteParams,
-} from './subscriptions';
export {
Tokens,
type Constraint,
diff --git a/src/resources/subscriptions.ts b/src/resources/subscriptions.ts
deleted file mode 100644
index 4733ec4..0000000
--- a/src/resources/subscriptions.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-import { APIResource } from '../core/resource';
-import { APIPromise } from '../core/api-promise';
-import { RequestOptions } from '../internal/request-options';
-import { path } from '../internal/utils/path';
-
-export class Subscriptions extends APIResource {
- /**
- * Create a namespace-scoped subscription that receives events from every
- * connection in the namespace.
- *
- * @example
- * ```ts
- * const subscription = await client.subscriptions.create(
- * 'namespace',
- * {
- * secret:
- * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- * url: 'https://my-app.example.com/events',
- * },
- * );
- * ```
- */
- create(
- namespace: string,
- body: SubscriptionCreateParams,
- options?: RequestOptions,
- ): APIPromise {
- return this._client.post(path`/${namespace}/.subscriptions`, {
- body,
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-
- /**
- * List namespace-scoped trigger subscriptions for all connections in the
- * namespace.
- *
- * @example
- * ```ts
- * const subscriptionList = await client.subscriptions.list(
- * 'namespace',
- * );
- * ```
- */
- list(namespace: string, options?: RequestOptions): APIPromise {
- return this._client.get(path`/${namespace}/.subscriptions`, {
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-
- /**
- * Delete a namespace-scoped trigger subscription.
- *
- * @example
- * ```ts
- * const subscription = await client.subscriptions.delete(
- * 'subscriptionId',
- * { namespace: 'namespace' },
- * );
- * ```
- */
- delete(
- subscriptionID: string,
- params: SubscriptionDeleteParams,
- options?: RequestOptions,
- ): APIPromise {
- const { namespace } = params;
- return this._client.delete(path`/${namespace}/.subscriptions/${subscriptionID}`, {
- defaultBaseURL: 'https://smithery.run',
- ...options,
- });
- }
-}
-
-export interface CreateSubscriptionRequest {
- /**
- * Standard Webhooks signing secret generated and stored by the receiver
- */
- secret: string;
-
- /**
- * HTTPS webhook destination
- */
- url: string;
-}
-
-export interface CreateSubscriptionResponse {
- /**
- * Stable subscription id generated by Smithery
- */
- id: string;
-
- /**
- * Connection scope. Null for namespace-wide subscriptions.
- */
- connection_id: string | null;
-
- /**
- * ISO 8601 timestamp
- */
- created_at: string;
-
- /**
- * Destination URL for webhook deliveries
- */
- url: string;
-}
-
-export interface Subscription {
- /**
- * Stable subscription id generated by Smithery
- */
- id: string;
-
- /**
- * Connection scope. Null for namespace-wide subscriptions.
- */
- connection_id: string | null;
-
- /**
- * ISO 8601 timestamp
- */
- created_at: string;
-
- /**
- * Destination URL for webhook deliveries
- */
- url: string;
-}
-
-export type SubscriptionList = Array;
-
-export interface SubscriptionDeleteResponse {
- success: true;
-}
-
-export interface SubscriptionCreateParams {
- /**
- * Standard Webhooks signing secret generated and stored by the receiver
- */
- secret: string;
-
- /**
- * HTTPS webhook destination
- */
- url: string;
-}
-
-export interface SubscriptionDeleteParams {
- namespace: string;
-}
-
-export declare namespace Subscriptions {
- export {
- type CreateSubscriptionRequest as CreateSubscriptionRequest,
- type CreateSubscriptionResponse as CreateSubscriptionResponse,
- type Subscription as Subscription,
- type SubscriptionList as SubscriptionList,
- type SubscriptionDeleteResponse as SubscriptionDeleteResponse,
- type SubscriptionCreateParams as SubscriptionCreateParams,
- type SubscriptionDeleteParams as SubscriptionDeleteParams,
- };
-}
diff --git a/tests/api-resources/connections/subscriptions.test.ts b/tests/api-resources/connections/subscriptions.test.ts
deleted file mode 100644
index d14c9fe..0000000
--- a/tests/api-resources/connections/subscriptions.test.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-import Smithery from '@smithery/api';
-
-const client = new Smithery({
- apiKey: 'My API Key',
- baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
-});
-
-describe('resource subscriptions', () => {
- // Mock server tests are disabled
- test.skip('create: only required params', async () => {
- const responsePromise = client.connections.subscriptions.create('connectionId', {
- namespace: 'namespace',
- secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- url: 'https://my-app.example.com/events',
- });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('create: required and optional params', async () => {
- const response = await client.connections.subscriptions.create('connectionId', {
- namespace: 'namespace',
- secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- url: 'https://my-app.example.com/events',
- });
- });
-
- // Mock server tests are disabled
- test.skip('list: only required params', async () => {
- const responsePromise = client.connections.subscriptions.list('connectionId', { namespace: 'namespace' });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('list: required and optional params', async () => {
- const response = await client.connections.subscriptions.list('connectionId', { namespace: 'namespace' });
- });
-
- // Mock server tests are disabled
- test.skip('delete: only required params', async () => {
- const responsePromise = client.connections.subscriptions.delete('subscriptionId', {
- namespace: 'namespace',
- connectionId: 'connectionId',
- });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('delete: required and optional params', async () => {
- const response = await client.connections.subscriptions.delete('subscriptionId', {
- namespace: 'namespace',
- connectionId: 'connectionId',
- });
- });
-});
diff --git a/tests/api-resources/connections/triggers.test.ts b/tests/api-resources/connections/triggers.test.ts
index d5e2097..fd6a961 100644
--- a/tests/api-resources/connections/triggers.test.ts
+++ b/tests/api-resources/connections/triggers.test.ts
@@ -8,31 +8,6 @@ const client = new Smithery({
});
describe('resource triggers', () => {
- // Mock server tests are disabled
- test.skip('create: only required params', async () => {
- const responsePromise = client.connections.triggers.create('triggerName', {
- namespace: 'namespace',
- connectionId: 'connectionId',
- params: { foo: 'bar' },
- });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('create: required and optional params', async () => {
- const response = await client.connections.triggers.create('triggerName', {
- namespace: 'namespace',
- connectionId: 'connectionId',
- params: { foo: 'bar' },
- });
- });
-
// Mock server tests are disabled
test.skip('list: only required params', async () => {
const responsePromise = client.connections.triggers.list('connectionId', { namespace: 'namespace' });
@@ -51,11 +26,10 @@ describe('resource triggers', () => {
});
// Mock server tests are disabled
- test.skip('delete: only required params', async () => {
- const responsePromise = client.connections.triggers.delete('triggerId', {
+ test.skip('get: only required params', async () => {
+ const responsePromise = client.connections.triggers.get('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
- triggerName: 'triggerName',
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
@@ -67,19 +41,23 @@ describe('resource triggers', () => {
});
// Mock server tests are disabled
- test.skip('delete: required and optional params', async () => {
- const response = await client.connections.triggers.delete('triggerId', {
+ test.skip('get: required and optional params', async () => {
+ const response = await client.connections.triggers.get('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
- triggerName: 'triggerName',
});
});
// Mock server tests are disabled
- test.skip('get: only required params', async () => {
- const responsePromise = client.connections.triggers.get('triggerName', {
+ test.skip('subscribe: only required params', async () => {
+ const responsePromise = client.connections.triggers.subscribe('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
+ delivery: {
+ secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
+ url: 'https://my-app.example.com/events',
+ },
+ params: { foo: 'bar' },
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
@@ -91,19 +69,25 @@ describe('resource triggers', () => {
});
// Mock server tests are disabled
- test.skip('get: required and optional params', async () => {
- const response = await client.connections.triggers.get('triggerName', {
+ test.skip('subscribe: required and optional params', async () => {
+ const response = await client.connections.triggers.subscribe('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
+ delivery: {
+ secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
+ url: 'https://my-app.example.com/events',
+ },
+ params: { foo: 'bar' },
});
});
// Mock server tests are disabled
- test.skip('getInstance: only required params', async () => {
- const responsePromise = client.connections.triggers.getInstance('triggerId', {
+ test.skip('unsubscribe: only required params', async () => {
+ const responsePromise = client.connections.triggers.unsubscribe('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
- triggerName: 'triggerName',
+ delivery: { url: 'https://my-app.example.com/events' },
+ params: { foo: 'bar' },
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
@@ -115,11 +99,12 @@ describe('resource triggers', () => {
});
// Mock server tests are disabled
- test.skip('getInstance: required and optional params', async () => {
- const response = await client.connections.triggers.getInstance('triggerId', {
+ test.skip('unsubscribe: required and optional params', async () => {
+ const response = await client.connections.triggers.unsubscribe('triggerName', {
namespace: 'namespace',
connectionId: 'connectionId',
- triggerName: 'triggerName',
+ delivery: { url: 'https://my-app.example.com/events' },
+ params: { foo: 'bar' },
});
});
});
diff --git a/tests/api-resources/subscriptions.test.ts b/tests/api-resources/subscriptions.test.ts
deleted file mode 100644
index d2487ca..0000000
--- a/tests/api-resources/subscriptions.test.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-import Smithery from '@smithery/api';
-
-const client = new Smithery({
- apiKey: 'My API Key',
- baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
-});
-
-describe('resource subscriptions', () => {
- // Mock server tests are disabled
- test.skip('create: only required params', async () => {
- const responsePromise = client.subscriptions.create('namespace', {
- secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- url: 'https://my-app.example.com/events',
- });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('create: required and optional params', async () => {
- const response = await client.subscriptions.create('namespace', {
- secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=',
- url: 'https://my-app.example.com/events',
- });
- });
-
- // Mock server tests are disabled
- test.skip('list', async () => {
- const responsePromise = client.subscriptions.list('namespace');
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('delete: only required params', async () => {
- const responsePromise = client.subscriptions.delete('subscriptionId', { namespace: 'namespace' });
- const rawResponse = await responsePromise.asResponse();
- expect(rawResponse).toBeInstanceOf(Response);
- const response = await responsePromise;
- expect(response).not.toBeInstanceOf(Response);
- const dataAndResponse = await responsePromise.withResponse();
- expect(dataAndResponse.data).toBe(response);
- expect(dataAndResponse.response).toBe(rawResponse);
- });
-
- // Mock server tests are disabled
- test.skip('delete: required and optional params', async () => {
- const response = await client.subscriptions.delete('subscriptionId', { namespace: 'namespace' });
- });
-});
From c58fb33f8b38131350ef1aab605f889912329212 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Sun, 3 May 2026 06:12:49 +0000
Subject: [PATCH 5/5] release: 0.64.2
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
package-lock.json | 4 ++--
package.json | 2 +-
src/version.ts | 2 +-
5 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index ca03ce2..957c388 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.64.1"
+ ".": "0.64.2"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f983466..1109c3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 0.64.2 (2026-05-03)
+
+Full Changelog: [v0.64.1...v0.64.2](https://github.com/smithery-ai/typescript-api/compare/v0.64.1...v0.64.2)
+
+### Refactors
+
+* **triggers:** align with the MCP Events spec proposal (breaking) ([#2201](https://github.com/smithery-ai/typescript-api/issues/2201)) ([ae9b669](https://github.com/smithery-ai/typescript-api/commit/ae9b669a64fddf136e4809818a576c12f85e2ee6))
+
## 0.64.1 (2026-04-30)
Full Changelog: [v0.64.0...v0.64.1](https://github.com/smithery-ai/typescript-api/compare/v0.64.0...v0.64.1)
diff --git a/package-lock.json b/package-lock.json
index ca4e9bb..05b3a43 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@smithery/api",
- "version": "0.64.1",
+ "version": "0.64.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@smithery/api",
- "version": "0.64.1",
+ "version": "0.64.2",
"license": "Apache-2.0",
"devDependencies": {
"@arethetypeswrong/cli": "^0.17.0",
diff --git a/package.json b/package.json
index 53e8537..df819b1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@smithery/api",
- "version": "0.64.1",
+ "version": "0.64.2",
"description": "The official TypeScript library for the Smithery API",
"author": "Smithery ",
"types": "dist/index.d.ts",
diff --git a/src/version.ts b/src/version.ts
index 336f807..8bea9d7 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.64.1'; // x-release-please-version
+export const VERSION = '0.64.2'; // x-release-please-version