@secondlayer/mcp 7.4.1 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -182,7 +182,8 @@ var PRODUCT_BLURBS = {
182
182
  streams: "raw chain event firehose — cursor-paginated reads, tip/canonical/reorg checks, bulk parquet dumps",
183
183
  contracts: "trait-based contract discovery and ABIs",
184
184
  subgraphs: "author/scaffold/deploy/query custom indexes",
185
- subscriptions: "webhook delivery on subgraph rows or raw chain events",
185
+ webhooks: "a signed POST to a URL you run, on subgraph rows or raw chain events",
186
+ subscriptions: "a signed POST to a URL you run, on subgraph rows or raw chain events",
186
187
  account: "identity and self-provisioned API keys",
187
188
  codegen: "ORM schemas for the tables you read",
188
189
  instance: "decoder health and empty-index diagnosis",
@@ -195,6 +196,7 @@ var PRODUCT_ORDER = [
195
196
  "streams",
196
197
  "contracts",
197
198
  "subgraphs",
199
+ "webhooks",
198
200
  "subscriptions",
199
201
  "account",
200
202
  "codegen",
@@ -251,7 +253,8 @@ async function buildContext(deps = { clientProvider: getClient }) {
251
253
  streamsTip: orNull(snap?.streamsTip),
252
254
  indexTip: orNull(snap?.indexTip),
253
255
  subgraphs: snap?.subgraphs.value ? snap.subgraphs.value.map(formatSubgraphSummary) : orNull(snap?.subgraphs),
254
- subscriptions: orNull(snap?.subscriptions),
256
+ webhooks: orNull(snap?.webhooks),
257
+ subscriptions: orNull(snap?.webhooks),
255
258
  activeOperations: orNull(snap?.activeOperations),
256
259
  instance: instance2
257
260
  },
@@ -262,7 +265,7 @@ async function buildContext(deps = { clientProvider: getClient }) {
262
265
  }
263
266
  function registerResources(server) {
264
267
  server.resource("context", "secondlayer://context", {
265
- description: "Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first."
268
+ description: "Live agent context — what exists (your subgraphs, webhooks, account), what you can do, and read-auth tiers. Read this first."
266
269
  }, async () => ({
267
270
  contents: [
268
271
  {
@@ -307,7 +310,7 @@ function registerResources(server) {
307
310
  ]
308
311
  }));
309
312
  server.resource("chain-triggers", "secondlayer://chain-triggers", {
310
- description: "Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers)."
313
+ description: "Chain-webhook trigger types and the filter fields each accepts (for webhooks_create triggers)."
311
314
  }, async () => ({
312
315
  contents: [
313
316
  {
@@ -1069,22 +1072,22 @@ function registerSubgraphTools(server, clientProvider = getClient) {
1069
1072
  });
1070
1073
  }
1071
1074
 
1072
- // src/tools/subscriptions.ts
1075
+ // src/tools/webhooks.ts
1073
1076
  import { CHAIN_TRIGGER_TYPES } from "@secondlayer/shared";
1074
1077
  import { z as z10 } from "zod";
1075
- function registerSubscriptionTools(server, clientProvider = getClient) {
1076
- defineTool(server, "subscriptions_list", "List all subscriptions for the current account. Returns summary fields (no secrets).", {}, async () => {
1077
- const { data } = await clientProvider().subscriptions.list();
1078
+ function registerWebhookTools(server, clientProvider = getClient) {
1079
+ defineTool(server, "webhooks_list", "List all webhooks for the current account. Returns summary fields (no secrets).", {}, async () => {
1080
+ const { data } = await clientProvider().webhooks.list();
1078
1081
  return jsonResponse(data);
1079
1082
  });
1080
- defineTool(server, "subscriptions_get", "Get full detail for a subscription (filter, auth, retry config, circuit state).", { id: z10.string().describe("Subscription id") }, async ({ id }) => {
1081
- const detail = await clientProvider().subscriptions.get(id);
1083
+ defineTool(server, "webhooks_get", "Get full detail for a webhook (filter, auth, retry config, circuit state).", { id: z10.string().describe("Webhook id") }, async ({ id }) => {
1084
+ const detail = await clientProvider().webhooks.get(id);
1082
1085
  return jsonResponse(detail);
1083
1086
  });
1084
- defineTool(server, "subscriptions_create", "Create a subscription. Two kinds (mutually exclusive): a SUBGRAPH subscription fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN subscription fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.", {
1087
+ defineTool(server, "webhooks_create", "Create a webhook. Two kinds (mutually exclusive): a SUBGRAPH webhook fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN webhook fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.", {
1085
1088
  name: z10.string().describe("Human-readable name, unique per account"),
1086
- subgraphName: z10.string().optional().describe("Subgraph to subscribe to (subgraph subscription)"),
1087
- tableName: z10.string().optional().describe("Table within the subgraph (subgraph subscription)"),
1089
+ subgraphName: z10.string().optional().describe("Subgraph to subscribe to (subgraph webhook)"),
1090
+ tableName: z10.string().optional().describe("Table within the subgraph (subgraph webhook)"),
1088
1091
  triggers: z10.array(z10.object({
1089
1092
  type: z10.enum(CHAIN_TRIGGER_TYPES),
1090
1093
  contractId: z10.string().optional(),
@@ -1100,7 +1103,7 @@ function registerSubscriptionTools(server, clientProvider = getClient) {
1100
1103
  trait: z10.string().optional(),
1101
1104
  minAmount: z10.union([z10.string(), z10.number()]).optional(),
1102
1105
  maxAmount: z10.union([z10.string(), z10.number()]).optional()
1103
- })).optional().describe("Chain triggers (chain subscription) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill."),
1106
+ })).optional().describe("Chain triggers (chain webhook) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill."),
1104
1107
  url: z10.string().describe("Webhook URL"),
1105
1108
  format: z10.enum([
1106
1109
  "standard-webhooks",
@@ -1114,12 +1117,12 @@ function registerSubscriptionTools(server, clientProvider = getClient) {
1114
1117
  filter: z10.record(z10.string(), z10.unknown()).optional().describe('Scalar filter DSL, e.g. {"amount": {"gte": 100}, "sender": "SP..."}'),
1115
1118
  authConfig: z10.record(z10.string(), z10.unknown()).optional().describe('Receiver auth sent with each delivery, e.g. {"type": "bearer", "token": "..."}')
1116
1119
  }, async (input) => {
1117
- const res = await clientProvider().subscriptions.create(input);
1120
+ const res = await clientProvider().webhooks.create(input);
1118
1121
  return jsonResponse(res);
1119
1122
  });
1120
- defineTool(server, "subscriptions_update", "Patch a subscription (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).", {
1123
+ defineTool(server, "webhooks_update", "Patch a webhook (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).", {
1121
1124
  id: z10.string(),
1122
- name: z10.string().optional().describe("Rename the subscription"),
1125
+ name: z10.string().optional().describe("Rename the webhook"),
1123
1126
  url: z10.string().optional(),
1124
1127
  filter: z10.record(z10.string(), z10.unknown()).optional(),
1125
1128
  authConfig: z10.record(z10.string(), z10.unknown()).optional().describe("Receiver auth sent with each delivery (bearer/etc.)"),
@@ -1136,33 +1139,129 @@ function registerSubscriptionTools(server, clientProvider = getClient) {
1136
1139
  timeoutMs: z10.number().int().min(100).optional(),
1137
1140
  concurrency: z10.number().int().min(1).optional()
1138
1141
  }, async ({ id, ...patch }) => {
1139
- const res = await clientProvider().subscriptions.update(id, patch);
1142
+ const res = await clientProvider().webhooks.update(id, patch);
1140
1143
  return jsonResponse(res);
1141
1144
  });
1142
- defineTool(server, "subscriptions_delete", "Delete a subscription. Pending outbox rows are cascade-deleted.", { id: z10.string() }, async ({ id }) => {
1143
- const res = await clientProvider().subscriptions.delete(id);
1145
+ defineTool(server, "webhooks_delete", "Delete a webhook. Pending outbox rows are cascade-deleted.", { id: z10.string() }, async ({ id }) => {
1146
+ const res = await clientProvider().webhooks.delete(id);
1144
1147
  return jsonResponse(res);
1145
1148
  });
1146
- defineTool(server, "subscriptions_test", "Send a one-off test webhook to a subscription's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.", { id: z10.string().describe("Subscription id") }, async ({ id }) => {
1147
- const res = await clientProvider().subscriptions.test(id);
1149
+ defineTool(server, "webhooks_test", "Send a one-off test webhook to a webhook's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.", { id: z10.string().describe("Webhook id") }, async ({ id }) => {
1150
+ const res = await clientProvider().webhooks.test(id);
1148
1151
  return jsonResponse(res);
1149
1152
  });
1150
- defineTool(server, "subscriptions_pause", "Pause a subscription: stops delivery attempts and stops queueing new ones. Nothing is deleted — resume picks the subscription back up from the tip. Verify with subscriptions_get (status).", { id: z10.string().describe("Subscription id") }, async ({ id }) => jsonResponse(await clientProvider().subscriptions.pause(id)));
1151
- defineTool(server, "subscriptions_resume", "Resume a paused subscription (also clears a tripped circuit breaker). Deliveries restart from the current tip — use subscriptions_replay for the blocks missed while paused. Verify with subscriptions_get (status).", { id: z10.string().describe("Subscription id") }, async ({ id }) => jsonResponse(await clientProvider().subscriptions.resume(id)));
1152
- defineTool(server, "subscriptions_rotate_secret", "Rotate a subscription's webhook signing secret. Returns the NEW `signingSecret` ONCE — forward it to the user; deliveries signed with the old secret stop verifying as soon as this returns, so the receiver must be updated.", { id: z10.string().describe("Subscription id") }, async ({ id }) => jsonResponse(await clientProvider().subscriptions.rotateSecret(id)));
1153
- defineTool(server, "subscriptions_deliveries", "List recent delivery attempts for a subscription — status code, attempt count, error, duration, timestamps. THIS IS THE VERIFY CALL: after subscriptions_create, subscriptions_test, or subscriptions_replay, read it to confirm the webhook actually landed (and to see the receiver's response when it didn't) instead of trusting the enqueue result.", { id: z10.string().describe("Subscription id") }, async ({ id }) => jsonResponse(await clientProvider().subscriptions.deliveries(id)));
1154
- defineTool(server, "subscriptions_dead", "List a subscription's dead-letter queue — deliveries that exhausted their retries, with the outbox id, payload, and last error. Diagnose the receiver first (subscriptions_get for the URL/auth, subscriptions_test for a live probe), then requeue rows with subscriptions_requeue.", { id: z10.string().describe("Subscription id") }, async ({ id }) => jsonResponse(await clientProvider().subscriptions.dead(id)));
1155
- defineTool(server, "subscriptions_requeue", "Requeue ONE dead-lettered delivery for another attempt, by its outbox id from subscriptions_dead. Fix the receiver first — a requeue against a still-broken endpoint just dies again. Verify with subscriptions_deliveries.", {
1156
- id: z10.string().describe("Subscription id"),
1157
- outboxId: z10.string().describe("Outbox id of the dead delivery (from subscriptions_dead)")
1158
- }, async ({ id, outboxId }) => jsonResponse(await clientProvider().subscriptions.requeue(id, outboxId)));
1159
- defineTool(server, "subscriptions_replay", "Replay a block range for a subscription. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.", {
1153
+ defineTool(server, "webhooks_pause", "Pause a webhook: stops delivery attempts and stops queueing new ones. Nothing is deleted — resume picks the webhook back up from the tip. Verify with webhooks_get (status).", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.pause(id)));
1154
+ defineTool(server, "webhooks_resume", "Resume a paused webhook (also clears a tripped circuit breaker). Deliveries restart from the current tip — use webhooks_replay for the blocks missed while paused. Verify with webhooks_get (status).", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.resume(id)));
1155
+ defineTool(server, "webhooks_rotate_secret", "Rotate a webhook's signing secret. Returns the NEW `signingSecret` ONCE — forward it to the user; deliveries signed with the old secret stop verifying as soon as this returns, so the receiver must be updated.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.rotateSecret(id)));
1156
+ defineTool(server, "webhooks_deliveries", "List recent delivery attempts for a webhook — status code, attempt count, error, duration, timestamps. THIS IS THE VERIFY CALL: after webhooks_create, webhooks_test, or webhooks_replay, read it to confirm the webhook actually landed (and to see the receiver's response when it didn't) instead of trusting the enqueue result.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.deliveries(id)));
1157
+ defineTool(server, "webhooks_dead", "List a webhook's dead-letter queue — deliveries that exhausted their retries, with the outbox id, payload, and last error. Diagnose the receiver first (webhooks_get for the URL/auth, webhooks_test for a live probe), then requeue rows with webhooks_requeue.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.dead(id)));
1158
+ defineTool(server, "webhooks_requeue", "Requeue ONE dead-lettered delivery for another attempt, by its outbox id from webhooks_dead. Fix the receiver first — a requeue against a still-broken endpoint just dies again. Verify with webhooks_deliveries.", {
1159
+ id: z10.string().describe("Webhook id"),
1160
+ outboxId: z10.string().describe("Outbox id of the dead delivery (from webhooks_dead)")
1161
+ }, async ({ id, outboxId }) => jsonResponse(await clientProvider().webhooks.requeue(id, outboxId)));
1162
+ defineTool(server, "webhooks_replay", "Replay a block range for a webhook. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.", {
1160
1163
  id: z10.string(),
1161
1164
  fromBlock: z10.number().int().nonnegative(),
1162
1165
  toBlock: z10.number().int().nonnegative(),
1163
1166
  force: z10.string().optional().describe("Idempotency suffix to force a duplicate replay of the range")
1164
1167
  }, async ({ id, fromBlock, toBlock, force }) => {
1165
- const res = await clientProvider().subscriptions.replay(id, {
1168
+ const res = await clientProvider().webhooks.replay(id, {
1169
+ fromBlock,
1170
+ toBlock,
1171
+ ...force !== undefined ? { force } : {}
1172
+ });
1173
+ return jsonResponse(res);
1174
+ });
1175
+ defineTool(server, "subscriptions_list", "Deprecated alias of webhooks_list. Removed next minor. List all webhooks for the current account. Returns summary fields (no secrets).", {}, async () => {
1176
+ const { data } = await clientProvider().webhooks.list();
1177
+ return jsonResponse(data);
1178
+ });
1179
+ defineTool(server, "subscriptions_get", "Deprecated alias of webhooks_get. Removed next minor. Get full detail for a webhook (filter, auth, retry config, circuit state).", { id: z10.string().describe("Webhook id") }, async ({ id }) => {
1180
+ const detail = await clientProvider().webhooks.get(id);
1181
+ return jsonResponse(detail);
1182
+ });
1183
+ defineTool(server, "subscriptions_create", "Deprecated alias of webhooks_create. Removed next minor. Create a webhook. Two kinds (mutually exclusive): a SUBGRAPH webhook fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN webhook fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.", {
1184
+ name: z10.string().describe("Human-readable name, unique per account"),
1185
+ subgraphName: z10.string().optional().describe("Subgraph to subscribe to (subgraph webhook)"),
1186
+ tableName: z10.string().optional().describe("Table within the subgraph (subgraph webhook)"),
1187
+ triggers: z10.array(z10.object({
1188
+ type: z10.enum(CHAIN_TRIGGER_TYPES),
1189
+ contractId: z10.string().optional(),
1190
+ functionName: z10.string().optional(),
1191
+ caller: z10.string().optional(),
1192
+ sender: z10.string().optional(),
1193
+ recipient: z10.string().optional(),
1194
+ assetIdentifier: z10.string().optional(),
1195
+ deployer: z10.string().optional(),
1196
+ contractName: z10.string().optional(),
1197
+ topic: z10.string().optional(),
1198
+ lockedAddress: z10.string().optional(),
1199
+ trait: z10.string().optional(),
1200
+ minAmount: z10.union([z10.string(), z10.number()]).optional(),
1201
+ maxAmount: z10.union([z10.string(), z10.number()]).optional()
1202
+ })).optional().describe("Chain triggers (chain webhook) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill."),
1203
+ url: z10.string().describe("Webhook URL"),
1204
+ format: z10.enum([
1205
+ "standard-webhooks",
1206
+ "inngest",
1207
+ "trigger",
1208
+ "cloudflare",
1209
+ "cloudevents",
1210
+ "raw"
1211
+ ]).optional().describe("Wire format (default standard-webhooks)"),
1212
+ runtime: z10.enum(["inngest", "trigger", "cloudflare", "node"]).optional().describe("Receiver runtime label (display only)"),
1213
+ filter: z10.record(z10.string(), z10.unknown()).optional().describe('Scalar filter DSL, e.g. {"amount": {"gte": 100}, "sender": "SP..."}'),
1214
+ authConfig: z10.record(z10.string(), z10.unknown()).optional().describe('Receiver auth sent with each delivery, e.g. {"type": "bearer", "token": "..."}')
1215
+ }, async (input) => {
1216
+ const res = await clientProvider().webhooks.create(input);
1217
+ return jsonResponse(res);
1218
+ });
1219
+ defineTool(server, "subscriptions_update", "Deprecated alias of webhooks_update. Removed next minor. Patch a webhook (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).", {
1220
+ id: z10.string(),
1221
+ name: z10.string().optional().describe("Rename the webhook"),
1222
+ url: z10.string().optional(),
1223
+ filter: z10.record(z10.string(), z10.unknown()).optional(),
1224
+ authConfig: z10.record(z10.string(), z10.unknown()).optional().describe("Receiver auth sent with each delivery (bearer/etc.)"),
1225
+ format: z10.enum([
1226
+ "standard-webhooks",
1227
+ "inngest",
1228
+ "trigger",
1229
+ "cloudflare",
1230
+ "cloudevents",
1231
+ "raw"
1232
+ ]).optional(),
1233
+ runtime: z10.enum(["inngest", "trigger", "cloudflare", "node"]).nullable().optional(),
1234
+ maxRetries: z10.number().int().min(0).optional(),
1235
+ timeoutMs: z10.number().int().min(100).optional(),
1236
+ concurrency: z10.number().int().min(1).optional()
1237
+ }, async ({ id, ...patch }) => {
1238
+ const res = await clientProvider().webhooks.update(id, patch);
1239
+ return jsonResponse(res);
1240
+ });
1241
+ defineTool(server, "subscriptions_delete", "Deprecated alias of webhooks_delete. Removed next minor. Delete a webhook. Pending outbox rows are cascade-deleted.", { id: z10.string() }, async ({ id }) => {
1242
+ const res = await clientProvider().webhooks.delete(id);
1243
+ return jsonResponse(res);
1244
+ });
1245
+ defineTool(server, "subscriptions_test", "Deprecated alias of webhooks_test. Removed next minor. Send a one-off test webhook to a webhook's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.", { id: z10.string().describe("Webhook id") }, async ({ id }) => {
1246
+ const res = await clientProvider().webhooks.test(id);
1247
+ return jsonResponse(res);
1248
+ });
1249
+ defineTool(server, "subscriptions_pause", "Deprecated alias of webhooks_pause. Removed next minor. Pause a webhook: stops delivery attempts and stops queueing new ones. Nothing is deleted — resume picks the webhook back up from the tip. Verify with webhooks_get (status).", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.pause(id)));
1250
+ defineTool(server, "subscriptions_resume", "Deprecated alias of webhooks_resume. Removed next minor. Resume a paused webhook (also clears a tripped circuit breaker). Deliveries restart from the current tip — use webhooks_replay for the blocks missed while paused. Verify with webhooks_get (status).", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.resume(id)));
1251
+ defineTool(server, "subscriptions_rotate_secret", "Deprecated alias of webhooks_rotate_secret. Removed next minor. Rotate a webhook's signing secret. Returns the NEW `signingSecret` ONCE — forward it to the user; deliveries signed with the old secret stop verifying as soon as this returns, so the receiver must be updated.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.rotateSecret(id)));
1252
+ defineTool(server, "subscriptions_deliveries", "Deprecated alias of webhooks_deliveries. Removed next minor. List recent delivery attempts for a webhook — status code, attempt count, error, duration, timestamps. THIS IS THE VERIFY CALL: after webhooks_create, webhooks_test, or webhooks_replay, read it to confirm the webhook actually landed (and to see the receiver's response when it didn't) instead of trusting the enqueue result.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.deliveries(id)));
1253
+ defineTool(server, "subscriptions_dead", "Deprecated alias of webhooks_dead. Removed next minor. List a webhook's dead-letter queue — deliveries that exhausted their retries, with the outbox id, payload, and last error. Diagnose the receiver first (webhooks_get for the URL/auth, webhooks_test for a live probe), then requeue rows with webhooks_requeue.", { id: z10.string().describe("Webhook id") }, async ({ id }) => jsonResponse(await clientProvider().webhooks.dead(id)));
1254
+ defineTool(server, "subscriptions_requeue", "Deprecated alias of webhooks_requeue. Removed next minor. Requeue ONE dead-lettered delivery for another attempt, by its outbox id from webhooks_dead. Fix the receiver first — a requeue against a still-broken endpoint just dies again. Verify with webhooks_deliveries.", {
1255
+ id: z10.string().describe("Webhook id"),
1256
+ outboxId: z10.string().describe("Outbox id of the dead delivery (from webhooks_dead)")
1257
+ }, async ({ id, outboxId }) => jsonResponse(await clientProvider().webhooks.requeue(id, outboxId)));
1258
+ defineTool(server, "subscriptions_replay", "Deprecated alias of webhooks_replay. Removed next minor. Replay a block range for a webhook. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.", {
1259
+ id: z10.string(),
1260
+ fromBlock: z10.number().int().nonnegative(),
1261
+ toBlock: z10.number().int().nonnegative(),
1262
+ force: z10.string().optional().describe("Idempotency suffix to force a duplicate replay of the range")
1263
+ }, async ({ id, fromBlock, toBlock, force }) => {
1264
+ const res = await clientProvider().webhooks.replay(id, {
1166
1265
  fromBlock,
1167
1266
  toBlock,
1168
1267
  ...force !== undefined ? { force } : {}
@@ -1181,7 +1280,7 @@ function createServer() {
1181
1280
  });
1182
1281
  registerScaffoldTools(server);
1183
1282
  registerSubgraphTools(server);
1184
- registerSubscriptionTools(server);
1283
+ registerWebhookTools(server);
1185
1284
  registerIndexTools(server);
1186
1285
  registerStreamsTools(server);
1187
1286
  registerContractTools(server);
@@ -1200,5 +1299,5 @@ export {
1200
1299
  createServer
1201
1300
  };
1202
1301
 
1203
- //# debugId=F1D65205F9CD817664756E2164756E21
1302
+ //# debugId=BBE82EA735BFF52764756E2164756E21
1204
1303
  //# sourceMappingURL=index.js.map