@lumibase/mcp-server 0.24.1 → 0.26.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.cjs CHANGED
@@ -271,14 +271,14 @@ var policySchema = import_zod3.z.object({
271
271
  ipDeny: import_zod3.z.array(import_zod3.z.string()).optional(),
272
272
  validFrom: import_zod3.z.string().datetime().nullable().optional(),
273
273
  validUntil: import_zod3.z.string().datetime().nullable().optional(),
274
- rules: import_zod3.z.record(import_zod3.z.unknown()).optional()
274
+ rules: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional()
275
275
  });
276
276
  var permissionSchema = import_zod3.z.object({
277
277
  collection: import_zod3.z.string().min(1).max(64),
278
278
  action: import_zod3.z.enum(["create", "read", "update", "delete", "share"]),
279
- permissions: import_zod3.z.record(import_zod3.z.unknown()).optional(),
280
- validation: import_zod3.z.record(import_zod3.z.unknown()).optional(),
281
- presets: import_zod3.z.record(import_zod3.z.unknown()).optional(),
279
+ permissions: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
280
+ validation: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
281
+ presets: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
282
282
  fields: import_zod3.z.array(import_zod3.z.string()).optional()
283
283
  });
284
284
  function registerAccessTools(server, client) {
@@ -420,7 +420,7 @@ function registerAccessTools(server, client) {
420
420
  "dry_run_access_import",
421
421
  {
422
422
  description: "Validate an RBAC manifest import without applying it. Returns the planned changes.",
423
- inputSchema: { manifest: import_zod3.z.record(import_zod3.z.unknown()).describe("RBAC manifest from export_access.") }
423
+ inputSchema: { manifest: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).describe("RBAC manifest from export_access.") }
424
424
  },
425
425
  async ({ manifest }) => run(() => client.post("/access/import?dryRun=true", manifest))
426
426
  );
@@ -429,7 +429,7 @@ function registerAccessTools(server, client) {
429
429
  {
430
430
  description: "Apply an RBAC manifest import. High-impact \u2014 changes roles/policies/permissions. Pass confirm=true.",
431
431
  inputSchema: {
432
- manifest: import_zod3.z.record(import_zod3.z.unknown()).describe("RBAC manifest from export_access."),
432
+ manifest: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).describe("RBAC manifest from export_access."),
433
433
  mode: import_zod3.z.enum(["merge", "replace-managed", "replace-all"]).optional().describe("Import mode (default merge)."),
434
434
  confirm: import_zod3.z.literal(true).describe(confirmDescription)
435
435
  }
@@ -458,7 +458,7 @@ var materializeSchema = import_zod4.z.object({
458
458
  refreshStrategy: import_zod4.z.enum(["auto", "cron", "manual"]).optional(),
459
459
  refreshCron: import_zod4.z.string().optional(),
460
460
  projection: import_zod4.z.object({ fields: import_zod4.z.array(import_zod4.z.string()).optional(), orderBy: import_zod4.z.string().optional() }).optional(),
461
- filter: import_zod4.z.record(import_zod4.z.unknown()).optional()
461
+ filter: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional()
462
462
  });
463
463
  function registerAdminTools(server, client) {
464
464
  server.registerTool(
@@ -527,16 +527,16 @@ var import_zod5 = require("zod");
527
527
  var intentSchema = import_zod5.z.object({
528
528
  name: import_zod5.z.string().min(1).max(120),
529
529
  collection: import_zod5.z.string().min(1).max(120),
530
- rules: import_zod5.z.array(import_zod5.z.record(import_zod5.z.unknown())).describe("SLO rules (required_fields, freshness, translations, link_health, \u2026)."),
530
+ rules: import_zod5.z.array(import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown())).describe("SLO rules (required_fields, freshness, translations, link_health, \u2026)."),
531
531
  schedule: import_zod5.z.string().describe("5-field cron expression for reconciliation cadence."),
532
- budget: import_zod5.z.record(import_zod5.z.unknown()).optional(),
532
+ budget: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).optional(),
533
533
  autonomyCap: import_zod5.z.number().int().min(0).max(4).optional().describe("Max autonomy level L0\u2013L4 for this intent."),
534
- maintenanceWindow: import_zod5.z.record(import_zod5.z.unknown()).nullable().optional()
534
+ maintenanceWindow: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).nullable().optional()
535
535
  });
536
536
  var flowNode = import_zod5.z.object({
537
537
  id: import_zod5.z.string(),
538
538
  key: import_zod5.z.string(),
539
- options: import_zod5.z.record(import_zod5.z.unknown()).optional(),
539
+ options: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).optional(),
540
540
  next: import_zod5.z.string().nullable().optional(),
541
541
  onError: import_zod5.z.string().nullable().optional()
542
542
  });
@@ -545,7 +545,7 @@ var flowSchema = import_zod5.z.object({
545
545
  description: import_zod5.z.string().optional(),
546
546
  status: import_zod5.z.enum(["active", "inactive", "draft"]).optional(),
547
547
  triggerType: import_zod5.z.enum(["webhook", "event", "schedule", "manual"]),
548
- triggerOptions: import_zod5.z.record(import_zod5.z.unknown()).optional(),
548
+ triggerOptions: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).optional(),
549
549
  graph: import_zod5.z.object({
550
550
  entry: import_zod5.z.string().optional(),
551
551
  nodes: import_zod5.z.array(flowNode).optional()
@@ -603,7 +603,7 @@ function registerAgentTools(server, client) {
603
603
  description: "Trigger a manual run of a flow with an optional input payload.",
604
604
  inputSchema: {
605
605
  id: idPathSegmentSchema,
606
- input: import_zod5.z.record(import_zod5.z.unknown()).optional().describe("Initial context passed to the flow.")
606
+ input: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).optional().describe("Initial context passed to the flow.")
607
607
  }
608
608
  },
609
609
  async ({ id, input }) => run(() => client.post(`/flows/${encodePathSegment(id)}/run`, input ?? {}))
@@ -644,7 +644,7 @@ function registerApiKeyTools(server, client) {
644
644
  name: import_zod6.z.string().min(1).max(96),
645
645
  description: import_zod6.z.string().max(512).optional(),
646
646
  expiresAt: import_zod6.z.string().datetime().nullable().optional(),
647
- metadata: import_zod6.z.record(import_zod6.z.unknown()).optional()
647
+ metadata: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional()
648
648
  }
649
649
  },
650
650
  async (input) => run(() => client.post("/api-keys", input))
@@ -773,7 +773,7 @@ function registerCdcTools(server, client) {
773
773
  {
774
774
  description: "Rewind a subscription checkpoint inside the retention window (resets dead/stale back to active).",
775
775
  inputSchema: {
776
- subscription_id: import_zod7.z.string().describe("Subscription id."),
776
+ subscription_id: idPathSegmentSchema.describe("Subscription id."),
777
777
  occurred_after: import_zod7.z.string().optional().describe("ISO timestamp to rewind to (within retention)."),
778
778
  cursor: import_zod7.z.string().optional().describe("Exact cursor token to rewind to.")
779
779
  }
@@ -783,7 +783,7 @@ function registerCdcTools(server, client) {
783
783
  if (args.cursor) body.cursor = args.cursor;
784
784
  if (args.occurred_after) body.occurred_after = args.occurred_after;
785
785
  const result = await client.post(
786
- `/cdc/subscriptions/${encodeURIComponent(args.subscription_id)}/replay`,
786
+ `/cdc/subscriptions/${encodePathSegment(args.subscription_id)}/replay`,
787
787
  body
788
788
  );
789
789
  return { content: [{ type: "text", text: JSON.stringify(result) }] };
@@ -830,7 +830,7 @@ var fieldInputSchema = import_zod8.z.object({
830
830
  width: import_zod8.z.enum(["half", "full", "fill"]).optional(),
831
831
  sortOrder: import_zod8.z.number().int().optional(),
832
832
  group: import_zod8.z.string().optional(),
833
- options: import_zod8.z.record(import_zod8.z.unknown()).optional(),
833
+ options: import_zod8.z.record(import_zod8.z.string(), import_zod8.z.unknown()).optional(),
834
834
  defaultValue: import_zod8.z.unknown().optional()
835
835
  });
836
836
  function formatError2(err) {
@@ -982,10 +982,10 @@ var presetSchema = import_zod9.z.object({
982
982
  userId: import_zod9.z.string().nullable().optional(),
983
983
  roleId: import_zod9.z.string().nullable().optional(),
984
984
  layout: import_zod9.z.string().optional(),
985
- layoutQuery: import_zod9.z.record(import_zod9.z.unknown()).optional(),
986
- layoutOptions: import_zod9.z.record(import_zod9.z.unknown()).optional(),
985
+ layoutQuery: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional(),
986
+ layoutOptions: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional(),
987
987
  search: import_zod9.z.string().nullable().optional(),
988
- filter: import_zod9.z.record(import_zod9.z.unknown()).optional(),
988
+ filter: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional(),
989
989
  icon: import_zod9.z.string().nullable().optional(),
990
990
  color: import_zod9.z.string().nullable().optional(),
991
991
  refreshInterval: import_zod9.z.number().int().min(0).optional()
@@ -1055,7 +1055,7 @@ function registerContentConfigTools(server, client) {
1055
1055
  description: "Create or update a setting (upsert by key).",
1056
1056
  inputSchema: {
1057
1057
  key: idPathSegmentSchema,
1058
- value: import_zod9.z.record(import_zod9.z.unknown()).describe("Arbitrary JSON value object for the setting."),
1058
+ value: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).describe("Arbitrary JSON value object for the setting."),
1059
1059
  scope: import_zod9.z.string().optional()
1060
1060
  }
1061
1061
  },
@@ -1203,7 +1203,7 @@ var extensionSchema = import_zod12.z.object({
1203
1203
  type: import_zod12.z.enum(EXTENSION_TYPES),
1204
1204
  enabled: import_zod12.z.boolean().optional(),
1205
1205
  bundleUrl: import_zod12.z.string().min(1).describe("https:, http:, or data:text/javascript bundle URL."),
1206
- manifest: import_zod12.z.record(import_zod12.z.string()).optional(),
1206
+ manifest: import_zod12.z.record(import_zod12.z.string(), import_zod12.z.string()).optional(),
1207
1207
  capabilities: import_zod12.z.array(import_zod12.z.string()).optional()
1208
1208
  });
1209
1209
  function registerExtensionTools(server, client) {
@@ -1286,7 +1286,7 @@ function registerExtensionTools(server, client) {
1286
1286
  inputSchema: {
1287
1287
  extensionId: import_zod12.z.string().min(1),
1288
1288
  marketplaceSlug: import_zod12.z.string().min(1),
1289
- publisher: import_zod12.z.record(import_zod12.z.unknown()).optional(),
1289
+ publisher: import_zod12.z.record(import_zod12.z.string(), import_zod12.z.unknown()).optional(),
1290
1290
  signature: import_zod12.z.string().optional(),
1291
1291
  signatureAlg: import_zod12.z.string().optional(),
1292
1292
  publisherKeyId: import_zod12.z.string().optional(),
@@ -1318,8 +1318,8 @@ var fieldInputSchema2 = import_zod13.z.object({
1318
1318
  precision: import_zod13.z.number().int().positive().optional(),
1319
1319
  scale: import_zod13.z.number().int().min(0).optional(),
1320
1320
  special: import_zod13.z.array(import_zod13.z.string()).optional(),
1321
- options: import_zod13.z.record(import_zod13.z.unknown()).optional(),
1322
- displayOptions: import_zod13.z.record(import_zod13.z.unknown()).optional(),
1321
+ options: import_zod13.z.record(import_zod13.z.string(), import_zod13.z.unknown()).optional(),
1322
+ displayOptions: import_zod13.z.record(import_zod13.z.string(), import_zod13.z.unknown()).optional(),
1323
1323
  conditions: import_zod13.z.array(import_zod13.z.unknown()).optional(),
1324
1324
  required: import_zod13.z.boolean().optional().default(false),
1325
1325
  readonly: import_zod13.z.boolean().optional().default(false),
@@ -1419,7 +1419,7 @@ var panelQueryShape = {
1419
1419
  aggregate: import_zod14.z.enum(AGGREGATES).describe("Aggregate function. `field` is required for everything except `count`."),
1420
1420
  field: import_zod14.z.string().min(1).optional().describe("Field to aggregate (required unless aggregate=count)."),
1421
1421
  groupBy: import_zod14.z.string().min(1).optional().describe("Field to group rows by (produces a series)."),
1422
- filter: import_zod14.z.record(import_zod14.z.unknown()).optional().describe('Directus-style condition rule, e.g. { status: { _eq: "published" } }.'),
1422
+ filter: import_zod14.z.record(import_zod14.z.string(), import_zod14.z.unknown()).optional().describe('Directus-style condition rule, e.g. { status: { _eq: "published" } }.'),
1423
1423
  dateRange: dateRangeSchema.optional(),
1424
1424
  limit: import_zod14.z.number().int().min(1).max(1e3).optional().describe("Max grouped rows to return (default 50).")
1425
1425
  };
@@ -1455,7 +1455,7 @@ function registerInsightsTools(server, client) {
1455
1455
  inputSchema: {
1456
1456
  dashboardId: idPathSegmentSchema,
1457
1457
  panelId: idPathSegmentSchema,
1458
- filter: import_zod14.z.record(import_zod14.z.unknown()).optional().describe("Override the panel filter for this run (Directus-style condition rule)."),
1458
+ filter: import_zod14.z.record(import_zod14.z.string(), import_zod14.z.unknown()).optional().describe("Override the panel filter for this run (Directus-style condition rule)."),
1459
1459
  dateRange: dateRangeSchema.optional().describe("Override the panel date range for this run.")
1460
1460
  }
1461
1461
  },
@@ -1557,7 +1557,7 @@ function registerItemTools(server, client) {
1557
1557
  description: "Create a new item in a collection.",
1558
1558
  inputSchema: {
1559
1559
  collection: collectionNameSchema,
1560
- data: import_zod15.z.record(import_zod15.z.unknown()).describe("Field values for the new item"),
1560
+ data: import_zod15.z.record(import_zod15.z.string(), import_zod15.z.unknown()).describe("Field values for the new item"),
1561
1561
  status: import_zod15.z.enum(["draft", "published"]).optional().default("draft")
1562
1562
  }
1563
1563
  },
@@ -1580,7 +1580,7 @@ function registerItemTools(server, client) {
1580
1580
  inputSchema: {
1581
1581
  collection: collectionNameSchema,
1582
1582
  id: idPathSegmentSchema,
1583
- data: import_zod15.z.record(import_zod15.z.unknown()).describe("Fields to update")
1583
+ data: import_zod15.z.record(import_zod15.z.string(), import_zod15.z.unknown()).describe("Fields to update")
1584
1584
  }
1585
1585
  },
1586
1586
  async ({ collection, id, data: itemData }) => {
@@ -1793,7 +1793,7 @@ function registerPermissionTools(server, client) {
1793
1793
  inputSchema: {
1794
1794
  collection: import_zod19.z.string().min(1),
1795
1795
  action: import_zod19.z.enum(["create", "read", "update", "delete", "share"]),
1796
- item: import_zod19.z.record(import_zod19.z.unknown()).optional().describe("Item payload to evaluate row-level rules against.")
1796
+ item: import_zod19.z.record(import_zod19.z.string(), import_zod19.z.unknown()).optional().describe("Item payload to evaluate row-level rules against.")
1797
1797
  }
1798
1798
  },
1799
1799
  async (input) => run(() => client.post("/permissions/check", input))
@@ -1815,7 +1815,7 @@ var relationInputSchema = {
1815
1815
  junctionOneField: import_zod20.z.string().nullable().optional(),
1816
1816
  sortField: import_zod20.z.string().nullable().optional(),
1817
1817
  onDelete: import_zod20.z.enum(["restrict", "cascade", "set null", "no action"]).optional(),
1818
- meta: import_zod20.z.record(import_zod20.z.unknown()).optional()
1818
+ meta: import_zod20.z.record(import_zod20.z.string(), import_zod20.z.unknown()).optional()
1819
1819
  };
1820
1820
  function registerRelationTools(server, client) {
1821
1821
  server.registerTool(
@@ -2115,7 +2115,7 @@ var webhookSchema = import_zod24.z.object({
2115
2115
  url: import_zod24.z.string().url(),
2116
2116
  actions: import_zod24.z.array(import_zod24.z.string()).optional().describe("Item events that trigger the webhook (e.g. create, update, delete)."),
2117
2117
  collections: import_zod24.z.array(import_zod24.z.string()).optional().describe("Collections to filter on (empty = all)."),
2118
- headers: import_zod24.z.record(import_zod24.z.string()).optional(),
2118
+ headers: import_zod24.z.record(import_zod24.z.string(), import_zod24.z.string()).optional(),
2119
2119
  status: import_zod24.z.enum(["active", "inactive"]).optional(),
2120
2120
  secret: import_zod24.z.string().nullable().optional()
2121
2121
  });
package/dist/index.js CHANGED
@@ -270,14 +270,14 @@ var policySchema = z3.object({
270
270
  ipDeny: z3.array(z3.string()).optional(),
271
271
  validFrom: z3.string().datetime().nullable().optional(),
272
272
  validUntil: z3.string().datetime().nullable().optional(),
273
- rules: z3.record(z3.unknown()).optional()
273
+ rules: z3.record(z3.string(), z3.unknown()).optional()
274
274
  });
275
275
  var permissionSchema = z3.object({
276
276
  collection: z3.string().min(1).max(64),
277
277
  action: z3.enum(["create", "read", "update", "delete", "share"]),
278
- permissions: z3.record(z3.unknown()).optional(),
279
- validation: z3.record(z3.unknown()).optional(),
280
- presets: z3.record(z3.unknown()).optional(),
278
+ permissions: z3.record(z3.string(), z3.unknown()).optional(),
279
+ validation: z3.record(z3.string(), z3.unknown()).optional(),
280
+ presets: z3.record(z3.string(), z3.unknown()).optional(),
281
281
  fields: z3.array(z3.string()).optional()
282
282
  });
283
283
  function registerAccessTools(server, client) {
@@ -419,7 +419,7 @@ function registerAccessTools(server, client) {
419
419
  "dry_run_access_import",
420
420
  {
421
421
  description: "Validate an RBAC manifest import without applying it. Returns the planned changes.",
422
- inputSchema: { manifest: z3.record(z3.unknown()).describe("RBAC manifest from export_access.") }
422
+ inputSchema: { manifest: z3.record(z3.string(), z3.unknown()).describe("RBAC manifest from export_access.") }
423
423
  },
424
424
  async ({ manifest }) => run(() => client.post("/access/import?dryRun=true", manifest))
425
425
  );
@@ -428,7 +428,7 @@ function registerAccessTools(server, client) {
428
428
  {
429
429
  description: "Apply an RBAC manifest import. High-impact \u2014 changes roles/policies/permissions. Pass confirm=true.",
430
430
  inputSchema: {
431
- manifest: z3.record(z3.unknown()).describe("RBAC manifest from export_access."),
431
+ manifest: z3.record(z3.string(), z3.unknown()).describe("RBAC manifest from export_access."),
432
432
  mode: z3.enum(["merge", "replace-managed", "replace-all"]).optional().describe("Import mode (default merge)."),
433
433
  confirm: z3.literal(true).describe(confirmDescription)
434
434
  }
@@ -457,7 +457,7 @@ var materializeSchema = z4.object({
457
457
  refreshStrategy: z4.enum(["auto", "cron", "manual"]).optional(),
458
458
  refreshCron: z4.string().optional(),
459
459
  projection: z4.object({ fields: z4.array(z4.string()).optional(), orderBy: z4.string().optional() }).optional(),
460
- filter: z4.record(z4.unknown()).optional()
460
+ filter: z4.record(z4.string(), z4.unknown()).optional()
461
461
  });
462
462
  function registerAdminTools(server, client) {
463
463
  server.registerTool(
@@ -526,16 +526,16 @@ import { z as z5 } from "zod";
526
526
  var intentSchema = z5.object({
527
527
  name: z5.string().min(1).max(120),
528
528
  collection: z5.string().min(1).max(120),
529
- rules: z5.array(z5.record(z5.unknown())).describe("SLO rules (required_fields, freshness, translations, link_health, \u2026)."),
529
+ rules: z5.array(z5.record(z5.string(), z5.unknown())).describe("SLO rules (required_fields, freshness, translations, link_health, \u2026)."),
530
530
  schedule: z5.string().describe("5-field cron expression for reconciliation cadence."),
531
- budget: z5.record(z5.unknown()).optional(),
531
+ budget: z5.record(z5.string(), z5.unknown()).optional(),
532
532
  autonomyCap: z5.number().int().min(0).max(4).optional().describe("Max autonomy level L0\u2013L4 for this intent."),
533
- maintenanceWindow: z5.record(z5.unknown()).nullable().optional()
533
+ maintenanceWindow: z5.record(z5.string(), z5.unknown()).nullable().optional()
534
534
  });
535
535
  var flowNode = z5.object({
536
536
  id: z5.string(),
537
537
  key: z5.string(),
538
- options: z5.record(z5.unknown()).optional(),
538
+ options: z5.record(z5.string(), z5.unknown()).optional(),
539
539
  next: z5.string().nullable().optional(),
540
540
  onError: z5.string().nullable().optional()
541
541
  });
@@ -544,7 +544,7 @@ var flowSchema = z5.object({
544
544
  description: z5.string().optional(),
545
545
  status: z5.enum(["active", "inactive", "draft"]).optional(),
546
546
  triggerType: z5.enum(["webhook", "event", "schedule", "manual"]),
547
- triggerOptions: z5.record(z5.unknown()).optional(),
547
+ triggerOptions: z5.record(z5.string(), z5.unknown()).optional(),
548
548
  graph: z5.object({
549
549
  entry: z5.string().optional(),
550
550
  nodes: z5.array(flowNode).optional()
@@ -602,7 +602,7 @@ function registerAgentTools(server, client) {
602
602
  description: "Trigger a manual run of a flow with an optional input payload.",
603
603
  inputSchema: {
604
604
  id: idPathSegmentSchema,
605
- input: z5.record(z5.unknown()).optional().describe("Initial context passed to the flow.")
605
+ input: z5.record(z5.string(), z5.unknown()).optional().describe("Initial context passed to the flow.")
606
606
  }
607
607
  },
608
608
  async ({ id, input }) => run(() => client.post(`/flows/${encodePathSegment(id)}/run`, input ?? {}))
@@ -643,7 +643,7 @@ function registerApiKeyTools(server, client) {
643
643
  name: z6.string().min(1).max(96),
644
644
  description: z6.string().max(512).optional(),
645
645
  expiresAt: z6.string().datetime().nullable().optional(),
646
- metadata: z6.record(z6.unknown()).optional()
646
+ metadata: z6.record(z6.string(), z6.unknown()).optional()
647
647
  }
648
648
  },
649
649
  async (input) => run(() => client.post("/api-keys", input))
@@ -772,7 +772,7 @@ function registerCdcTools(server, client) {
772
772
  {
773
773
  description: "Rewind a subscription checkpoint inside the retention window (resets dead/stale back to active).",
774
774
  inputSchema: {
775
- subscription_id: z7.string().describe("Subscription id."),
775
+ subscription_id: idPathSegmentSchema.describe("Subscription id."),
776
776
  occurred_after: z7.string().optional().describe("ISO timestamp to rewind to (within retention)."),
777
777
  cursor: z7.string().optional().describe("Exact cursor token to rewind to.")
778
778
  }
@@ -782,7 +782,7 @@ function registerCdcTools(server, client) {
782
782
  if (args.cursor) body.cursor = args.cursor;
783
783
  if (args.occurred_after) body.occurred_after = args.occurred_after;
784
784
  const result = await client.post(
785
- `/cdc/subscriptions/${encodeURIComponent(args.subscription_id)}/replay`,
785
+ `/cdc/subscriptions/${encodePathSegment(args.subscription_id)}/replay`,
786
786
  body
787
787
  );
788
788
  return { content: [{ type: "text", text: JSON.stringify(result) }] };
@@ -829,7 +829,7 @@ var fieldInputSchema = z8.object({
829
829
  width: z8.enum(["half", "full", "fill"]).optional(),
830
830
  sortOrder: z8.number().int().optional(),
831
831
  group: z8.string().optional(),
832
- options: z8.record(z8.unknown()).optional(),
832
+ options: z8.record(z8.string(), z8.unknown()).optional(),
833
833
  defaultValue: z8.unknown().optional()
834
834
  });
835
835
  function formatError2(err) {
@@ -981,10 +981,10 @@ var presetSchema = z9.object({
981
981
  userId: z9.string().nullable().optional(),
982
982
  roleId: z9.string().nullable().optional(),
983
983
  layout: z9.string().optional(),
984
- layoutQuery: z9.record(z9.unknown()).optional(),
985
- layoutOptions: z9.record(z9.unknown()).optional(),
984
+ layoutQuery: z9.record(z9.string(), z9.unknown()).optional(),
985
+ layoutOptions: z9.record(z9.string(), z9.unknown()).optional(),
986
986
  search: z9.string().nullable().optional(),
987
- filter: z9.record(z9.unknown()).optional(),
987
+ filter: z9.record(z9.string(), z9.unknown()).optional(),
988
988
  icon: z9.string().nullable().optional(),
989
989
  color: z9.string().nullable().optional(),
990
990
  refreshInterval: z9.number().int().min(0).optional()
@@ -1054,7 +1054,7 @@ function registerContentConfigTools(server, client) {
1054
1054
  description: "Create or update a setting (upsert by key).",
1055
1055
  inputSchema: {
1056
1056
  key: idPathSegmentSchema,
1057
- value: z9.record(z9.unknown()).describe("Arbitrary JSON value object for the setting."),
1057
+ value: z9.record(z9.string(), z9.unknown()).describe("Arbitrary JSON value object for the setting."),
1058
1058
  scope: z9.string().optional()
1059
1059
  }
1060
1060
  },
@@ -1202,7 +1202,7 @@ var extensionSchema = z12.object({
1202
1202
  type: z12.enum(EXTENSION_TYPES),
1203
1203
  enabled: z12.boolean().optional(),
1204
1204
  bundleUrl: z12.string().min(1).describe("https:, http:, or data:text/javascript bundle URL."),
1205
- manifest: z12.record(z12.string()).optional(),
1205
+ manifest: z12.record(z12.string(), z12.string()).optional(),
1206
1206
  capabilities: z12.array(z12.string()).optional()
1207
1207
  });
1208
1208
  function registerExtensionTools(server, client) {
@@ -1285,7 +1285,7 @@ function registerExtensionTools(server, client) {
1285
1285
  inputSchema: {
1286
1286
  extensionId: z12.string().min(1),
1287
1287
  marketplaceSlug: z12.string().min(1),
1288
- publisher: z12.record(z12.unknown()).optional(),
1288
+ publisher: z12.record(z12.string(), z12.unknown()).optional(),
1289
1289
  signature: z12.string().optional(),
1290
1290
  signatureAlg: z12.string().optional(),
1291
1291
  publisherKeyId: z12.string().optional(),
@@ -1317,8 +1317,8 @@ var fieldInputSchema2 = z13.object({
1317
1317
  precision: z13.number().int().positive().optional(),
1318
1318
  scale: z13.number().int().min(0).optional(),
1319
1319
  special: z13.array(z13.string()).optional(),
1320
- options: z13.record(z13.unknown()).optional(),
1321
- displayOptions: z13.record(z13.unknown()).optional(),
1320
+ options: z13.record(z13.string(), z13.unknown()).optional(),
1321
+ displayOptions: z13.record(z13.string(), z13.unknown()).optional(),
1322
1322
  conditions: z13.array(z13.unknown()).optional(),
1323
1323
  required: z13.boolean().optional().default(false),
1324
1324
  readonly: z13.boolean().optional().default(false),
@@ -1418,7 +1418,7 @@ var panelQueryShape = {
1418
1418
  aggregate: z14.enum(AGGREGATES).describe("Aggregate function. `field` is required for everything except `count`."),
1419
1419
  field: z14.string().min(1).optional().describe("Field to aggregate (required unless aggregate=count)."),
1420
1420
  groupBy: z14.string().min(1).optional().describe("Field to group rows by (produces a series)."),
1421
- filter: z14.record(z14.unknown()).optional().describe('Directus-style condition rule, e.g. { status: { _eq: "published" } }.'),
1421
+ filter: z14.record(z14.string(), z14.unknown()).optional().describe('Directus-style condition rule, e.g. { status: { _eq: "published" } }.'),
1422
1422
  dateRange: dateRangeSchema.optional(),
1423
1423
  limit: z14.number().int().min(1).max(1e3).optional().describe("Max grouped rows to return (default 50).")
1424
1424
  };
@@ -1454,7 +1454,7 @@ function registerInsightsTools(server, client) {
1454
1454
  inputSchema: {
1455
1455
  dashboardId: idPathSegmentSchema,
1456
1456
  panelId: idPathSegmentSchema,
1457
- filter: z14.record(z14.unknown()).optional().describe("Override the panel filter for this run (Directus-style condition rule)."),
1457
+ filter: z14.record(z14.string(), z14.unknown()).optional().describe("Override the panel filter for this run (Directus-style condition rule)."),
1458
1458
  dateRange: dateRangeSchema.optional().describe("Override the panel date range for this run.")
1459
1459
  }
1460
1460
  },
@@ -1556,7 +1556,7 @@ function registerItemTools(server, client) {
1556
1556
  description: "Create a new item in a collection.",
1557
1557
  inputSchema: {
1558
1558
  collection: collectionNameSchema,
1559
- data: z15.record(z15.unknown()).describe("Field values for the new item"),
1559
+ data: z15.record(z15.string(), z15.unknown()).describe("Field values for the new item"),
1560
1560
  status: z15.enum(["draft", "published"]).optional().default("draft")
1561
1561
  }
1562
1562
  },
@@ -1579,7 +1579,7 @@ function registerItemTools(server, client) {
1579
1579
  inputSchema: {
1580
1580
  collection: collectionNameSchema,
1581
1581
  id: idPathSegmentSchema,
1582
- data: z15.record(z15.unknown()).describe("Fields to update")
1582
+ data: z15.record(z15.string(), z15.unknown()).describe("Fields to update")
1583
1583
  }
1584
1584
  },
1585
1585
  async ({ collection, id, data: itemData }) => {
@@ -1792,7 +1792,7 @@ function registerPermissionTools(server, client) {
1792
1792
  inputSchema: {
1793
1793
  collection: z19.string().min(1),
1794
1794
  action: z19.enum(["create", "read", "update", "delete", "share"]),
1795
- item: z19.record(z19.unknown()).optional().describe("Item payload to evaluate row-level rules against.")
1795
+ item: z19.record(z19.string(), z19.unknown()).optional().describe("Item payload to evaluate row-level rules against.")
1796
1796
  }
1797
1797
  },
1798
1798
  async (input) => run(() => client.post("/permissions/check", input))
@@ -1814,7 +1814,7 @@ var relationInputSchema = {
1814
1814
  junctionOneField: z20.string().nullable().optional(),
1815
1815
  sortField: z20.string().nullable().optional(),
1816
1816
  onDelete: z20.enum(["restrict", "cascade", "set null", "no action"]).optional(),
1817
- meta: z20.record(z20.unknown()).optional()
1817
+ meta: z20.record(z20.string(), z20.unknown()).optional()
1818
1818
  };
1819
1819
  function registerRelationTools(server, client) {
1820
1820
  server.registerTool(
@@ -2114,7 +2114,7 @@ var webhookSchema = z24.object({
2114
2114
  url: z24.string().url(),
2115
2115
  actions: z24.array(z24.string()).optional().describe("Item events that trigger the webhook (e.g. create, update, delete)."),
2116
2116
  collections: z24.array(z24.string()).optional().describe("Collections to filter on (empty = all)."),
2117
- headers: z24.record(z24.string()).optional(),
2117
+ headers: z24.record(z24.string(), z24.string()).optional(),
2118
2118
  status: z24.enum(["active", "inactive"]).optional(),
2119
2119
  secret: z24.string().nullable().optional()
2120
2120
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumibase/mcp-server",
3
- "version": "0.24.1",
3
+ "version": "0.26.0",
4
4
  "description": "LumiBase MCP server — lets AI assistants manage the full LumiBase Content OS: collections, fields, items, relations, RBAC (roles/policies/permissions/API keys), users & teams, intents, flows, webhooks, translations & translation memory, search, media & transform presets, read-only insights, presets, editorial workflow, content releases, share links, read-only deployments, extensions, and site administration.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -26,11 +26,11 @@
26
26
  "access": "public"
27
27
  },
28
28
  "dependencies": {
29
- "@modelcontextprotocol/sdk": "^1.12.1",
30
- "zod": "^3.25.51"
29
+ "@modelcontextprotocol/sdk": "^1.30.0",
30
+ "zod": "^4.4.3"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/node": "^22.0.0",
33
+ "@types/node": "^26.2.0",
34
34
  "tsup": "^8.5.1",
35
35
  "typescript": "^5.6.2",
36
36
  "vitest": "^4.1.10"