@doist/automations-mcp 1.2.0 → 1.3.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.
@@ -8559,8 +8559,8 @@ function validateManifestResultFrom(data, ctx) {
8559
8559
  });
8560
8560
  return;
8561
8561
  }
8562
- const outputSchema21 = referencedStep.outputSchema;
8563
- if (!outputSchema21) {
8562
+ const outputSchema23 = referencedStep.outputSchema;
8563
+ if (!outputSchema23) {
8564
8564
  ctx.addIssue({
8565
8565
  code: z7.ZodIssueCode.custom,
8566
8566
  message: `resultFrom.stepId references step "${referencedStep.id}" without an outputSchema.`,
@@ -8569,7 +8569,7 @@ function validateManifestResultFrom(data, ctx) {
8569
8569
  return;
8570
8570
  }
8571
8571
  if (!data.resultFrom.path) {
8572
- if (!isPlainStringSchema(outputSchema21)) {
8572
+ if (!isPlainStringSchema(outputSchema23)) {
8573
8573
  ctx.addIssue({
8574
8574
  code: z7.ZodIssueCode.custom,
8575
8575
  message: "resultFrom.path may be omitted only when the referenced step outputSchema is a string.",
@@ -8579,7 +8579,7 @@ function validateManifestResultFrom(data, ctx) {
8579
8579
  return;
8580
8580
  }
8581
8581
  const propertyPath = data.resultFrom.path.split(".");
8582
- const resolvedSchema = resolvePropertySchemaInSchema(outputSchema21, propertyPath);
8582
+ const resolvedSchema = resolvePropertySchemaInSchema(outputSchema23, propertyPath);
8583
8583
  if (!resolvedSchema) {
8584
8584
  ctx.addIssue({
8585
8585
  code: z7.ZodIssueCode.custom,
@@ -8628,11 +8628,11 @@ function validateIfConditionLiteral({ condition, context, stepId }) {
8628
8628
  const referencedStepId = parts[1];
8629
8629
  if (!referencedStepId)
8630
8630
  return null;
8631
- const outputSchema21 = context.steps.get(referencedStepId);
8632
- if (!outputSchema21)
8631
+ const outputSchema23 = context.steps.get(referencedStepId);
8632
+ if (!outputSchema23)
8633
8633
  return null;
8634
8634
  const propertyPath = parts.slice(2);
8635
- const resolved = propertyPath.length === 0 ? outputSchema21 : resolvePropertySchemaInSchema(outputSchema21, propertyPath);
8635
+ const resolved = propertyPath.length === 0 ? outputSchema23 : resolvePropertySchemaInSchema(outputSchema23, propertyPath);
8636
8636
  if (!resolved)
8637
8637
  return null;
8638
8638
  return ifConditionLiteralError({ reference, literal, stepId, schema: resolved });
@@ -11390,6 +11390,14 @@ var WorkspaceAutomationDraftsClient = class extends BaseClient {
11390
11390
  });
11391
11391
  return automationDraftWithValidationSchema.parse(data);
11392
11392
  }
11393
+ /** Deletes the draft. Only its owner can; the API answers 404 otherwise. */
11394
+ async delete(workspaceId, draftId, options) {
11395
+ await this.request({
11396
+ method: "DELETE",
11397
+ path: workspaceAutomationDraftsEndpoints.detail(IdSchema.parse(workspaceId), IdSchema.parse(draftId)),
11398
+ options
11399
+ });
11400
+ }
11393
11401
  };
11394
11402
 
11395
11403
  // ../../packages/sdk/dist/esm/clients/workspace-chat/endpoints.js
@@ -11508,6 +11516,17 @@ var WorkspaceAutomationsClient = class extends BaseClient {
11508
11516
  options
11509
11517
  });
11510
11518
  }
11519
+ /**
11520
+ * Deletes the automation. Workspace admins may delete another member's
11521
+ * team-visible automation; a private one is only reachable by its creator.
11522
+ */
11523
+ async delete(workspaceId, id, options) {
11524
+ await this.request({
11525
+ method: "DELETE",
11526
+ path: workspaceAutomationsEndpoints.detail(IdSchema.parse(workspaceId), IdSchema.parse(id)),
11527
+ options
11528
+ });
11529
+ }
11511
11530
  };
11512
11531
 
11513
11532
  // ../../packages/sdk/dist/esm/clients/workspaces/endpoints.js
@@ -12917,7 +12936,7 @@ import { McpServer } from "@modelcontextprotocol/server";
12917
12936
  // package.json
12918
12937
  var package_default = {
12919
12938
  name: "@doist/automations-mcp",
12920
- version: "1.2.0",
12939
+ version: "1.3.0",
12921
12940
  description: "MCP server and importable AI tools for Todoist Automations",
12922
12941
  type: "module",
12923
12942
  main: "./dist/index.js",
@@ -12980,7 +12999,7 @@ var package_default = {
12980
12999
  "gpt-tokenizer": "4.0.0",
12981
13000
  "semantic-release": "25.0.9",
12982
13001
  "semantic-release-monorepo": "8.0.2",
12983
- tsx: "4.23.13",
13002
+ tsx: "4.23.15",
12984
13003
  typescript: "6.0.3",
12985
13004
  vitest: "4.1.11"
12986
13005
  },
@@ -13133,7 +13152,7 @@ function registerTool({
13133
13152
  transport
13134
13153
  }) {
13135
13154
  const execute = tool.execute;
13136
- const { input: inputSchema, output: outputSchema21 } = getToolSchemas(tool);
13155
+ const { input: inputSchema, output: outputSchema23 } = getToolSchemas(tool);
13137
13156
  const callback = async (args, ctx) => {
13138
13157
  try {
13139
13158
  const { textContent, structuredContent } = await execute(args, {
@@ -13160,7 +13179,7 @@ function registerTool({
13160
13179
  {
13161
13180
  description: tool.description,
13162
13181
  inputSchema,
13163
- ...outputSchema21 ? { outputSchema: outputSchema21 } : {},
13182
+ ...outputSchema23 ? { outputSchema: outputSchema23 } : {},
13164
13183
  annotations: getMcpAnnotations(tool)
13165
13184
  },
13166
13185
  callback
@@ -13663,6 +13682,8 @@ var ToolNames = {
13663
13682
  SET_AUTOMATION_VISIBILITY: "set-automation-visibility",
13664
13683
  MOVE_AUTOMATION: "move-automation",
13665
13684
  TRIGGER_AUTOMATION: "trigger-automation",
13685
+ DELETE_AUTOMATION: "delete-automation",
13686
+ DELETE_DRAFT: "delete-draft",
13666
13687
  // Connection
13667
13688
  CONNECT_SERVICE: "connect-service",
13668
13689
  CHECK_CONNECTION: "check-connection",
@@ -13928,26 +13949,101 @@ var continueConversation = {
13928
13949
  }
13929
13950
  };
13930
13951
 
13931
- // src/tools/disconnect-service.ts
13952
+ // src/tools/delete-automation.ts
13953
+ import { z as z65 } from "zod";
13954
+
13955
+ // src/utils/workspace-scope.ts
13932
13956
  import { z as z64 } from "zod";
13957
+ var workspaceIdParameter = z64.string().optional().describe(
13958
+ "Act on this Todoist workspace. Omit for the personal space. The two are separate: a workspace automation is not found in the personal space, and vice versa."
13959
+ );
13960
+ var requiredWorkspaceIdParameter = z64.string().describe("The Todoist workspace, as returned by list-workspaces.");
13961
+ function describeVisibility(visibility) {
13962
+ return visibility === "workspace" ? "visible to the workspace" : "private to its creator";
13963
+ }
13964
+ function describeScope(workspaceId) {
13965
+ return workspaceId === void 0 ? "personal" : `workspace ${workspaceId}`;
13966
+ }
13967
+
13968
+ // src/tools/delete-automation.ts
13933
13969
  var parameters4 = {
13934
- connectionId: z64.string().describe("The connection to remove, as listed by get-connector."),
13935
- force: z64.boolean().optional().describe(
13970
+ automationId: z65.string().describe("The automation to delete, as listed by find-automations or get-automation."),
13971
+ workspaceId: workspaceIdParameter
13972
+ };
13973
+ var outputSchema3 = {
13974
+ automationId: z65.string(),
13975
+ deleted: z65.boolean()
13976
+ };
13977
+ var deleteAutomation = {
13978
+ name: ToolNames.DELETE_AUTOMATION,
13979
+ description: "Permanently deletes an automation, along with its schedule, run history and any unpublished edits. This cannot be undone. Takes effect immediately with no confirmation of its own, so read it first with get-automation so it is the right one and confirm intent with the user before calling. In a workspace, a member can delete only automations they created; a workspace admin can also delete another member\u2019s team-visible automation, but not a private one.",
13980
+ parameters: parameters4,
13981
+ outputSchema: outputSchema3,
13982
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
13983
+ async execute({ automationId, workspaceId }, { api, signal }) {
13984
+ const options = { signal };
13985
+ if (workspaceId === void 0) {
13986
+ await api.automations.delete(automationId, options);
13987
+ } else {
13988
+ await api.workspaceAutomations.delete(workspaceId, automationId, options);
13989
+ }
13990
+ return {
13991
+ textContent: `Automation ${automationId} deleted (${describeScope(workspaceId)}).`,
13992
+ structuredContent: { automationId, deleted: true }
13993
+ };
13994
+ }
13995
+ };
13996
+
13997
+ // src/tools/delete-draft.ts
13998
+ import { z as z66 } from "zod";
13999
+ var parameters5 = {
14000
+ draftId: z66.string().describe("The draft to delete, as listed by find-drafts or get-draft."),
14001
+ workspaceId: workspaceIdParameter
14002
+ };
14003
+ var outputSchema4 = {
14004
+ draftId: z66.string(),
14005
+ deleted: z66.boolean()
14006
+ };
14007
+ var deleteDraft = {
14008
+ name: ToolNames.DELETE_DRAFT,
14009
+ description: "Permanently deletes a draft the user owns, discarding whatever has been authored in it. This cannot be undone. Takes effect immediately with no confirmation of its own, so read it first with get-draft so it is the right one and confirm intent with the user before calling. Deleting the last draft of a conversation archives that conversation. A published automation the draft was editing is untouched.",
14010
+ parameters: parameters5,
14011
+ outputSchema: outputSchema4,
14012
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
14013
+ async execute({ draftId, workspaceId }, { api, signal }) {
14014
+ const options = { signal };
14015
+ if (workspaceId === void 0) {
14016
+ await api.automationDrafts.delete(draftId, options);
14017
+ } else {
14018
+ await api.workspaceAutomationDrafts.delete(workspaceId, draftId, options);
14019
+ }
14020
+ return {
14021
+ textContent: `Draft ${draftId} deleted (${describeScope(workspaceId)}).`,
14022
+ structuredContent: { draftId, deleted: true }
14023
+ };
14024
+ }
14025
+ };
14026
+
14027
+ // src/tools/disconnect-service.ts
14028
+ import { z as z67 } from "zod";
14029
+ var parameters6 = {
14030
+ connectionId: z67.string().describe("The connection to remove, as listed by get-connector."),
14031
+ force: z67.boolean().optional().describe(
13936
14032
  "Disconnect even though enabled automations still use the connection. They stop working until a new connection is linked. Only after the user has agreed."
13937
14033
  )
13938
14034
  };
13939
- var outputSchema3 = {
13940
- connectionId: z64.string(),
13941
- disconnected: z64.boolean(),
13942
- blockingAutomations: z64.array(blockingAutomationSchema).optional().describe(
14035
+ var outputSchema5 = {
14036
+ connectionId: z67.string(),
14037
+ disconnected: z67.boolean(),
14038
+ blockingAutomations: z67.array(blockingAutomationSchema).optional().describe(
13943
14039
  "Present when disconnected is false: the enabled automations that still use the connection."
13944
14040
  )
13945
14041
  };
13946
14042
  var disconnectService = {
13947
14043
  name: ToolNames.DISCONNECT_SERVICE,
13948
14044
  description: "Removes a linked account. Refuses, and lists them, when enabled automations still use the connection: disable those with update-automation first, or pass force after the user has agreed to break them. Disabled automations do not block it but need a new connection before they can run again. Takes effect immediately with no confirmation of its own, so confirm intent with the user first; get-connector with includeAutomations shows what depends on the service.",
13949
- parameters: parameters4,
13950
- outputSchema: outputSchema3,
14045
+ parameters: parameters6,
14046
+ outputSchema: outputSchema5,
13951
14047
  annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
13952
14048
  async execute({ connectionId, force }, { api, signal }) {
13953
14049
  try {
@@ -13971,45 +14067,32 @@ var disconnectService = {
13971
14067
  };
13972
14068
 
13973
14069
  // src/tools/find-automations.ts
13974
- import { z as z67 } from "zod";
14070
+ import { z as z69 } from "zod";
13975
14071
 
13976
14072
  // src/utils/pagination.ts
13977
- import { z as z65 } from "zod";
14073
+ import { z as z68 } from "zod";
13978
14074
  var paginationParameters = {
13979
- cursor: z65.string().optional().describe("Cursor from a previous call to fetch the next page. Omit for the first page."),
13980
- limit: z65.number().int().min(1).max(MAX_PAGINATION_LIMIT).optional().describe(`Page size, at most ${MAX_PAGINATION_LIMIT}. Omit for the default.`)
14075
+ cursor: z68.string().optional().describe("Cursor from a previous call to fetch the next page. Omit for the first page."),
14076
+ limit: z68.number().int().min(1).max(MAX_PAGINATION_LIMIT).optional().describe(`Page size, at most ${MAX_PAGINATION_LIMIT}. Omit for the default.`)
13981
14077
  };
13982
14078
  var paginationOutput = {
13983
- nextCursor: z65.string().optional().describe("Pass as `cursor` to fetch the next page. Absent when this page is the last.")
14079
+ nextCursor: z68.string().optional().describe("Pass as `cursor` to fetch the next page. Absent when this page is the last.")
13984
14080
  };
13985
14081
 
13986
- // src/utils/workspace-scope.ts
13987
- import { z as z66 } from "zod";
13988
- var workspaceIdParameter = z66.string().optional().describe(
13989
- "Act on this Todoist workspace. Omit for the personal space. The two are separate: a workspace automation is not found in the personal space, and vice versa."
13990
- );
13991
- var requiredWorkspaceIdParameter = z66.string().describe("The Todoist workspace, as returned by list-workspaces.");
13992
- function describeVisibility(visibility) {
13993
- return visibility === "workspace" ? "visible to the workspace" : "private to its creator";
13994
- }
13995
- function describeScope(workspaceId) {
13996
- return workspaceId === void 0 ? "personal" : `workspace ${workspaceId}`;
13997
- }
13998
-
13999
14082
  // src/tools/find-automations.ts
14000
- var parameters5 = {
14083
+ var parameters7 = {
14001
14084
  workspaceId: workspaceIdParameter,
14002
14085
  ...paginationParameters
14003
14086
  };
14004
- var outputSchema4 = {
14005
- automations: z67.array(automationSummarySchema),
14087
+ var outputSchema6 = {
14088
+ automations: z69.array(automationSummarySchema),
14006
14089
  ...paginationOutput
14007
14090
  };
14008
14091
  var findAutomations = {
14009
14092
  name: ToolNames.FIND_AUTOMATIONS,
14010
14093
  description: "Lists automations with their state and triggers, one page at a time. Use it to find the id of an automation before inspecting or changing it; ids are opaque and there is no lookup by name. Returns summaries without the manifest body.",
14011
- parameters: parameters5,
14012
- outputSchema: outputSchema4,
14094
+ parameters: parameters7,
14095
+ outputSchema: outputSchema6,
14013
14096
  annotations: {
14014
14097
  readOnlyHint: true,
14015
14098
  destructiveHint: false,
@@ -14031,26 +14114,26 @@ var findAutomations = {
14031
14114
  };
14032
14115
 
14033
14116
  // src/tools/find-connectors.ts
14034
- import { z as z68 } from "zod";
14035
- var parameters6 = {
14036
- query: z68.string().optional().describe("Text to match against connector names and descriptions. Ids are not searched."),
14117
+ import { z as z70 } from "zod";
14118
+ var parameters8 = {
14119
+ query: z70.string().optional().describe("Text to match against connector names and descriptions. Ids are not searched."),
14037
14120
  capability: connectorCapabilitySchema.optional().describe(
14038
14121
  "Only connectors offering this capability. Does not narrow the connections listed under each."
14039
14122
  ),
14040
- connectionStatus: z68.enum(CONNECTION_STATUSES).optional().describe(
14123
+ connectionStatus: z70.enum(CONNECTION_STATUSES).optional().describe(
14041
14124
  "Only connectors the user has a connection in this state for. With `capability`, the same connection must cover that capability."
14042
14125
  ),
14043
- withoutConnections: z68.boolean().optional().describe(
14126
+ withoutConnections: z70.boolean().optional().describe(
14044
14127
  "Only connectors the user has no connection for. Cannot combine with connectionStatus."
14045
14128
  ),
14046
- includeConnections: z68.boolean().optional().describe(
14129
+ includeConnections: z70.boolean().optional().describe(
14047
14130
  "Whether to list the user's connections under each connector. Defaults to true; false skips the lookup and disables the connection filters."
14048
14131
  )
14049
14132
  };
14050
- var outputSchema5 = {
14051
- connectors: z68.array(
14133
+ var outputSchema7 = {
14134
+ connectors: z70.array(
14052
14135
  connectorSummarySchema.extend({
14053
- connections: z68.array(connectorConnectionSummarySchema).optional().describe(
14136
+ connections: z70.array(connectorConnectionSummarySchema).optional().describe(
14054
14137
  "The user's connections for this connector. Absent when includeConnections is false."
14055
14138
  )
14056
14139
  })
@@ -14059,8 +14142,8 @@ var outputSchema5 = {
14059
14142
  var findConnectors = {
14060
14143
  name: ToolNames.FIND_CONNECTORS,
14061
14144
  description: "Lists the services automations can use, with the user's connections to each. A connector is a service such as GitHub; a connection is one authorised account for it. Use it to see what is available, what the user has already linked, and which connector id to pass to get-connector.",
14062
- parameters: parameters6,
14063
- outputSchema: outputSchema5,
14145
+ parameters: parameters8,
14146
+ outputSchema: outputSchema7,
14064
14147
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14065
14148
  async execute({ query, capability, connectionStatus, withoutConnections, includeConnections = true }, { api, signal }) {
14066
14149
  if (!includeConnections && (connectionStatus || withoutConnections)) {
@@ -14093,19 +14176,19 @@ var findConnectors = {
14093
14176
  };
14094
14177
 
14095
14178
  // src/tools/find-conversations.ts
14096
- import { z as z69 } from "zod";
14097
- var parameters7 = {
14179
+ import { z as z71 } from "zod";
14180
+ var parameters9 = {
14098
14181
  status: chatConversationStatusSchema.optional().describe(
14099
14182
  'Defaults to "active". Publishing an automation archives its conversation, so pass "archived" or "all" to find the conversation behind a published automation.'
14100
14183
  ),
14101
- limit: z69.number().int().min(1).max(200).optional().describe("At most this many, newest first. Defaults to 10.")
14184
+ limit: z71.number().int().min(1).max(200).optional().describe("At most this many, newest first. Defaults to 10.")
14102
14185
  };
14103
- var outputSchema6 = { conversations: z69.array(conversationSummarySchema) };
14186
+ var outputSchema8 = { conversations: z71.array(conversationSummarySchema) };
14104
14187
  var findConversations = {
14105
14188
  name: ToolNames.FIND_CONVERSATIONS,
14106
14189
  description: "Lists the user's conversations with the Automations agent, newest first. A conversation is one authoring session: it writes to a draft and ends when the automation is published. Use it to find a session to resume or to read; get-conversation has the messages and whether the agent is waiting on something.",
14107
- parameters: parameters7,
14108
- outputSchema: outputSchema6,
14190
+ parameters: parameters9,
14191
+ outputSchema: outputSchema8,
14109
14192
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14110
14193
  async execute({ status, limit }, { api, signal }) {
14111
14194
  const dtos = await api.chat.listConversations({ status, limit }, { signal });
@@ -14119,20 +14202,20 @@ var findConversations = {
14119
14202
  };
14120
14203
 
14121
14204
  // src/tools/find-drafts.ts
14122
- import { z as z70 } from "zod";
14123
- var parameters8 = {
14205
+ import { z as z72 } from "zod";
14206
+ var parameters10 = {
14124
14207
  workspaceId: workspaceIdParameter,
14125
14208
  ...paginationParameters
14126
14209
  };
14127
- var outputSchema7 = {
14128
- drafts: z70.array(draftSummarySchema),
14210
+ var outputSchema9 = {
14211
+ drafts: z72.array(draftSummarySchema),
14129
14212
  ...paginationOutput
14130
14213
  };
14131
14214
  var findDrafts = {
14132
14215
  name: ToolNames.FIND_DRAFTS,
14133
14216
  description: "Lists automation drafts, one page at a time. A draft is an automation being authored or edited that has not been published yet; chat conversations write to drafts. Returns summaries without the manifest; get-draft has the manifest and whether it is ready to publish.",
14134
- parameters: parameters8,
14135
- outputSchema: outputSchema7,
14217
+ parameters: parameters10,
14218
+ outputSchema: outputSchema9,
14136
14219
  annotations: {
14137
14220
  readOnlyHint: true,
14138
14221
  destructiveHint: false,
@@ -14154,11 +14237,11 @@ var findDrafts = {
14154
14237
  };
14155
14238
 
14156
14239
  // src/tools/find-runs.ts
14157
- import { z as z71 } from "zod";
14158
- var parameters9 = {
14159
- automationId: z71.string().describe("The id of the automation, as returned by find-automations."),
14240
+ import { z as z73 } from "zod";
14241
+ var parameters11 = {
14242
+ automationId: z73.string().describe("The id of the automation, as returned by find-automations."),
14160
14243
  workspaceId: workspaceIdParameter,
14161
- status: z71.enum(AUTOMATION_RUN_STATUSES).optional().describe(
14244
+ status: z73.enum(AUTOMATION_RUN_STATUSES).optional().describe(
14162
14245
  "Only runs with this outcome. A run refused for an empty balance is `skipped`, not `failed`."
14163
14246
  ),
14164
14247
  since: isoDateTimeOrDateQueryParamSchema.optional().describe(
@@ -14169,12 +14252,12 @@ var parameters9 = {
14169
14252
  ),
14170
14253
  ...paginationParameters
14171
14254
  };
14172
- var outputSchema8 = { runs: z71.array(runSummarySchema), ...paginationOutput };
14255
+ var outputSchema10 = { runs: z73.array(runSummarySchema), ...paginationOutput };
14173
14256
  var findRuns = {
14174
14257
  name: ToolNames.FIND_RUNS,
14175
14258
  description: "Lists the runs of one automation, newest first, one page at a time, with the outcome and failure reason of each. Use it to see whether an automation has been running and how it ended; get-run gives the steps of one run. Filters apply to when the run started.",
14176
- parameters: parameters9,
14177
- outputSchema: outputSchema8,
14259
+ parameters: parameters11,
14260
+ outputSchema: outputSchema10,
14178
14261
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14179
14262
  async execute({ automationId, workspaceId, status, since, until, cursor, limit }, { api, signal }) {
14180
14263
  const options = { signal };
@@ -14193,15 +14276,15 @@ var findRuns = {
14193
14276
  };
14194
14277
 
14195
14278
  // src/tools/get-automation.ts
14196
- import { z as z72 } from "zod";
14197
- var parameters10 = {
14198
- automationId: z72.string().describe("The id of the automation, as returned by find-automations."),
14279
+ import { z as z74 } from "zod";
14280
+ var parameters12 = {
14281
+ automationId: z74.string().describe("The id of the automation, as returned by find-automations."),
14199
14282
  workspaceId: workspaceIdParameter
14200
14283
  };
14201
- var outputSchema9 = {
14284
+ var outputSchema11 = {
14202
14285
  automation: automationSummarySchema.extend({
14203
- draftId: z72.string().optional().describe("The draft holding unpublished edits to this automation, when there is one."),
14204
- manifest: z72.record(z72.string(), z72.unknown()).optional().describe(
14286
+ draftId: z74.string().optional().describe("The draft holding unpublished edits to this automation, when there is one."),
14287
+ manifest: z74.record(z74.string(), z74.unknown()).optional().describe(
14205
14288
  "The stored manifest: triggers, steps and settings. Absent when there is none."
14206
14289
  )
14207
14290
  })
@@ -14209,8 +14292,8 @@ var outputSchema9 = {
14209
14292
  var getAutomation = {
14210
14293
  name: ToolNames.GET_AUTOMATION,
14211
14294
  description: "Returns one automation in full, including its manifest. Use it to inspect what an automation does; find-automations gives the summary and the id.",
14212
- parameters: parameters10,
14213
- outputSchema: outputSchema9,
14295
+ parameters: parameters12,
14296
+ outputSchema: outputSchema11,
14214
14297
  annotations: {
14215
14298
  readOnlyHint: true,
14216
14299
  destructiveHint: false,
@@ -14233,23 +14316,23 @@ var getAutomation = {
14233
14316
  };
14234
14317
 
14235
14318
  // src/tools/get-connector.ts
14236
- import { z as z73 } from "zod";
14237
- var parameters11 = {
14238
- connectorId: z73.string().describe('The connector slug, such as "github", as listed by find-connectors.'),
14239
- includeAutomations: z73.boolean().optional().describe(
14319
+ import { z as z75 } from "zod";
14320
+ var parameters13 = {
14321
+ connectorId: z75.string().describe('The connector slug, such as "github", as listed by find-connectors.'),
14322
+ includeAutomations: z75.boolean().optional().describe(
14240
14323
  "Also list the published automations that use this connector, with whether each has a working connection."
14241
14324
  )
14242
14325
  };
14243
- var outputSchema10 = {
14326
+ var outputSchema12 = {
14244
14327
  connector: connectorDetailSchema,
14245
- connections: z73.array(connectionSummarySchema).describe("The user's connections for this connector. Empty when none is linked."),
14246
- automations: z73.array(dependentAutomationSchema).optional().describe("Present when includeAutomations is true.")
14328
+ connections: z75.array(connectionSummarySchema).describe("The user's connections for this connector. Empty when none is linked."),
14329
+ automations: z75.array(dependentAutomationSchema).optional().describe("Present when includeAutomations is true.")
14247
14330
  };
14248
14331
  var getConnector = {
14249
14332
  name: ToolNames.GET_CONNECTOR,
14250
14333
  description: "Returns one connector with the events it can trigger on and the user's connections to it. Use it before connecting a service to see what it offers and whether an account is already linked, and with includeAutomations to see what depends on it before disconnecting.",
14251
- parameters: parameters11,
14252
- outputSchema: outputSchema10,
14334
+ parameters: parameters13,
14335
+ outputSchema: outputSchema12,
14253
14336
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14254
14337
  async execute({ connectorId, includeAutomations = false }, { api, signal }) {
14255
14338
  const options = { signal };
@@ -14278,13 +14361,13 @@ var getConnector = {
14278
14361
  };
14279
14362
 
14280
14363
  // src/tools/get-conversation.ts
14281
- import { z as z74 } from "zod";
14282
- var parameters12 = {
14283
- conversationId: z74.string().describe("The id of the conversation, as returned by find-conversations.")
14364
+ import { z as z76 } from "zod";
14365
+ var parameters14 = {
14366
+ conversationId: z76.string().describe("The id of the conversation, as returned by find-conversations.")
14284
14367
  };
14285
- var outputSchema11 = {
14368
+ var outputSchema13 = {
14286
14369
  conversation: conversationSummarySchema,
14287
- messages: z74.array(conversationMessageSchema).describe("In order, oldest first."),
14370
+ messages: z76.array(conversationMessageSchema).describe("In order, oldest first."),
14288
14371
  pendingAction: pendingActionSchema.optional().describe(
14289
14372
  "What the agent is waiting on before the conversation can continue. Absent when it is waiting on a plain reply, or on nothing."
14290
14373
  )
@@ -14292,8 +14375,8 @@ var outputSchema11 = {
14292
14375
  var getConversation = {
14293
14376
  name: ToolNames.GET_CONVERSATION,
14294
14377
  description: "Returns one conversation with its messages as visible text and any action the agent is waiting on. Use it to read what was said and to decide what to do next: the last assistant message is where the session resumes, and a pending action must be resolved before it can.",
14295
- parameters: parameters12,
14296
- outputSchema: outputSchema11,
14378
+ parameters: parameters14,
14379
+ outputSchema: outputSchema13,
14297
14380
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14298
14381
  async execute({ conversationId }, { api, signal }) {
14299
14382
  const options = { signal };
@@ -14332,22 +14415,22 @@ function describePendingAction(action) {
14332
14415
  }
14333
14416
 
14334
14417
  // src/tools/get-draft.ts
14335
- import { z as z75 } from "zod";
14336
- var parameters13 = {
14337
- draftId: z75.string().describe("The id of the draft, as returned by find-drafts."),
14418
+ import { z as z77 } from "zod";
14419
+ var parameters15 = {
14420
+ draftId: z77.string().describe("The id of the draft, as returned by find-drafts."),
14338
14421
  workspaceId: workspaceIdParameter
14339
14422
  };
14340
- var outputSchema12 = {
14423
+ var outputSchema14 = {
14341
14424
  draft: draftSummarySchema.extend({
14342
- partialManifest: z75.record(z75.string(), z75.unknown()).optional().describe(
14425
+ partialManifest: z77.record(z77.string(), z77.unknown()).optional().describe(
14343
14426
  "The manifest as authored so far; may be missing parts. Absent when nothing has been authored yet."
14344
14427
  ),
14345
- connectors: z75.array(z75.object({ connectorId: z75.string(), name: z75.string() })).optional().describe("The services the manifest uses.")
14428
+ connectors: z77.array(z77.object({ connectorId: z77.string(), name: z77.string() })).optional().describe("The services the manifest uses.")
14346
14429
  }),
14347
- validation: z75.object({
14348
- state: z75.enum(["incomplete", "ready"]).describe('"ready" means the draft can be published as it stands.'),
14349
- issues: z75.array(z75.string()).describe("What stops it being published. Empty when ready."),
14350
- modified: z75.boolean().describe(
14430
+ validation: z77.object({
14431
+ state: z77.enum(["incomplete", "ready"]).describe('"ready" means the draft can be published as it stands.'),
14432
+ issues: z77.array(z77.string()).describe("What stops it being published. Empty when ready."),
14433
+ modified: z77.boolean().describe(
14351
14434
  "Whether publishing would change anything: false when the draft matches the automation it edits."
14352
14435
  )
14353
14436
  })
@@ -14355,8 +14438,8 @@ var outputSchema12 = {
14355
14438
  var getDraft = {
14356
14439
  name: ToolNames.GET_DRAFT,
14357
14440
  description: "Returns one draft with its partial manifest and validation state: whether it is ready to publish and, if not, what is missing.",
14358
- parameters: parameters13,
14359
- outputSchema: outputSchema12,
14441
+ parameters: parameters15,
14442
+ outputSchema: outputSchema14,
14360
14443
  annotations: {
14361
14444
  readOnlyHint: true,
14362
14445
  destructiveHint: false,
@@ -14387,21 +14470,21 @@ var getDraft = {
14387
14470
  };
14388
14471
 
14389
14472
  // src/tools/get-run.ts
14390
- import { z as z76 } from "zod";
14391
- var parameters14 = {
14392
- automationId: z76.string().describe("The id of the automation, as returned by find-automations."),
14393
- runId: z76.string().describe("The id of the run, as returned by find-runs."),
14473
+ import { z as z78 } from "zod";
14474
+ var parameters16 = {
14475
+ automationId: z78.string().describe("The id of the automation, as returned by find-automations."),
14476
+ runId: z78.string().describe("The id of the run, as returned by find-runs."),
14394
14477
  workspaceId: workspaceIdParameter,
14395
- full: z76.boolean().optional().describe(
14478
+ full: z78.boolean().optional().describe(
14396
14479
  "Also return each step's raw result and generated code. The payload can be large; omit it unless the compact diagnostic is not enough."
14397
14480
  )
14398
14481
  };
14399
- var outputSchema13 = { run: runDetailSchema };
14482
+ var outputSchema15 = { run: runDetailSchema };
14400
14483
  var getRun = {
14401
14484
  name: ToolNames.GET_RUN,
14402
14485
  description: "Returns one run with its result, steps and the tool calls each step made, as a compact diagnostic: what failed, where, and the start of each error. Use it to work out why a run failed or what it produced.",
14403
- parameters: parameters14,
14404
- outputSchema: outputSchema13,
14486
+ parameters: parameters16,
14487
+ outputSchema: outputSchema15,
14405
14488
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
14406
14489
  async execute({ automationId, runId, workspaceId, full = false }, { api, signal }) {
14407
14490
  const options = { signal };
@@ -14431,16 +14514,16 @@ function describeRun(run) {
14431
14514
  }
14432
14515
 
14433
14516
  // src/tools/list-workspaces.ts
14434
- import { z as z77 } from "zod";
14435
- var parameters15 = {};
14436
- var outputSchema14 = {
14437
- workspaces: z77.array(
14438
- z77.object({
14439
- id: z77.string(),
14440
- name: z77.string(),
14441
- plan: z77.enum(WORKSPACE_PLANS),
14442
- role: z77.enum(WORKSPACE_ROLES).describe("The user\u2019s role in the workspace."),
14443
- access: z77.enum(WORKSPACE_ACCESS_LEVELS).describe(
14517
+ import { z as z79 } from "zod";
14518
+ var parameters17 = {};
14519
+ var outputSchema16 = {
14520
+ workspaces: z79.array(
14521
+ z79.object({
14522
+ id: z79.string(),
14523
+ name: z79.string(),
14524
+ plan: z79.enum(WORKSPACE_PLANS),
14525
+ role: z79.enum(WORKSPACE_ROLES).describe("The user\u2019s role in the workspace."),
14526
+ access: z79.enum(WORKSPACE_ACCESS_LEVELS).describe(
14444
14527
  '"locked" means the plan does not cover Automations: the workspace is listed, but its automations cannot run and nothing can be created in it.'
14445
14528
  )
14446
14529
  })
@@ -14449,8 +14532,8 @@ var outputSchema14 = {
14449
14532
  var listWorkspaces = {
14450
14533
  name: ToolNames.LIST_WORKSPACES,
14451
14534
  description: "Lists the Todoist workspaces the user can use with Automations, with their ids. Workspaces the user cannot access are not listed. Call it to find the workspaceId for other tools; omit workspaceId on those tools for the personal space.",
14452
- parameters: parameters15,
14453
- outputSchema: outputSchema14,
14535
+ parameters: parameters17,
14536
+ outputSchema: outputSchema16,
14454
14537
  annotations: {
14455
14538
  readOnlyHint: true,
14456
14539
  destructiveHint: false,
@@ -14467,22 +14550,22 @@ var listWorkspaces = {
14467
14550
  };
14468
14551
 
14469
14552
  // src/tools/move-automation.ts
14470
- import { z as z78 } from "zod";
14471
- var parameters16 = {
14472
- automationId: z78.string().describe(
14553
+ import { z as z80 } from "zod";
14554
+ var parameters18 = {
14555
+ automationId: z80.string().describe(
14473
14556
  "The id of the automation to move, as returned by find-automations. It may be a personal automation or one in another workspace."
14474
14557
  ),
14475
- workspaceId: z78.string().describe("The workspace to move it into, as returned by list-workspaces."),
14476
- visibility: z78.enum(AUTOMATION_VISIBILITIES).optional().describe(
14558
+ workspaceId: z80.string().describe("The workspace to move it into, as returned by list-workspaces."),
14559
+ visibility: z80.enum(AUTOMATION_VISIBILITIES).optional().describe(
14477
14560
  'How the automation is shared once moved. Defaults to "workspace", visible to every member; "private" keeps it to its creator.'
14478
14561
  )
14479
14562
  };
14480
- var outputSchema15 = { automation: automationSummarySchema };
14563
+ var outputSchema17 = { automation: automationSummarySchema };
14481
14564
  var moveAutomation = {
14482
14565
  name: ToolNames.MOVE_AUTOMATION,
14483
14566
  description: "Moves an automation the user created into a workspace, from their personal space or from another workspace they can still use. It keeps running on the creator\u2019s own connections, and any unpublished edits move with it. The destination is always a workspace: nothing moves back to the personal space. Fails when the user did not create the automation, or when the workspace it is in now no longer includes them or Automations. Takes effect immediately with no confirmation of its own, so confirm intent with the user first.",
14484
- parameters: parameters16,
14485
- outputSchema: outputSchema15,
14567
+ parameters: parameters18,
14568
+ outputSchema: outputSchema17,
14486
14569
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
14487
14570
  async execute({ automationId, workspaceId, visibility }, { api, signal }) {
14488
14571
  const dto = await api.workspaceAutomations.move(
@@ -14500,35 +14583,35 @@ var moveAutomation = {
14500
14583
  };
14501
14584
 
14502
14585
  // src/tools/repair-connection.ts
14503
- import { z as z79 } from "zod";
14504
- var parameters17 = {
14505
- connectionId: z79.string().describe(
14586
+ import { z as z81 } from "zod";
14587
+ var parameters19 = {
14588
+ connectionId: z81.string().describe(
14506
14589
  "The connection to repair, as listed by get-connector or reported by check-connection."
14507
14590
  )
14508
14591
  };
14509
- var outputSchema16 = {
14510
- connectionId: z79.string().describe("The connection to pass to check-connection next."),
14511
- connectorId: z79.string(),
14512
- serviceName: z79.string(),
14513
- resumed: z79.boolean().describe(
14592
+ var outputSchema18 = {
14593
+ connectionId: z81.string().describe("The connection to pass to check-connection next."),
14594
+ connectorId: z81.string(),
14595
+ serviceName: z81.string(),
14596
+ resumed: z81.boolean().describe(
14514
14597
  "True when the existing pending setup was returned; false when a replacement was started."
14515
14598
  ),
14516
- replacedConnectionId: z79.string().optional().describe(
14599
+ replacedConnectionId: z81.string().optional().describe(
14517
14600
  "The broken connection the replacement stands in for. Present when resumed is false."
14518
14601
  ),
14519
- status: z79.enum(["pending", "authorized"]).describe(
14602
+ status: z81.enum(["pending", "authorized"]).describe(
14520
14603
  '"pending" until the user completes the setup; "authorized" when nothing was needed.'
14521
14604
  ),
14522
14605
  setup: connectionSetupSchema.optional().describe("What the user must complete. Absent when authorized."),
14523
- automations: z79.array(affectedAutomationSchema).optional().describe(
14606
+ automations: z81.array(affectedAutomationSchema).optional().describe(
14524
14607
  "Personal automations that move to the replacement once it is authorised. Present when resumed is false."
14525
14608
  )
14526
14609
  };
14527
14610
  var repairConnection = {
14528
14611
  name: ToolNames.REPAIR_CONNECTION,
14529
14612
  description: "Fixes a connection that is not authorised. A pending one gets its setup returned again; an expired, errored or stale one is replaced by a new connection that the personal automations using it move to once the user authorises it. Returns what the user must complete, never waits, and tells you which connectionId to pass to check-connection.",
14530
- parameters: parameters17,
14531
- outputSchema: outputSchema16,
14613
+ parameters: parameters19,
14614
+ outputSchema: outputSchema18,
14532
14615
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
14533
14616
  async execute({ connectionId }, { api, signal }) {
14534
14617
  const options = { signal };
@@ -14583,26 +14666,26 @@ var repairConnection = {
14583
14666
  };
14584
14667
 
14585
14668
  // src/tools/set-automation-schedule.ts
14586
- import { z as z80 } from "zod";
14587
- var parameters18 = {
14588
- automationId: z80.string().describe("The id of the automation, as returned by find-automations."),
14669
+ import { z as z82 } from "zod";
14670
+ var parameters20 = {
14671
+ automationId: z82.string().describe("The id of the automation, as returned by find-automations."),
14589
14672
  workspaceId: workspaceIdParameter,
14590
- cron: z80.string().optional().describe(
14673
+ cron: z82.string().optional().describe(
14591
14674
  'A five-part cron expression such as "0 9 * * 1-5". Requires timezone. Use this or interval, not both.'
14592
14675
  ),
14593
- timezone: z80.string().optional().describe(
14676
+ timezone: z82.string().optional().describe(
14594
14677
  'The IANA zone the cron expression is read in, such as "Europe/London". Only with cron.'
14595
14678
  ),
14596
- interval: z80.string().optional().describe(
14679
+ interval: z82.string().optional().describe(
14597
14680
  'How often to run, as a number and unit: "45m", "6h", "1d", "1w". Use this or cron, not both.'
14598
14681
  )
14599
14682
  };
14600
- var outputSchema17 = { automation: automationSummarySchema };
14683
+ var outputSchema19 = { automation: automationSummarySchema };
14601
14684
  var setAutomationSchedule = {
14602
14685
  name: ToolNames.SET_AUTOMATION_SCHEDULE,
14603
14686
  description: 'Changes when a schedule-triggered automation runs, as either a cron expression with a timezone or a fixed interval. Natural language such as "every weekday morning" is not accepted; translate it first. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Fails for automations that run on events or API calls.',
14604
- parameters: parameters18,
14605
- outputSchema: outputSchema17,
14687
+ parameters: parameters20,
14688
+ outputSchema: outputSchema19,
14606
14689
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
14607
14690
  async execute({ automationId, workspaceId, cron, timezone, interval }, { api, signal }) {
14608
14691
  const value = resolveScheduleInput(
@@ -14626,20 +14709,20 @@ var setAutomationSchedule = {
14626
14709
  };
14627
14710
 
14628
14711
  // src/tools/set-automation-visibility.ts
14629
- import { z as z81 } from "zod";
14630
- var parameters19 = {
14631
- automationId: z81.string().describe("The id of the automation, as returned by find-automations."),
14712
+ import { z as z83 } from "zod";
14713
+ var parameters21 = {
14714
+ automationId: z83.string().describe("The id of the automation, as returned by find-automations."),
14632
14715
  workspaceId: requiredWorkspaceIdParameter,
14633
- visibility: z81.enum(AUTOMATION_VISIBILITIES).describe(
14716
+ visibility: z83.enum(AUTOMATION_VISIBILITIES).describe(
14634
14717
  '"workspace": every member can see and run it. "private": only its creator can see it, workspace admins included.'
14635
14718
  )
14636
14719
  };
14637
- var outputSchema18 = { automation: automationSummarySchema };
14720
+ var outputSchema20 = { automation: automationSummarySchema };
14638
14721
  var setAutomationVisibility = {
14639
14722
  name: ToolNames.SET_AUTOMATION_VISIBILITY,
14640
14723
  description: "Shares a workspace automation with the whole workspace, or takes it back to private. Only the creator can change it, or a workspace admin while it is team-visible; once private it is out of every admin\u2019s reach until the creator shares it again. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Workspace automations only: a personal automation has no team to be visible to.",
14641
- parameters: parameters19,
14642
- outputSchema: outputSchema18,
14724
+ parameters: parameters21,
14725
+ outputSchema: outputSchema20,
14643
14726
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
14644
14727
  async execute({ automationId, workspaceId, visibility }, { api, signal }) {
14645
14728
  const dto = await api.workspaceAutomations.updateVisibility(
@@ -14657,19 +14740,19 @@ var setAutomationVisibility = {
14657
14740
  };
14658
14741
 
14659
14742
  // src/tools/start-conversation.ts
14660
- import { z as z82 } from "zod";
14661
- var parameters20 = {
14743
+ import { z as z84 } from "zod";
14744
+ var parameters22 = {
14662
14745
  workspaceId: workspaceIdParameter.describe(
14663
14746
  "Author the automation in this Todoist workspace: the conversation, its draft and the published automation all belong there, and continue-conversation follows it automatically. Omit for the personal space."
14664
14747
  ),
14665
- message: z82.string().min(1).describe(
14748
+ message: z84.string().min(1).describe(
14666
14749
  "What the user wants automated, in their words. Say whether the automation should be published or left as a draft; the agent otherwise asks."
14667
14750
  )
14668
14751
  };
14669
14752
  var startConversation = {
14670
14753
  name: ToolNames.START_CONVERSATION,
14671
14754
  description: "Creates a conversation with the Automations agent and runs its first turn: the agent designs an automation from the message, asks questions, or asks for service connections. Blocks until the turn ends, which can take minutes; progress is reported meanwhile. Returns the conversationId to continue with and the outcome: awaiting_input (reply with continue-conversation), action_required (resolve pendingAction first) or published. Runs on the user\u2019s own connections in either space.",
14672
- parameters: parameters20,
14755
+ parameters: parameters22,
14673
14756
  outputSchema: turnResultSchema,
14674
14757
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
14675
14758
  async execute({ workspaceId, message }, { api, transport, signal, reportProgress }) {
@@ -14692,21 +14775,21 @@ var startConversation = {
14692
14775
  };
14693
14776
 
14694
14777
  // src/tools/trigger-automation.ts
14695
- import { z as z83 } from "zod";
14696
- var parameters21 = {
14697
- automationId: z83.string().describe("The id of the automation, as returned by find-automations."),
14778
+ import { z as z85 } from "zod";
14779
+ var parameters23 = {
14780
+ automationId: z85.string().describe("The id of the automation, as returned by find-automations."),
14698
14781
  workspaceId: workspaceIdParameter
14699
14782
  };
14700
- var outputSchema19 = {
14701
- automationId: z83.string(),
14702
- name: z83.string(),
14703
- accepted: z83.literal(true).describe("The backend accepted the run. It has not finished.")
14783
+ var outputSchema21 = {
14784
+ automationId: z85.string(),
14785
+ name: z85.string(),
14786
+ accepted: z85.literal(true).describe("The backend accepted the run. It has not finished.")
14704
14787
  };
14705
14788
  var triggerAutomation = {
14706
14789
  name: ToolNames.TRIGGER_AUTOMATION,
14707
14790
  description: "Starts a run of a schedule-triggered automation now, without waiting for its next scheduled time, and returns as soon as the backend accepts it. The run happens in the background; find-runs shows the outcome. Runs even when the automation is disabled. Cannot start automations that run on events or API calls. Confirm intent with the user first.",
14708
- parameters: parameters21,
14709
- outputSchema: outputSchema19,
14791
+ parameters: parameters23,
14792
+ outputSchema: outputSchema21,
14710
14793
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
14711
14794
  async execute({ automationId, workspaceId }, { api, signal }) {
14712
14795
  const options = { signal };
@@ -14731,22 +14814,22 @@ var triggerAutomation = {
14731
14814
  };
14732
14815
 
14733
14816
  // src/tools/update-automation.ts
14734
- import { z as z84 } from "zod";
14735
- var parameters22 = {
14736
- automationId: z84.string().describe("The id of the automation, as returned by find-automations."),
14817
+ import { z as z86 } from "zod";
14818
+ var parameters24 = {
14819
+ automationId: z86.string().describe("The id of the automation, as returned by find-automations."),
14737
14820
  workspaceId: workspaceIdParameter,
14738
- name: z84.string().min(1).optional().describe("A new name. Omit to keep the current one."),
14739
- description: z84.string().optional().describe("A new description. Omit to keep the current one."),
14740
- enabled: z84.boolean().optional().describe(
14821
+ name: z86.string().min(1).optional().describe("A new name. Omit to keep the current one."),
14822
+ description: z86.string().optional().describe("A new description. Omit to keep the current one."),
14823
+ enabled: z86.boolean().optional().describe(
14741
14824
  "Turn the automation on or off. Enabling fails while disabledReason is set: the system stopped it and the cause must be fixed first."
14742
14825
  )
14743
14826
  };
14744
- var outputSchema20 = { automation: automationSummarySchema };
14827
+ var outputSchema22 = { automation: automationSummarySchema };
14745
14828
  var updateAutomation = {
14746
14829
  name: ToolNames.UPDATE_AUTOMATION,
14747
14830
  description: "Renames, describes, enables or disables an automation. Any one field can change alone; the others keep their current values. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Does not change what the automation does; that needs a conversation.",
14748
- parameters: parameters22,
14749
- outputSchema: outputSchema20,
14831
+ parameters: parameters24,
14832
+ outputSchema: outputSchema22,
14750
14833
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
14751
14834
  async execute({ automationId, workspaceId, name, description, enabled }, context) {
14752
14835
  const client = createClient(automationId, workspaceId, context);
@@ -14815,6 +14898,8 @@ var toolRegistry = {
14815
14898
  setAutomationVisibility,
14816
14899
  moveAutomation,
14817
14900
  triggerAutomation,
14901
+ deleteAutomation,
14902
+ deleteDraft,
14818
14903
  // Connection
14819
14904
  connectService,
14820
14905
  checkConnection,
@@ -14836,10 +14921,10 @@ You have access to a user's Todoist Automations through the tools listed.
14836
14921
 
14837
14922
  - Every reference is an opaque id taken from a find- or get- tool. There is no lookup by name and no URL parsing: list first, then act on the id. Connector ids are the one exception: they are stable slugs such as github or slack.
14838
14923
  - An automation belongs either to the user's personal space or to one Todoist workspace, and the two are separate. Pass workspaceId to reach workspace automations; omit it for personal ones.
14839
- - update-automation, set-automation-schedule, set-automation-visibility, move-automation, trigger-automation and disconnect-service act immediately: no preview, and no confirmation of their own. Read the target first (get-automation, or get-connector for a connection) so it is the right one, and confirm intent with the user before changing or running anything they did not explicitly ask for.
14924
+ - update-automation, set-automation-schedule, set-automation-visibility, move-automation, trigger-automation, delete-automation, delete-draft and disconnect-service act immediately: no preview, and no confirmation of their own. Read the target first (get-automation, get-draft for a draft, or get-connector for a connection) so it is the right one, and confirm intent with the user before changing, running or deleting anything they did not explicitly ask for.
14840
14925
  - trigger-automation returns before the run finishes; find-runs shows the outcome.
14841
14926
  - A workspace automation is either visible to the whole workspace or private to its creator; isOwner says whether the user created it. Another member's automation is read-only for the user, but trigger-automation still works on it and the run executes on its creator's connections; find-runs shows who started each run as triggeredBy.
14842
- - A workspace admin can update-automation and set-automation-visibility on another member's team-visible automation, but cannot reschedule it, change what it does (that needs its creator's draft or conversation) or reach a private one. updatedBy on an automation tells the creator's own change from an admin's.
14927
+ - A workspace admin can update-automation, set-automation-visibility and delete-automation on another member's team-visible automation, but cannot reschedule it, change what it does (that needs its creator's draft or conversation) or reach a private one. updatedBy on an automation tells the creator's own change from an admin's.
14843
14928
  - move-automation puts an automation the user created into a workspace, from the personal space or another workspace, and never back out. Connections stay personal in every space: a moved or shared automation keeps running on its creator's own connections.
14844
14929
  - Authoring happens in the space the conversation was started in: pass workspaceId to start-conversation to author a workspace automation, and continue-conversation follows it automatically.
14845
14930
  - connect-service and repair-connection never wait. They return what the user must complete (an authorisation link, or instructions and a code): relay it verbatim, let the user finish, then call check-connection with the connectionId. Retrying reuses the pending setup rather than creating another connection.
@@ -14873,4 +14958,4 @@ export {
14873
14958
  DEFAULT_BASE_URL,
14874
14959
  getMcpServer
14875
14960
  };
14876
- //# sourceMappingURL=chunk-UOGVZEWA.js.map
14961
+ //# sourceMappingURL=chunk-JNUCEABU.js.map