@langwatch/mcp-server 2.1.0 → 2.2.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.
Files changed (415) hide show
  1. package/.gitignore +7 -0
  2. package/.npmignore +41 -0
  3. package/CHANGELOG.md +192 -201
  4. package/CONTRIBUTING.md +10 -0
  5. package/README.md +70 -68
  6. package/dist/add-dashboard-widget-4ZC5UN73.js +50 -0
  7. package/dist/add-dashboard-widget-ACC6QYBG.js +49 -0
  8. package/dist/archive-project-KWFM3I5Z.js +19 -0
  9. package/dist/{archive-project-W3IKI7UL.js → archive-project-SPVHXK6A.js} +4 -4
  10. package/dist/{archive-run-plan-474OKHHU.js → archive-run-plan-65QN3XRX.js} +4 -4
  11. package/dist/archive-run-plan-Z4SYE6BP.js +15 -0
  12. package/dist/{archive-scenario-V5UNYK26.js → archive-scenario-A6QV5LOW.js} +4 -4
  13. package/dist/archive-scenario-FXEYQNEH.js +19 -0
  14. package/dist/archive-test-suite-5ADQ3KPQ.js +15 -0
  15. package/dist/{archive-test-suite-O7FLDMXK.js → archive-test-suite-NKZDZY3D.js} +4 -4
  16. package/dist/assign-prompt-tag-5IUZXJ2T.js +23 -0
  17. package/dist/{assign-prompt-tag-Q46WRB6P.js → assign-prompt-tag-HBZLBIFD.js} +8 -4
  18. package/dist/{chunk-OJLYYJWI.js → chunk-3OCG3QPU.js} +7 -10
  19. package/dist/chunk-3YLN3ATJ.js +241 -0
  20. package/dist/chunk-5FNCQRCX.js +91 -0
  21. package/dist/{chunk-UF6XIGYR.js → chunk-6YZUOD34.js} +2 -5
  22. package/dist/{chunk-WVI5CJ6S.js → chunk-7AQLPVFL.js} +2 -2
  23. package/dist/chunk-7VNSRCXO.js +129 -0
  24. package/dist/{chunk-G4ZAZTZW.js → chunk-B4J3PJLX.js} +11 -10
  25. package/dist/{chunk-ZXKLPC2E.js → chunk-BIIKE3EI.js} +1 -1
  26. package/dist/{chunk-37SMPMQS.js → chunk-DMM3JQ42.js} +7 -2
  27. package/dist/{chunk-NUFPTHKU.js → chunk-FOKVY3BK.js} +1 -1
  28. package/dist/{chunk-WT4PO4A3.js → chunk-H6WGMG2T.js} +10 -7
  29. package/dist/{chunk-EYXMLE5X.js → chunk-HGELNIVY.js} +56 -47
  30. package/dist/{chunk-UJPXFA26.js → chunk-HHMNZAPD.js} +101 -74
  31. package/dist/{chunk-RVAE2MEA.js → chunk-I7ATIZED.js} +7 -7
  32. package/dist/{chunk-S4GVX36W.js → chunk-ILZDO25L.js} +7 -10
  33. package/dist/{chunk-QRO35SOM.js → chunk-J7PQKBLD.js} +652 -528
  34. package/dist/{chunk-SR6QPRIE.js → chunk-JRJPH75H.js} +7 -13
  35. package/dist/chunk-K2I7Z3LZ.js +28 -0
  36. package/dist/{chunk-UFOYFYI7.js → chunk-NKMTIHIJ.js} +6 -9
  37. package/dist/{chunk-HV4DWKBI.js → chunk-O7EMWEVJ.js} +2 -4
  38. package/dist/{chunk-56OGTS24.js → chunk-PTDR56Z3.js} +4 -11
  39. package/dist/{chunk-JR6DJZOU.js → chunk-RABYBFX5.js} +4 -10
  40. package/dist/chunk-SUPUUC4W.js +64 -0
  41. package/dist/{chunk-JTQJRNFJ.js → chunk-SXFC3FNH.js} +4 -4
  42. package/dist/{chunk-CKNAH5TG.js → chunk-U24EACC4.js} +3 -10
  43. package/dist/chunk-UNJM3BIL.js +21 -0
  44. package/dist/{chunk-QAMP3CGR.js → chunk-UTJCWXPZ.js} +4 -4
  45. package/dist/chunk-UWLE5T2F.js +312 -0
  46. package/dist/{chunk-6DJDEXET.js → chunk-VMWJD732.js} +6 -12
  47. package/dist/{chunk-7E4FZIYJ.js → chunk-XUIJYNRJ.js} +1 -1
  48. package/dist/chunk-Y34DHR5K.js +67 -0
  49. package/dist/chunk-YCARO42Z.js +516 -0
  50. package/dist/config-EAKW6F26.js +16 -0
  51. package/dist/config.cjs +109 -0
  52. package/dist/config.js +5 -4
  53. package/dist/{create-agent-JFJ2K6X3.js → create-agent-AYZ3LB3V.js} +4 -4
  54. package/dist/create-agent-S5ZBCEFT.js +23 -0
  55. package/dist/create-annotation-LHNCLHYP.js +29 -0
  56. package/dist/{create-annotation-EUXXQ6NS.js → create-annotation-VUSXULQK.js} +10 -5
  57. package/dist/{create-api-key-BGBB76JX.js → create-api-key-NNYKARMG.js} +5 -7
  58. package/dist/create-api-key-T4KSNPKB.js +24 -0
  59. package/dist/create-dashboard-DHVFMEU4.js +18 -0
  60. package/dist/{create-dashboard-Z76AIPLS.js → create-dashboard-WTKKS5Z6.js} +4 -4
  61. package/dist/{create-dataset-FD5VAXU4.js → create-dataset-2MC4SD4O.js} +6 -6
  62. package/dist/create-dataset-LUP5PVDM.js +22 -0
  63. package/dist/create-dataset-records-NSKBZP3G.js +20 -0
  64. package/dist/{create-dataset-records-WQUXXOHI.js → create-dataset-records-W4GLN2FV.js} +5 -7
  65. package/dist/{create-evaluator-6NV33Z52.js → create-evaluator-643G6LXL.js} +4 -4
  66. package/dist/create-evaluator-HMTYO5SS.js +27 -0
  67. package/dist/create-mcp-server.cjs +9513 -0
  68. package/dist/create-mcp-server.js +2647 -10
  69. package/dist/create-project-6N7PIYRY.js +44 -0
  70. package/dist/{create-project-ZQ7TFIO2.js → create-project-KAIC46UY.js} +4 -4
  71. package/dist/{create-prompt-BS6QRCUU.js → create-prompt-E67LXIYT.js} +5 -7
  72. package/dist/create-prompt-PKJ7EDRR.js +37 -0
  73. package/dist/create-prompt-tag-4YO3FSJ3.js +17 -0
  74. package/dist/{create-prompt-tag-FCQ5ELSQ.js → create-prompt-tag-OPQUEXWB.js} +3 -3
  75. package/dist/create-scenario-5PJBMAXO.js +33 -0
  76. package/dist/{create-scenario-DRPTPXU3.js → create-scenario-UEM77OE7.js} +5 -5
  77. package/dist/{create-test-suite-ZIZCCFJ4.js → create-test-suite-4IPXVSFQ.js} +6 -6
  78. package/dist/create-test-suite-SZEPVXSE.js +36 -0
  79. package/dist/create-trigger-5HZSCRAN.js +49 -0
  80. package/dist/create-trigger-PRELMT6J.js +48 -0
  81. package/dist/delete-agent-JUIZWAXG.js +18 -0
  82. package/dist/{delete-agent-SA4JMUZF.js → delete-agent-QMEK3XHK.js} +4 -4
  83. package/dist/delete-annotation-HY3O2OGR.js +17 -0
  84. package/dist/{delete-annotation-X3KKK7QY.js → delete-annotation-VKIQWUYW.js} +4 -4
  85. package/dist/delete-dashboard-76N66XXL.js +18 -0
  86. package/dist/{delete-dashboard-LYMRPF27.js → delete-dashboard-JVIVHNJM.js} +4 -4
  87. package/dist/delete-dataset-HQCR66MG.js +18 -0
  88. package/dist/{delete-dataset-W6EZ44HY.js → delete-dataset-WKRUW4FP.js} +5 -7
  89. package/dist/{delete-dataset-records-7CNOTALB.js → delete-dataset-records-C2IQFFVQ.js} +5 -7
  90. package/dist/delete-dataset-records-SDUHQLLM.js +19 -0
  91. package/dist/delete-evaluator-4SNSCLEE.js +16 -0
  92. package/dist/delete-evaluator-QP3QHTLN.js +15 -0
  93. package/dist/delete-prompt-tag-NZ4JQMYG.js +17 -0
  94. package/dist/{delete-prompt-tag-QB3OCZUV.js → delete-prompt-tag-YYQ4VMAD.js} +3 -3
  95. package/dist/{delete-workflow-NG2VXYYM.js → delete-workflow-5J46T73T.js} +4 -4
  96. package/dist/delete-workflow-JSWABL5F.js +17 -0
  97. package/dist/discover-evaluator-schema-UHWA5HVL.js +120 -0
  98. package/dist/discover-evaluator-schema-XKCLLCB3.js +118 -0
  99. package/dist/discover-scenario-schema-NOJY6S7E.js +137 -0
  100. package/dist/{discover-scenario-schema-W7KBXA4J.js → discover-scenario-schema-OOFIQKOG.js} +37 -17
  101. package/dist/{discover-schema-L6QDPON3.js → discover-schema-55YJBFGQ.js} +181 -186
  102. package/dist/discover-schema-A33SLMXW.js +442 -0
  103. package/dist/get-agent-LJQX7OF4.js +69 -0
  104. package/dist/{get-agent-7THF7HCU.js → get-agent-OTIYUFZA.js} +15 -11
  105. package/dist/get-analytics-DCS72353.js +80 -0
  106. package/dist/get-analytics-IQZKJHLW.js +79 -0
  107. package/dist/get-dashboard-5NYJEIX2.js +29 -0
  108. package/dist/{get-dashboard-P4WWVHFU.js → get-dashboard-QMTYDQAZ.js} +4 -4
  109. package/dist/get-dataset-ALSP7RTX.js +64 -0
  110. package/dist/get-dataset-X4B5JDG2.js +63 -0
  111. package/dist/{get-evaluator-RZ44UIN6.js → get-evaluator-ISMC4LLI.js} +4 -4
  112. package/dist/get-evaluator-XEUZGZCH.js +47 -0
  113. package/dist/{get-project-QSQEAB33.js → get-project-5VKROSDH.js} +4 -4
  114. package/dist/get-project-RM6FRCBK.js +26 -0
  115. package/dist/{get-prompt-GVKXF5NL.js → get-prompt-OWXJZHQQ.js} +53 -58
  116. package/dist/get-prompt-W52DY36E.js +94 -0
  117. package/dist/{get-run-plan-NY7J5GRE.js → get-run-plan-BE3M2AUX.js} +7 -9
  118. package/dist/get-run-plan-RUXQ6PAX.js +58 -0
  119. package/dist/get-scenario-RNM7BAX2.js +37 -0
  120. package/dist/{get-scenario-Q3LLQE4T.js → get-scenario-YM4ODWW6.js} +5 -5
  121. package/dist/get-simulation-run-6GIATQE5.js +69 -0
  122. package/dist/{get-simulation-run-WINEYDMK.js → get-simulation-run-LCFSMPGQ.js} +26 -22
  123. package/dist/{get-test-suite-4HKA7OKS.js → get-test-suite-GC2O7YH6.js} +5 -5
  124. package/dist/get-test-suite-P5LJ6VLF.js +48 -0
  125. package/dist/get-trace-KBRVV4NN.js +45 -0
  126. package/dist/{get-trace-RCUV7N4O.js → get-trace-SEF3FMR5.js} +11 -13
  127. package/dist/get-workflow-7PVED7JE.js +25 -0
  128. package/dist/{get-workflow-EEOC7Y45.js → get-workflow-YXULW4GC.js} +4 -4
  129. package/dist/{http-security-EU3CHTY7.js → http-security-DNLBNQZL.js} +2 -2
  130. package/dist/{http-server-WCDUARTH.js → http-server-IR4QOS43.js} +4071 -347
  131. package/dist/index.js +58671 -37983
  132. package/dist/langwatch-api-annotations-6SA4OB4C.js +17 -0
  133. package/dist/{langwatch-api-annotations-6DHVZWUK.js → langwatch-api-annotations-TBHLCQ5R.js} +4 -4
  134. package/dist/langwatch-api-dashboards-6EO2VVZW.js +17 -0
  135. package/dist/{langwatch-api-dashboards-2KJL2M42.js → langwatch-api-dashboards-NHU5BZD7.js} +4 -4
  136. package/dist/langwatch-api-monitors-CBF3FGIM.js +47 -0
  137. package/dist/{langwatch-api-monitors-6ISFJ7WX.js → langwatch-api-monitors-YNWA2M5Y.js} +11 -16
  138. package/dist/langwatch-api-secrets-ADTOJELP.js +56 -0
  139. package/dist/langwatch-api-secrets-RNFO4LF2.js +55 -0
  140. package/dist/langwatch-api-triggers-KQDQC6L5.js +22 -0
  141. package/dist/langwatch-api-triggers-QS7HDIVW.js +23 -0
  142. package/dist/{langwatch-api-workflows-6UJL5U4Z.js → langwatch-api-workflows-OKC4FXIF.js} +4 -4
  143. package/dist/langwatch-api-workflows-XGJE6SR5.js +15 -0
  144. package/dist/{list-agents-AMVDQPQL.js → list-agents-HVYWEQMI.js} +4 -4
  145. package/dist/list-agents-RBAOCF53.js +42 -0
  146. package/dist/list-annotations-HJH4NBLD.js +38 -0
  147. package/dist/{list-annotations-6PR5NLIC.js → list-annotations-J4UAHSUN.js} +10 -5
  148. package/dist/{list-api-keys-GVPNBIHQ.js → list-api-keys-7UTJRZDG.js} +10 -5
  149. package/dist/list-api-keys-A2PMV435.js +42 -0
  150. package/dist/list-dashboard-boards-OPWROHMG.js +33 -0
  151. package/dist/list-dashboard-boards-U2GJ7GC5.js +34 -0
  152. package/dist/{list-dashboards-Z3BZKDGF.js → list-dashboards-ROSYFLDQ.js} +4 -4
  153. package/dist/list-dashboards-RQ635ZU7.js +32 -0
  154. package/dist/{list-dataset-records-O67HZ35Y.js → list-dataset-records-M5TKA6LK.js} +14 -10
  155. package/dist/list-dataset-records-WFM7F33C.js +43 -0
  156. package/dist/{list-datasets-WXZL6UMP.js → list-datasets-B5X4P7BQ.js} +9 -13
  157. package/dist/list-datasets-THUKQHPX.js +56 -0
  158. package/dist/{list-evaluators-PAX72WCN.js → list-evaluators-MYH2OVCI.js} +5 -7
  159. package/dist/list-evaluators-NLVWF6K7.js +32 -0
  160. package/dist/{list-model-providers-VVLZMLCX.js → list-model-providers-3JUGP4YI.js} +4 -4
  161. package/dist/list-model-providers-H3XKORFO.js +35 -0
  162. package/dist/{list-projects-AQVI6SUK.js → list-projects-6EJ5YYEW.js} +5 -7
  163. package/dist/list-projects-YNNSRMLC.js +40 -0
  164. package/dist/{list-prompt-tags-WZFBJOHG.js → list-prompt-tags-NVFQO6WX.js} +3 -3
  165. package/dist/list-prompt-tags-XUQTTAH4.js +23 -0
  166. package/dist/{list-prompts-BQOHRHYT.js → list-prompts-HSIMMHTF.js} +4 -6
  167. package/dist/list-prompts-IRI6AIXO.js +30 -0
  168. package/dist/{list-run-plans-UBAU2DGH.js → list-run-plans-PX2XI6EK.js} +5 -5
  169. package/dist/list-run-plans-QALLCN2K.js +45 -0
  170. package/dist/{list-scenarios-MS4IUIVM.js → list-scenarios-QZRPVHS4.js} +13 -11
  171. package/dist/list-scenarios-SSJQEMJP.js +45 -0
  172. package/dist/list-simulation-runs-KNOLGMDV.js +53 -0
  173. package/dist/{list-simulation-runs-D6YF4ZOU.js → list-simulation-runs-OEADLLQR.js} +12 -8
  174. package/dist/list-test-suites-ANAQBLDG.js +34 -0
  175. package/dist/{list-test-suites-L7R2O6DR.js → list-test-suites-N4WVLBKK.js} +4 -4
  176. package/dist/list-trigger-fires-JV3WFYYG.js +19 -0
  177. package/dist/list-trigger-fires-WTW4DVIW.js +20 -0
  178. package/dist/list-triggers-SQNIG35Q.js +45 -0
  179. package/dist/list-triggers-V4Y356AK.js +46 -0
  180. package/dist/{list-workflows-6MV4XJHF.js → list-workflows-IMSX7SXU.js} +5 -7
  181. package/dist/list-workflows-ZHTX5LCL.js +33 -0
  182. package/dist/{rename-prompt-tag-K5LQ4CY6.js → rename-prompt-tag-IQI7MHOI.js} +3 -3
  183. package/dist/rename-prompt-tag-PA2BRIE6.js +18 -0
  184. package/dist/{rename-test-suite-NTYHAO5X.js → rename-test-suite-4J7UX5S2.js} +4 -4
  185. package/dist/rename-test-suite-NNVLMLKY.js +20 -0
  186. package/dist/report-issue-AS34ZMJF.js +898 -0
  187. package/dist/{report-issue-RHZZ33IS.js → report-issue-DCZFLGDO.js} +81 -67
  188. package/dist/{rerun-run-plan-MUDWJBE4.js → rerun-run-plan-TG2V4WM4.js} +5 -5
  189. package/dist/rerun-run-plan-ZI5OY3VA.js +21 -0
  190. package/dist/revoke-api-key-3J3ZA4UB.js +15 -0
  191. package/dist/{revoke-api-key-6LAZ3QZZ.js → revoke-api-key-SFMEFWJC.js} +4 -4
  192. package/dist/run-agent-W4VJP72Z.js +75 -0
  193. package/dist/run-agent-YNV6ZHW4.js +74 -0
  194. package/dist/run-plan-6C77GWG4.js +38 -0
  195. package/dist/{run-plan-T4ZYOZGA.js → run-plan-PAARQSI4.js} +7 -7
  196. package/dist/run-query-KJDH544C.js +47 -0
  197. package/dist/run-query-T4QW2Z5O.js +46 -0
  198. package/dist/{run-test-suite-L4MZ7G4D.js → run-test-suite-SQJELEZX.js} +6 -6
  199. package/dist/run-test-suite-STB6NUJM.js +25 -0
  200. package/dist/{run-workflow-DFIS23AP.js → run-workflow-D6PQNBI6.js} +4 -4
  201. package/dist/run-workflow-SP32SO5M.js +36 -0
  202. package/dist/search-traces-HCBGOG6R.js +170 -0
  203. package/dist/search-traces-HSTQ6WTQ.js +171 -0
  204. package/dist/{set-model-provider-XRNMFOVR.js → set-model-provider-GF7NXUJA.js} +4 -4
  205. package/dist/set-model-provider-KDQ7C4EZ.js +33 -0
  206. package/dist/{update-agent-DUWNYBNA.js → update-agent-DWG43T2P.js} +4 -4
  207. package/dist/update-agent-MXNOBS4H.js +20 -0
  208. package/dist/update-dashboard-widget-CJKJLCDY.js +71 -0
  209. package/dist/update-dashboard-widget-CYQDS2NR.js +70 -0
  210. package/dist/update-dataset-DQH3OHOU.js +22 -0
  211. package/dist/{update-dataset-YSOMDCOB.js → update-dataset-SQZ6T4WX.js} +6 -6
  212. package/dist/{update-dataset-record-DEA2ITYR.js → update-dataset-record-3AT4IPBC.js} +4 -4
  213. package/dist/update-dataset-record-7PLDGTMR.js +19 -0
  214. package/dist/update-evaluator-4LFTKFPT.js +24 -0
  215. package/dist/{update-evaluator-NH7Q5GWV.js → update-evaluator-IGTX6PX4.js} +4 -4
  216. package/dist/{update-project-Q26FBSYH.js → update-project-PLJIOZS6.js} +4 -4
  217. package/dist/update-project-QVHSJRUP.js +24 -0
  218. package/dist/update-prompt-GDKRYJI3.js +140 -0
  219. package/dist/{update-prompt-ZQQ2C3KU.js → update-prompt-MY263DYF.js} +27 -29
  220. package/dist/update-scenario-7KA3JDXA.js +34 -0
  221. package/dist/{update-scenario-WUX34JAR.js → update-scenario-MOHRQKAQ.js} +5 -5
  222. package/package.json +35 -39
  223. package/pyproject.toml +8 -8
  224. package/src/config.d.ts +4 -0
  225. package/src/config.ts +20 -29
  226. package/src/create-mcp-server.ts +755 -609
  227. package/src/documentation-fetch.ts +21 -20
  228. package/src/http-security.ts +166 -135
  229. package/src/http-server.ts +189 -224
  230. package/src/index.ts +14 -16
  231. package/src/langwatch-api-agents.ts +18 -21
  232. package/src/langwatch-api-annotations.ts +11 -12
  233. package/src/langwatch-api-api-keys.ts +8 -9
  234. package/src/langwatch-api-boards.ts +46 -0
  235. package/src/langwatch-api-dashboard-widgets.ts +112 -0
  236. package/src/langwatch-api-dashboards.ts +13 -10
  237. package/src/langwatch-api-datasets.ts +98 -32
  238. package/src/langwatch-api-evaluators.ts +13 -19
  239. package/src/langwatch-api-model-providers.ts +4 -4
  240. package/src/langwatch-api-monitors.ts +14 -18
  241. package/src/langwatch-api-projects.ts +27 -9
  242. package/src/langwatch-api-query.ts +114 -0
  243. package/src/langwatch-api-run-plans.ts +12 -29
  244. package/src/langwatch-api-scenarios.ts +9 -11
  245. package/src/langwatch-api-secrets.ts +31 -24
  246. package/src/langwatch-api-simulation-runs.ts +6 -8
  247. package/src/langwatch-api-test-suites.ts +14 -33
  248. package/src/langwatch-api-triggers.ts +96 -34
  249. package/src/langwatch-api-workflows.ts +9 -9
  250. package/src/langwatch-api.ts +108 -124
  251. package/src/public-http-request.ts +21 -12
  252. package/src/schemas/analytics-metrics.ts +3 -15
  253. package/src/schemas/create-dataset.ts +3 -4
  254. package/src/schemas/run-plan.ts +13 -29
  255. package/src/schemas/suite-fields.ts +6 -23
  256. package/src/schemas/triggers.ts +365 -0
  257. package/src/tools/add-dashboard-widget.ts +63 -0
  258. package/src/tools/archive-project.ts +2 -4
  259. package/src/tools/archive-run-plan.ts +2 -4
  260. package/src/tools/archive-scenario.ts +2 -4
  261. package/src/tools/archive-test-suite.ts +2 -4
  262. package/src/tools/assign-prompt-tag.ts +6 -2
  263. package/src/tools/create-agent.ts +1 -1
  264. package/src/tools/create-annotation.ts +7 -2
  265. package/src/tools/create-api-key.ts +4 -6
  266. package/src/tools/create-dashboard.ts +1 -1
  267. package/src/tools/create-dataset-records.ts +4 -8
  268. package/src/tools/create-dataset.ts +5 -7
  269. package/src/tools/create-evaluator.ts +3 -5
  270. package/src/tools/create-project.ts +2 -2
  271. package/src/tools/create-prompt-tag.ts +2 -4
  272. package/src/tools/create-prompt.ts +9 -18
  273. package/src/tools/create-scenario.ts +5 -7
  274. package/src/tools/create-test-suite.ts +4 -9
  275. package/src/tools/create-trigger.ts +55 -0
  276. package/src/tools/dashboard-exists.ts +25 -0
  277. package/src/tools/dashboard-widget-queries.ts +32 -0
  278. package/src/tools/delete-agent.ts +1 -1
  279. package/src/tools/delete-annotation.ts +1 -1
  280. package/src/tools/delete-dashboard.ts +1 -1
  281. package/src/tools/delete-dataset-records.ts +4 -8
  282. package/src/tools/delete-dataset.ts +3 -7
  283. package/src/tools/delete-evaluator.ts +4 -6
  284. package/src/tools/delete-prompt-tag.ts +2 -4
  285. package/src/tools/delete-workflow.ts +1 -1
  286. package/src/tools/discover-evaluator-schema.ts +34 -25
  287. package/src/tools/discover-scenario-schema.ts +41 -21
  288. package/src/tools/discover-schema.ts +149 -27
  289. package/src/tools/experiment-run-status.ts +2 -8
  290. package/src/tools/format-dataset-mutation.ts +5 -10
  291. package/src/tools/format-run-plan.ts +7 -21
  292. package/src/tools/format-scenario.ts +2 -4
  293. package/src/tools/format-suite-details.ts +6 -12
  294. package/src/tools/get-agent.ts +15 -6
  295. package/src/tools/get-analytics.ts +52 -46
  296. package/src/tools/get-dashboard.ts +1 -1
  297. package/src/tools/get-dataset.ts +34 -16
  298. package/src/tools/get-evaluator.ts +4 -11
  299. package/src/tools/get-experiment-results.ts +219 -186
  300. package/src/tools/get-project.ts +2 -4
  301. package/src/tools/get-prompt.ts +63 -84
  302. package/src/tools/get-run-plan.ts +4 -6
  303. package/src/tools/get-scenario.ts +4 -6
  304. package/src/tools/get-simulation-run.ts +27 -24
  305. package/src/tools/get-test-suite.ts +2 -5
  306. package/src/tools/get-trace.ts +16 -17
  307. package/src/tools/get-workflow.ts +1 -1
  308. package/src/tools/list-agents.ts +1 -1
  309. package/src/tools/list-annotations.ts +8 -5
  310. package/src/tools/list-api-keys.ts +7 -2
  311. package/src/tools/list-dashboard-boards.ts +28 -0
  312. package/src/tools/list-dashboards.ts +1 -1
  313. package/src/tools/list-dataset-records.ts +8 -6
  314. package/src/tools/list-datasets.ts +12 -23
  315. package/src/tools/list-evaluators.ts +4 -8
  316. package/src/tools/list-experiment-runs.ts +5 -9
  317. package/src/tools/list-experiments.ts +5 -11
  318. package/src/tools/list-model-providers.ts +3 -5
  319. package/src/tools/list-projects.ts +2 -4
  320. package/src/tools/list-prompt-tags.ts +3 -3
  321. package/src/tools/list-prompts.ts +4 -8
  322. package/src/tools/list-run-plans.ts +2 -2
  323. package/src/tools/list-scenarios.ts +14 -15
  324. package/src/tools/list-simulation-runs.ts +8 -4
  325. package/src/tools/list-test-suites.ts +1 -1
  326. package/src/tools/list-trigger-fires.ts +17 -0
  327. package/src/tools/list-triggers.ts +39 -0
  328. package/src/tools/list-workflows.ts +2 -4
  329. package/src/tools/rename-prompt-tag.ts +1 -1
  330. package/src/tools/rename-test-suite.ts +2 -5
  331. package/src/tools/report-issue.ts +5 -9
  332. package/src/tools/rerun-run-plan.ts +2 -5
  333. package/src/tools/revoke-api-key.ts +2 -4
  334. package/src/tools/run-agent.ts +29 -26
  335. package/src/tools/run-experiment.ts +36 -37
  336. package/src/tools/run-plan.ts +4 -7
  337. package/src/tools/run-query.ts +47 -0
  338. package/src/tools/run-test-suite.ts +4 -7
  339. package/src/tools/run-workflow.ts +2 -5
  340. package/src/tools/search-traces.ts +161 -47
  341. package/src/tools/set-model-provider.ts +4 -6
  342. package/src/tools/test-agent.ts +2 -2
  343. package/src/tools/update-agent.ts +1 -1
  344. package/src/tools/update-dashboard-widget.ts +97 -0
  345. package/src/tools/update-dataset-record.ts +1 -1
  346. package/src/tools/update-dataset.ts +5 -7
  347. package/src/tools/update-evaluator.ts +3 -5
  348. package/src/tools/update-project.ts +1 -1
  349. package/src/tools/update-prompt.ts +44 -59
  350. package/src/tools/update-scenario.ts +5 -7
  351. package/src/tools/update-test-suite.ts +6 -11
  352. package/src/utils/date-parsing.ts +1 -1
  353. package/src/utils/escape-markdown.ts +3 -8
  354. package/src/utils/format-evaluations.ts +6 -6
  355. package/src/utils/markdown-table.ts +58 -0
  356. package/src/utils/trace-id-shape.ts +20 -0
  357. package/tsconfig.app.json +24 -0
  358. package/tsconfig.json +14 -12
  359. package/vitest.integration.config.js +10 -0
  360. package/vitest.scenario.config.js +9 -0
  361. package/.eslintrc.cjs +0 -36
  362. package/dist/chunk-AN4OUA4D.js +0 -86
  363. package/dist/chunk-GELJ2MQR.js +0 -226
  364. package/dist/chunk-K37ZNPXK.js +0 -24
  365. package/dist/config.d.ts +0 -17
  366. package/dist/create-mcp-server.d.ts +0 -10
  367. package/dist/delete-evaluator-RKYC4TNB.js +0 -16
  368. package/dist/discover-evaluator-schema-ESSHQGPY.js +0 -1912
  369. package/dist/get-analytics-R6AZD3AW.js +0 -73
  370. package/dist/get-dataset-AKTYSQDI.js +0 -49
  371. package/dist/index.d.ts +0 -2
  372. package/dist/langwatch-api-secrets-OEBD6GBU.js +0 -41
  373. package/dist/langwatch-api-triggers-5E6DDGX6.js +0 -31
  374. package/dist/run-agent-CAGWGTYT.js +0 -72
  375. package/dist/search-traces-4XTJYXIK.js +0 -79
  376. package/src/__tests__/agent-tools.unit.test.ts +0 -257
  377. package/src/__tests__/all-tools.integration.test.ts +0 -1872
  378. package/src/__tests__/config.unit.test.ts +0 -202
  379. package/src/__tests__/datasets.integration.test.ts +0 -620
  380. package/src/__tests__/datasets.unit.test.ts +0 -244
  381. package/src/__tests__/date-parsing.unit.test.ts +0 -78
  382. package/src/__tests__/discover-evaluator-schema.unit.test.ts +0 -89
  383. package/src/__tests__/discover-schema.unit.test.ts +0 -118
  384. package/src/__tests__/docker.integration.test.ts +0 -318
  385. package/src/__tests__/documentation-fetch-security.integration.test.ts +0 -182
  386. package/src/__tests__/evaluator-tools.unit.test.ts +0 -262
  387. package/src/__tests__/experiment-list-tools.unit.test.ts +0 -157
  388. package/src/__tests__/experiment-status.unit.test.ts +0 -194
  389. package/src/__tests__/feature-map-tool-drift.unit.test.ts +0 -93
  390. package/src/__tests__/get-experiment-results.unit.test.ts +0 -313
  391. package/src/__tests__/http-security-origin.unit.test.ts +0 -97
  392. package/src/__tests__/http-security-sessions.unit.test.ts +0 -209
  393. package/src/__tests__/http-security-verifier.unit.test.ts +0 -248
  394. package/src/__tests__/http-server-allocation.integration.test.ts +0 -279
  395. package/src/__tests__/http-server-origin.integration.test.ts +0 -169
  396. package/src/__tests__/http-server-session-auth.integration.test.ts +0 -341
  397. package/src/__tests__/http-transport.integration.test.ts +0 -395
  398. package/src/__tests__/integration.integration.test.ts +0 -284
  399. package/src/__tests__/langwatch-api.unit.test.ts +0 -661
  400. package/src/__tests__/model-provider-tools.unit.test.ts +0 -190
  401. package/src/__tests__/project-api-key-tools.unit.test.ts +0 -451
  402. package/src/__tests__/prompt-response-types.unit.test.ts +0 -51
  403. package/src/__tests__/prompts.integration.test.ts +0 -736
  404. package/src/__tests__/public-http-request-security.integration.test.ts +0 -118
  405. package/src/__tests__/report-issue.integration.test.ts +0 -147
  406. package/src/__tests__/run-plan-tools.unit.test.ts +0 -565
  407. package/src/__tests__/scenario-tools.integration.test.ts +0 -286
  408. package/src/__tests__/scenario-tools.unit.test.ts +0 -207
  409. package/src/__tests__/schemas.unit.test.ts +0 -85
  410. package/src/__tests__/simulation-run-tools.unit.test.ts +0 -116
  411. package/src/__tests__/support/http-server-harness.ts +0 -138
  412. package/src/__tests__/test-suite-tools.unit.test.ts +0 -615
  413. package/src/__tests__/tools.integration.test.ts +0 -896
  414. package/src/schemas/filter-fields.ts +0 -119
  415. package/src/schemas/index.ts +0 -9
@@ -0,0 +1,19 @@
1
+ import {
2
+ updateDatasetRecord
3
+ } from "./chunk-7VNSRCXO.js";
4
+ import "./chunk-UWLE5T2F.js";
5
+ import "./chunk-H6WGMG2T.js";
6
+
7
+ // src/tools/update-dataset-record.ts
8
+ async function handleUpdateDatasetRecord(params) {
9
+ const result = await updateDatasetRecord(params);
10
+ const lines = [];
11
+ lines.push("Record updated successfully!\n");
12
+ lines.push(`**Record ID**: ${result.id}`);
13
+ lines.push(`**Entry**: ${JSON.stringify(result.entry)}`);
14
+ return lines.join("\n");
15
+ }
16
+ export {
17
+ handleUpdateDatasetRecord
18
+ };
19
+ //# sourceMappingURL=update-dataset-record-7PLDGTMR.js.map
@@ -0,0 +1,24 @@
1
+ import {
2
+ getEvaluatorType,
3
+ updateEvaluator
4
+ } from "./chunk-3OCG3QPU.js";
5
+ import "./chunk-UWLE5T2F.js";
6
+ import "./chunk-H6WGMG2T.js";
7
+
8
+ // src/tools/update-evaluator.ts
9
+ async function handleUpdateEvaluator(params) {
10
+ const { evaluatorId, ...data } = params;
11
+ const result = await updateEvaluator({ id: evaluatorId, ...data });
12
+ const evaluatorType = getEvaluatorType(result);
13
+ const lines = [];
14
+ lines.push("Evaluator updated successfully!\n");
15
+ lines.push(`**ID**: ${result.id}`);
16
+ if (result.slug) lines.push(`**Slug**: ${result.slug}`);
17
+ lines.push(`**Name**: ${result.name}`);
18
+ if (evaluatorType) lines.push(`**Evaluator Type**: ${evaluatorType}`);
19
+ return lines.join("\n");
20
+ }
21
+ export {
22
+ handleUpdateEvaluator
23
+ };
24
+ //# sourceMappingURL=update-evaluator-4LFTKFPT.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getEvaluatorType,
3
3
  updateEvaluator
4
- } from "./chunk-OJLYYJWI.js";
5
- import "./chunk-GELJ2MQR.js";
6
- import "./chunk-WT4PO4A3.js";
4
+ } from "./chunk-3OCG3QPU.js";
5
+ import "./chunk-UWLE5T2F.js";
6
+ import "./chunk-H6WGMG2T.js";
7
7
  import "./chunk-SAS5OB7F.js";
8
8
 
9
9
  // src/tools/update-evaluator.ts
@@ -22,4 +22,4 @@ async function handleUpdateEvaluator(params) {
22
22
  export {
23
23
  handleUpdateEvaluator
24
24
  };
25
- //# sourceMappingURL=update-evaluator-NH7Q5GWV.js.map
25
+ //# sourceMappingURL=update-evaluator-IGTX6PX4.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  updateProject
3
- } from "./chunk-G4ZAZTZW.js";
4
- import "./chunk-GELJ2MQR.js";
5
- import "./chunk-WT4PO4A3.js";
3
+ } from "./chunk-B4J3PJLX.js";
4
+ import "./chunk-UWLE5T2F.js";
5
+ import "./chunk-H6WGMG2T.js";
6
6
  import "./chunk-SAS5OB7F.js";
7
7
 
8
8
  // src/tools/update-project.ts
@@ -22,4 +22,4 @@ async function handleUpdateProject(params) {
22
22
  export {
23
23
  handleUpdateProject
24
24
  };
25
- //# sourceMappingURL=update-project-Q26FBSYH.js.map
25
+ //# sourceMappingURL=update-project-PLJIOZS6.js.map
@@ -0,0 +1,24 @@
1
+ import {
2
+ updateProject
3
+ } from "./chunk-B4J3PJLX.js";
4
+ import "./chunk-UWLE5T2F.js";
5
+ import "./chunk-H6WGMG2T.js";
6
+
7
+ // src/tools/update-project.ts
8
+ async function handleUpdateProject(params) {
9
+ const project = await updateProject(params);
10
+ const lines = [];
11
+ lines.push(`Project updated successfully!
12
+ `);
13
+ lines.push(`**Name**: ${project.name}`);
14
+ lines.push(`**ID**: ${project.id}`);
15
+ lines.push(`**Slug**: ${project.slug}`);
16
+ lines.push(`**Language**: ${project.language}`);
17
+ lines.push(`**Framework**: ${project.framework}`);
18
+ lines.push(`**PII Redaction**: ${project.piiRedactionLevel}`);
19
+ return lines.join("\n");
20
+ }
21
+ export {
22
+ handleUpdateProject
23
+ };
24
+ //# sourceMappingURL=update-project-QVHSJRUP.js.map
@@ -0,0 +1,140 @@
1
+ import {
2
+ getPrompt,
3
+ getPromptVersions,
4
+ updatePrompt
5
+ } from "./chunk-UWLE5T2F.js";
6
+ import "./chunk-H6WGMG2T.js";
7
+
8
+ // src/tools/update-prompt.ts
9
+ async function handleUpdatePrompt(params) {
10
+ const { idOrHandle, ...data } = params;
11
+ let updated;
12
+ try {
13
+ updated = await updatePrompt(idOrHandle, data);
14
+ } catch (err) {
15
+ if (params.tags && params.tags.length > 0) {
16
+ return renderTagFailure({ idOrHandle, params });
17
+ }
18
+ throw err;
19
+ }
20
+ return renderUpdateSuccess({ idOrHandle, params, updated });
21
+ }
22
+ async function identifyNewVersion({
23
+ idOrHandle,
24
+ prompt,
25
+ commitMessage
26
+ }) {
27
+ if (prompt.commitMessage === commitMessage) {
28
+ return { version: prompt.version, versionId: prompt.versionId };
29
+ }
30
+ try {
31
+ const versions = await getPromptVersions(idOrHandle);
32
+ const match = (Array.isArray(versions) ? versions : []).find(
33
+ (v) => v.commitMessage === commitMessage
34
+ );
35
+ if (match) return { version: match.version, versionId: match.versionId };
36
+ } catch {
37
+ }
38
+ return void 0;
39
+ }
40
+ function deploymentTagsOf(prompt) {
41
+ return (prompt.tags ?? []).filter((tag) => tag?.name !== "latest");
42
+ }
43
+ function deploymentLines({
44
+ prompt,
45
+ newVersion
46
+ }) {
47
+ const allDeployments = deploymentTagsOf(prompt);
48
+ const newTags = allDeployments.filter((tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId).map((tag) => tag.name);
49
+ if (newTags.length > 0) {
50
+ return [`**Deployed to**: ${newTags.join(", ")}`];
51
+ }
52
+ const lines = [`**Deployment**: not deployed`];
53
+ const otherTags = Array.from(
54
+ new Set(
55
+ allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
56
+ )
57
+ );
58
+ if (otherTags.length > 0) {
59
+ lines.push(`**Existing deployments (untouched)**: ${otherTags.join(", ")}`);
60
+ }
61
+ return lines;
62
+ }
63
+ async function renderUpdateSuccess({
64
+ idOrHandle,
65
+ params,
66
+ updated
67
+ }) {
68
+ let prompt;
69
+ try {
70
+ prompt = await getPrompt(idOrHandle, {
71
+ version: void 0,
72
+ tag: void 0
73
+ });
74
+ } catch {
75
+ const lines2 = [];
76
+ lines2.push("Prompt updated successfully!\n");
77
+ if (updated?.id) lines2.push(`**ID**: ${updated.id}`);
78
+ if (updated?.handle) lines2.push(`**Handle**: ${updated.handle}`);
79
+ lines2.push(`**Commit**: ${params.commitMessage}`);
80
+ lines2.push(
81
+ `**Note**: the update succeeded, but version and deployment details are unavailable (confirmation read failed). Run platform_get_prompt to inspect the current state. Do not retry the update.`
82
+ );
83
+ return lines2.join("\n");
84
+ }
85
+ const newVersion = await identifyNewVersion({
86
+ idOrHandle,
87
+ prompt,
88
+ commitMessage: params.commitMessage
89
+ });
90
+ const lines = [];
91
+ lines.push("Prompt updated successfully!\n");
92
+ if (prompt.id) lines.push(`**ID**: ${prompt.id}`);
93
+ if (prompt.handle) lines.push(`**Handle**: ${prompt.handle}`);
94
+ if (newVersion?.version != null) lines.push(`**Version**: v${newVersion.version}`);
95
+ if (newVersion?.versionId) lines.push(`**Version ID**: ${newVersion.versionId}`);
96
+ lines.push(`**Commit**: ${params.commitMessage}`);
97
+ if (!newVersion) {
98
+ lines.push(
99
+ `**Note**: update succeeded, but the new version could not be identified in the re-fetched prompt \u2014 version and deployment details are unavailable. Run platform_get_prompt to inspect the current state.`
100
+ );
101
+ }
102
+ if (newVersion) {
103
+ lines.push(...deploymentLines({ prompt, newVersion }));
104
+ }
105
+ return lines.join("\n");
106
+ }
107
+ async function renderTagFailure({
108
+ idOrHandle,
109
+ params
110
+ }) {
111
+ const failedTags = params.tags?.join(", ") ?? "";
112
+ let prompt;
113
+ try {
114
+ prompt = await getPrompt(idOrHandle, {
115
+ version: void 0,
116
+ tag: void 0
117
+ });
118
+ } catch {
119
+ return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}". Whether a new version was created could not be confirmed (confirmation read failed) \u2014 run platform_get_prompt before retrying.`;
120
+ }
121
+ const matched = await identifyNewVersion({
122
+ idOrHandle,
123
+ prompt,
124
+ commitMessage: params.commitMessage
125
+ });
126
+ if (matched) {
127
+ const lines = [];
128
+ lines.push("Prompt update partially failed.\n");
129
+ lines.push("A new version was created, but assigning the requested tag(s) failed.");
130
+ if (matched.versionId) lines.push(`**Version ID**: ${matched.versionId}`);
131
+ lines.push(`**Status**: created, untagged`);
132
+ lines.push(`**Failed tag(s)**: ${failedTags}`);
133
+ return lines.join("\n");
134
+ }
135
+ return `Prompt update failed: could not assign tag(s) ${failedTags} to "${idOrHandle}".`;
136
+ }
137
+ export {
138
+ handleUpdatePrompt
139
+ };
140
+ //# sourceMappingURL=update-prompt-GDKRYJI3.js.map
@@ -2,8 +2,8 @@ import {
2
2
  getPrompt,
3
3
  getPromptVersions,
4
4
  updatePrompt
5
- } from "./chunk-GELJ2MQR.js";
6
- import "./chunk-WT4PO4A3.js";
5
+ } from "./chunk-UWLE5T2F.js";
6
+ import "./chunk-H6WGMG2T.js";
7
7
  import "./chunk-SAS5OB7F.js";
8
8
 
9
9
  // src/tools/update-prompt.ts
@@ -41,6 +41,26 @@ async function identifyNewVersion({
41
41
  function deploymentTagsOf(prompt) {
42
42
  return (prompt.tags ?? []).filter((tag) => tag?.name !== "latest");
43
43
  }
44
+ function deploymentLines({
45
+ prompt,
46
+ newVersion
47
+ }) {
48
+ const allDeployments = deploymentTagsOf(prompt);
49
+ const newTags = allDeployments.filter((tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId).map((tag) => tag.name);
50
+ if (newTags.length > 0) {
51
+ return [`**Deployed to**: ${newTags.join(", ")}`];
52
+ }
53
+ const lines = [`**Deployment**: not deployed`];
54
+ const otherTags = Array.from(
55
+ new Set(
56
+ allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
57
+ )
58
+ );
59
+ if (otherTags.length > 0) {
60
+ lines.push(`**Existing deployments (untouched)**: ${otherTags.join(", ")}`);
61
+ }
62
+ return lines;
63
+ }
44
64
  async function renderUpdateSuccess({
45
65
  idOrHandle,
46
66
  params,
@@ -72,10 +92,8 @@ async function renderUpdateSuccess({
72
92
  lines.push("Prompt updated successfully!\n");
73
93
  if (prompt.id) lines.push(`**ID**: ${prompt.id}`);
74
94
  if (prompt.handle) lines.push(`**Handle**: ${prompt.handle}`);
75
- if (newVersion?.version != null)
76
- lines.push(`**Version**: v${newVersion.version}`);
77
- if (newVersion?.versionId)
78
- lines.push(`**Version ID**: ${newVersion.versionId}`);
95
+ if (newVersion?.version != null) lines.push(`**Version**: v${newVersion.version}`);
96
+ if (newVersion?.versionId) lines.push(`**Version ID**: ${newVersion.versionId}`);
79
97
  lines.push(`**Commit**: ${params.commitMessage}`);
80
98
  if (!newVersion) {
81
99
  lines.push(
@@ -83,25 +101,7 @@ async function renderUpdateSuccess({
83
101
  );
84
102
  }
85
103
  if (newVersion) {
86
- const allDeployments = deploymentTagsOf(prompt);
87
- const newTags = allDeployments.filter(
88
- (tag) => newVersion.versionId != null && tag.versionId === newVersion.versionId
89
- ).map((tag) => tag.name);
90
- if (newTags.length > 0) {
91
- lines.push(`**Deployed to**: ${newTags.join(", ")}`);
92
- } else {
93
- lines.push(`**Deployment**: not deployed`);
94
- const otherTags = Array.from(
95
- new Set(
96
- allDeployments.filter((tag) => tag.versionId !== newVersion.versionId).map((tag) => tag.name)
97
- )
98
- );
99
- if (otherTags.length > 0) {
100
- lines.push(
101
- `**Existing deployments (untouched)**: ${otherTags.join(", ")}`
102
- );
103
- }
104
- }
104
+ lines.push(...deploymentLines({ prompt, newVersion }));
105
105
  }
106
106
  return lines.join("\n");
107
107
  }
@@ -127,9 +127,7 @@ async function renderTagFailure({
127
127
  if (matched) {
128
128
  const lines = [];
129
129
  lines.push("Prompt update partially failed.\n");
130
- lines.push(
131
- "A new version was created, but assigning the requested tag(s) failed."
132
- );
130
+ lines.push("A new version was created, but assigning the requested tag(s) failed.");
133
131
  if (matched.versionId) lines.push(`**Version ID**: ${matched.versionId}`);
134
132
  lines.push(`**Status**: created, untagged`);
135
133
  lines.push(`**Failed tag(s)**: ${failedTags}`);
@@ -140,4 +138,4 @@ async function renderTagFailure({
140
138
  export {
141
139
  handleUpdatePrompt
142
140
  };
143
- //# sourceMappingURL=update-prompt-ZQQ2C3KU.js.map
141
+ //# sourceMappingURL=update-prompt-MY263DYF.js.map
@@ -0,0 +1,34 @@
1
+ import {
2
+ formatScenarioFields
3
+ } from "./chunk-XUIJYNRJ.js";
4
+ import {
5
+ updateScenario
6
+ } from "./chunk-I7ATIZED.js";
7
+ import "./chunk-UWLE5T2F.js";
8
+ import "./chunk-H6WGMG2T.js";
9
+
10
+ // src/tools/update-scenario.ts
11
+ async function handleUpdateScenario(params) {
12
+ const { scenarioId, ...data } = params;
13
+ const result = await updateScenario({ id: scenarioId, ...data });
14
+ const lines = [];
15
+ lines.push("Scenario updated successfully!\n");
16
+ lines.push(`**ID**: ${result.id}`);
17
+ lines.push(`**Name**: ${result.name}`);
18
+ if (result.situation) lines.push(`**Situation**: ${result.situation}`);
19
+ if (Array.isArray(result.criteria) && result.criteria.length > 0) {
20
+ lines.push(`**Criteria**: ${result.criteria.length} criteria`);
21
+ }
22
+ if (Array.isArray(result.labels) && result.labels.length > 0) {
23
+ lines.push(`**Labels**: ${result.labels.join(", ")}`);
24
+ }
25
+ if (result.testSuiteId) {
26
+ lines.push(`**Test suite**: ${result.testSuiteId}`);
27
+ }
28
+ lines.push(...formatScenarioFields(result.fields));
29
+ return lines.join("\n");
30
+ }
31
+ export {
32
+ handleUpdateScenario
33
+ };
34
+ //# sourceMappingURL=update-scenario-7KA3JDXA.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  formatScenarioFields
3
- } from "./chunk-7E4FZIYJ.js";
3
+ } from "./chunk-XUIJYNRJ.js";
4
4
  import {
5
5
  updateScenario
6
- } from "./chunk-RVAE2MEA.js";
7
- import "./chunk-GELJ2MQR.js";
8
- import "./chunk-WT4PO4A3.js";
6
+ } from "./chunk-I7ATIZED.js";
7
+ import "./chunk-UWLE5T2F.js";
8
+ import "./chunk-H6WGMG2T.js";
9
9
  import "./chunk-SAS5OB7F.js";
10
10
 
11
11
  // src/tools/update-scenario.ts
@@ -32,4 +32,4 @@ async function handleUpdateScenario(params) {
32
32
  export {
33
33
  handleUpdateScenario
34
34
  };
35
- //# sourceMappingURL=update-scenario-WUX34JAR.js.map
35
+ //# sourceMappingURL=update-scenario-MOHRQKAQ.js.map
package/package.json CHANGED
@@ -1,80 +1,76 @@
1
1
  {
2
2
  "name": "@langwatch/mcp-server",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "An MCP server for Langwatch.",
5
+ "license": "MIT",
6
+ "author": "",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/langwatch/langwatch.git",
10
+ "directory": "mcp-server"
11
+ },
12
+ "bin": {
13
+ "langwatch-mcp-server": "./dist/index.js"
14
+ },
5
15
  "type": "module",
6
16
  "main": "./dist/index.js",
7
17
  "module": "./dist/index.js",
8
18
  "types": "./dist/index.d.ts",
9
19
  "exports": {
10
20
  ".": {
11
- "import": "./dist/index.js",
12
- "require": "./dist/index.js"
21
+ "import": "./dist/index.js"
13
22
  },
14
23
  "./create-mcp-server": {
15
24
  "types": "./src/create-mcp-server.d.ts",
16
25
  "import": "./dist/create-mcp-server.js",
17
- "require": "./dist/create-mcp-server.js",
26
+ "require": "./dist/create-mcp-server.cjs",
18
27
  "default": "./dist/create-mcp-server.js"
19
28
  },
20
29
  "./config": {
21
30
  "types": "./src/config.d.ts",
22
31
  "import": "./dist/config.js",
23
- "require": "./dist/config.js",
32
+ "require": "./dist/config.cjs",
24
33
  "default": "./dist/config.js"
25
34
  }
26
35
  },
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/langwatch/langwatch.git",
30
- "directory": "mcp-server"
31
- },
32
- "author": "",
33
- "license": "MIT",
34
- "engines": {
35
- "node": ">=18.0.0"
36
+ "dependencies": {
37
+ "@langwatch/evaluator-contract": "0.1.0",
38
+ "@modelcontextprotocol/sdk": "1.29.0",
39
+ "zod": "^4.6.7"
36
40
  },
37
41
  "devDependencies": {
38
42
  "@ai-sdk/anthropic": "^3.0.44",
39
43
  "@anthropic-ai/claude-code": "2.1.228",
40
- "@eslint/js": "^10.0.1",
41
- "@langwatch/scenario": "^0.4.6",
42
- "@opentelemetry/context-async-hooks": "^2.1.0",
43
- "@opentelemetry/sdk-node": "^0.221.0",
44
+ "@langwatch/egress": "0.0.1",
45
+ "@langwatch/handled-error": "0.1.0",
46
+ "@langwatch/redaction": "0.0.1",
47
+ "@langwatch/scenario": "1.7.0-dev.voice10",
44
48
  "@types/debug": "^4.1.13",
45
49
  "@types/express": "^5.0.6",
46
50
  "@types/node": "^26.2.0",
47
51
  "@types/yargs": "^17.0.33",
48
- "ai": "^6.0.161",
52
+ "ai": "^6.0.217",
49
53
  "chalk": "^6.0.0",
50
- "date-fns": "^4.1.0",
51
- "dotenv": "^17.2.2",
52
- "esbuild": "^0.28.1",
53
- "eslint": "^10.2.1",
54
+ "dotenv": "^17.4.2",
55
+ "esbuild": "^0.28.2",
54
56
  "express": "^5.2.1",
55
57
  "node-pty": "^1.0.0",
56
- "tsup": "^8.1.0",
57
- "tsx": "^4.20.5",
58
+ "tsup": "^8.5.0",
58
59
  "typescript": "^6.0.3",
59
- "typescript-eslint": "^8.55.0",
60
- "vitest": "^4.1.8",
60
+ "vitest": "^5.0.1",
61
61
  "yargs": "^18.0.0",
62
- "zod-validation-error": "^5.0.0",
63
- "@langwatch/handled-error": "0.1.0",
64
- "@langwatch/ssrf": "0.0.1",
65
- "@langwatch/redaction": "0.0.1"
66
- },
67
- "dependencies": {
68
- "@modelcontextprotocol/sdk": "^1.29.0",
69
- "zod": "^4.3.6"
62
+ "zod-validation-error": "^5.0.0"
70
63
  },
71
- "bin": {
72
- "langwatch-mcp-server": "./dist/index.js"
64
+ "engines": {
65
+ "node": "^22.23.4 || ^24.22.1 || >=26.12.1"
73
66
  },
74
67
  "scripts": {
75
- "start": "tsx src/index.ts",
68
+ "start": "node --experimental-transform-types src/index.ts",
76
69
  "build": "tsup && node build.js",
70
+ "typecheck": "GOMAXPROCS=2 GOMEMLIMIT=2GiB pnpm -w exec tsc -b mcp/typescript",
77
71
  "prepublish": "pnpm run build",
78
- "test": "vitest"
72
+ "test": "vitest run",
73
+ "test:integration": "vitest run --config vitest.integration.config.js",
74
+ "test:scenario": "vitest run --config vitest.scenario.config.js"
79
75
  }
80
76
  }
package/pyproject.toml CHANGED
@@ -5,12 +5,12 @@ description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  dependencies = [
8
- "ipykernel>=7.3.0",
9
- "langwatch",
10
- "litellm>=1.96.0",
11
- "mcp[cli]>=2.0.0",
12
- "pandas>=2.3.2",
13
- "tenacity>=9.1.4",
8
+ "ipykernel>=7.3.0",
9
+ "langwatch",
10
+ "litellm>=1.96.0",
11
+ "mcp[cli]>=2.0.0",
12
+ "pandas>=2.3.2",
13
+ "tenacity>=9.1.4",
14
14
  ]
15
15
 
16
16
  [tool.uv]
@@ -20,8 +20,8 @@ exclude-newer = "7 days"
20
20
  # package isn't a direct dependency, so a future re-resolution can't silently
21
21
  # pull a vulnerable version back in.
22
22
  constraint-dependencies = [
23
- "python-dotenv>=1.2.2", # security: python-dotenv advisory (#934)
24
- "python-liquid>=2.2.1", # security: python-liquid advisory (#1528)
23
+ "python-dotenv>=1.2.2", # security: python-dotenv advisory (#934)
24
+ "python-liquid>=2.2.1", # security: python-liquid advisory (#1528)
25
25
  ]
26
26
 
27
27
  [tool.uv.sources]
package/src/config.d.ts CHANGED
@@ -1,13 +1,17 @@
1
1
  export interface McpConfig {
2
2
  apiKey: string | undefined;
3
3
  endpoint: string;
4
+ projectId?: string;
4
5
  }
5
6
 
6
7
  export declare function initConfig(args: {
7
8
  apiKey?: string;
8
9
  endpoint?: string;
10
+ projectId?: string;
9
11
  }): void;
10
12
 
13
+ export declare function tryGetConfig(): McpConfig | undefined;
14
+
11
15
  export declare function getConfig(): McpConfig;
12
16
 
13
17
  export declare function requireApiKey(): string;
package/src/config.ts CHANGED
@@ -6,19 +6,7 @@ export interface McpConfig {
6
6
  projectId?: string;
7
7
  }
8
8
 
9
- // ---------------------------------------------------------------------------
10
- // Singleton storage on globalThis
11
- //
12
- // When the langwatch app (CJS, no "type": "module") imports this module,
13
- // tsx creates a CJS-cached copy. When mcp-server's own ESM dist chunks
14
- // do `await import("./search-traces-*.js")`, Node creates a separate
15
- // ESM-cached copy. Module-level variables are NOT shared between them.
16
- //
17
- // By storing config on globalThis, both CJS and ESM instances read/write
18
- // the same object, fixing the "Config not initialized" error that occurs
19
- // when initConfig() runs on the CJS side but tool handlers execute on
20
- // the ESM side.
21
- // ---------------------------------------------------------------------------
9
+ // Store on globalThis to share config between CJS and ESM module instances.
22
10
 
23
11
  const GLOBAL_KEY = "__langwatch_mcp_config" as const;
24
12
  const STORAGE_KEY = "__langwatch_mcp_config_storage" as const;
@@ -49,13 +37,10 @@ function getGlobalState(): McpGlobalState {
49
37
  };
50
38
  }
51
39
 
40
+ /** Trim surrounding whitespace and drop any trailing slashes. */
52
41
  /**
53
- * Trim surrounding whitespace and drop any trailing slashes.
54
- *
55
- * Request URLs are built as `${endpoint}/api/...`, so an endpoint written as
56
- * `https://app.langwatch.ai/` would produce a double slash the router does not
57
- * match, and the caller gets an opaque 404 with nothing pointing at the
58
- * endpoint as the cause.
42
+ * Request URLs are built as `${endpoint}/api/...`; a trailing slash would
43
+ * double up and 404 with nothing pointing at the endpoint as the cause.
59
44
  */
60
45
  function normalizeEndpoint(endpoint: string): string {
61
46
  const trimmed = endpoint.trim();
@@ -64,7 +49,7 @@ function normalizeEndpoint(endpoint: string): string {
64
49
  return trimmed.slice(0, end);
65
50
  }
66
51
 
67
- export function initConfig(args: { apiKey?: string; endpoint?: string }): void {
52
+ export function initConfig(args: { apiKey?: string; endpoint?: string; projectId?: string }): void {
68
53
  const state = getGlobalState();
69
54
  state.globalConfig = {
70
55
  apiKey: args.apiKey || process.env.LANGWATCH_API_KEY,
@@ -72,19 +57,25 @@ export function initConfig(args: { apiKey?: string; endpoint?: string }): void {
72
57
  normalizeEndpoint(args.endpoint ?? "") ||
73
58
  normalizeEndpoint(process.env.LANGWATCH_ENDPOINT ?? "") ||
74
59
  "https://app.langwatch.ai",
75
- projectId: process.env.LANGWATCH_PROJECT_ID,
60
+ projectId: args.projectId ?? process.env.LANGWATCH_PROJECT_ID,
76
61
  };
77
62
  }
78
63
 
64
+ // Current config: per-request scoped if inside runWithConfig(), otherwise global.
65
+ // Returns undefined rather than throwing so callers don't need try/catch.
66
+ export function tryGetConfig(): McpConfig | undefined {
67
+ const state = getGlobalState();
68
+ return state.configStorage.getStore() ?? state.globalConfig;
69
+ }
70
+
71
+ /** The current config: per-request scoped inside runWithConfig(), else global. */
79
72
  /**
80
- * Returns the current config: the per-request scoped config if inside
81
- * a `runWithConfig()` callback, otherwise the global config.
73
+ * Throws when there is none — every caller here needs it to proceed. A
74
+ * caller that can carry on without it asks `tryGetConfig()` instead.
82
75
  */
83
76
  export function getConfig(): McpConfig {
84
- const state = getGlobalState();
85
- const scoped = state.configStorage.getStore();
86
- if (scoped) return scoped;
87
- if (!state.globalConfig) {
77
+ const config = tryGetConfig();
78
+ if (!config) {
88
79
  console.error(
89
80
  "[MCP config] getConfig() failed: globalConfig is null, no scoped config active. " +
90
81
  "Was initConfig() called? Stack:",
@@ -92,7 +83,7 @@ export function getConfig(): McpConfig {
92
83
  );
93
84
  throw new Error("Config not initialized");
94
85
  }
95
- return state.globalConfig;
86
+ return config;
96
87
  }
97
88
 
98
89
  export function requireApiKey(): string {
@@ -107,7 +98,7 @@ export function requireApiKey(): string {
107
98
  new Error().stack,
108
99
  );
109
100
  throw new Error(
110
- "LANGWATCH_API_KEY is required. Set it via --apiKey flag or LANGWATCH_API_KEY environment variable."
101
+ "LANGWATCH_API_KEY is required. Set it via --apiKey flag or LANGWATCH_API_KEY environment variable.",
111
102
  );
112
103
  }
113
104
  return config.apiKey;