@webhooks-cc/mcp 1.4.0 → 1.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/README.md CHANGED
@@ -135,6 +135,20 @@ Provider template and signing support includes:
135
135
  - `gitlab`
136
136
  - `typeform`
137
137
  - `standard-webhooks`
138
+ - `meta`
139
+ - `lemonsqueezy`
140
+ - `coinbase-commerce`
141
+ - `razorpay`
142
+ - `cal`
143
+ - `intercom`
144
+ - `telegram`
145
+ - `square`
146
+ - `hubspot`
147
+ - `mailgun`
148
+ - `calendly`
149
+ - `mux`
150
+ - `sentry`
151
+ - `bitbucket`
138
152
 
139
153
  Signature verification also supports:
140
154
 
package/dist/bin/mcp.js CHANGED
@@ -292,7 +292,7 @@ var responseRulesSchema = import_zod2.z.array(responseRuleSchema).max(50).descri
292
292
  var mockResponseSchema = import_zod2.z.object({
293
293
  status: import_zod2.z.number().int().min(import_sdk.MOCK_RESPONSE_STATUS_MIN).max(import_sdk.MOCK_RESPONSE_STATUS_MAX).describe(`HTTP status code (${import_sdk.MOCK_RESPONSE_STATUS_MIN}-${import_sdk.MOCK_RESPONSE_STATUS_MAX})`),
294
294
  body: import_zod2.z.string().default("").describe("Response body string (default: empty)"),
295
- headers: import_zod2.z.record(import_zod2.z.string()).default({}).describe("Response headers (default: none)"),
295
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).default({}).describe("Response headers (default: none)"),
296
296
  delay: import_zod2.z.number().int().min(import_sdk.MOCK_RESPONSE_DELAY_MIN).max(import_sdk.MOCK_RESPONSE_DELAY_MAX).optional().describe(
297
297
  `Response delay in milliseconds (${import_sdk.MOCK_RESPONSE_DELAY_MIN}-${import_sdk.MOCK_RESPONSE_DELAY_MAX}, default: none)`
298
298
  )
@@ -474,7 +474,8 @@ function ensureVerifyArgs(args2) {
474
474
  return {
475
475
  provider: args2.provider,
476
476
  secret,
477
- ...args2.url ? { url: args2.url } : {}
477
+ ...args2.url ? { url: args2.url } : {},
478
+ ...args2.method ? { method: args2.method } : {}
478
479
  };
479
480
  }
480
481
  async function summarizeResponse(response) {
@@ -681,7 +682,7 @@ function registerTools(server, client) {
681
682
  {
682
683
  slug: import_zod2.z.string().describe("The endpoint slug to send to"),
683
684
  method: methodSchema,
684
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
685
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
685
686
  body: import_zod2.z.unknown().optional().describe("Request body"),
686
687
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template to send with signed headers"),
687
688
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -873,9 +874,12 @@ function registerTools(server, client) {
873
874
  "Shared signing secret. Required for non-Discord providers when doing client-side verification."
874
875
  ),
875
876
  publicKey: import_zod2.z.string().optional().describe("Discord application public key. Required for provider=discord."),
876
- url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio verification.")
877
+ url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio, Square, and HubSpot verification."),
878
+ method: import_zod2.z.string().optional().describe(
879
+ "Original HTTP method used when the signature was generated. Used by HubSpot v3 verification; the SDK assumes POST when omitted."
880
+ )
877
881
  },
878
- withErrorHandling(async ({ requestId, provider, secret, publicKey, url }) => {
882
+ withErrorHandling(async ({ requestId, provider, secret, publicKey, url, method }) => {
879
883
  const request = await client.requests.get(requestId);
880
884
  if (!provider && !secret && !publicKey) {
881
885
  const verified = request.signatureVerified;
@@ -902,7 +906,13 @@ function registerTools(server, client) {
902
906
  skipped: isSkipped ?? false
903
907
  });
904
908
  }
905
- const verificationOptions = ensureVerifyArgs({ provider, secret, publicKey, url });
909
+ const verificationOptions = ensureVerifyArgs({
910
+ provider,
911
+ secret,
912
+ publicKey,
913
+ url,
914
+ method
915
+ });
906
916
  const result = await (0, import_sdk.verifySignature)(request, verificationOptions);
907
917
  return jsonContent({
908
918
  valid: result.valid,
@@ -928,7 +938,7 @@ function registerTools(server, client) {
928
938
  {
929
939
  url: httpUrlSchema.describe("Target URL"),
930
940
  method: methodSchema,
931
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
941
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
932
942
  body: import_zod2.z.unknown().optional().describe("Request body"),
933
943
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
934
944
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -959,7 +969,7 @@ function registerTools(server, client) {
959
969
  {
960
970
  url: httpUrlSchema.describe("Target URL"),
961
971
  method: methodSchema,
962
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
972
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
963
973
  body: import_zod2.z.unknown().optional().describe("Request body"),
964
974
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
965
975
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -1096,7 +1106,7 @@ function registerTools(server, client) {
1096
1106
  }
1097
1107
 
1098
1108
  // src/index.ts
1099
- var VERSION = true ? "1.4.0" : "0.0.0-dev";
1109
+ var VERSION = true ? "1.5.0" : "0.0.0-dev";
1100
1110
  function createServer(options = {}) {
1101
1111
  const apiKey = options.apiKey ?? process.env.WHK_API_KEY;
1102
1112
  if (!apiKey) {
package/dist/index.js CHANGED
@@ -313,7 +313,7 @@ var responseRulesSchema = import_zod2.z.array(responseRuleSchema).max(50).descri
313
313
  var mockResponseSchema = import_zod2.z.object({
314
314
  status: import_zod2.z.number().int().min(import_sdk.MOCK_RESPONSE_STATUS_MIN).max(import_sdk.MOCK_RESPONSE_STATUS_MAX).describe(`HTTP status code (${import_sdk.MOCK_RESPONSE_STATUS_MIN}-${import_sdk.MOCK_RESPONSE_STATUS_MAX})`),
315
315
  body: import_zod2.z.string().default("").describe("Response body string (default: empty)"),
316
- headers: import_zod2.z.record(import_zod2.z.string()).default({}).describe("Response headers (default: none)"),
316
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).default({}).describe("Response headers (default: none)"),
317
317
  delay: import_zod2.z.number().int().min(import_sdk.MOCK_RESPONSE_DELAY_MIN).max(import_sdk.MOCK_RESPONSE_DELAY_MAX).optional().describe(
318
318
  `Response delay in milliseconds (${import_sdk.MOCK_RESPONSE_DELAY_MIN}-${import_sdk.MOCK_RESPONSE_DELAY_MAX}, default: none)`
319
319
  )
@@ -495,7 +495,8 @@ function ensureVerifyArgs(args) {
495
495
  return {
496
496
  provider: args.provider,
497
497
  secret,
498
- ...args.url ? { url: args.url } : {}
498
+ ...args.url ? { url: args.url } : {},
499
+ ...args.method ? { method: args.method } : {}
499
500
  };
500
501
  }
501
502
  async function summarizeResponse(response) {
@@ -702,7 +703,7 @@ function registerTools(server, client) {
702
703
  {
703
704
  slug: import_zod2.z.string().describe("The endpoint slug to send to"),
704
705
  method: methodSchema,
705
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
706
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
706
707
  body: import_zod2.z.unknown().optional().describe("Request body"),
707
708
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template to send with signed headers"),
708
709
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -894,9 +895,12 @@ function registerTools(server, client) {
894
895
  "Shared signing secret. Required for non-Discord providers when doing client-side verification."
895
896
  ),
896
897
  publicKey: import_zod2.z.string().optional().describe("Discord application public key. Required for provider=discord."),
897
- url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio verification.")
898
+ url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio, Square, and HubSpot verification."),
899
+ method: import_zod2.z.string().optional().describe(
900
+ "Original HTTP method used when the signature was generated. Used by HubSpot v3 verification; the SDK assumes POST when omitted."
901
+ )
898
902
  },
899
- withErrorHandling(async ({ requestId, provider, secret, publicKey, url }) => {
903
+ withErrorHandling(async ({ requestId, provider, secret, publicKey, url, method }) => {
900
904
  const request = await client.requests.get(requestId);
901
905
  if (!provider && !secret && !publicKey) {
902
906
  const verified = request.signatureVerified;
@@ -923,7 +927,13 @@ function registerTools(server, client) {
923
927
  skipped: isSkipped ?? false
924
928
  });
925
929
  }
926
- const verificationOptions = ensureVerifyArgs({ provider, secret, publicKey, url });
930
+ const verificationOptions = ensureVerifyArgs({
931
+ provider,
932
+ secret,
933
+ publicKey,
934
+ url,
935
+ method
936
+ });
927
937
  const result = await (0, import_sdk.verifySignature)(request, verificationOptions);
928
938
  return jsonContent({
929
939
  valid: result.valid,
@@ -949,7 +959,7 @@ function registerTools(server, client) {
949
959
  {
950
960
  url: httpUrlSchema.describe("Target URL"),
951
961
  method: methodSchema,
952
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
962
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
953
963
  body: import_zod2.z.unknown().optional().describe("Request body"),
954
964
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
955
965
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -980,7 +990,7 @@ function registerTools(server, client) {
980
990
  {
981
991
  url: httpUrlSchema.describe("Target URL"),
982
992
  method: methodSchema,
983
- headers: import_zod2.z.record(import_zod2.z.string()).optional().describe("HTTP headers to include"),
993
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional().describe("HTTP headers to include"),
984
994
  body: import_zod2.z.unknown().optional().describe("Request body"),
985
995
  provider: import_zod2.z.enum(import_sdk.TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
986
996
  template: import_zod2.z.string().optional().describe("Provider-specific template preset"),
@@ -1117,7 +1127,7 @@ function registerTools(server, client) {
1117
1127
  }
1118
1128
 
1119
1129
  // src/index.ts
1120
- var VERSION = true ? "1.4.0" : "0.0.0-dev";
1130
+ var VERSION = true ? "1.5.0" : "0.0.0-dev";
1121
1131
  function createServer(options = {}) {
1122
1132
  const apiKey = options.apiKey ?? process.env.WHK_API_KEY;
1123
1133
  if (!apiKey) {
package/dist/index.mjs CHANGED
@@ -306,7 +306,7 @@ var responseRulesSchema = z2.array(responseRuleSchema).max(50).describe("Ordered
306
306
  var mockResponseSchema = z2.object({
307
307
  status: z2.number().int().min(MOCK_RESPONSE_STATUS_MIN).max(MOCK_RESPONSE_STATUS_MAX).describe(`HTTP status code (${MOCK_RESPONSE_STATUS_MIN}-${MOCK_RESPONSE_STATUS_MAX})`),
308
308
  body: z2.string().default("").describe("Response body string (default: empty)"),
309
- headers: z2.record(z2.string()).default({}).describe("Response headers (default: none)"),
309
+ headers: z2.record(z2.string(), z2.string()).default({}).describe("Response headers (default: none)"),
310
310
  delay: z2.number().int().min(MOCK_RESPONSE_DELAY_MIN).max(MOCK_RESPONSE_DELAY_MAX).optional().describe(
311
311
  `Response delay in milliseconds (${MOCK_RESPONSE_DELAY_MIN}-${MOCK_RESPONSE_DELAY_MAX}, default: none)`
312
312
  )
@@ -488,7 +488,8 @@ function ensureVerifyArgs(args) {
488
488
  return {
489
489
  provider: args.provider,
490
490
  secret,
491
- ...args.url ? { url: args.url } : {}
491
+ ...args.url ? { url: args.url } : {},
492
+ ...args.method ? { method: args.method } : {}
492
493
  };
493
494
  }
494
495
  async function summarizeResponse(response) {
@@ -695,7 +696,7 @@ function registerTools(server, client) {
695
696
  {
696
697
  slug: z2.string().describe("The endpoint slug to send to"),
697
698
  method: methodSchema,
698
- headers: z2.record(z2.string()).optional().describe("HTTP headers to include"),
699
+ headers: z2.record(z2.string(), z2.string()).optional().describe("HTTP headers to include"),
699
700
  body: z2.unknown().optional().describe("Request body"),
700
701
  provider: z2.enum(TEMPLATE_PROVIDERS).optional().describe("Optional provider template to send with signed headers"),
701
702
  template: z2.string().optional().describe("Provider-specific template preset"),
@@ -887,9 +888,12 @@ function registerTools(server, client) {
887
888
  "Shared signing secret. Required for non-Discord providers when doing client-side verification."
888
889
  ),
889
890
  publicKey: z2.string().optional().describe("Discord application public key. Required for provider=discord."),
890
- url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio verification.")
891
+ url: httpUrlSchema.optional().describe("Original signed URL. Required for Twilio, Square, and HubSpot verification."),
892
+ method: z2.string().optional().describe(
893
+ "Original HTTP method used when the signature was generated. Used by HubSpot v3 verification; the SDK assumes POST when omitted."
894
+ )
891
895
  },
892
- withErrorHandling(async ({ requestId, provider, secret, publicKey, url }) => {
896
+ withErrorHandling(async ({ requestId, provider, secret, publicKey, url, method }) => {
893
897
  const request = await client.requests.get(requestId);
894
898
  if (!provider && !secret && !publicKey) {
895
899
  const verified = request.signatureVerified;
@@ -916,7 +920,13 @@ function registerTools(server, client) {
916
920
  skipped: isSkipped ?? false
917
921
  });
918
922
  }
919
- const verificationOptions = ensureVerifyArgs({ provider, secret, publicKey, url });
923
+ const verificationOptions = ensureVerifyArgs({
924
+ provider,
925
+ secret,
926
+ publicKey,
927
+ url,
928
+ method
929
+ });
920
930
  const result = await verifySignature(request, verificationOptions);
921
931
  return jsonContent({
922
932
  valid: result.valid,
@@ -942,7 +952,7 @@ function registerTools(server, client) {
942
952
  {
943
953
  url: httpUrlSchema.describe("Target URL"),
944
954
  method: methodSchema,
945
- headers: z2.record(z2.string()).optional().describe("HTTP headers to include"),
955
+ headers: z2.record(z2.string(), z2.string()).optional().describe("HTTP headers to include"),
946
956
  body: z2.unknown().optional().describe("Request body"),
947
957
  provider: z2.enum(TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
948
958
  template: z2.string().optional().describe("Provider-specific template preset"),
@@ -973,7 +983,7 @@ function registerTools(server, client) {
973
983
  {
974
984
  url: httpUrlSchema.describe("Target URL"),
975
985
  method: methodSchema,
976
- headers: z2.record(z2.string()).optional().describe("HTTP headers to include"),
986
+ headers: z2.record(z2.string(), z2.string()).optional().describe("HTTP headers to include"),
977
987
  body: z2.unknown().optional().describe("Request body"),
978
988
  provider: z2.enum(TEMPLATE_PROVIDERS).optional().describe("Optional provider template for signing"),
979
989
  template: z2.string().optional().describe("Provider-specific template preset"),
@@ -1110,7 +1120,7 @@ function registerTools(server, client) {
1110
1120
  }
1111
1121
 
1112
1122
  // src/index.ts
1113
- var VERSION = true ? "1.4.0" : "0.0.0-dev";
1123
+ var VERSION = true ? "1.5.0" : "0.0.0-dev";
1114
1124
  function createServer(options = {}) {
1115
1125
  const apiKey = options.apiKey ?? process.env.WHK_API_KEY;
1116
1126
  if (!apiKey) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webhooks-cc/mcp",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "MCP server for webhooks.cc — AI agent integration for webhook testing",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -19,13 +19,6 @@
19
19
  "dist",
20
20
  "README.md"
21
21
  ],
22
- "scripts": {
23
- "build": "tsup",
24
- "dev": "tsup --watch",
25
- "typecheck": "tsc --noEmit",
26
- "test": "vitest run",
27
- "prepublishOnly": "npm run build"
28
- },
29
22
  "keywords": [
30
23
  "webhook",
31
24
  "mcp",
@@ -44,13 +37,19 @@
44
37
  "homepage": "https://webhooks.cc",
45
38
  "dependencies": {
46
39
  "@modelcontextprotocol/sdk": "^1.29.0",
47
- "@webhooks-cc/sdk": "workspace:*",
48
- "zod": "^3.25.76"
40
+ "zod": "^4.4.3",
41
+ "@webhooks-cc/sdk": "1.7.0"
49
42
  },
50
43
  "devDependencies": {
51
- "@types/node": "^25.6.0",
44
+ "@types/node": "^25.9.1",
52
45
  "tsup": "^8.5.1",
53
- "typescript": "^6.0.2",
54
- "vitest": "^4.1.4"
46
+ "typescript": "^6.0.3",
47
+ "vitest": "^4.1.7"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "dev": "tsup --watch",
52
+ "typecheck": "tsc --noEmit",
53
+ "test": "vitest run"
55
54
  }
56
- }
55
+ }