@hookline/mcp 0.5.0 → 0.8.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.
Files changed (52) hide show
  1. package/README.md +16 -6
  2. package/dist/client.d.ts +5 -0
  3. package/dist/client.js +8 -3
  4. package/dist/client.js.map +1 -1
  5. package/dist/docs-gen.js +16 -6
  6. package/dist/docs-gen.js.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/tools/create-endpoint.js +26 -0
  10. package/dist/tools/create-endpoint.js.map +1 -1
  11. package/dist/tools/create-validator.d.ts +28 -0
  12. package/dist/tools/create-validator.js +96 -0
  13. package/dist/tools/create-validator.js.map +1 -0
  14. package/dist/tools/custom-rules.d.ts +10 -0
  15. package/dist/tools/custom-rules.js +151 -0
  16. package/dist/tools/custom-rules.js.map +1 -0
  17. package/dist/tools/diff-payloads.js +7 -4
  18. package/dist/tools/diff-payloads.js.map +1 -1
  19. package/dist/tools/get-request-detail.js +1 -1
  20. package/dist/tools/get-request-detail.js.map +1 -1
  21. package/dist/tools/get-requests.d.ts +3 -1
  22. package/dist/tools/get-requests.js +44 -4
  23. package/dist/tools/get-requests.js.map +1 -1
  24. package/dist/tools/list-profiles.d.ts +3 -0
  25. package/dist/tools/list-profiles.js +42 -0
  26. package/dist/tools/list-profiles.js.map +1 -0
  27. package/dist/tools/payload-input.d.ts +1 -0
  28. package/dist/tools/payload-input.js +17 -0
  29. package/dist/tools/payload-input.js.map +1 -0
  30. package/dist/tools/profile-suggestions.d.ts +5 -0
  31. package/dist/tools/profile-suggestions.js +105 -0
  32. package/dist/tools/profile-suggestions.js.map +1 -0
  33. package/dist/tools/received-request.d.ts +2 -2
  34. package/dist/tools/received-request.js +20 -8
  35. package/dist/tools/received-request.js.map +1 -1
  36. package/dist/tools/register.js +18 -0
  37. package/dist/tools/register.js.map +1 -1
  38. package/dist/tools/revalidate-request.d.ts +3 -0
  39. package/dist/tools/revalidate-request.js +57 -0
  40. package/dist/tools/revalidate-request.js.map +1 -0
  41. package/dist/tools/search-rules.d.ts +4 -0
  42. package/dist/tools/search-rules.js +59 -0
  43. package/dist/tools/search-rules.js.map +1 -0
  44. package/dist/tools/validate-payload.d.ts +1 -0
  45. package/dist/tools/validate-payload.js +18 -3
  46. package/dist/tools/validate-payload.js.map +1 -1
  47. package/dist/tools/validation-history.d.ts +3 -0
  48. package/dist/tools/validation-history.js +54 -0
  49. package/dist/tools/validation-history.js.map +1 -0
  50. package/dist/tools/wait-for-request.js +12 -2
  51. package/dist/tools/wait-for-request.js.map +1 -1
  52. package/package.json +1 -1
@@ -1,13 +1,22 @@
1
1
  import { z } from 'zod';
2
+ import { HooklineError } from '../errors.js';
3
+ import { coerceJsonArgument } from './payload-input.js';
2
4
  import { errorResult, result, trusted, withStructured } from './result.js';
5
+ export const MAX_RAW_BODY_CHARS = 512_000;
3
6
  export function registerValidatePayload(server, ctx) {
4
7
  server.registerTool('validate_payload', {
5
8
  title: 'Validate a payload',
6
- description: 'Validate an ad-hoc payload against the applicable rules (for example OpenRTB) and return the findings. Nothing is stored. The findings are produced by Hookline and are trusted output.',
9
+ description: 'Validate an ad-hoc payload against the applicable rules and return the findings. Nothing is stored. Pass payload for a JSON body, or rawBody for a non-JSON body — XML (VAST), a compact JWT (SSF/CAEP secure event tokens) or an OCPP-J frame. Leave profileId empty to let Hookline detect the format, or set it explicitly (openrtb, standard-webhooks, cloudevents, ssf-caep, ocpi, ocpp-j, vast, igaming, generic). The findings are produced by Hookline and are trusted output.',
7
10
  inputSchema: {
8
11
  payload: z
9
12
  .unknown()
10
- .refine((value) => value !== undefined, 'payload is required'),
13
+ .optional()
14
+ .describe('The JSON payload to validate, as a JSON object — not a string (a JSON-encoded string is parsed, anything else is rejected). Required unless rawBody is given.'),
15
+ rawBody: z
16
+ .string()
17
+ .max(MAX_RAW_BODY_CHARS)
18
+ .optional()
19
+ .describe('The body exactly as it was sent, for formats that are not JSON objects: XML (VAST), a compact JWT (SSF/CAEP), or an OCPP-J frame. Use instead of payload.'),
11
20
  profileId: z.string().optional(),
12
21
  profileVersion: z.string().optional(),
13
22
  messageType: z.string().optional(),
@@ -27,11 +36,17 @@ export function registerValidatePayload(server, ctx) {
27
36
  },
28
37
  }, async (args) => {
29
38
  try {
39
+ if (args.payload === undefined && args.rawBody === undefined) {
40
+ throw new HooklineError('Nothing to validate: neither payload nor rawBody was given.', 'Pass payload for a JSON body, or rawBody for XML, a compact JWT or an OCPP-J frame.');
41
+ }
30
42
  const response = await ctx.client.request({
31
43
  method: 'POST',
32
44
  path: '/validate',
33
45
  body: {
34
- payload: args.payload,
46
+ payload: args.payload === undefined
47
+ ? undefined
48
+ : coerceJsonArgument(args.payload, 'payload'),
49
+ rawBody: args.rawBody,
35
50
  profileId: args.profileId,
36
51
  profileVersion: args.profileVersion,
37
52
  messageType: args.messageType,
@@ -1 +1 @@
1
- {"version":3,"file":"validate-payload.js","sourceRoot":"","sources":["../../src/tools/validate-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW3E,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,GAAgB;IAEhB,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,yLAAyL;QAC3L,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE,qBAAqB,CAAC;YAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,oBAAoB;SAC5B;QACD,YAAY,EAAE;YACZ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;YACtB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAmB;gBAC1D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;aACF,CAAC,CAAC;YACH,MAAM,IAAI,GAAG;gBACX,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI;gBAC/C,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;gBACzC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;gBACrC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;aAChC,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validate-payload.js","sourceRoot":"","sources":["../../src/tools/validate-payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ToolContext } from './context.js';
3
+ export declare function registerGetValidationHistory(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { errorResult, result, trusted, withStructured } from './result.js';
3
+ const MAX_HISTORY_LIMIT = 500;
4
+ export function registerGetValidationHistory(server, ctx) {
5
+ server.registerTool('get_validation_history', {
6
+ title: 'Get workspace history',
7
+ description: 'List what happened across a whole workspace — both webhooks it received and outbound requests it ran — newest first. Use it to answer "what broke this week" without walking endpoint by endpoint. Narrow it with method, status, since and until. Entries carry metadata only; a received entry also carries its endpointId, so pass that pair (endpointId, id) to get_request_detail to read the body and findings.',
8
+ inputSchema: {
9
+ workspaceId: z.string().uuid(),
10
+ limit: z.number().int().min(1).max(MAX_HISTORY_LIMIT).optional(),
11
+ method: z.string().min(1).max(16).optional(),
12
+ status: z.number().int().min(100).max(599).optional(),
13
+ since: z
14
+ .string()
15
+ .datetime()
16
+ .optional()
17
+ .describe('ISO-8601 instant; only entries at or after it are returned.'),
18
+ until: z
19
+ .string()
20
+ .datetime()
21
+ .optional()
22
+ .describe('ISO-8601 instant; only entries at or before it are returned.'),
23
+ },
24
+ annotations: {
25
+ readOnlyHint: true,
26
+ openWorldHint: true,
27
+ title: 'Get workspace history',
28
+ },
29
+ outputSchema: {
30
+ count: z.number(),
31
+ items: z.array(z.unknown()),
32
+ },
33
+ }, async (args) => {
34
+ try {
35
+ const items = await ctx.client.request({
36
+ method: 'GET',
37
+ path: `/workspaces/${args.workspaceId}/history`,
38
+ query: {
39
+ limit: args.limit,
40
+ method: args.method,
41
+ status: args.status,
42
+ since: args.since,
43
+ until: args.until,
44
+ },
45
+ });
46
+ const payload = { count: items.length, items };
47
+ return withStructured(result(trusted(payload)), payload);
48
+ }
49
+ catch (err) {
50
+ return errorResult(err);
51
+ }
52
+ });
53
+ }
54
+ //# sourceMappingURL=validation-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-history.js","sourceRoot":"","sources":["../../src/tools/validation-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAc9B,MAAM,UAAU,4BAA4B,CAC1C,MAAiB,EACjB,GAAgB;IAEhB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,uZAAuZ;QACzZ,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;YAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YACrD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACP,6DAA6D,CAC9D;YACH,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACP,8DAA8D,CAC/D;SACJ;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,uBAAuB;SAC/B;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC5B;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAgB;gBACpD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe,IAAI,CAAC,WAAW,UAAU;gBAC/C,KAAK,EAAE;oBACL,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YAC/C,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -8,6 +8,10 @@ const PAGE_LIMIT = 20;
8
8
  const MAX_TIMEOUT_SEC = 55;
9
9
  function sleep(ms, signal) {
10
10
  return new Promise((resolve) => {
11
+ if (signal.aborted) {
12
+ resolve();
13
+ return;
14
+ }
11
15
  const finish = () => {
12
16
  clearTimeout(timer);
13
17
  signal.removeEventListener('abort', finish);
@@ -55,7 +59,10 @@ async function baselineOf(ctx, endpointId, afterRequestId) {
55
59
  }
56
60
  function isDeterministicError(err) {
57
61
  return (err instanceof HooklineError &&
58
- (err.status === 401 || err.status === 403 || err.status === 404));
62
+ (err.status === 401 ||
63
+ err.status === 403 ||
64
+ err.status === 404 ||
65
+ err.status === 429));
59
66
  }
60
67
  export function registerWaitForRequest(server, ctx) {
61
68
  server.registerTool('wait_for_request', {
@@ -107,7 +114,10 @@ export function registerWaitForRequest(server, ctx) {
107
114
  }
108
115
  const fresh = rows.find((row) => !skipIds.has(row.id));
109
116
  if (fresh) {
110
- const found = { found: true, ...trustedMetaOf(fresh) };
117
+ const found = {
118
+ found: true,
119
+ ...trustedMetaOf(fresh, ctx.config.maxBodyBytes),
120
+ };
111
121
  const structured = {
112
122
  found: true,
113
123
  ...structuredOf(fresh, ctx.config.maxBodyBytes),
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-request.js","sourceRoot":"","sources":["../../src/tools/wait-for-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wait-for-request.js","sourceRoot":"","sources":["../../src/tools/wait-for-request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hookline/mcp",
3
- "version": "0.5.0",
3
+ "version": "0.8.0",
4
4
  "description": "Hookline MCP server — create test webhook endpoints, read incoming requests, and validate payloads from Claude Code, Cursor, and other MCP agents.",
5
5
  "mcpName": "org.hookline/mcp",
6
6
  "author": "ClearStack Services",