@apify/actors-mcp-server 0.10.7-beta.1 → 0.10.7-beta.3

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.
@@ -11,8 +11,11 @@ import type { ApifyClient } from '../apify_client.js';
11
11
  export declare function registerPaymentRequiredInterceptor(apifyClient: ApifyClient): void;
12
12
  /**
13
13
  * Builds an MCP response for a 402 Payment Required error.
14
- * Formats the response as a tool result containing the PaymentRequired JSON
15
- * per the x402 MCP transport spec, which allows clients to automatically handle the payment flow.
14
+ *
15
+ * Per the x402 MCP transport spec (coinbase/x402 `specs/transports-v2/mcp.md`), the
16
+ * PaymentRequired payload is carried in two places with identical data:
17
+ * `structuredContent` (preferred) and `content[0].text` as JSON (fallback for clients
18
+ * that can't read structured content).
16
19
  */
17
20
  export declare function buildPaymentRequiredResponse(errorOrMessage: unknown, precomputedPaymentData?: unknown): {
18
21
  _meta?: Record<string, unknown> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"payment_errors.d.ts","sourceRoot":"","sources":["../../src/utils/payment_errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoCtD;;;;;;;;GAQG;AACH,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAqBjF;AAyBD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,OAAO,EAAE,sBAAsB,CAAC,EAAE,OAAO;;;;;;;;;EAcrG"}
1
+ {"version":3,"file":"payment_errors.d.ts","sourceRoot":"","sources":["../../src/utils/payment_errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoCtD;;;;;;;;GAQG;AACH,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAqBjF;AAyBD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,OAAO,EAAE,sBAAsB,CAAC,EAAE,OAAO;;;;;;;;;EAYrG"}
@@ -76,20 +76,21 @@ function extractPaymentRequiredData(error) {
76
76
  }
77
77
  /**
78
78
  * Builds an MCP response for a 402 Payment Required error.
79
- * Formats the response as a tool result containing the PaymentRequired JSON
80
- * per the x402 MCP transport spec, which allows clients to automatically handle the payment flow.
79
+ *
80
+ * Per the x402 MCP transport spec (coinbase/x402 `specs/transports-v2/mcp.md`), the
81
+ * PaymentRequired payload is carried in two places with identical data:
82
+ * `structuredContent` (preferred) and `content[0].text` as JSON (fallback for clients
83
+ * that can't read structured content).
81
84
  */
82
85
  export function buildPaymentRequiredResponse(errorOrMessage, precomputedPaymentData) {
83
86
  const paymentData = precomputedPaymentData !== null && precomputedPaymentData !== void 0 ? precomputedPaymentData : extractPaymentRequiredData(errorOrMessage);
84
87
  const message = errorOrMessage instanceof Error ? errorOrMessage.message : String(errorOrMessage);
85
- // When paymentData exists, return two text entries: JSON payload first (backward-compatible
86
- // position for x402 clients that parse content[0].text), then a human-readable explanation.
87
88
  const texts = paymentData
88
89
  ? [
89
90
  JSON.stringify(paymentData),
90
91
  'Payment required to run this Actor or access this resource.',
91
92
  ]
92
93
  : [message];
93
- return buildMCPResponse({ texts, isError: true });
94
+ return buildMCPResponse({ texts, isError: true, structuredContent: paymentData });
94
95
  }
95
96
  //# sourceMappingURL=payment_errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payment_errors.js","sourceRoot":"","sources":["../../src/utils/payment_errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payment_errors.js","sourceRoot":"","sources":["../../src/utils/payment_errors.ts"],"names":[],"mappings":"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"}
@@ -1,40 +1,20 @@
1
- /**
2
- * Minimal JSON Schema typings for array/object schemas used in generateSchemaFromItems
3
- */
1
+ export type JsonSchemaPrimitiveType = 'string' | 'integer' | 'number' | 'boolean' | 'object' | 'array' | 'null';
4
2
  export type JsonSchemaProperty = {
5
- type: 'string' | 'integer' | 'number' | 'boolean' | 'object' | 'array' | 'null';
3
+ type: JsonSchemaPrimitiveType | JsonSchemaPrimitiveType[];
6
4
  properties?: Record<string, JsonSchemaProperty>;
7
5
  items?: JsonSchemaProperty;
8
- };
9
- export type JsonSchemaObject = {
10
- type: 'object';
11
- properties: Record<string, JsonSchemaProperty>;
6
+ format?: string;
12
7
  };
13
8
  export type JsonSchemaArray = {
14
9
  type: 'array';
15
- items: JsonSchemaObject | JsonSchemaProperty;
10
+ items: JsonSchemaProperty;
16
11
  };
17
- /**
18
- * Options for schema generation
19
- */
20
12
  export type SchemaGenerationOptions = {
21
13
  /** Maximum number of items to use for schema generation. Default is 5. */
22
14
  limit?: number;
23
- /** If true, uses only non-empty items and skips hidden fields. Default is true. */
15
+ /** If true, strips empty arrays from items before inference. Default is true. */
24
16
  clean?: boolean;
25
- /** Strategy for handling arrays. "first" uses first item as template, "all" merges all items. Default is "all". */
26
- arrayMode?: 'first' | 'all';
27
17
  };
28
- /**
29
- * Function to recursively remove empty arrays from an object
30
- */
31
18
  export declare function removeEmptyArrays(obj: unknown): unknown;
32
- /**
33
- * Generates a JSON schema from dataset items with configurable options
34
- *
35
- * @param datasetItems - Array of dataset items to generate schema from
36
- * @param options - Configuration options for schema generation
37
- * @returns JSON schema object or null if generation fails
38
- */
39
19
  export declare function generateSchemaFromItems(datasetItems: unknown[], options?: SchemaGenerationOptions): JsonSchemaArray | null;
40
20
  //# sourceMappingURL=schema_generation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema_generation.d.ts","sourceRoot":"","sources":["../../src/utils/schema_generation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mHAAmH;IACnH,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAuBvD;AAGD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACnC,YAAY,EAAE,OAAO,EAAE,EACvB,OAAO,GAAE,uBAA4B,GACtC,eAAe,GAAG,IAAI,CAkCxB"}
1
+ {"version":3,"file":"schema_generation.d.ts","sourceRoot":"","sources":["../../src/utils/schema_generation.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAGF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAevD;AAuGD,wBAAgB,uBAAuB,CACnC,YAAY,EAAE,OAAO,EAAE,EACvB,OAAO,GAAE,uBAA4B,GACtC,eAAe,GAAG,IAAI,CAYxB"}
@@ -1,60 +1,127 @@
1
- import toJsonSchema from 'to-json-schema';
2
- /**
3
- * Function to recursively remove empty arrays from an object
4
- */
1
+ // JSON Schema inference and merge for dataset items.
2
+ // Local counterpart to the dataset API's `clean=true` — empty arrays carry no schema info.
5
3
  export function removeEmptyArrays(obj) {
6
4
  if (Array.isArray(obj)) {
7
- // If the item is an array, recursively call removeEmptyArrays on each element.
8
- return obj.map((item) => removeEmptyArrays(item));
5
+ return obj.map(removeEmptyArrays);
9
6
  }
10
7
  if (typeof obj !== 'object' || obj === null) {
11
- // Return primitives and null values as is.
12
8
  return obj;
13
9
  }
14
- // Use reduce to build a new object, excluding keys with empty arrays.
15
10
  return Object.entries(obj).reduce((acc, [key, value]) => {
16
- const processedValue = removeEmptyArrays(value);
17
- // Exclude the key if the processed value is an empty array.
18
- if (Array.isArray(processedValue) && processedValue.length === 0) {
11
+ const processed = removeEmptyArrays(value);
12
+ if (Array.isArray(processed) && processed.length === 0) {
19
13
  return acc;
20
14
  }
21
- acc[key] = processedValue;
15
+ acc[key] = processed;
22
16
  return acc;
23
17
  }, {});
24
18
  }
25
- // TODO: write unit tests for this.
26
- /**
27
- * Generates a JSON schema from dataset items with configurable options
28
- *
29
- * @param datasetItems - Array of dataset items to generate schema from
30
- * @param options - Configuration options for schema generation
31
- * @returns JSON schema object or null if generation fails
32
- */
19
+ const FORMAT_DETECTORS = [
20
+ ['date-time', (s) => /^\d{4}-\d{2}-\d{2}[Tt ]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})?$/.test(s)],
21
+ ['date', (s) => /^\d{4}-\d{2}-\d{2}$/.test(s)],
22
+ ['uuid', (s) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s)],
23
+ ['email', (s) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s)],
24
+ ['uri', (s) => /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/\S+$/.test(s)],
25
+ ];
26
+ function detectFormat(value) {
27
+ for (const [name, test] of FORMAT_DETECTORS) {
28
+ if (test(value))
29
+ return name;
30
+ }
31
+ return undefined;
32
+ }
33
+ function inferType(value) {
34
+ if (value === null || value === undefined)
35
+ return 'null';
36
+ if (Array.isArray(value))
37
+ return 'array';
38
+ if (typeof value === 'number')
39
+ return Number.isInteger(value) && Number.isFinite(value) ? 'integer' : 'number';
40
+ if (typeof value === 'boolean')
41
+ return 'boolean';
42
+ if (typeof value === 'string')
43
+ return 'string';
44
+ return 'object';
45
+ }
46
+ function inferSchema(value) {
47
+ const type = inferType(value);
48
+ if (type === 'object') {
49
+ const entries = Object.entries(value);
50
+ if (entries.length === 0)
51
+ return { type: 'object' };
52
+ const properties = {};
53
+ for (const [k, v] of entries) {
54
+ properties[k] = inferSchema(v);
55
+ }
56
+ return { type: 'object', properties };
57
+ }
58
+ if (type === 'array') {
59
+ const arr = value;
60
+ if (arr.length === 0)
61
+ return { type: 'array' };
62
+ const merged = arr.map(inferSchema).reduce(mergeSchemas);
63
+ return { type: 'array', items: merged };
64
+ }
65
+ if (type === 'string') {
66
+ const format = detectFormat(value);
67
+ return format ? { type: 'string', format } : { type: 'string' };
68
+ }
69
+ return { type };
70
+ }
71
+ // Merge rules:
72
+ // integer ⊕ number → number (number is a superset).
73
+ // different types → type array, e.g. ['string', 'null'].
74
+ // two objects → union of keys, recursive merge of shared values.
75
+ // two arrays → merged `items`.
76
+ // string format kept only when both sides agree.
77
+ function mergeSchemas(a, b) {
78
+ var _a, _b, _c;
79
+ const aTypes = Array.isArray(a.type) ? a.type : [a.type];
80
+ const bTypes = Array.isArray(b.type) ? b.type : [b.type];
81
+ let typeSet = Array.from(new Set([...aTypes, ...bTypes]));
82
+ // integer ⊆ number — collapse to number when both appear.
83
+ if (typeSet.includes('integer') && typeSet.includes('number')) {
84
+ typeSet = typeSet.filter((t) => t !== 'integer');
85
+ }
86
+ const result = {
87
+ type: typeSet.length === 1 ? typeSet[0] : typeSet,
88
+ };
89
+ if (a.format && a.format === b.format) {
90
+ result.format = a.format;
91
+ }
92
+ if (a.properties || b.properties) {
93
+ const ap = (_a = a.properties) !== null && _a !== void 0 ? _a : {};
94
+ const bp = (_b = b.properties) !== null && _b !== void 0 ? _b : {};
95
+ const allKeys = new Set([...Object.keys(ap), ...Object.keys(bp)]);
96
+ if (allKeys.size > 0) {
97
+ const merged = {};
98
+ for (const k of allKeys) {
99
+ const av = ap[k];
100
+ const bv = bp[k];
101
+ if (av && bv)
102
+ merged[k] = mergeSchemas(av, bv);
103
+ else
104
+ merged[k] = (av !== null && av !== void 0 ? av : bv);
105
+ }
106
+ result.properties = merged;
107
+ }
108
+ }
109
+ if (a.items && b.items) {
110
+ result.items = mergeSchemas(a.items, b.items);
111
+ }
112
+ else if (a.items || b.items) {
113
+ result.items = ((_c = a.items) !== null && _c !== void 0 ? _c : b.items);
114
+ }
115
+ return result;
116
+ }
33
117
  export function generateSchemaFromItems(datasetItems, options = {}) {
34
- const { limit = 5, clean = true, arrayMode = 'all', } = options;
35
- // Limit the number of items used for schema generation
118
+ const { limit = 5, clean = true } = options;
36
119
  const itemsToUse = datasetItems.slice(0, limit);
37
- if (itemsToUse.length === 0) {
120
+ if (itemsToUse.length === 0)
38
121
  return null;
39
- }
40
- // Clean the dataset items by removing empty arrays if requested
41
- const processedItems = clean
42
- ? itemsToUse.map((item) => removeEmptyArrays(item))
43
- : itemsToUse;
44
- // Try to generate schema with full options first
45
- try {
46
- return toJsonSchema(processedItems, {
47
- arrays: { mode: arrayMode },
48
- });
49
- }
50
- catch { /* ignore */ }
51
- try {
52
- return toJsonSchema(processedItems, {
53
- arrays: { mode: 'first' },
54
- });
55
- }
56
- catch { /* ignore */ }
57
- // If all attempts fail, return null
58
- return null;
122
+ const processed = clean ? itemsToUse.map(removeEmptyArrays) : itemsToUse;
123
+ const itemSchemas = processed.map(inferSchema);
124
+ const merged = itemSchemas.reduce(mergeSchemas);
125
+ return { type: 'array', items: merged };
59
126
  }
60
127
  //# sourceMappingURL=schema_generation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema_generation.js","sourceRoot":"","sources":["../../src/utils/schema_generation.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAiC1C;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,+EAA+E;QAC/E,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,2CAA2C;QAC3C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEhD,4DAA4D;QAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,CAAC;QACf,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QAC1B,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA6B,CAAC,CAAC;AACtC,CAAC;AAED,mCAAmC;AACnC;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACnC,YAAuB,EACvB,UAAmC,EAAE;IAErC,MAAM,EACF,KAAK,GAAG,CAAC,EACT,KAAK,GAAG,IAAI,EACZ,SAAS,GAAG,KAAK,GACpB,GAAG,OAAO,CAAC;IAEZ,uDAAuD;IACvD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gEAAgE;IAChE,MAAM,cAAc,GAAG,KAAK;QACxB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,UAAU,CAAC;IAEjB,iDAAiD;IACjD,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,cAAc,EAAE;YAChC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9B,CAAoB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAExB,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,cAAc,EAAE;YAChC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC5B,CAAoB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAExB,oCAAoC;IACpC,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"schema_generation.js","sourceRoot":"","sources":["../../src/utils/schema_generation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apify/actors-mcp-server",
3
- "version": "0.10.7-beta.1",
3
+ "version": "0.10.7-beta.3",
4
4
  "type": "module",
5
5
  "description": "Apify MCP Server",
6
6
  "mcpName": "com.apify/apify-mcp-server",
@@ -62,7 +62,6 @@
62
62
  "dotenv": "^17.4.1",
63
63
  "express": "^4.21.2",
64
64
  "mcp-client-capabilities": "^0.0.14",
65
- "to-json-schema": "^0.2.5",
66
65
  "yargs": "^17.7.2",
67
66
  "zod": "^4.1.13"
68
67
  },
@@ -75,7 +74,6 @@
75
74
  "@arizeai/phoenix-evals": "^1.0.2",
76
75
  "@sentry/cli": "^3.2.0",
77
76
  "@types/express": "^4.0.0",
78
- "@types/to-json-schema": "^0.2.4",
79
77
  "@types/yargs": "^17.0.33",
80
78
  "@types/yargs-parser": "^21.0.3",
81
79
  "eventsource": "^3.0.2",