@burdenoff/mcp-libs 2026.1007.1 → 2026.1007.2

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.
@@ -716,8 +716,8 @@ var RESUME_RUN = `
716
716
  }
717
717
  `;
718
718
  var RETRY_RUN = `
719
- mutation RetryNode($id: ID!, $nodeId: String!) {
720
- retryNode(id: $id, nodeId: $nodeId) {
719
+ mutation RetryNode($id: ID!) {
720
+ retryNode(id: $id) {
721
721
  id
722
722
  nodeId
723
723
  nodeType
@@ -727,25 +727,6 @@ var RETRY_RUN = `
727
727
  }
728
728
  }
729
729
  `;
730
- var CREATE_CREDENTIAL = `
731
- mutation CreateCredential($input: CreateConnectionInput!) {
732
- createConnection(input: $input) {
733
- id
734
- name
735
- description
736
- status
737
- providerId
738
- provider {
739
- id
740
- key
741
- name
742
- authType
743
- }
744
- credentialSource
745
- createdAt
746
- }
747
- }
748
- `;
749
730
  var AUTHENTICATE_CREDENTIAL_API_KEY = `
750
731
  mutation AuthenticateCredentialApiKey($input: ApiKeyAuthInput!) {
751
732
  authenticateWithApiKey(input: $input) {
@@ -1007,30 +988,6 @@ function registerCredentialTools(server, ctx, track) {
1007
988
  return jsonResult(data.getProviders);
1008
989
  })
1009
990
  );
1010
- server.registerTool(
1011
- track(mcpToolName(ctx.productName, "credentials_create")),
1012
- {
1013
- title: "Create Credential",
1014
- description: "Create a connection against a provider. Secrets go to the vault; pass a reference, never a raw secret in config.",
1015
- inputSchema: {
1016
- name: z.string().describe("Connection name"),
1017
- providerId: z.string().describe("Provider ID"),
1018
- description: z.string().optional().describe("Description"),
1019
- config: z.unknown().optional().describe("Non-secret provider config as JSON"),
1020
- context: z.unknown().optional().describe("Context JSON"),
1021
- vaultId: z.string().optional().describe("Vault to store secret material in"),
1022
- credentialSecretId: z.string().optional().describe("Existing vault secret reference"),
1023
- managedSecretName: z.string().optional().describe("Managed secret name")
1024
- }
1025
- },
1026
- async (args) => runTool(ctx, "credentials_create", async () => {
1027
- const data = await ctx.gql.workspace.request(
1028
- CREATE_CREDENTIAL,
1029
- { input: definedInput({ ...args }) }
1030
- );
1031
- return jsonResult(data.createConnection);
1032
- })
1033
- );
1034
991
  server.registerTool(
1035
992
  track(mcpToolName(ctx.productName, "credentials_update")),
1036
993
  {
@@ -1123,6 +1080,11 @@ function registerCredentialTools(server, ctx, track) {
1123
1080
  })
1124
1081
  );
1125
1082
  }
1083
+ var ISO_DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
1084
+ function normalizeDate(value, endOfDay) {
1085
+ if (typeof value !== "string" || !ISO_DATE_ONLY.test(value)) return value;
1086
+ return `${value}T${endOfDay ? "23:59:59" : "00:00:00"}Z`;
1087
+ }
1126
1088
  function registerInsightTools(server, ctx, track) {
1127
1089
  server.registerTool(
1128
1090
  track(mcpToolName(ctx.productName, "dashboard_summary")),
@@ -1154,8 +1116,13 @@ function registerInsightTools(server, ctx, track) {
1154
1116
  }
1155
1117
  },
1156
1118
  async (args) => runTool(ctx, "usage_metrics", async () => {
1119
+ const normalised = {
1120
+ ...args,
1121
+ startDate: normalizeDate(args.startDate, false),
1122
+ endDate: normalizeDate(args.endDate, true)
1123
+ };
1157
1124
  const data = await ctx.gql.workspace.request(GET_USAGE_METRICS, {
1158
- input: definedInput({ ...args })
1125
+ input: definedInput(normalised)
1159
1126
  });
1160
1127
  return jsonResult(data.usageMetrics);
1161
1128
  })
@@ -1390,10 +1357,14 @@ function registerRunTools(server, ctx, track) {
1390
1357
  nodeId: z.string().describe("Node ID to retry")
1391
1358
  }
1392
1359
  },
1393
- async ({ id, nodeId }) => runTool(ctx, "runs_retry_node", async () => {
1360
+ async ({ id: runId, nodeId }) => runTool(ctx, "runs_retry_node", async () => {
1361
+ const runData = await ctx.gql.workspace.request(GET_RUN, { id: runId });
1362
+ const state = runData.workflowRun?.nodeStates?.find((s) => s.nodeId === nodeId);
1363
+ if (!state) {
1364
+ return errorResult(`No node state found for run ${runId} node ${nodeId}`);
1365
+ }
1394
1366
  const data = await ctx.gql.workspace.request(RETRY_RUN, {
1395
- id,
1396
- nodeId
1367
+ id: state.id
1397
1368
  });
1398
1369
  return jsonResult(data.retryNode);
1399
1370
  })
@@ -1537,13 +1508,13 @@ function registerWebhookTools(server, ctx, track) {
1537
1508
  track(mcpToolName(ctx.productName, "webhooks_create")),
1538
1509
  {
1539
1510
  title: "Create Webhook",
1540
- description: "Register an event source that triggers a workflow. triggerNodeId names the trigger node the event enters at.",
1511
+ description: 'Register an event source that triggers a workflow. triggerNodeId names the trigger node the event enters at. eventSource and eventType are required by the server schema (CreateEventRegistrationInput!); marking them optional in the tool wrapper produced a "Field eventSource of required type String! was not provided" error on every call (BOFF-8204).',
1541
1512
  inputSchema: {
1542
1513
  name: z.string().describe("Registration name"),
1543
1514
  workflowKey: z.string().describe("Workflow key to trigger"),
1544
1515
  triggerNodeId: z.string().describe("Trigger node ID"),
1545
- eventSource: z.string().optional().describe("Event source identifier"),
1546
- eventType: z.string().optional().describe("Event type"),
1516
+ eventSource: z.string().describe("Event source identifier"),
1517
+ eventType: z.string().describe("Event type"),
1547
1518
  description: z.string().optional().describe("Description"),
1548
1519
  config: z.unknown().optional().describe("Source-specific config as JSON"),
1549
1520
  payloadMapping: z.unknown().optional().describe("Payload mapping as JSON"),