@langwatch/mcp-server 0.9.0 → 0.10.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.
Files changed (101) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/{archive-project-HZBRPR2S.js → archive-project-KAZFHR4A.js} +3 -3
  3. package/dist/{archive-scenario-P5RRITRM.js → archive-scenario-6M2IB7Y2.js} +3 -3
  4. package/dist/{archive-suite-NUUFD2EM.js → archive-suite-NXZ3YDS3.js} +3 -3
  5. package/dist/{assign-prompt-tag-FKCCZPML.js → assign-prompt-tag-WPUJO55U.js} +2 -2
  6. package/dist/{chunk-X2SEURT2.js → chunk-AGGE6NPR.js} +2 -2
  7. package/dist/{chunk-ADSJ2FDA.js → chunk-B6UV3JVI.js} +2 -2
  8. package/dist/{chunk-42ZHHHIJ.js → chunk-CAY57CKF.js} +3 -1
  9. package/dist/{chunk-BBJ5WAJB.js → chunk-COCNCXVJ.js} +2 -2
  10. package/dist/{chunk-BYWYM2RP.js → chunk-ESGZVPPC.js} +2 -2
  11. package/dist/{chunk-R7C7OUVG.js → chunk-GWEW5XON.js} +2 -2
  12. package/dist/{chunk-JVLJKQJG.js → chunk-HRFQAFPR.js} +204 -105
  13. package/dist/{chunk-TROIWSEQ.js → chunk-ITN2QGHF.js} +2 -2
  14. package/dist/{chunk-XC62KJIT.js → chunk-IUP5IHBD.js} +3 -3
  15. package/dist/{chunk-CCM4ZFGF.js → chunk-LTEJDL4V.js} +2 -2
  16. package/dist/{chunk-BB7EOKHR.js → chunk-RDUXCCFR.js} +2 -2
  17. package/dist/{chunk-JHOSVOHT.js → chunk-U2QIW2SW.js} +2 -2
  18. package/dist/{chunk-CHKCEZBP.js → chunk-UKRCZJJC.js} +2 -2
  19. package/dist/{chunk-HKY3GW45.js → chunk-XRQNXN2Z.js} +2 -2
  20. package/dist/{create-agent-K5Q7BFGZ.js → create-agent-BI7UTJ6A.js} +3 -3
  21. package/dist/{create-annotation-KN3GE3DK.js → create-annotation-SNM2J6S4.js} +3 -3
  22. package/dist/{create-api-key-OQI5PUNQ.js → create-api-key-23MXYC2L.js} +3 -3
  23. package/dist/{create-dashboard-G4QA5AXP.js → create-dashboard-CPOOOIKK.js} +3 -3
  24. package/dist/{create-dataset-WQSC37N7.js → create-dataset-BVXPVVY2.js} +3 -3
  25. package/dist/{create-dataset-records-B4RL3FLC.js → create-dataset-records-S7VFIIMR.js} +3 -3
  26. package/dist/{create-evaluator-YFFQIR7E.js → create-evaluator-WJAAQOUE.js} +3 -3
  27. package/dist/create-mcp-server.d.ts +3 -1
  28. package/dist/create-mcp-server.js +2 -2
  29. package/dist/{create-project-CUVQ67VN.js → create-project-BF7LMZH5.js} +3 -3
  30. package/dist/{create-prompt-NGXKSP4X.js → create-prompt-LZ3QHSU4.js} +2 -2
  31. package/dist/{create-prompt-tag-IUKYPVHH.js → create-prompt-tag-IF4J24QM.js} +2 -2
  32. package/dist/{create-scenario-FNBXALH3.js → create-scenario-BK4E5DEU.js} +3 -3
  33. package/dist/{create-suite-DJEPD4ZB.js → create-suite-HEQPNLND.js} +3 -3
  34. package/dist/{delete-agent-TJI5XBBM.js → delete-agent-Y4T2G5PT.js} +3 -3
  35. package/dist/{delete-annotation-KRP53TUU.js → delete-annotation-KYDMQTZG.js} +3 -3
  36. package/dist/{delete-dashboard-N5SZJIR3.js → delete-dashboard-3RW647WJ.js} +3 -3
  37. package/dist/{delete-dataset-KDUOHL2P.js → delete-dataset-SZAHFHHS.js} +3 -3
  38. package/dist/{delete-dataset-records-DM4W3PAW.js → delete-dataset-records-ISHKGEBH.js} +3 -3
  39. package/dist/{delete-evaluator-7ZATLJOA.js → delete-evaluator-VKIG5I3S.js} +3 -3
  40. package/dist/{delete-prompt-tag-I6HNMSVJ.js → delete-prompt-tag-VYYL4GTF.js} +2 -2
  41. package/dist/{delete-workflow-QEO74JQR.js → delete-workflow-SHNPYSWQ.js} +3 -3
  42. package/dist/{get-agent-3KDWCP5N.js → get-agent-IZSP7AR5.js} +3 -3
  43. package/dist/{get-analytics-GPVJX7SF.js → get-analytics-EDFAYYIQ.js} +2 -2
  44. package/dist/{get-dashboard-YPTIE5YY.js → get-dashboard-WSAO6IQ4.js} +3 -3
  45. package/dist/{get-dataset-6DQFYITM.js → get-dataset-BEVNXQNF.js} +3 -3
  46. package/dist/{get-evaluator-PCM6XQAU.js → get-evaluator-HCVXNPZR.js} +3 -3
  47. package/dist/{get-project-JCMWXVLU.js → get-project-H4V3GYRQ.js} +3 -3
  48. package/dist/{get-prompt-5XAGWWBG.js → get-prompt-EWRJVVGB.js} +2 -2
  49. package/dist/{get-scenario-7XBCDZWX.js → get-scenario-24YUJS5W.js} +3 -3
  50. package/dist/{get-simulation-run-AV24FJWI.js → get-simulation-run-UX2W6F6I.js} +3 -3
  51. package/dist/{get-suite-4DBVHFEM.js → get-suite-B65ZKZJA.js} +3 -3
  52. package/dist/{get-trace-MRBDS3HJ.js → get-trace-ZR7MIITH.js} +2 -2
  53. package/dist/{get-workflow-UR4Y6UFX.js → get-workflow-YROHUQJW.js} +3 -3
  54. package/dist/{http-server-DEGNV5EP.js → http-server-GXVEDA7G.js} +5 -4
  55. package/dist/index.js +2660 -1497
  56. package/dist/{langwatch-api-annotations-ZJDRB4JH.js → langwatch-api-annotations-OPEXNTPF.js} +3 -3
  57. package/dist/{langwatch-api-dashboards-WARLI6NF.js → langwatch-api-dashboards-NPQM6QJI.js} +3 -3
  58. package/dist/{langwatch-api-monitors-4XKXHYCG.js → langwatch-api-monitors-3L25OOOS.js} +2 -2
  59. package/dist/{langwatch-api-secrets-6SHK5G7Q.js → langwatch-api-secrets-ZFURUA62.js} +2 -2
  60. package/dist/{langwatch-api-triggers-5SX6R2WU.js → langwatch-api-triggers-XGXXT7DD.js} +2 -2
  61. package/dist/{langwatch-api-workflows-NLJENNXE.js → langwatch-api-workflows-CXCTTCXT.js} +3 -3
  62. package/dist/{list-agents-NECO7MPI.js → list-agents-6ZNOV7FK.js} +3 -3
  63. package/dist/{list-annotations-3OJEO774.js → list-annotations-6P3IWILH.js} +3 -3
  64. package/dist/{list-api-keys-AWW7ROLB.js → list-api-keys-JJI62KD2.js} +3 -3
  65. package/dist/{list-dashboards-DVPVVVKW.js → list-dashboards-G2WJOXWB.js} +3 -3
  66. package/dist/{list-dataset-records-I4BYORF5.js → list-dataset-records-GWWVOCII.js} +3 -3
  67. package/dist/{list-datasets-WUAE5HGX.js → list-datasets-HBTH33X4.js} +3 -3
  68. package/dist/{list-evaluators-B6OSVAM2.js → list-evaluators-K5OGB6TX.js} +3 -3
  69. package/dist/{list-model-providers-NL6IP4UZ.js → list-model-providers-JMOGZLSO.js} +3 -3
  70. package/dist/{list-projects-5FHMJ4PQ.js → list-projects-OXJC2NW5.js} +3 -3
  71. package/dist/{list-prompt-tags-Z2DD6FLQ.js → list-prompt-tags-J2HPHVAZ.js} +2 -2
  72. package/dist/{list-prompts-VNXKHK7T.js → list-prompts-C7GR72XL.js} +2 -2
  73. package/dist/{list-scenarios-CFZHXL76.js → list-scenarios-JEPGIIDO.js} +3 -3
  74. package/dist/{list-simulation-runs-AM2BXLBW.js → list-simulation-runs-DRSAGPEC.js} +3 -3
  75. package/dist/{list-suites-ZDOHAAXF.js → list-suites-POTZ3ZT6.js} +3 -3
  76. package/dist/{list-workflows-WBRBKLIT.js → list-workflows-QQZQIOHB.js} +3 -3
  77. package/dist/{rename-prompt-tag-A4RJUK7Z.js → rename-prompt-tag-4AAV2BS4.js} +2 -2
  78. package/dist/{revoke-api-key-ZSPSPF5G.js → revoke-api-key-TONB4ADQ.js} +3 -3
  79. package/dist/{run-agent-JFNDY7MR.js → run-agent-7QE3YEH7.js} +3 -3
  80. package/dist/{run-suite-TH7LO5TJ.js → run-suite-Q66OSPO4.js} +3 -3
  81. package/dist/{run-workflow-CK3JP5U2.js → run-workflow-RWX2D752.js} +3 -3
  82. package/dist/{search-traces-3BBVYPC3.js → search-traces-M5E5VB4X.js} +2 -2
  83. package/dist/{set-model-provider-WOC5FNMV.js → set-model-provider-XENT5D2P.js} +3 -3
  84. package/dist/{update-agent-YMEV5MTL.js → update-agent-GML25EE3.js} +3 -3
  85. package/dist/{update-dataset-EYT5POFM.js → update-dataset-R4MM6NNY.js} +3 -3
  86. package/dist/{update-dataset-record-VFF5JTX4.js → update-dataset-record-FN4BL5P4.js} +3 -3
  87. package/dist/{update-evaluator-6IJHFG2E.js → update-evaluator-LH2RDDB5.js} +3 -3
  88. package/dist/{update-project-OIT4WPFI.js → update-project-H53IHRBB.js} +3 -3
  89. package/dist/{update-prompt-ZU2DD6KM.js → update-prompt-M33OTTAJ.js} +2 -2
  90. package/dist/{update-scenario-3VUTPDRU.js → update-scenario-FKTQRAFQ.js} +3 -3
  91. package/dist/{update-suite-C6JFDQHL.js → update-suite-JJTNOTXN.js} +3 -3
  92. package/package.json +1 -1
  93. package/pnpm-workspace.yaml +13 -0
  94. package/src/__tests__/experiment-status.unit.test.ts +194 -0
  95. package/src/__tests__/get-experiment-results.unit.test.ts +96 -5
  96. package/src/create-mcp-server.d.ts +3 -1
  97. package/src/create-mcp-server.ts +8 -2
  98. package/src/http-server.ts +5 -0
  99. package/src/tools/experiment-run-status.ts +36 -0
  100. package/src/tools/get-experiment-results.ts +40 -7
  101. package/src/tools/run-experiment.ts +100 -5
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  LangWatchApiError,
3
3
  makeRequest
4
- } from "./chunk-42ZHHHIJ.js";
4
+ } from "./chunk-CAY57CKF.js";
5
5
  import {
6
6
  requireApiKey
7
7
  } from "./chunk-KOO5733S.js";
@@ -13,7 +13,7 @@ import { z as z2 } from "zod";
13
13
  // package.json
14
14
  var package_default = {
15
15
  name: "@langwatch/mcp-server",
16
- version: "0.9.0",
16
+ version: "0.10.1",
17
17
  description: "An MCP server for Langwatch.",
18
18
  type: "module",
19
19
  main: "./dist/index.js",
@@ -88,13 +88,6 @@ var package_default = {
88
88
  },
89
89
  bin: {
90
90
  "langwatch-mcp-server": "./dist/index.js"
91
- },
92
- pnpm: {
93
- overrides: {
94
- protobufjs: ">=7.5.6 <8.0.0 || >=8.0.2",
95
- "langsmith@<0.6.0": "0.6.0",
96
- "fast-uri@<3.1.2": "3.1.2"
97
- }
98
91
  }
99
92
  };
100
93
 
@@ -124,6 +117,18 @@ var createDatasetSchema = z.object({
124
117
  columnTypes: z.array(datasetColumnDefinitionSchema).optional().describe("Column definitions for the dataset")
125
118
  });
126
119
 
120
+ // src/tools/experiment-run-status.ts
121
+ var INTERRUPTED_THRESHOLD_MS = 5 * 60 * 1e3;
122
+ var deriveRunStatus = (timestamps, now = Date.now()) => {
123
+ if (timestamps.stoppedAt != null) return "stopped";
124
+ if (timestamps.finishedAt != null) return "completed";
125
+ if (timestamps.updatedAt != null && now - timestamps.updatedAt > INTERRUPTED_THRESHOLD_MS) {
126
+ return "interrupted";
127
+ }
128
+ return "running";
129
+ };
130
+ var isTerminalStatus = (status) => status === "completed" || status === "stopped";
131
+
127
132
  // src/tools/get-experiment-results.ts
128
133
  var DEFAULT_ROW_CAP = 50;
129
134
  var rowKey = (index, targetId) => `${index}:${targetId ?? ""}`;
@@ -164,24 +169,26 @@ async function handleExperimentResults(params) {
164
169
  "",
165
170
  "**Status**: not found",
166
171
  "",
167
- `Could not load results for run \`${params.runId}\`. The run may still be in progress, or the id may be incorrect.`,
172
+ `Could not load results for run \`${params.runId}\`. The run id may be incorrect, or its run state may have expired (Redis keeps it for 24h).`,
168
173
  "",
169
- "> Try `platform_experiment_status` first to confirm the run id and that it is completed."
174
+ "> Pass `experimentSlug` to load results for runs older than 24h. Discover the slug with `platform_experiment_list`, then `platform_experiment_list_runs` for the run ids."
170
175
  ].join("\n");
171
176
  }
172
177
  throw error;
173
178
  }
174
- if (!results || results.timestamps.finishedAt == null && results.timestamps.stoppedAt == null) {
179
+ if (!results) {
175
180
  return [
176
181
  `# Evaluation Results: ${params.runId}`,
177
182
  "",
178
- "**Status**: results are not yet available",
183
+ "**Status**: not found",
179
184
  "",
180
- `Results for run \`${params.runId}\` are not ready yet.`,
185
+ `Could not load results for run \`${params.runId}\`.`,
181
186
  "",
182
- "> Try `platform_experiment_status` first to confirm the run id and that it is completed."
187
+ "> Pass `experimentSlug` if the run is older than 24h. Discover the slug with `platform_experiment_list`, then `platform_experiment_list_runs` to confirm the run id."
183
188
  ].join("\n");
184
189
  }
190
+ const runStatus2 = deriveRunStatus(results.timestamps);
191
+ const partial = !isTerminalStatus(runStatus2);
185
192
  const evaluationsByRow = /* @__PURE__ */ new Map();
186
193
  for (const evaluation of results.evaluations) {
187
194
  if (evaluatorFilter && evaluation.evaluator !== evaluatorFilter) continue;
@@ -232,6 +239,12 @@ async function handleExperimentResults(params) {
232
239
  lines.push(`# Evaluation Results: ${results.runId}`);
233
240
  lines.push("");
234
241
  lines.push(`**Experiment**: ${results.experimentId}`);
242
+ lines.push(`**Status**: ${runStatus2}`);
243
+ if (typeof results.total === "number" && results.total > 0) {
244
+ lines.push(
245
+ `**Progress**: ${results.progress ?? results.dataset.length}/${results.total} rows`
246
+ );
247
+ }
235
248
  lines.push(`**Total rows**: ${results.dataset.length}`);
236
249
  lines.push(`**Total evaluations**: ${results.evaluations.length}`);
237
250
  if (filter === "failed") {
@@ -240,6 +253,12 @@ async function handleExperimentResults(params) {
240
253
  if (evaluatorFilter) {
241
254
  lines.push(`**Evaluator filter**: ${evaluatorFilter}`);
242
255
  }
256
+ if (partial) {
257
+ lines.push("");
258
+ lines.push(
259
+ runStatus2 === "interrupted" ? "> These are partial results. The run never sent a finished/stopped marker and has had no updates recently, so it likely was interrupted before completing. The rows below are everything recorded so far." : "> These are partial results. The run is still in progress, so more rows may appear on a later call."
260
+ );
261
+ }
243
262
  lines.push("");
244
263
  if (evaluatorAverages.size > 0) {
245
264
  lines.push("## Evaluator Summary");
@@ -255,7 +274,17 @@ async function handleExperimentResults(params) {
255
274
  lines.push("");
256
275
  }
257
276
  if (rows.length === 0) {
258
- lines.push("_No rows matched the filter._");
277
+ if (filter === "failed") {
278
+ lines.push("_No rows matched the filter._");
279
+ } else if (runStatus2 === "running") {
280
+ lines.push(
281
+ "_No rows recorded yet. The run is still in progress; call again shortly._"
282
+ );
283
+ } else if (runStatus2 === "interrupted") {
284
+ lines.push("_No rows were recorded before the run was interrupted._");
285
+ } else {
286
+ lines.push("_No rows recorded for this run._");
287
+ }
259
288
  return lines.join("\n");
260
289
  }
261
290
  lines.push(
@@ -461,11 +490,78 @@ async function handleRunExperiment(params) {
461
490
  );
462
491
  return lines.join("\n");
463
492
  }
464
- async function handleExperimentStatus(params) {
465
- const status = await makeRequest(
466
- "GET",
467
- `/api/experiments/runs/${encodeURIComponent(params.runId)}`
493
+ async function statusFromResults(params) {
494
+ const search = new URLSearchParams();
495
+ if (params.experimentSlug) search.set("experimentSlug", params.experimentSlug);
496
+ const qs = search.toString() ? `?${search.toString()}` : "";
497
+ let results;
498
+ try {
499
+ results = await makeRequest(
500
+ "GET",
501
+ `/api/experiments/runs/${encodeURIComponent(params.runId)}/results${qs}`
502
+ );
503
+ } catch (error) {
504
+ const code = error instanceof LangWatchApiError ? error.status : void 0;
505
+ const message = error instanceof Error ? error.message : String(error);
506
+ if (code === 404 || code === void 0 && /404|not found/i.test(message)) {
507
+ return null;
508
+ }
509
+ throw error;
510
+ }
511
+ const status = deriveRunStatus(results.timestamps);
512
+ const total = results.total ?? results.dataset?.length ?? 0;
513
+ const progress = results.progress ?? results.dataset?.length ?? 0;
514
+ const lines = [];
515
+ lines.push(`# Evaluation Run ${params.runId}
516
+ `);
517
+ lines.push(`**Status**: ${status}`);
518
+ lines.push(`**Progress**: ${progress}/${total} cells`);
519
+ if (results.timestamps.createdAt) {
520
+ lines.push(
521
+ `**Started**: ${new Date(results.timestamps.createdAt).toISOString()}`
522
+ );
523
+ }
524
+ if (results.timestamps.finishedAt) {
525
+ lines.push(
526
+ `**Finished**: ${new Date(results.timestamps.finishedAt).toISOString()}`
527
+ );
528
+ }
529
+ if (results.timestamps.stoppedAt) {
530
+ lines.push(
531
+ `**Stopped**: ${new Date(results.timestamps.stoppedAt).toISOString()}`
532
+ );
533
+ }
534
+ lines.push("");
535
+ lines.push(
536
+ "> Use `platform_experiment_results` to fetch the per-row scores (partial results are available even while running)."
468
537
  );
538
+ return lines.join("\n");
539
+ }
540
+ async function handleExperimentStatus(params) {
541
+ let status;
542
+ try {
543
+ status = await makeRequest(
544
+ "GET",
545
+ `/api/experiments/runs/${encodeURIComponent(params.runId)}`
546
+ );
547
+ } catch (error) {
548
+ const code = error instanceof LangWatchApiError ? error.status : void 0;
549
+ const message = error instanceof Error ? error.message : String(error);
550
+ if (code === 404 || /404|not found/i.test(message)) {
551
+ const fallback = await statusFromResults(params);
552
+ if (fallback) return fallback;
553
+ return [
554
+ `# Evaluation Run ${params.runId}`,
555
+ "",
556
+ "**Status**: not found",
557
+ "",
558
+ `Could not find run \`${params.runId}\`. SDK-logged runs and runs older than 24h are not in the live run-state and must be resolved by experiment slug.`,
559
+ "",
560
+ "> Pass `experimentSlug`: discover it with `platform_experiment_list`, then use `platform_experiment_list_runs` for the run ids. Or fetch the rows directly with `platform_experiment_results`."
561
+ ].join("\n");
562
+ }
563
+ throw error;
564
+ }
469
565
  const lines = [];
470
566
  lines.push(`# Evaluation Run ${status.runId}
471
567
  `);
@@ -637,7 +733,7 @@ function registerTools(server) {
637
733
  },
638
734
  withToolLogging("search_traces", async (params) => {
639
735
  requireApiKey();
640
- const { handleSearchTraces } = await import("./search-traces-3BBVYPC3.js");
736
+ const { handleSearchTraces } = await import("./search-traces-M5E5VB4X.js");
641
737
  return {
642
738
  content: [{ type: "text", text: await handleSearchTraces(params) }]
643
739
  };
@@ -654,7 +750,7 @@ function registerTools(server) {
654
750
  },
655
751
  withToolLogging("get_trace", async (params) => {
656
752
  requireApiKey();
657
- const { handleGetTrace } = await import("./get-trace-MRBDS3HJ.js");
753
+ const { handleGetTrace } = await import("./get-trace-ZR7MIITH.js");
658
754
  return {
659
755
  content: [{ type: "text", text: await handleGetTrace(params) }]
660
756
  };
@@ -680,7 +776,7 @@ function registerTools(server) {
680
776
  },
681
777
  withToolLogging("get_analytics", async (params) => {
682
778
  requireApiKey();
683
- const { handleGetAnalytics } = await import("./get-analytics-GPVJX7SF.js");
779
+ const { handleGetAnalytics } = await import("./get-analytics-EDFAYYIQ.js");
684
780
  return {
685
781
  content: [{ type: "text", text: await handleGetAnalytics(params) }]
686
782
  };
@@ -714,7 +810,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
714
810
  },
715
811
  withToolLogging("platform_create_prompt", async (params) => {
716
812
  requireApiKey();
717
- const { handleCreatePrompt } = await import("./create-prompt-NGXKSP4X.js");
813
+ const { handleCreatePrompt } = await import("./create-prompt-LZ3QHSU4.js");
718
814
  return {
719
815
  content: [{ type: "text", text: await handleCreatePrompt(params) }]
720
816
  };
@@ -726,7 +822,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
726
822
  {},
727
823
  withToolLogging("platform_list_prompts", async () => {
728
824
  requireApiKey();
729
- const { handleListPrompts } = await import("./list-prompts-VNXKHK7T.js");
825
+ const { handleListPrompts } = await import("./list-prompts-C7GR72XL.js");
730
826
  return {
731
827
  content: [{ type: "text", text: await handleListPrompts() }]
732
828
  };
@@ -750,7 +846,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
750
846
  };
751
847
  }
752
848
  requireApiKey();
753
- const { handleGetPrompt } = await import("./get-prompt-5XAGWWBG.js");
849
+ const { handleGetPrompt } = await import("./get-prompt-EWRJVVGB.js");
754
850
  return {
755
851
  content: [{ type: "text", text: await handleGetPrompt(params) }]
756
852
  };
@@ -775,7 +871,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
775
871
  },
776
872
  withToolLogging("platform_update_prompt", async (params) => {
777
873
  requireApiKey();
778
- const { handleUpdatePrompt } = await import("./update-prompt-ZU2DD6KM.js");
874
+ const { handleUpdatePrompt } = await import("./update-prompt-M33OTTAJ.js");
779
875
  return {
780
876
  content: [{ type: "text", text: await handleUpdatePrompt(params) }]
781
877
  };
@@ -791,7 +887,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
791
887
  },
792
888
  withToolLogging("platform_assign_prompt_tag", async (params) => {
793
889
  requireApiKey();
794
- const { handleAssignPromptTag } = await import("./assign-prompt-tag-FKCCZPML.js");
890
+ const { handleAssignPromptTag } = await import("./assign-prompt-tag-WPUJO55U.js");
795
891
  return {
796
892
  content: [{ type: "text", text: await handleAssignPromptTag(params) }]
797
893
  };
@@ -803,7 +899,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
803
899
  {},
804
900
  withToolLogging("platform_list_prompt_tags", async () => {
805
901
  requireApiKey();
806
- const { handleListPromptTags } = await import("./list-prompt-tags-Z2DD6FLQ.js");
902
+ const { handleListPromptTags } = await import("./list-prompt-tags-J2HPHVAZ.js");
807
903
  return {
808
904
  content: [{ type: "text", text: await handleListPromptTags() }]
809
905
  };
@@ -817,7 +913,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
817
913
  },
818
914
  withToolLogging("platform_create_prompt_tag", async (params) => {
819
915
  requireApiKey();
820
- const { handleCreatePromptTag } = await import("./create-prompt-tag-IUKYPVHH.js");
916
+ const { handleCreatePromptTag } = await import("./create-prompt-tag-IF4J24QM.js");
821
917
  return {
822
918
  content: [{ type: "text", text: await handleCreatePromptTag(params) }]
823
919
  };
@@ -832,7 +928,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
832
928
  },
833
929
  withToolLogging("platform_rename_prompt_tag", async (params) => {
834
930
  requireApiKey();
835
- const { handleRenamePromptTag } = await import("./rename-prompt-tag-A4RJUK7Z.js");
931
+ const { handleRenamePromptTag } = await import("./rename-prompt-tag-4AAV2BS4.js");
836
932
  return {
837
933
  content: [{ type: "text", text: await handleRenamePromptTag(params) }]
838
934
  };
@@ -846,7 +942,7 @@ NOTE: Prompts can be managed two ways. Determine which approach the user needs:
846
942
  },
847
943
  withToolLogging("platform_delete_prompt_tag", async (params) => {
848
944
  requireApiKey();
849
- const { handleDeletePromptTag } = await import("./delete-prompt-tag-I6HNMSVJ.js");
945
+ const { handleDeletePromptTag } = await import("./delete-prompt-tag-VYYL4GTF.js");
850
946
  return {
851
947
  content: [{ type: "text", text: await handleDeletePromptTag(params) }]
852
948
  };
@@ -874,7 +970,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
874
970
  },
875
971
  withToolLogging("platform_create_scenario", async (params) => {
876
972
  requireApiKey();
877
- const { handleCreateScenario } = await import("./create-scenario-FNBXALH3.js");
973
+ const { handleCreateScenario } = await import("./create-scenario-BK4E5DEU.js");
878
974
  return {
879
975
  content: [
880
976
  { type: "text", text: await handleCreateScenario(params) }
@@ -892,7 +988,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
892
988
  },
893
989
  withToolLogging("platform_list_scenarios", async (params) => {
894
990
  requireApiKey();
895
- const { handleListScenarios } = await import("./list-scenarios-CFZHXL76.js");
991
+ const { handleListScenarios } = await import("./list-scenarios-JEPGIIDO.js");
896
992
  return {
897
993
  content: [
898
994
  { type: "text", text: await handleListScenarios(params) }
@@ -911,7 +1007,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
911
1007
  },
912
1008
  withToolLogging("platform_get_scenario", async (params) => {
913
1009
  requireApiKey();
914
- const { handleGetScenario } = await import("./get-scenario-7XBCDZWX.js");
1010
+ const { handleGetScenario } = await import("./get-scenario-24YUJS5W.js");
915
1011
  return {
916
1012
  content: [{ type: "text", text: await handleGetScenario(params) }]
917
1013
  };
@@ -929,7 +1025,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
929
1025
  },
930
1026
  withToolLogging("platform_update_scenario", async (params) => {
931
1027
  requireApiKey();
932
- const { handleUpdateScenario } = await import("./update-scenario-3VUTPDRU.js");
1028
+ const { handleUpdateScenario } = await import("./update-scenario-FKTQRAFQ.js");
933
1029
  return {
934
1030
  content: [
935
1031
  { type: "text", text: await handleUpdateScenario(params) }
@@ -945,7 +1041,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
945
1041
  },
946
1042
  withToolLogging("platform_archive_scenario", async (params) => {
947
1043
  requireApiKey();
948
- const { handleArchiveScenario } = await import("./archive-scenario-P5RRITRM.js");
1044
+ const { handleArchiveScenario } = await import("./archive-scenario-6M2IB7Y2.js");
949
1045
  return {
950
1046
  content: [
951
1047
  { type: "text", text: await handleArchiveScenario(params) }
@@ -961,7 +1057,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
961
1057
  },
962
1058
  withToolLogging("platform_list_suites", async (params) => {
963
1059
  requireApiKey();
964
- const { handleListSuites } = await import("./list-suites-ZDOHAAXF.js");
1060
+ const { handleListSuites } = await import("./list-suites-POTZ3ZT6.js");
965
1061
  return {
966
1062
  content: [{ type: "text", text: await handleListSuites(params) }]
967
1063
  };
@@ -976,7 +1072,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
976
1072
  },
977
1073
  withToolLogging("platform_get_suite", async (params) => {
978
1074
  requireApiKey();
979
- const { handleGetSuite } = await import("./get-suite-4DBVHFEM.js");
1075
+ const { handleGetSuite } = await import("./get-suite-B65ZKZJA.js");
980
1076
  return {
981
1077
  content: [{ type: "text", text: await handleGetSuite(params) }]
982
1078
  };
@@ -995,7 +1091,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
995
1091
  },
996
1092
  withToolLogging("platform_create_suite", async (params) => {
997
1093
  requireApiKey();
998
- const { handleCreateSuite } = await import("./create-suite-DJEPD4ZB.js");
1094
+ const { handleCreateSuite } = await import("./create-suite-HEQPNLND.js");
999
1095
  return {
1000
1096
  content: [{ type: "text", text: await handleCreateSuite(params) }]
1001
1097
  };
@@ -1015,7 +1111,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1015
1111
  },
1016
1112
  withToolLogging("platform_update_suite", async (params) => {
1017
1113
  requireApiKey();
1018
- const { handleUpdateSuite } = await import("./update-suite-C6JFDQHL.js");
1114
+ const { handleUpdateSuite } = await import("./update-suite-JJTNOTXN.js");
1019
1115
  return {
1020
1116
  content: [{ type: "text", text: await handleUpdateSuite(params) }]
1021
1117
  };
@@ -1029,7 +1125,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1029
1125
  },
1030
1126
  withToolLogging("platform_run_suite", async (params) => {
1031
1127
  requireApiKey();
1032
- const { handleRunSuite } = await import("./run-suite-TH7LO5TJ.js");
1128
+ const { handleRunSuite } = await import("./run-suite-Q66OSPO4.js");
1033
1129
  return {
1034
1130
  content: [{ type: "text", text: await handleRunSuite(params) }]
1035
1131
  };
@@ -1043,7 +1139,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1043
1139
  },
1044
1140
  withToolLogging("platform_archive_suite", async (params) => {
1045
1141
  requireApiKey();
1046
- const { handleArchiveSuite } = await import("./archive-suite-NUUFD2EM.js");
1142
+ const { handleArchiveSuite } = await import("./archive-suite-NXZ3YDS3.js");
1047
1143
  return {
1048
1144
  content: [{ type: "text", text: await handleArchiveSuite(params) }]
1049
1145
  };
@@ -1060,7 +1156,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1060
1156
  },
1061
1157
  withToolLogging("platform_list_simulation_runs", async (params) => {
1062
1158
  requireApiKey();
1063
- const { handleListSimulationRuns } = await import("./list-simulation-runs-AM2BXLBW.js");
1159
+ const { handleListSimulationRuns } = await import("./list-simulation-runs-DRSAGPEC.js");
1064
1160
  return {
1065
1161
  content: [{ type: "text", text: await handleListSimulationRuns(params) }]
1066
1162
  };
@@ -1075,7 +1171,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1075
1171
  },
1076
1172
  withToolLogging("platform_get_simulation_run", async (params) => {
1077
1173
  requireApiKey();
1078
- const { handleGetSimulationRun } = await import("./get-simulation-run-AV24FJWI.js");
1174
+ const { handleGetSimulationRun } = await import("./get-simulation-run-UX2W6F6I.js");
1079
1175
  return {
1080
1176
  content: [{ type: "text", text: await handleGetSimulationRun(params) }]
1081
1177
  };
@@ -1092,7 +1188,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1092
1188
  },
1093
1189
  withToolLogging("platform_create_evaluator", async (params) => {
1094
1190
  requireApiKey();
1095
- const { handleCreateEvaluator } = await import("./create-evaluator-YFFQIR7E.js");
1191
+ const { handleCreateEvaluator } = await import("./create-evaluator-WJAAQOUE.js");
1096
1192
  return {
1097
1193
  content: [
1098
1194
  { type: "text", text: await handleCreateEvaluator(params) }
@@ -1106,7 +1202,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1106
1202
  {},
1107
1203
  withToolLogging("platform_list_evaluators", async () => {
1108
1204
  requireApiKey();
1109
- const { handleListEvaluators } = await import("./list-evaluators-B6OSVAM2.js");
1205
+ const { handleListEvaluators } = await import("./list-evaluators-K5OGB6TX.js");
1110
1206
  return {
1111
1207
  content: [{ type: "text", text: await handleListEvaluators() }]
1112
1208
  };
@@ -1120,7 +1216,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1120
1216
  },
1121
1217
  withToolLogging("platform_get_evaluator", async (params) => {
1122
1218
  requireApiKey();
1123
- const { handleGetEvaluator } = await import("./get-evaluator-PCM6XQAU.js");
1219
+ const { handleGetEvaluator } = await import("./get-evaluator-HCVXNPZR.js");
1124
1220
  return {
1125
1221
  content: [{ type: "text", text: await handleGetEvaluator(params) }]
1126
1222
  };
@@ -1138,7 +1234,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1138
1234
  },
1139
1235
  withToolLogging("platform_update_evaluator", async (params) => {
1140
1236
  requireApiKey();
1141
- const { handleUpdateEvaluator } = await import("./update-evaluator-6IJHFG2E.js");
1237
+ const { handleUpdateEvaluator } = await import("./update-evaluator-LH2RDDB5.js");
1142
1238
  return {
1143
1239
  content: [
1144
1240
  { type: "text", text: await handleUpdateEvaluator(params) }
@@ -1154,7 +1250,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1154
1250
  },
1155
1251
  withToolLogging("platform_delete_evaluator", async (params) => {
1156
1252
  requireApiKey();
1157
- const { handleDeleteEvaluator } = await import("./delete-evaluator-7ZATLJOA.js");
1253
+ const { handleDeleteEvaluator } = await import("./delete-evaluator-VKIG5I3S.js");
1158
1254
  return {
1159
1255
  content: [{ type: "text", text: await handleDeleteEvaluator(params) }]
1160
1256
  };
@@ -1175,7 +1271,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1175
1271
  },
1176
1272
  withToolLogging("platform_set_model_provider", async (params) => {
1177
1273
  requireApiKey();
1178
- const { handleSetModelProvider } = await import("./set-model-provider-WOC5FNMV.js");
1274
+ const { handleSetModelProvider } = await import("./set-model-provider-XENT5D2P.js");
1179
1275
  return {
1180
1276
  content: [
1181
1277
  { type: "text", text: await handleSetModelProvider(params) }
@@ -1189,7 +1285,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1189
1285
  {},
1190
1286
  withToolLogging("platform_list_model_providers", async () => {
1191
1287
  requireApiKey();
1192
- const { handleListModelProviders } = await import("./list-model-providers-NL6IP4UZ.js");
1288
+ const { handleListModelProviders } = await import("./list-model-providers-JMOGZLSO.js");
1193
1289
  return {
1194
1290
  content: [{ type: "text", text: await handleListModelProviders() }]
1195
1291
  };
@@ -1201,7 +1297,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1201
1297
  {},
1202
1298
  withToolLogging("platform_list_agents", async () => {
1203
1299
  requireApiKey();
1204
- const { handleListAgents } = await import("./list-agents-NECO7MPI.js");
1300
+ const { handleListAgents } = await import("./list-agents-6ZNOV7FK.js");
1205
1301
  return {
1206
1302
  content: [{ type: "text", text: await handleListAgents() }]
1207
1303
  };
@@ -1215,7 +1311,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1215
1311
  },
1216
1312
  withToolLogging("platform_get_agent", async (params) => {
1217
1313
  requireApiKey();
1218
- const { handleGetAgent } = await import("./get-agent-3KDWCP5N.js");
1314
+ const { handleGetAgent } = await import("./get-agent-IZSP7AR5.js");
1219
1315
  return {
1220
1316
  content: [{ type: "text", text: await handleGetAgent(params) }]
1221
1317
  };
@@ -1231,7 +1327,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1231
1327
  },
1232
1328
  withToolLogging("platform_create_agent", async (params) => {
1233
1329
  requireApiKey();
1234
- const { handleCreateAgent } = await import("./create-agent-K5Q7BFGZ.js");
1330
+ const { handleCreateAgent } = await import("./create-agent-BI7UTJ6A.js");
1235
1331
  const parsedConfig = params.config ? JSON.parse(params.config) : void 0;
1236
1332
  return {
1237
1333
  content: [{ type: "text", text: await handleCreateAgent({ ...params, config: parsedConfig }) }]
@@ -1249,7 +1345,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1249
1345
  },
1250
1346
  withToolLogging("platform_update_agent", async (params) => {
1251
1347
  requireApiKey();
1252
- const { handleUpdateAgent } = await import("./update-agent-YMEV5MTL.js");
1348
+ const { handleUpdateAgent } = await import("./update-agent-GML25EE3.js");
1253
1349
  const parsedConfig = params.config ? JSON.parse(params.config) : void 0;
1254
1350
  return {
1255
1351
  content: [{ type: "text", text: await handleUpdateAgent({ ...params, config: parsedConfig }) }]
@@ -1264,7 +1360,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1264
1360
  },
1265
1361
  withToolLogging("platform_delete_agent", async (params) => {
1266
1362
  requireApiKey();
1267
- const { handleDeleteAgent } = await import("./delete-agent-TJI5XBBM.js");
1363
+ const { handleDeleteAgent } = await import("./delete-agent-Y4T2G5PT.js");
1268
1364
  return {
1269
1365
  content: [{ type: "text", text: await handleDeleteAgent(params) }]
1270
1366
  };
@@ -1279,7 +1375,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1279
1375
  },
1280
1376
  withToolLogging("platform_run_agent", async (params) => {
1281
1377
  requireApiKey();
1282
- const { handleRunAgent } = await import("./run-agent-JFNDY7MR.js");
1378
+ const { handleRunAgent } = await import("./run-agent-7QE3YEH7.js");
1283
1379
  return {
1284
1380
  content: [{ type: "text", text: await handleRunAgent(params) }]
1285
1381
  };
@@ -1291,7 +1387,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1291
1387
  {},
1292
1388
  withToolLogging("platform_list_dashboards", async () => {
1293
1389
  requireApiKey();
1294
- const { handleListDashboards } = await import("./list-dashboards-DVPVVVKW.js");
1390
+ const { handleListDashboards } = await import("./list-dashboards-G2WJOXWB.js");
1295
1391
  return {
1296
1392
  content: [{ type: "text", text: await handleListDashboards() }]
1297
1393
  };
@@ -1305,7 +1401,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1305
1401
  },
1306
1402
  withToolLogging("platform_get_dashboard", async (params) => {
1307
1403
  requireApiKey();
1308
- const { handleGetDashboard } = await import("./get-dashboard-YPTIE5YY.js");
1404
+ const { handleGetDashboard } = await import("./get-dashboard-WSAO6IQ4.js");
1309
1405
  return {
1310
1406
  content: [{ type: "text", text: await handleGetDashboard(params) }]
1311
1407
  };
@@ -1319,7 +1415,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1319
1415
  },
1320
1416
  withToolLogging("platform_create_dashboard", async (params) => {
1321
1417
  requireApiKey();
1322
- const { handleCreateDashboard } = await import("./create-dashboard-G4QA5AXP.js");
1418
+ const { handleCreateDashboard } = await import("./create-dashboard-CPOOOIKK.js");
1323
1419
  return {
1324
1420
  content: [{ type: "text", text: await handleCreateDashboard(params) }]
1325
1421
  };
@@ -1333,7 +1429,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1333
1429
  },
1334
1430
  withToolLogging("platform_delete_dashboard", async (params) => {
1335
1431
  requireApiKey();
1336
- const { handleDeleteDashboard } = await import("./delete-dashboard-N5SZJIR3.js");
1432
+ const { handleDeleteDashboard } = await import("./delete-dashboard-3RW647WJ.js");
1337
1433
  return {
1338
1434
  content: [{ type: "text", text: await handleDeleteDashboard(params) }]
1339
1435
  };
@@ -1348,7 +1444,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1348
1444
  },
1349
1445
  withToolLogging("platform_rename_dashboard", async (params) => {
1350
1446
  requireApiKey();
1351
- const { renameDashboard } = await import("./langwatch-api-dashboards-WARLI6NF.js");
1447
+ const { renameDashboard } = await import("./langwatch-api-dashboards-NPQM6QJI.js");
1352
1448
  const result = await renameDashboard(params.id, { name: params.name });
1353
1449
  return {
1354
1450
  content: [{ type: "text", text: `Dashboard "${result.name}" renamed successfully (ID: ${result.id}).` }]
@@ -1361,7 +1457,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1361
1457
  {},
1362
1458
  withToolLogging("platform_list_workflows", async () => {
1363
1459
  requireApiKey();
1364
- const { handleListWorkflows } = await import("./list-workflows-WBRBKLIT.js");
1460
+ const { handleListWorkflows } = await import("./list-workflows-QQZQIOHB.js");
1365
1461
  return {
1366
1462
  content: [{ type: "text", text: await handleListWorkflows() }]
1367
1463
  };
@@ -1375,7 +1471,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1375
1471
  },
1376
1472
  withToolLogging("platform_get_workflow", async (params) => {
1377
1473
  requireApiKey();
1378
- const { handleGetWorkflow } = await import("./get-workflow-UR4Y6UFX.js");
1474
+ const { handleGetWorkflow } = await import("./get-workflow-YROHUQJW.js");
1379
1475
  return {
1380
1476
  content: [{ type: "text", text: await handleGetWorkflow(params) }]
1381
1477
  };
@@ -1389,7 +1485,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1389
1485
  },
1390
1486
  withToolLogging("platform_delete_workflow", async (params) => {
1391
1487
  requireApiKey();
1392
- const { handleDeleteWorkflow } = await import("./delete-workflow-QEO74JQR.js");
1488
+ const { handleDeleteWorkflow } = await import("./delete-workflow-SHNPYSWQ.js");
1393
1489
  return {
1394
1490
  content: [{ type: "text", text: await handleDeleteWorkflow(params) }]
1395
1491
  };
@@ -1404,7 +1500,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1404
1500
  },
1405
1501
  withToolLogging("platform_run_workflow", async (params) => {
1406
1502
  requireApiKey();
1407
- const { handleRunWorkflow } = await import("./run-workflow-CK3JP5U2.js");
1503
+ const { handleRunWorkflow } = await import("./run-workflow-RWX2D752.js");
1408
1504
  return {
1409
1505
  content: [{ type: "text", text: await handleRunWorkflow(params) }]
1410
1506
  };
@@ -1418,7 +1514,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1418
1514
  },
1419
1515
  withToolLogging("platform_list_annotations", async (params) => {
1420
1516
  requireApiKey();
1421
- const { handleListAnnotations } = await import("./list-annotations-3OJEO774.js");
1517
+ const { handleListAnnotations } = await import("./list-annotations-6P3IWILH.js");
1422
1518
  return {
1423
1519
  content: [{ type: "text", text: await handleListAnnotations(params) }]
1424
1520
  };
@@ -1435,7 +1531,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1435
1531
  },
1436
1532
  withToolLogging("platform_create_annotation", async (params) => {
1437
1533
  requireApiKey();
1438
- const { handleCreateAnnotation } = await import("./create-annotation-KN3GE3DK.js");
1534
+ const { handleCreateAnnotation } = await import("./create-annotation-SNM2J6S4.js");
1439
1535
  return {
1440
1536
  content: [{ type: "text", text: await handleCreateAnnotation(params) }]
1441
1537
  };
@@ -1449,7 +1545,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1449
1545
  },
1450
1546
  withToolLogging("platform_delete_annotation", async (params) => {
1451
1547
  requireApiKey();
1452
- const { handleDeleteAnnotation } = await import("./delete-annotation-KRP53TUU.js");
1548
+ const { handleDeleteAnnotation } = await import("./delete-annotation-KYDMQTZG.js");
1453
1549
  return {
1454
1550
  content: [{ type: "text", text: await handleDeleteAnnotation(params) }]
1455
1551
  };
@@ -1463,7 +1559,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1463
1559
  },
1464
1560
  withToolLogging("platform_get_annotation", async (params) => {
1465
1561
  requireApiKey();
1466
- const { getAnnotation } = await import("./langwatch-api-annotations-ZJDRB4JH.js");
1562
+ const { getAnnotation } = await import("./langwatch-api-annotations-OPEXNTPF.js");
1467
1563
  const annotation = await getAnnotation(params.id);
1468
1564
  const lines = [
1469
1565
  `**ID**: ${annotation.id}`,
@@ -1485,7 +1581,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1485
1581
  },
1486
1582
  withToolLogging("platform_list_triggers", async (params) => {
1487
1583
  requireApiKey();
1488
- const { listTriggers } = await import("./langwatch-api-triggers-5SX6R2WU.js");
1584
+ const { listTriggers } = await import("./langwatch-api-triggers-XGXXT7DD.js");
1489
1585
  const triggers = await listTriggers();
1490
1586
  if (params.format === "json") {
1491
1587
  return { content: [{ type: "text", text: JSON.stringify(triggers, null, 2) }] };
@@ -1518,7 +1614,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1518
1614
  },
1519
1615
  withToolLogging("platform_create_trigger", async (params) => {
1520
1616
  requireApiKey();
1521
- const { createTrigger } = await import("./langwatch-api-triggers-5SX6R2WU.js");
1617
+ const { createTrigger } = await import("./langwatch-api-triggers-XGXXT7DD.js");
1522
1618
  let filters = {};
1523
1619
  if (params.filters) {
1524
1620
  try {
@@ -1549,7 +1645,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1549
1645
  },
1550
1646
  withToolLogging("platform_update_trigger", async (params) => {
1551
1647
  requireApiKey();
1552
- const { updateTrigger } = await import("./langwatch-api-triggers-5SX6R2WU.js");
1648
+ const { updateTrigger } = await import("./langwatch-api-triggers-XGXXT7DD.js");
1553
1649
  const trigger = await updateTrigger(params);
1554
1650
  return { content: [{ type: "text", text: `Trigger "${trigger.name}" updated (active: ${trigger.active}).` }] };
1555
1651
  })
@@ -1562,7 +1658,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1562
1658
  },
1563
1659
  withToolLogging("platform_delete_trigger", async (params) => {
1564
1660
  requireApiKey();
1565
- const { deleteTrigger } = await import("./langwatch-api-triggers-5SX6R2WU.js");
1661
+ const { deleteTrigger } = await import("./langwatch-api-triggers-XGXXT7DD.js");
1566
1662
  const result = await deleteTrigger(params.id);
1567
1663
  return { content: [{ type: "text", text: `Trigger ${result.id} deleted.` }] };
1568
1664
  })
@@ -1573,7 +1669,7 @@ NOTE: Scenarios can be created two ways. Determine which approach the user needs
1573
1669
  {},
1574
1670
  withToolLogging("platform_list_monitors", async () => {
1575
1671
  requireApiKey();
1576
- const { listMonitors } = await import("./langwatch-api-monitors-4XKXHYCG.js");
1672
+ const { listMonitors } = await import("./langwatch-api-monitors-3L25OOOS.js");
1577
1673
  const monitors = await listMonitors();
1578
1674
  if (monitors.length === 0) {
1579
1675
  return { content: [{ type: "text", text: "No monitors found." }] };
@@ -1600,7 +1696,7 @@ ${lines.join("\n")}`
1600
1696
  },
1601
1697
  withToolLogging("platform_get_monitor", async (params) => {
1602
1698
  requireApiKey();
1603
- const { getMonitor } = await import("./langwatch-api-monitors-4XKXHYCG.js");
1699
+ const { getMonitor } = await import("./langwatch-api-monitors-3L25OOOS.js");
1604
1700
  const m = await getMonitor(params.id);
1605
1701
  const lines = [
1606
1702
  `**${m.name}** (${m.id})`,
@@ -1627,7 +1723,7 @@ ${lines.join("\n")}`
1627
1723
  },
1628
1724
  withToolLogging("platform_create_monitor", async (params) => {
1629
1725
  requireApiKey();
1630
- const { createMonitor } = await import("./langwatch-api-monitors-4XKXHYCG.js");
1726
+ const { createMonitor } = await import("./langwatch-api-monitors-3L25OOOS.js");
1631
1727
  const monitor = await createMonitor(params);
1632
1728
  return {
1633
1729
  content: [
@@ -1651,7 +1747,7 @@ ${lines.join("\n")}`
1651
1747
  },
1652
1748
  withToolLogging("platform_update_monitor", async (params) => {
1653
1749
  requireApiKey();
1654
- const { updateMonitor } = await import("./langwatch-api-monitors-4XKXHYCG.js");
1750
+ const { updateMonitor } = await import("./langwatch-api-monitors-3L25OOOS.js");
1655
1751
  const monitor = await updateMonitor(params);
1656
1752
  return {
1657
1753
  content: [
@@ -1671,7 +1767,7 @@ ${lines.join("\n")}`
1671
1767
  },
1672
1768
  withToolLogging("platform_delete_monitor", async (params) => {
1673
1769
  requireApiKey();
1674
- const { deleteMonitor } = await import("./langwatch-api-monitors-4XKXHYCG.js");
1770
+ const { deleteMonitor } = await import("./langwatch-api-monitors-3L25OOOS.js");
1675
1771
  const result = await deleteMonitor(params.id);
1676
1772
  return {
1677
1773
  content: [
@@ -1686,7 +1782,7 @@ ${lines.join("\n")}`
1686
1782
  {},
1687
1783
  withToolLogging("platform_list_secrets", async () => {
1688
1784
  requireApiKey();
1689
- const { listSecrets } = await import("./langwatch-api-secrets-6SHK5G7Q.js");
1785
+ const { listSecrets } = await import("./langwatch-api-secrets-ZFURUA62.js");
1690
1786
  const secrets = await listSecrets();
1691
1787
  if (secrets.length === 0) {
1692
1788
  return { content: [{ type: "text", text: "No secrets found." }] };
@@ -1714,7 +1810,7 @@ ${lines.join("\n")}`
1714
1810
  },
1715
1811
  withToolLogging("platform_create_secret", async (params) => {
1716
1812
  requireApiKey();
1717
- const { createSecret } = await import("./langwatch-api-secrets-6SHK5G7Q.js");
1813
+ const { createSecret } = await import("./langwatch-api-secrets-ZFURUA62.js");
1718
1814
  const secret = await createSecret({ name: params.name, value: params.value });
1719
1815
  return {
1720
1816
  content: [
@@ -1735,7 +1831,7 @@ ${lines.join("\n")}`
1735
1831
  },
1736
1832
  withToolLogging("platform_update_secret", async (params) => {
1737
1833
  requireApiKey();
1738
- const { updateSecret } = await import("./langwatch-api-secrets-6SHK5G7Q.js");
1834
+ const { updateSecret } = await import("./langwatch-api-secrets-ZFURUA62.js");
1739
1835
  const secret = await updateSecret({ id: params.id, value: params.value });
1740
1836
  return {
1741
1837
  content: [
@@ -1755,7 +1851,7 @@ ${lines.join("\n")}`
1755
1851
  },
1756
1852
  withToolLogging("platform_delete_secret", async (params) => {
1757
1853
  requireApiKey();
1758
- const { deleteSecret } = await import("./langwatch-api-secrets-6SHK5G7Q.js");
1854
+ const { deleteSecret } = await import("./langwatch-api-secrets-ZFURUA62.js");
1759
1855
  const result = await deleteSecret(params.id);
1760
1856
  return { content: [{ type: "text", text: `Secret ${result.id} deleted.` }] };
1761
1857
  })
@@ -1775,9 +1871,12 @@ ${lines.join("\n")}`
1775
1871
  );
1776
1872
  server.tool(
1777
1873
  "platform_experiment_status",
1778
- "Check the status of an experiment run. Returns progress and summary when completed.",
1874
+ "Check the status of an experiment run (running, completed, stopped, or interrupted) plus its progress. Works for both platform-run and SDK-logged experiments; pass experimentSlug for SDK runs or runs older than 24h.",
1779
1875
  {
1780
- runId: z2.string().describe("The run ID returned from platform_run_experiment")
1876
+ runId: z2.string().describe("The run ID returned from platform_run_experiment"),
1877
+ experimentSlug: z2.string().optional().describe(
1878
+ "Experiment slug \u2014 required for SDK-logged runs and runs older than 24h (the Redis run-state they would otherwise be read from is absent/expired). Use platform_experiment_list_runs to find the slug."
1879
+ )
1781
1880
  },
1782
1881
  withToolLogging("platform_experiment_status", async (params) => {
1783
1882
  requireApiKey();
@@ -1821,7 +1920,7 @@ ${lines.join("\n")}`
1821
1920
  );
1822
1921
  server.tool(
1823
1922
  "platform_experiment_results",
1824
- "Fetch per-row results for a completed experiment run so you can debug evaluator scores and missed rows. Returns a markdown report: per-evaluator averages plus row-by-row scores and failure details. Output is capped at 50 rows to protect the agent's context window \u2014 narrow with `filter: 'failed'` or `evaluator` to see what matters.",
1923
+ "Fetch per-row results for an experiment run so you can debug evaluator scores and missed rows. Serves partial results for runs that are still running or were interrupted (it does not require a completed run), with the run status noted in the output. Returns a markdown report: per-evaluator averages plus row-by-row scores and failure details. Output is capped at 50 rows to protect the agent's context window \u2014 narrow with `filter: 'failed'` or `evaluator` to see what matters.",
1825
1924
  {
1826
1925
  runId: z2.string().describe("The run ID returned from platform_run_experiment"),
1827
1926
  experimentSlug: z2.string().optional().describe(
@@ -1855,7 +1954,7 @@ ${lines.join("\n")}`
1855
1954
  async (params) => {
1856
1955
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1857
1956
  requireApiKey2();
1858
- const { handleListDatasets } = await import("./list-datasets-WUAE5HGX.js");
1957
+ const { handleListDatasets } = await import("./list-datasets-HBTH33X4.js");
1859
1958
  return {
1860
1959
  content: [{ type: "text", text: await handleListDatasets(params) }]
1861
1960
  };
@@ -1873,7 +1972,7 @@ ${lines.join("\n")}`
1873
1972
  async (params) => {
1874
1973
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1875
1974
  requireApiKey2();
1876
- const { handleGetDataset } = await import("./get-dataset-6DQFYITM.js");
1975
+ const { handleGetDataset } = await import("./get-dataset-BEVNXQNF.js");
1877
1976
  return {
1878
1977
  content: [{ type: "text", text: await handleGetDataset(params) }]
1879
1978
  };
@@ -1886,7 +1985,7 @@ ${lines.join("\n")}`
1886
1985
  async (params) => {
1887
1986
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1888
1987
  requireApiKey2();
1889
- const { handleCreateDataset } = await import("./create-dataset-WQSC37N7.js");
1988
+ const { handleCreateDataset } = await import("./create-dataset-BVXPVVY2.js");
1890
1989
  return {
1891
1990
  content: [{ type: "text", text: await handleCreateDataset(params) }]
1892
1991
  };
@@ -1903,7 +2002,7 @@ ${lines.join("\n")}`
1903
2002
  async (params) => {
1904
2003
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1905
2004
  requireApiKey2();
1906
- const { handleUpdateDataset } = await import("./update-dataset-EYT5POFM.js");
2005
+ const { handleUpdateDataset } = await import("./update-dataset-R4MM6NNY.js");
1907
2006
  return {
1908
2007
  content: [{ type: "text", text: await handleUpdateDataset(params) }]
1909
2008
  };
@@ -1918,7 +2017,7 @@ ${lines.join("\n")}`
1918
2017
  async (params) => {
1919
2018
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1920
2019
  requireApiKey2();
1921
- const { handleDeleteDataset } = await import("./delete-dataset-KDUOHL2P.js");
2020
+ const { handleDeleteDataset } = await import("./delete-dataset-SZAHFHHS.js");
1922
2021
  return {
1923
2022
  content: [{ type: "text", text: await handleDeleteDataset(params) }]
1924
2023
  };
@@ -1936,7 +2035,7 @@ ${lines.join("\n")}`
1936
2035
  async (params) => {
1937
2036
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1938
2037
  requireApiKey2();
1939
- const { handleListDatasetRecords } = await import("./list-dataset-records-I4BYORF5.js");
2038
+ const { handleListDatasetRecords } = await import("./list-dataset-records-GWWVOCII.js");
1940
2039
  return {
1941
2040
  content: [
1942
2041
  { type: "text", text: await handleListDatasetRecords(params) }
@@ -1954,7 +2053,7 @@ ${lines.join("\n")}`
1954
2053
  async (params) => {
1955
2054
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1956
2055
  requireApiKey2();
1957
- const { handleCreateDatasetRecords } = await import("./create-dataset-records-B4RL3FLC.js");
2056
+ const { handleCreateDatasetRecords } = await import("./create-dataset-records-S7VFIIMR.js");
1958
2057
  return {
1959
2058
  content: [
1960
2059
  { type: "text", text: await handleCreateDatasetRecords(params) }
@@ -1973,7 +2072,7 @@ ${lines.join("\n")}`
1973
2072
  async (params) => {
1974
2073
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1975
2074
  requireApiKey2();
1976
- const { handleUpdateDatasetRecord } = await import("./update-dataset-record-VFF5JTX4.js");
2075
+ const { handleUpdateDatasetRecord } = await import("./update-dataset-record-FN4BL5P4.js");
1977
2076
  return {
1978
2077
  content: [
1979
2078
  { type: "text", text: await handleUpdateDatasetRecord(params) }
@@ -1991,7 +2090,7 @@ ${lines.join("\n")}`
1991
2090
  async (params) => {
1992
2091
  const { requireApiKey: requireApiKey2 } = await import("./config.js");
1993
2092
  requireApiKey2();
1994
- const { handleDeleteDatasetRecords } = await import("./delete-dataset-records-DM4W3PAW.js");
2093
+ const { handleDeleteDatasetRecords } = await import("./delete-dataset-records-ISHKGEBH.js");
1995
2094
  return {
1996
2095
  content: [
1997
2096
  { type: "text", text: await handleDeleteDatasetRecords(params) }
@@ -2008,7 +2107,7 @@ ${lines.join("\n")}`
2008
2107
  },
2009
2108
  withToolLogging("platform_list_projects", async (params) => {
2010
2109
  requireApiKey();
2011
- const { handleListProjects } = await import("./list-projects-5FHMJ4PQ.js");
2110
+ const { handleListProjects } = await import("./list-projects-OXJC2NW5.js");
2012
2111
  return {
2013
2112
  content: [{ type: "text", text: await handleListProjects(params) }]
2014
2113
  };
@@ -2022,7 +2121,7 @@ ${lines.join("\n")}`
2022
2121
  },
2023
2122
  withToolLogging("platform_get_project", async (params) => {
2024
2123
  requireApiKey();
2025
- const { handleGetProject } = await import("./get-project-JCMWXVLU.js");
2124
+ const { handleGetProject } = await import("./get-project-H4V3GYRQ.js");
2026
2125
  return {
2027
2126
  content: [{ type: "text", text: await handleGetProject(params) }]
2028
2127
  };
@@ -2042,7 +2141,7 @@ You must provide either teamId (to add the project to an existing team) or newTe
2042
2141
  },
2043
2142
  withToolLogging("platform_create_project", async (params) => {
2044
2143
  requireApiKey();
2045
- const { handleCreateProject } = await import("./create-project-CUVQ67VN.js");
2144
+ const { handleCreateProject } = await import("./create-project-BF7LMZH5.js");
2046
2145
  return {
2047
2146
  content: [{ type: "text", text: await handleCreateProject(params) }]
2048
2147
  };
@@ -2060,7 +2159,7 @@ You must provide either teamId (to add the project to an existing team) or newTe
2060
2159
  },
2061
2160
  withToolLogging("platform_update_project", async (params) => {
2062
2161
  requireApiKey();
2063
- const { handleUpdateProject } = await import("./update-project-OIT4WPFI.js");
2162
+ const { handleUpdateProject } = await import("./update-project-H53IHRBB.js");
2064
2163
  return {
2065
2164
  content: [{ type: "text", text: await handleUpdateProject(params) }]
2066
2165
  };
@@ -2074,7 +2173,7 @@ You must provide either teamId (to add the project to an existing team) or newTe
2074
2173
  },
2075
2174
  withToolLogging("platform_archive_project", async (params) => {
2076
2175
  requireApiKey();
2077
- const { handleArchiveProject } = await import("./archive-project-HZBRPR2S.js");
2176
+ const { handleArchiveProject } = await import("./archive-project-KAZFHR4A.js");
2078
2177
  return {
2079
2178
  content: [{ type: "text", text: await handleArchiveProject(params) }]
2080
2179
  };
@@ -2086,7 +2185,7 @@ You must provide either teamId (to add the project to an existing team) or newTe
2086
2185
  {},
2087
2186
  withToolLogging("platform_list_api_keys", async () => {
2088
2187
  requireApiKey();
2089
- const { handleListApiKeys } = await import("./list-api-keys-AWW7ROLB.js");
2188
+ const { handleListApiKeys } = await import("./list-api-keys-JJI62KD2.js");
2090
2189
  return {
2091
2190
  content: [{ type: "text", text: await handleListApiKeys() }]
2092
2191
  };
@@ -2114,7 +2213,7 @@ The token is returned once and cannot be retrieved again.`,
2114
2213
  },
2115
2214
  withToolLogging("platform_create_api_key", async (params) => {
2116
2215
  requireApiKey();
2117
- const { handleCreateApiKey } = await import("./create-api-key-OQI5PUNQ.js");
2216
+ const { handleCreateApiKey } = await import("./create-api-key-23MXYC2L.js");
2118
2217
  return {
2119
2218
  content: [{ type: "text", text: await handleCreateApiKey(params) }]
2120
2219
  };
@@ -2128,7 +2227,7 @@ The token is returned once and cannot be retrieved again.`,
2128
2227
  },
2129
2228
  withToolLogging("platform_revoke_api_key", async (params) => {
2130
2229
  requireApiKey();
2131
- const { handleRevokeApiKey } = await import("./revoke-api-key-ZSPSPF5G.js");
2230
+ const { handleRevokeApiKey } = await import("./revoke-api-key-TONB4ADQ.js");
2132
2231
  return {
2133
2232
  content: [{ type: "text", text: await handleRevokeApiKey(params) }]
2134
2233
  };
@@ -2139,4 +2238,4 @@ The token is returned once and cannot be retrieved again.`,
2139
2238
  export {
2140
2239
  createMcpServer
2141
2240
  };
2142
- //# sourceMappingURL=chunk-JVLJKQJG.js.map
2241
+ //# sourceMappingURL=chunk-HRFQAFPR.js.map