n8n-mcp 2.66.3 → 2.67.1

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/.env.example CHANGED
@@ -131,11 +131,12 @@ AUTH_TOKEN=your-secure-token-here
131
131
  # Operation names match the action / mode enum values in each tool's schema.
132
132
  #
133
133
  # Eligible tools and their operations:
134
- # n8n_executions — action: get, list, delete
134
+ # n8n_executions — action: get, list, delete
135
+ # n8n_evaluations — action: list_runs, get_run, list_cases, run, cancel
135
136
  # n8n_workflow_versions — mode: list, get, rollback, delete, prune
136
137
  #
137
138
  # Read-only deployment recipe (blocks all destructive operations):
138
- # DISABLED_TOOL_OPERATIONS=n8n_workflow_versions:delete,rollback,prune;n8n_executions:delete
139
+ # DISABLED_TOOL_OPERATIONS=n8n_workflow_versions:delete,rollback,prune;n8n_executions:delete;n8n_evaluations:run,cancel
139
140
  #
140
141
  # Combine with n8n API key RBAC for defence in depth.
141
142
  # Default: (empty - all operations enabled)
package/README.md CHANGED
@@ -388,7 +388,7 @@ These tools require `N8N_API_URL` and `N8N_API_KEY` in your configuration.
388
388
  #### Execution Management
389
389
  - **`n8n_test_workflow`** - Test/trigger workflow execution (webhook, form, chat)
390
390
  - **`n8n_executions`** - Unified execution management (list, get, delete)
391
- - **`n8n_evaluations`** - Read evaluation test runs (list runs, aggregated metrics, per-case results; n8n 2.30+)
391
+ - **`n8n_evaluations`** - Run and read evaluation test runs (list runs, aggregated metrics, per-case results on n8n 2.30+; trigger and cancel on 2.32+)
392
392
 
393
393
  #### Data Table Management
394
394
  - **`n8n_manage_datatable`** - Manage n8n data tables and rows (list, get, create, update, delete)
@@ -413,7 +413,7 @@ DISABLED_TOOLS=n8n_create_workflow,n8n_update_full_workflow,n8n_update_partial_w
413
413
  For tools that bundle read and write operations under one name, block only the destructive operations while keeping `list` and `get`:
414
414
 
415
415
  ```bash
416
- DISABLED_TOOL_OPERATIONS=n8n_workflow_versions:delete,rollback,prune;n8n_executions:delete
416
+ DISABLED_TOOL_OPERATIONS=n8n_workflow_versions:delete,rollback,prune;n8n_executions:delete;n8n_evaluations:run,cancel
417
417
  ```
418
418
 
419
419
  Combine with a read-only n8n API key (Settings → API in your n8n instance) for defence in depth. See [Read-Only Deployment Recipe](./docs/HTTP_DEPLOYMENT.md#read-only-deployment-recipe) for the full setup guide.
@@ -27,6 +27,8 @@ export declare function handleDeleteExecution(args: unknown, context?: InstanceC
27
27
  export declare function handleListTestRuns(args: unknown, context?: InstanceContext): Promise<McpToolResponse>;
28
28
  export declare function handleGetTestRun(args: unknown, context?: InstanceContext): Promise<McpToolResponse>;
29
29
  export declare function handleListTestCases(args: unknown, context?: InstanceContext): Promise<McpToolResponse>;
30
+ export declare function handleTriggerTestRun(args: unknown, context?: InstanceContext): Promise<McpToolResponse>;
31
+ export declare function handleCancelTestRun(args: unknown, context?: InstanceContext): Promise<McpToolResponse>;
30
32
  export declare function handleHealthCheck(context?: InstanceContext): Promise<McpToolResponse>;
31
33
  export declare function handleDiagnostic(request: any, context?: InstanceContext): Promise<McpToolResponse>;
32
34
  export declare function handleWorkflowVersions(args: unknown, repository: NodeRepository, context?: InstanceContext): Promise<McpToolResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"handlers-n8n-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers-n8n-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAML,eAAe,EAKhB,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAA+C,MAAM,2BAA2B,CAAC;AAOzG,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA0NhE,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAMD,wBAAgB,uBAAuB,gDAEtC;AAKD,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAwF9E;AA0CD,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGlD;AAqJD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA2G7G;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAiC1G;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAoDjH;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAqDnH;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAyCjH;AAWD,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA8DlH;AAUD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwFhH;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CA8L1B;AAeD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC7G;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAiE5G;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CA0F1B;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CAoK1B;AAQD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwJ3G;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA8H3G;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAgD7G;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAiC9G;AAgDD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAmC3G;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAczG;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAyB5G;AAID,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwG3F;AAkLD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAsQxG;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CAkL1B;AA+BD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,EACb,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CA6M1B;AAQD,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAyErH;AAyFD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB1G;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAgBzG;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CASvG;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB1G;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAS1G;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAuBtG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAazG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAazG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAazG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBzG;AAqID,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAkD9G;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA4C5G;AAmDD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB/G;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC/G;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAa/G;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAalH;AAeD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwG5G"}
1
+ {"version":3,"file":"handlers-n8n-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers-n8n-manager.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,8 @@ exports.handleDeleteExecution = handleDeleteExecution;
57
57
  exports.handleListTestRuns = handleListTestRuns;
58
58
  exports.handleGetTestRun = handleGetTestRun;
59
59
  exports.handleListTestCases = handleListTestCases;
60
+ exports.handleTriggerTestRun = handleTriggerTestRun;
61
+ exports.handleCancelTestRun = handleCancelTestRun;
60
62
  exports.handleHealthCheck = handleHealthCheck;
61
63
  exports.handleDiagnostic = handleDiagnostic;
62
64
  exports.handleWorkflowVersions = handleWorkflowVersions;
@@ -87,6 +89,7 @@ const n8n_api_1 = require("../config/n8n-api");
87
89
  const n8n_api_2 = require("../types/n8n-api");
88
90
  const n8n_validation_1 = require("../services/n8n-validation");
89
91
  const node_groups_1 = require("../services/node-groups");
92
+ const n8n_version_1 = require("../services/n8n-version");
90
93
  const n8n_errors_1 = require("../utils/n8n-errors");
91
94
  const logger_1 = require("../utils/logger");
92
95
  const zod_1 = require("zod");
@@ -304,22 +307,30 @@ const listExecutionsSchema = zod_1.z.object({
304
307
  status: optionalEmptyAware(zod_1.z.enum(['success', 'error', 'waiting'])),
305
308
  includeData: zod_1.z.boolean().optional(),
306
309
  });
310
+ const testRunPathId = zod_1.z.string().trim().min(1);
307
311
  const listTestRunsSchema = zod_1.z.object({
308
- workflowId: zod_1.z.string(),
312
+ workflowId: testRunPathId,
309
313
  status: optionalEmptyAware(zod_1.z.enum(['new', 'running', 'completed', 'error', 'cancelled'])),
310
314
  limit: zod_1.z.number().min(1).max(250).optional(),
311
315
  cursor: optionalEmptyAware(zod_1.z.string()),
312
316
  });
313
317
  const getTestRunSchema = zod_1.z.object({
314
- workflowId: zod_1.z.string(),
315
- runId: zod_1.z.string(),
318
+ workflowId: testRunPathId,
319
+ runId: testRunPathId,
316
320
  });
317
321
  const listTestCasesSchema = zod_1.z.object({
318
- workflowId: zod_1.z.string(),
319
- runId: zod_1.z.string(),
322
+ workflowId: testRunPathId,
323
+ runId: testRunPathId,
320
324
  limit: zod_1.z.number().min(1).max(250).optional(),
321
325
  cursor: optionalEmptyAware(zod_1.z.string()),
322
326
  });
327
+ const triggerTestRunSchema = zod_1.z.object({
328
+ workflowId: testRunPathId,
329
+ });
330
+ const cancelTestRunSchema = zod_1.z.object({
331
+ workflowId: testRunPathId,
332
+ runId: testRunPathId,
333
+ });
323
334
  const workflowVersionsSchema = zod_1.z.object({
324
335
  mode: zod_1.z.enum(['list', 'get', 'rollback', 'delete', 'prune']),
325
336
  workflowId: zod_1.z.string().optional(),
@@ -1427,33 +1438,76 @@ async function handleDeleteExecution(args, context) {
1427
1438
  };
1428
1439
  }
1429
1440
  }
1430
- const TEST_RUN_SCOPE_HINT = 'n8n rejected the request (403). The API key lacks testRun scopes - keys created before n8n 2.30 do not have them; re-create the API key on n8n 2.30+. Other causes: evaluations not licensed on this plan, or the key\'s owner lacks access to this workflow.';
1431
- async function handleTestRunError(error, context) {
1441
+ const TEST_RUN_QUOTA_HINT = 'n8n rejected the request (402): the plan\'s evaluation quota is used up. It caps how many workflows may have test runs, and this workflow does not hold one of the slots. Re-run a workflow that already has runs, or raise the limit on your n8n plan.';
1442
+ function testRunWriteScopeHint(scope) {
1443
+ return `n8n rejected the request (403). The API key lacks the ${scope} scope - that scope only exists on keys created on n8n 2.32+, so re-create the key there. Other causes: evaluations not licensed on this plan, or the key's owner lacks workflow:execute on this workflow.`;
1444
+ }
1445
+ const TEST_RUN_IDS_HINT = 'Workflow or test run not found. A runId must belong to the given workflowId; check both ids.';
1446
+ const TEST_RUN_WORKFLOW_HINT = "Workflow not found. Check the workflowId, and that the API key's owner has access to that workflow.";
1447
+ const READ_TEST_RUN_BASE = {
1448
+ minMinor: 30,
1449
+ capability: 'read test runs',
1450
+ scopeHint: 'n8n rejected the request (403). The API key lacks testRun scopes - keys created before n8n 2.30 do not have them; re-create the API key on n8n 2.30+. Other causes: evaluations not licensed on this plan, or the key\'s owner lacks access to this workflow.',
1451
+ };
1452
+ const LIST_TEST_RUNS_ERRORS = {
1453
+ ...READ_TEST_RUN_BASE,
1454
+ notFoundHint: TEST_RUN_WORKFLOW_HINT,
1455
+ };
1456
+ const READ_TEST_RUN_ERRORS = {
1457
+ ...READ_TEST_RUN_BASE,
1458
+ notFoundHint: TEST_RUN_IDS_HINT,
1459
+ };
1460
+ const TRIGGER_TEST_RUN_ERRORS = {
1461
+ minMinor: 32,
1462
+ capability: 'trigger runs from the API',
1463
+ scopeHint: testRunWriteScopeHint('testRun:create'),
1464
+ notFoundHint: TEST_RUN_WORKFLOW_HINT,
1465
+ conflictHint: 'The workflow has no evaluation trigger node. Add an evaluation trigger (n8n-nodes-base.evaluationTrigger) pointing at a dataset, save the workflow, then trigger the run.',
1466
+ postRoute: true,
1467
+ };
1468
+ const CANCEL_TEST_RUN_ERRORS = {
1469
+ minMinor: 32,
1470
+ capability: 'cancel runs from the API',
1471
+ scopeHint: testRunWriteScopeHint('testRun:cancel'),
1472
+ notFoundHint: TEST_RUN_IDS_HINT,
1473
+ conflictHint: "The test run already finished (status completed, error, or cancelled), so there is nothing to cancel. Use action='get_run' to see its final state.",
1474
+ postRoute: true,
1475
+ };
1476
+ async function testRunRouteGate(statusCode, context, options) {
1477
+ const client = getN8nApiClient(context);
1478
+ const version = client ? await client.refreshVersion().catch(() => null) : null;
1479
+ if (version) {
1480
+ return (0, n8n_version_1.versionAtLeast)(version, 2, options.minMinor)
1481
+ ? null
1482
+ : `The evaluation API requires n8n 2.${options.minMinor}.0 or later; this instance runs ${version.version}. Upgrade the instance to ${options.capability}.`;
1483
+ }
1484
+ const requirement = `This endpoint requires n8n 2.${options.minMinor}.0 or later, and this instance's n8n version could not be read.`;
1485
+ return statusCode === 405 && options.postRoute
1486
+ ? `${requirement} It rejected POST on the route, which is what an instance predating 2.${options.minMinor}.0 does. Upgrade the instance to ${options.capability}.`
1487
+ : `${requirement} Either the instance predates it, or the request simply did not match. ${options.notFoundHint}`;
1488
+ }
1489
+ async function handleTestRunError(error, context, options) {
1432
1490
  if (error instanceof zod_1.z.ZodError) {
1433
1491
  return { success: false, error: 'Invalid input', details: { errors: error.errors } };
1434
1492
  }
1435
1493
  if (error instanceof n8n_errors_1.N8nApiError) {
1494
+ if (error.statusCode === 402) {
1495
+ return { success: false, error: TEST_RUN_QUOTA_HINT, code: error.code };
1496
+ }
1436
1497
  if (error.statusCode === 403) {
1437
- return { success: false, error: TEST_RUN_SCOPE_HINT, code: error.code };
1498
+ return { success: false, error: options.scopeHint, code: error.code };
1438
1499
  }
1439
- if (error.statusCode === 404) {
1440
- const client = getN8nApiClient(context);
1441
- let version = client?.getCachedVersionInfo() ?? null;
1442
- if (!version && client) {
1443
- version = await client.getVersion().catch(() => null);
1444
- }
1445
- if (version && (version.major < 2 || (version.major === 2 && version.minor < 30))) {
1446
- return {
1447
- success: false,
1448
- error: `The evaluation API requires n8n 2.30 or later; this instance runs ${version.version}. Upgrade the instance to read test runs.`,
1449
- code: error.code,
1450
- };
1500
+ if (error.statusCode === 409 && options.conflictHint) {
1501
+ return { success: false, error: options.conflictHint, code: error.code };
1502
+ }
1503
+ if (error.statusCode === 404 || error.statusCode === 405) {
1504
+ const gate = await testRunRouteGate(error.statusCode, context, options);
1505
+ if (gate) {
1506
+ return { success: false, error: gate, code: error.code };
1451
1507
  }
1452
- return {
1453
- success: false,
1454
- error: 'Workflow or test run not found. A runId must belong to the given workflowId; check both ids.',
1455
- code: error.code,
1456
- };
1508
+ }
1509
+ if (error.statusCode === 404) {
1510
+ return { success: false, error: options.notFoundHint, code: error.code };
1457
1511
  }
1458
1512
  return { success: false, error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error), code: error.code };
1459
1513
  }
@@ -1487,7 +1541,7 @@ async function handleListTestRuns(args, context) {
1487
1541
  };
1488
1542
  }
1489
1543
  catch (error) {
1490
- return handleTestRunError(error, context);
1544
+ return handleTestRunError(error, context, LIST_TEST_RUNS_ERRORS);
1491
1545
  }
1492
1546
  }
1493
1547
  async function handleGetTestRun(args, context) {
@@ -1501,7 +1555,7 @@ async function handleGetTestRun(args, context) {
1501
1555
  };
1502
1556
  }
1503
1557
  catch (error) {
1504
- return handleTestRunError(error, context);
1558
+ return handleTestRunError(error, context, READ_TEST_RUN_ERRORS);
1505
1559
  }
1506
1560
  }
1507
1561
  async function handleListTestCases(args, context) {
@@ -1526,7 +1580,41 @@ async function handleListTestCases(args, context) {
1526
1580
  };
1527
1581
  }
1528
1582
  catch (error) {
1529
- return handleTestRunError(error, context);
1583
+ return handleTestRunError(error, context, READ_TEST_RUN_ERRORS);
1584
+ }
1585
+ }
1586
+ async function handleTriggerTestRun(args, context) {
1587
+ try {
1588
+ const client = ensureApiConfigured(context);
1589
+ const input = triggerTestRunSchema.parse(args || {});
1590
+ const response = await client.triggerTestRun(input.workflowId);
1591
+ return {
1592
+ success: true,
1593
+ data: {
1594
+ ...response,
1595
+ _note: `Run started. Cases execute asynchronously - poll with action='get_run', runId='${response.id}' until status is completed, error, or cancelled.`
1596
+ }
1597
+ };
1598
+ }
1599
+ catch (error) {
1600
+ return handleTestRunError(error, context, TRIGGER_TEST_RUN_ERRORS);
1601
+ }
1602
+ }
1603
+ async function handleCancelTestRun(args, context) {
1604
+ try {
1605
+ const client = ensureApiConfigured(context);
1606
+ const input = cancelTestRunSchema.parse(args || {});
1607
+ const response = await client.cancelTestRun(input.workflowId, input.runId);
1608
+ return {
1609
+ success: true,
1610
+ data: {
1611
+ ...response,
1612
+ _note: "Cancellation accepted. In-flight cases stop asynchronously - use action='get_run' to confirm the run reached status 'cancelled'."
1613
+ }
1614
+ };
1615
+ }
1616
+ catch (error) {
1617
+ return handleTestRunError(error, context, CANCEL_TEST_RUN_ERRORS);
1530
1618
  }
1531
1619
  }
1532
1620
  async function handleHealthCheck(context) {