@langwatch/mcp-server 2.2.0 → 3.1.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 (253) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/add-dashboard-widget-3IE3W5RR.js +46 -0
  3. package/dist/add-dashboard-widget-XNAIGV37.js +45 -0
  4. package/dist/{archive-project-KWFM3I5Z.js → archive-project-LAWWNKTX.js} +4 -4
  5. package/dist/{archive-project-SPVHXK6A.js → archive-project-X64627XS.js} +4 -4
  6. package/dist/{archive-run-plan-Z4SYE6BP.js → archive-run-plan-3HKFL5MS.js} +4 -4
  7. package/dist/{archive-run-plan-65QN3XRX.js → archive-run-plan-C35EJACZ.js} +4 -4
  8. package/dist/{archive-scenario-A6QV5LOW.js → archive-scenario-3DOXHOJJ.js} +4 -4
  9. package/dist/{archive-scenario-FXEYQNEH.js → archive-scenario-7KDGEZM5.js} +4 -4
  10. package/dist/{archive-test-suite-NKZDZY3D.js → archive-test-suite-KZOESY2Y.js} +4 -4
  11. package/dist/{archive-test-suite-5ADQ3KPQ.js → archive-test-suite-RPJ6ZKBV.js} +4 -4
  12. package/dist/{assign-prompt-tag-5IUZXJ2T.js → assign-prompt-tag-2A25CXB7.js} +3 -3
  13. package/dist/{assign-prompt-tag-HBZLBIFD.js → assign-prompt-tag-TQRV6D6V.js} +3 -3
  14. package/dist/{chunk-Y34DHR5K.js → chunk-27SS5FBC.js} +2 -2
  15. package/dist/chunk-2RLDGMPZ.js +79 -0
  16. package/dist/{chunk-VMWJD732.js → chunk-3GVTJ7NK.js} +2 -2
  17. package/dist/chunk-6DF65T3B.js +36 -0
  18. package/dist/{chunk-3OCG3QPU.js → chunk-6OLI3LFY.js} +2 -2
  19. package/dist/{chunk-B4J3PJLX.js → chunk-7HJSQOSZ.js} +2 -6
  20. package/dist/{chunk-UWLE5T2F.js → chunk-7MNQDTKJ.js} +46 -27
  21. package/dist/{chunk-I7ATIZED.js → chunk-BHCYKMRH.js} +2 -2
  22. package/dist/{chunk-H6WGMG2T.js → chunk-DULFP3MK.js} +1 -1
  23. package/dist/{chunk-NKMTIHIJ.js → chunk-FSU2ZBUM.js} +2 -2
  24. package/dist/{chunk-SXFC3FNH.js → chunk-I2Z5CBOU.js} +2 -2
  25. package/dist/{chunk-J7PQKBLD.js → chunk-JEMUBKLJ.js} +533 -402
  26. package/dist/{chunk-7VNSRCXO.js → chunk-JOFSQFCN.js} +2 -2
  27. package/dist/{chunk-HGELNIVY.js → chunk-JQN3VXPH.js} +3 -3
  28. package/dist/{chunk-UTJCWXPZ.js → chunk-LXBQK3J3.js} +2 -2
  29. package/dist/{chunk-JRJPH75H.js → chunk-MQRTYXHJ.js} +2 -2
  30. package/dist/{chunk-YCARO42Z.js → chunk-P2JRKSYI.js} +3 -3
  31. package/dist/{chunk-PTDR56Z3.js → chunk-QF7ZGYVI.js} +2 -2
  32. package/dist/{chunk-UNJM3BIL.js → chunk-QTAHHJH3.js} +2 -2
  33. package/dist/chunk-SLRQHMJZ.js +41 -0
  34. package/dist/{chunk-SUPUUC4W.js → chunk-YQWZ4CDN.js} +5 -3
  35. package/dist/{config-EAKW6F26.js → config-2WQGMAEN.js} +2 -2
  36. package/dist/config.js +1 -1
  37. package/dist/{create-agent-S5ZBCEFT.js → create-agent-IE7Q2Z4C.js} +4 -4
  38. package/dist/{create-agent-AYZ3LB3V.js → create-agent-JMCQ5WZC.js} +4 -4
  39. package/dist/create-analytics-report-4X5N7EOT.js +19 -0
  40. package/dist/create-analytics-report-IKWZRS2O.js +18 -0
  41. package/dist/{create-annotation-VUSXULQK.js → create-annotation-IZ53SJOX.js} +4 -4
  42. package/dist/{create-annotation-LHNCLHYP.js → create-annotation-JR6DBHPW.js} +4 -4
  43. package/dist/{create-api-key-T4KSNPKB.js → create-api-key-IKMOTWCD.js} +4 -4
  44. package/dist/{create-api-key-NNYKARMG.js → create-api-key-YUDAGOWL.js} +4 -4
  45. package/dist/{create-dataset-2MC4SD4O.js → create-dataset-54FJCX45.js} +4 -4
  46. package/dist/{create-dataset-LUP5PVDM.js → create-dataset-ONX3RADL.js} +4 -4
  47. package/dist/{create-dataset-records-W4GLN2FV.js → create-dataset-records-HPLMFDJY.js} +4 -4
  48. package/dist/{create-dataset-records-NSKBZP3G.js → create-dataset-records-QZZZF64Z.js} +4 -4
  49. package/dist/{create-evaluator-HMTYO5SS.js → create-evaluator-I5I52HOQ.js} +4 -4
  50. package/dist/{create-evaluator-643G6LXL.js → create-evaluator-L66QGSDX.js} +4 -4
  51. package/dist/create-mcp-server.cjs +851 -597
  52. package/dist/create-mcp-server.js +523 -392
  53. package/dist/{create-project-6N7PIYRY.js → create-project-UPZGETN5.js} +4 -4
  54. package/dist/{create-project-KAIC46UY.js → create-project-Y5EGJKDG.js} +4 -4
  55. package/dist/{create-prompt-PKJ7EDRR.js → create-prompt-RNUJOL25.js} +3 -3
  56. package/dist/{create-prompt-E67LXIYT.js → create-prompt-WGQLJASD.js} +3 -3
  57. package/dist/{create-prompt-tag-OPQUEXWB.js → create-prompt-tag-3ZCA7M7O.js} +3 -3
  58. package/dist/{create-prompt-tag-4YO3FSJ3.js → create-prompt-tag-R6KIAZTB.js} +3 -3
  59. package/dist/{create-scenario-UEM77OE7.js → create-scenario-WIMKZLQO.js} +4 -4
  60. package/dist/{create-scenario-5PJBMAXO.js → create-scenario-WO5NWXVQ.js} +4 -4
  61. package/dist/{create-test-suite-4IPXVSFQ.js → create-test-suite-AVSR7IIM.js} +4 -4
  62. package/dist/{create-test-suite-SZEPVXSE.js → create-test-suite-LRKCNIJA.js} +4 -4
  63. package/dist/{create-trigger-5HZSCRAN.js → create-trigger-CBO2XDYC.js} +4 -4
  64. package/dist/{create-trigger-PRELMT6J.js → create-trigger-M3VFK5UH.js} +4 -4
  65. package/dist/dashboards-4X6QUT3E.js +90 -0
  66. package/dist/dashboards-CX2T6RKH.js +91 -0
  67. package/dist/{delete-agent-QMEK3XHK.js → delete-agent-QUVDMSOC.js} +4 -4
  68. package/dist/{delete-agent-JUIZWAXG.js → delete-agent-Y4QTEQ3B.js} +4 -4
  69. package/dist/delete-analytics-report-T4GIMEOA.js +18 -0
  70. package/dist/delete-analytics-report-WIP24EXV.js +19 -0
  71. package/dist/{delete-annotation-VKIQWUYW.js → delete-annotation-BWO5ZEZY.js} +4 -4
  72. package/dist/{delete-annotation-HY3O2OGR.js → delete-annotation-ESUH3RWN.js} +4 -4
  73. package/dist/{delete-dataset-WKRUW4FP.js → delete-dataset-N4AEYIAA.js} +4 -4
  74. package/dist/{delete-dataset-HQCR66MG.js → delete-dataset-ZRD23FLO.js} +4 -4
  75. package/dist/{delete-dataset-records-SDUHQLLM.js → delete-dataset-records-HC7VLBT7.js} +4 -4
  76. package/dist/{delete-dataset-records-C2IQFFVQ.js → delete-dataset-records-XC2DFVXD.js} +4 -4
  77. package/dist/{delete-evaluator-QP3QHTLN.js → delete-evaluator-27P5XLNV.js} +4 -4
  78. package/dist/{delete-evaluator-4SNSCLEE.js → delete-evaluator-LJII4YLC.js} +4 -4
  79. package/dist/{delete-prompt-tag-YYQ4VMAD.js → delete-prompt-tag-DH7IQO4X.js} +3 -3
  80. package/dist/{delete-prompt-tag-NZ4JQMYG.js → delete-prompt-tag-OC57CN32.js} +3 -3
  81. package/dist/{delete-workflow-5J46T73T.js → delete-workflow-I4IXK3ZL.js} +4 -4
  82. package/dist/{delete-workflow-JSWABL5F.js → delete-workflow-JXREDDW7.js} +4 -4
  83. package/dist/{discover-schema-A33SLMXW.js → discover-schema-ME5BAD2S.js} +4 -4
  84. package/dist/{discover-schema-55YJBFGQ.js → discover-schema-OHYBG3CY.js} +4 -4
  85. package/dist/{get-agent-LJQX7OF4.js → get-agent-6GKIKKL7.js} +4 -4
  86. package/dist/{get-agent-OTIYUFZA.js → get-agent-UKZUBVPB.js} +4 -4
  87. package/dist/{get-analytics-IQZKJHLW.js → get-analytics-TI2U3JLA.js} +3 -3
  88. package/dist/{get-analytics-DCS72353.js → get-analytics-ZGQ4LY3I.js} +3 -3
  89. package/dist/get-analytics-report-PD6XZ4ZA.js +29 -0
  90. package/dist/get-analytics-report-QMXNQ7VA.js +30 -0
  91. package/dist/{get-dataset-ALSP7RTX.js → get-dataset-5QORNVOZ.js} +4 -4
  92. package/dist/{get-dataset-X4B5JDG2.js → get-dataset-E5WLIPNK.js} +4 -4
  93. package/dist/{get-evaluator-XEUZGZCH.js → get-evaluator-GYQFB4F3.js} +4 -4
  94. package/dist/{get-evaluator-ISMC4LLI.js → get-evaluator-QQV65MQB.js} +4 -4
  95. package/dist/{get-project-5VKROSDH.js → get-project-43SGQCAT.js} +4 -4
  96. package/dist/{get-project-RM6FRCBK.js → get-project-W5DCKXZP.js} +4 -4
  97. package/dist/{get-prompt-OWXJZHQQ.js → get-prompt-IUTPSRRI.js} +3 -3
  98. package/dist/{get-prompt-W52DY36E.js → get-prompt-ZTCWGYJV.js} +3 -3
  99. package/dist/{get-run-plan-BE3M2AUX.js → get-run-plan-M3LVXMGO.js} +4 -4
  100. package/dist/{get-run-plan-RUXQ6PAX.js → get-run-plan-MEPEU353.js} +4 -4
  101. package/dist/{get-scenario-RNM7BAX2.js → get-scenario-2DM4XR44.js} +4 -4
  102. package/dist/{get-scenario-YM4ODWW6.js → get-scenario-D6EPSSPW.js} +4 -4
  103. package/dist/{get-simulation-run-6GIATQE5.js → get-simulation-run-53WM2XOO.js} +4 -4
  104. package/dist/{get-simulation-run-LCFSMPGQ.js → get-simulation-run-RKQ52TKP.js} +4 -4
  105. package/dist/{get-test-suite-P5LJ6VLF.js → get-test-suite-DP2HNOQZ.js} +4 -4
  106. package/dist/{get-test-suite-GC2O7YH6.js → get-test-suite-MUSY2CDJ.js} +4 -4
  107. package/dist/{get-trace-SEF3FMR5.js → get-trace-5Z2BIZ3V.js} +3 -3
  108. package/dist/{get-trace-KBRVV4NN.js → get-trace-THPWSLD3.js} +3 -3
  109. package/dist/{get-workflow-YXULW4GC.js → get-workflow-63E7BNLY.js} +4 -4
  110. package/dist/{get-workflow-7PVED7JE.js → get-workflow-R6XUKTZ7.js} +4 -4
  111. package/dist/{http-server-IR4QOS43.js → http-server-4JHSQN56.js} +245 -45
  112. package/dist/index.js +1847 -899
  113. package/dist/langwatch-api-analytics-reports-IIHGTTQA.js +17 -0
  114. package/dist/langwatch-api-analytics-reports-IQ6CHM5Y.js +18 -0
  115. package/dist/{langwatch-api-annotations-TBHLCQ5R.js → langwatch-api-annotations-CN2KYV3Z.js} +4 -4
  116. package/dist/{langwatch-api-annotations-6SA4OB4C.js → langwatch-api-annotations-CRI6JTQR.js} +4 -4
  117. package/dist/{langwatch-api-monitors-CBF3FGIM.js → langwatch-api-monitors-66O5Z5LB.js} +3 -3
  118. package/dist/{langwatch-api-monitors-YNWA2M5Y.js → langwatch-api-monitors-GNHQRPMR.js} +3 -3
  119. package/dist/{langwatch-api-secrets-RNFO4LF2.js → langwatch-api-secrets-B7BURV76.js} +3 -3
  120. package/dist/{langwatch-api-secrets-ADTOJELP.js → langwatch-api-secrets-P6SHZOHE.js} +3 -3
  121. package/dist/{langwatch-api-triggers-KQDQC6L5.js → langwatch-api-triggers-6FR4VWDL.js} +4 -4
  122. package/dist/{langwatch-api-triggers-QS7HDIVW.js → langwatch-api-triggers-VKNGXSJH.js} +4 -4
  123. package/dist/langwatch-api-workflows-22RQFYO7.js +15 -0
  124. package/dist/{langwatch-api-workflows-OKC4FXIF.js → langwatch-api-workflows-KDACD36L.js} +4 -4
  125. package/dist/{list-agents-RBAOCF53.js → list-agents-SVXWLLO7.js} +4 -4
  126. package/dist/{list-agents-HVYWEQMI.js → list-agents-XM5JNCVK.js} +4 -4
  127. package/dist/list-analytics-reports-DEKKC6BU.js +32 -0
  128. package/dist/list-analytics-reports-E7QFC22G.js +33 -0
  129. package/dist/{list-annotations-J4UAHSUN.js → list-annotations-5CGNOIKI.js} +4 -4
  130. package/dist/{list-annotations-HJH4NBLD.js → list-annotations-P26ELIAO.js} +4 -4
  131. package/dist/{list-api-keys-A2PMV435.js → list-api-keys-B4YL7STE.js} +4 -4
  132. package/dist/{list-api-keys-7UTJRZDG.js → list-api-keys-ZIJJH755.js} +4 -4
  133. package/dist/list-dashboards-F4YJPDKD.js +29 -0
  134. package/dist/list-dashboards-XHYTXEQK.js +30 -0
  135. package/dist/{list-dataset-records-WFM7F33C.js → list-dataset-records-SWCEDRPX.js} +4 -4
  136. package/dist/{list-dataset-records-M5TKA6LK.js → list-dataset-records-YWGROVKC.js} +4 -4
  137. package/dist/{list-datasets-B5X4P7BQ.js → list-datasets-32SCF66H.js} +4 -4
  138. package/dist/{list-datasets-THUKQHPX.js → list-datasets-YYADWT4D.js} +4 -4
  139. package/dist/{list-evaluators-MYH2OVCI.js → list-evaluators-KKQKBJKN.js} +4 -4
  140. package/dist/{list-evaluators-NLVWF6K7.js → list-evaluators-V6LP6ZQA.js} +4 -4
  141. package/dist/{list-model-providers-3JUGP4YI.js → list-model-providers-RCPVT7R4.js} +4 -4
  142. package/dist/{list-model-providers-H3XKORFO.js → list-model-providers-TMBSB6EE.js} +4 -4
  143. package/dist/{list-projects-YNNSRMLC.js → list-projects-4Y74TFDZ.js} +4 -4
  144. package/dist/{list-projects-6EJ5YYEW.js → list-projects-R4MTRF3C.js} +4 -4
  145. package/dist/{list-prompt-tags-NVFQO6WX.js → list-prompt-tags-C345AGM2.js} +3 -3
  146. package/dist/{list-prompt-tags-XUQTTAH4.js → list-prompt-tags-RITKQDC5.js} +3 -3
  147. package/dist/{list-prompts-IRI6AIXO.js → list-prompts-DSJ2LUSU.js} +3 -3
  148. package/dist/{list-prompts-HSIMMHTF.js → list-prompts-F7C5L5XK.js} +3 -3
  149. package/dist/{list-run-plans-PX2XI6EK.js → list-run-plans-YPGLC5QG.js} +4 -4
  150. package/dist/{list-run-plans-QALLCN2K.js → list-run-plans-ZHRZHCDL.js} +4 -4
  151. package/dist/{list-scenarios-SSJQEMJP.js → list-scenarios-6HN72TMW.js} +4 -4
  152. package/dist/{list-scenarios-QZRPVHS4.js → list-scenarios-HCYFOTSL.js} +4 -4
  153. package/dist/{list-simulation-runs-OEADLLQR.js → list-simulation-runs-BKVMQQMT.js} +4 -4
  154. package/dist/{list-simulation-runs-KNOLGMDV.js → list-simulation-runs-JNST5PQU.js} +4 -4
  155. package/dist/{list-test-suites-N4WVLBKK.js → list-test-suites-4ZVYYKVB.js} +4 -4
  156. package/dist/{list-test-suites-ANAQBLDG.js → list-test-suites-YY4J3L7H.js} +4 -4
  157. package/dist/{list-trigger-fires-WTW4DVIW.js → list-trigger-fires-3XM6YZWG.js} +4 -4
  158. package/dist/{list-trigger-fires-JV3WFYYG.js → list-trigger-fires-5C5XM2KQ.js} +4 -4
  159. package/dist/{list-triggers-V4Y356AK.js → list-triggers-DARBIIRA.js} +4 -4
  160. package/dist/{list-triggers-SQNIG35Q.js → list-triggers-MRSWN7RR.js} +4 -4
  161. package/dist/{list-workflows-ZHTX5LCL.js → list-workflows-BGUSQUJX.js} +4 -4
  162. package/dist/{list-workflows-IMSX7SXU.js → list-workflows-NXOWP3XS.js} +4 -4
  163. package/dist/{rename-prompt-tag-IQI7MHOI.js → rename-prompt-tag-F3WT4FB4.js} +3 -3
  164. package/dist/{rename-prompt-tag-PA2BRIE6.js → rename-prompt-tag-HR5HZZI2.js} +3 -3
  165. package/dist/{rename-test-suite-NNVLMLKY.js → rename-test-suite-2ZRXG5O7.js} +4 -4
  166. package/dist/{rename-test-suite-4J7UX5S2.js → rename-test-suite-PWXKE7Z4.js} +4 -4
  167. package/dist/{report-issue-AS34ZMJF.js → report-issue-HG7XCPOY.js} +28 -2
  168. package/dist/{report-issue-DCZFLGDO.js → report-issue-TWRFUPGB.js} +28 -2
  169. package/dist/{rerun-run-plan-TG2V4WM4.js → rerun-run-plan-BFRZFEJB.js} +4 -4
  170. package/dist/{rerun-run-plan-ZI5OY3VA.js → rerun-run-plan-LXM3RFZC.js} +4 -4
  171. package/dist/{revoke-api-key-3J3ZA4UB.js → revoke-api-key-GR55PUP4.js} +4 -4
  172. package/dist/{revoke-api-key-SFMEFWJC.js → revoke-api-key-KCDOYPUK.js} +4 -4
  173. package/dist/{run-agent-YNV6ZHW4.js → run-agent-HRVRHRHI.js} +4 -4
  174. package/dist/{run-agent-W4VJP72Z.js → run-agent-WS6TADJQ.js} +4 -4
  175. package/dist/{run-plan-6C77GWG4.js → run-plan-G24DBB5D.js} +4 -4
  176. package/dist/{run-plan-PAARQSI4.js → run-plan-NSXMBEC5.js} +4 -4
  177. package/dist/{run-query-T4QW2Z5O.js → run-query-6YVOA5NV.js} +19 -5
  178. package/dist/{run-query-KJDH544C.js → run-query-7QIYSDVI.js} +19 -5
  179. package/dist/{run-test-suite-STB6NUJM.js → run-test-suite-NTKLJZCJ.js} +4 -4
  180. package/dist/{run-test-suite-SQJELEZX.js → run-test-suite-P33XFQ6H.js} +4 -4
  181. package/dist/{run-workflow-D6PQNBI6.js → run-workflow-E5ZRSXUB.js} +4 -4
  182. package/dist/{run-workflow-SP32SO5M.js → run-workflow-HDF6CRLM.js} +4 -4
  183. package/dist/{search-traces-HCBGOG6R.js → search-traces-X7NSRTTP.js} +3 -3
  184. package/dist/{search-traces-HSTQ6WTQ.js → search-traces-XWZYOZOM.js} +3 -3
  185. package/dist/{set-model-provider-GF7NXUJA.js → set-model-provider-XJF47L6H.js} +4 -4
  186. package/dist/{set-model-provider-KDQ7C4EZ.js → set-model-provider-YPUCFEXG.js} +4 -4
  187. package/dist/{update-agent-MXNOBS4H.js → update-agent-6FHGWOO7.js} +4 -4
  188. package/dist/{update-agent-DWG43T2P.js → update-agent-VEDXQRSM.js} +4 -4
  189. package/dist/update-dashboard-widget-VOKXN7JA.js +64 -0
  190. package/dist/update-dashboard-widget-VUIQZ7F5.js +63 -0
  191. package/dist/{update-dataset-SQZ6T4WX.js → update-dataset-7AQ24NRS.js} +4 -4
  192. package/dist/{update-dataset-DQH3OHOU.js → update-dataset-GHKDCJJQ.js} +4 -4
  193. package/dist/{update-dataset-record-3AT4IPBC.js → update-dataset-record-IRD6FH2C.js} +4 -4
  194. package/dist/{update-dataset-record-7PLDGTMR.js → update-dataset-record-ZZUPG7AS.js} +4 -4
  195. package/dist/{update-evaluator-4LFTKFPT.js → update-evaluator-O6EJFTQJ.js} +4 -4
  196. package/dist/{update-evaluator-IGTX6PX4.js → update-evaluator-PUJFU5LT.js} +4 -4
  197. package/dist/{update-project-PLJIOZS6.js → update-project-HO53IHXC.js} +4 -4
  198. package/dist/{update-project-QVHSJRUP.js → update-project-VTVU6KNP.js} +4 -4
  199. package/dist/{update-prompt-GDKRYJI3.js → update-prompt-FABVQCAC.js} +3 -3
  200. package/dist/{update-prompt-MY263DYF.js → update-prompt-MNRLCLBA.js} +3 -3
  201. package/dist/{update-scenario-MOHRQKAQ.js → update-scenario-MQZZM5CP.js} +4 -4
  202. package/dist/{update-scenario-7KA3JDXA.js → update-scenario-XIZNUH4I.js} +4 -4
  203. package/package.json +2 -2
  204. package/pyproject.toml +17 -2
  205. package/src/config.d.ts +2 -0
  206. package/src/config.ts +2 -0
  207. package/src/create-mcp-server.ts +165 -41
  208. package/src/langwatch-api-analytics-reports.ts +62 -0
  209. package/src/langwatch-api-dashboard-widgets.ts +4 -68
  210. package/src/langwatch-api-dashboards.ts +110 -28
  211. package/src/langwatch-api-projects.ts +0 -17
  212. package/src/langwatch-api-query.ts +6 -0
  213. package/src/langwatch-api.ts +60 -27
  214. package/src/schemas/widget-sources.ts +69 -0
  215. package/src/tools/add-dashboard-widget.ts +23 -32
  216. package/src/tools/create-analytics-report.ts +7 -0
  217. package/src/tools/dashboard-widget-queries.ts +22 -0
  218. package/src/tools/dashboards.ts +104 -0
  219. package/src/tools/delete-analytics-report.ts +7 -0
  220. package/src/tools/get-analytics-report.ts +23 -0
  221. package/src/tools/list-analytics-reports.ts +27 -0
  222. package/src/tools/list-dashboards.ts +20 -21
  223. package/src/tools/report-issue.ts +2 -0
  224. package/src/tools/run-experiment.ts +5 -1
  225. package/src/tools/run-query.ts +23 -1
  226. package/src/tools/update-dashboard-widget.ts +32 -40
  227. package/uv.lock +667 -341
  228. package/dist/add-dashboard-widget-4ZC5UN73.js +0 -50
  229. package/dist/add-dashboard-widget-ACC6QYBG.js +0 -49
  230. package/dist/chunk-5FNCQRCX.js +0 -91
  231. package/dist/chunk-ILZDO25L.js +0 -36
  232. package/dist/chunk-K2I7Z3LZ.js +0 -28
  233. package/dist/create-dashboard-DHVFMEU4.js +0 -18
  234. package/dist/create-dashboard-WTKKS5Z6.js +0 -19
  235. package/dist/delete-dashboard-76N66XXL.js +0 -18
  236. package/dist/delete-dashboard-JVIVHNJM.js +0 -19
  237. package/dist/get-dashboard-5NYJEIX2.js +0 -29
  238. package/dist/get-dashboard-QMTYDQAZ.js +0 -30
  239. package/dist/langwatch-api-dashboards-6EO2VVZW.js +0 -17
  240. package/dist/langwatch-api-dashboards-NHU5BZD7.js +0 -18
  241. package/dist/langwatch-api-workflows-XGJE6SR5.js +0 -15
  242. package/dist/list-dashboard-boards-OPWROHMG.js +0 -33
  243. package/dist/list-dashboard-boards-U2GJ7GC5.js +0 -34
  244. package/dist/list-dashboards-ROSYFLDQ.js +0 -33
  245. package/dist/list-dashboards-RQ635ZU7.js +0 -32
  246. package/dist/update-dashboard-widget-CJKJLCDY.js +0 -71
  247. package/dist/update-dashboard-widget-CYQDS2NR.js +0 -70
  248. package/src/langwatch-api-boards.ts +0 -46
  249. package/src/tools/create-dashboard.ts +0 -7
  250. package/src/tools/dashboard-exists.ts +0 -25
  251. package/src/tools/delete-dashboard.ts +0 -7
  252. package/src/tools/get-dashboard.ts +0 -22
  253. package/src/tools/list-dashboard-boards.ts +0 -28
@@ -0,0 +1,27 @@
1
+ import { listAnalyticsReports } from "../langwatch-api-analytics-reports.ts";
2
+
3
+ export async function handleListAnalyticsReports(): Promise<string> {
4
+ const result = await listAnalyticsReports();
5
+ const reports = result.data;
6
+
7
+ if (!Array.isArray(reports) || reports.length === 0) {
8
+ return "No Analytics Reports found in this project.\n\n> Tip: Use `platform_create_analytics_report` to create a new Analytics Report.";
9
+ }
10
+
11
+ const lines: string[] = [];
12
+ lines.push(`# Analytics Reports (${reports.length} total)\n`);
13
+
14
+ for (const report of reports) {
15
+ lines.push(`## ${report.name}`);
16
+ lines.push(`**ID**: ${report.id}`);
17
+ lines.push(`**Graphs**: ${report.graphCount}`);
18
+ lines.push(`**Updated**: ${report.updatedAt}`);
19
+ lines.push("");
20
+ }
21
+
22
+ lines.push(
23
+ "> Use `platform_get_analytics_report` with the ID to see the Analytics Report's details including graphs.",
24
+ );
25
+
26
+ return lines.join("\n");
27
+ }
@@ -1,27 +1,26 @@
1
- import { listDashboards as apiListDashboards } from "../langwatch-api-dashboards.ts";
1
+ /**
2
+ * The `list_dashboards` MCP tool: the dashboards a widget can be added to, with
3
+ * the id `add_dashboard_widget` and `update_dashboard_widget` take.
4
+ */
2
5
 
3
- export async function handleListDashboards(): Promise<string> {
4
- const result = await apiListDashboards();
5
- const dashboards = result.data;
6
-
7
- if (!Array.isArray(dashboards) || dashboards.length === 0) {
8
- return "No dashboards found in this project.\n\n> Tip: Use `platform_create_dashboard` to create a new dashboard.";
9
- }
6
+ import { listDashboards } from "../langwatch-api-dashboards.js";
10
7
 
11
- const lines: string[] = [];
12
- lines.push(`# Dashboards (${dashboards.length} total)\n`);
8
+ export async function handleListDashboards(): Promise<string> {
9
+ const { data: dashboards } = await listDashboards();
13
10
 
14
- for (const d of dashboards) {
15
- lines.push(`## ${d.name}`);
16
- lines.push(`**ID**: ${d.id}`);
17
- lines.push(`**Graphs**: ${d.graphCount}`);
18
- lines.push(`**Updated**: ${d.updatedAt}`);
19
- lines.push("");
11
+ if (dashboards.length === 0) {
12
+ return "No dashboards found in this project. Create one in the Dashboards area first.";
20
13
  }
21
14
 
22
- lines.push(
23
- "> Use `platform_get_dashboard` with the ID to see dashboard details including graphs.",
24
- );
25
-
26
- return lines.join("\n");
15
+ return [
16
+ `# Dashboards (${dashboards.length} total)\n`,
17
+ ...dashboards.flatMap((dashboard) => [
18
+ `## ${dashboard.name}`,
19
+ `**ID**: ${dashboard.id}`,
20
+ `**Widgets**: ${dashboard.widgetCount}`,
21
+ `**URL**: ${dashboard.platformUrl}`,
22
+ "",
23
+ ]),
24
+ "> Pass the ID to `add_dashboard_widget` to add a widget to that dashboard.",
25
+ ].join("\n");
27
26
  }
@@ -7,6 +7,7 @@ import {
7
7
  } from "@langwatch/redaction";
8
8
 
9
9
  import { getConfig } from "../config.ts";
10
+ import { LANGWATCH_API_VERSION } from "../langwatch-api.ts";
10
11
 
11
12
  /** Transcripts are capped after redaction; oldest lines are dropped first. */
12
13
  const MAX_SESSION_BYTES = 8 * 1024 * 1024;
@@ -77,6 +78,7 @@ async function deliverReport(report: RedactedReport, params: ReportIssueParams):
77
78
  method: "POST",
78
79
  headers: {
79
80
  "content-type": "application/json",
81
+ "x-api-version": LANGWATCH_API_VERSION,
80
82
  ...(config.apiKey ? { authorization: `Bearer ${config.apiKey}` } : {}),
81
83
  },
82
84
  body: JSON.stringify({
@@ -24,10 +24,14 @@ interface EvaluationStatusResponse {
24
24
  };
25
25
  }
26
26
 
27
- export async function handleRunExperiment(params: { slug: string }): Promise<string> {
27
+ export async function handleRunExperiment(params: {
28
+ slug: string;
29
+ concurrency?: number;
30
+ }): Promise<string> {
28
31
  const result = (await makeRequest(
29
32
  "POST",
30
33
  `/api/v1/experiments/${encodeURIComponent(params.slug)}/run`,
34
+ params.concurrency !== undefined ? { concurrency: params.concurrency } : undefined,
31
35
  )) as EvaluationRunResponse;
32
36
 
33
37
  const lines: string[] = [];
@@ -5,16 +5,28 @@
5
5
  */
6
6
 
7
7
  import { runQuery } from "../langwatch-api-query.ts";
8
+ import { LangWatchApiError } from "../langwatch-api.ts";
8
9
  import { markdownTable } from "../utils/markdown-table.ts";
9
10
 
10
11
  /** Rows the table prints. Beyond this, aggregate or export through the CLI. */
11
12
  export const RUN_QUERY_ROW_CAP = 50;
12
13
 
14
+ /** What the tool tells an agent whose key names no project (the platform's `projects_required`). */
15
+ const PROJECTS_REQUIRED_MESSAGE =
16
+ 'Name the projects to query: pass `projects`, a list of project ids, or "all"';
17
+
13
18
  export async function handleRunQuery(params: {
14
19
  sql: string;
15
20
  parameters?: Record<string, string | number | boolean | null>;
21
+ projects?: string[] | string;
22
+ sources?: string[];
16
23
  }): Promise<string> {
17
- const result = await runQuery(params);
24
+ const result = await runQuery(params).catch((error: unknown) => {
25
+ if (error instanceof LangWatchApiError && error.code === "projects_required") {
26
+ throw new Error(PROJECTS_REQUIRED_MESSAGE);
27
+ }
28
+ throw error;
29
+ });
18
30
  const headers = result.columns.map((column) => column.name);
19
31
  const shown = result.rows.slice(0, RUN_QUERY_ROW_CAP);
20
32
 
@@ -43,5 +55,15 @@ export async function handleRunQuery(params: {
43
55
  for (const diagnostic of result.diagnostics) {
44
56
  lines.push(`${diagnostic.code}: ${diagnostic.message}`);
45
57
  }
58
+ if (result.params) lines.push("", describeParams(result.params));
46
59
  return lines.join("\n");
47
60
  }
61
+
62
+ /** What the run was bound to: every placeholder the SQL declares, by its SQL name. */
63
+ function describeParams(
64
+ params: NonNullable<Awaited<ReturnType<typeof runQuery>>["params"]>,
65
+ ): string {
66
+ return ["Ran with these placeholders:", "```json", JSON.stringify(params, null, 2), "```"].join(
67
+ "\n",
68
+ );
69
+ }
@@ -1,20 +1,17 @@
1
1
  /**
2
- * The `update_dashboard_widget` MCP tool over the widget PATCH: a field left out keeps its
3
- * stored value. The widget must sit on the named dashboard, so an agent never edits one it
4
- * found somewhere else by mistake. Spec: modules/dashboard/specs/dashboard-widget-mcp.feature
2
+ * `update_dashboard_widget`: the widget must sit on the named dashboard, so an agent never edits
3
+ * one it found elsewhere by mistake.
4
+ * Spec: modules/dashboard/specs/dashboard-widget-mcp.feature
5
5
  */
6
6
 
7
- import {
8
- type DashboardWidget,
9
- getDashboardWidget,
10
- updateDashboardWidget,
11
- } from "../langwatch-api-dashboard-widgets.js";
12
- import { getCurrentProject } from "../langwatch-api-projects.js";
7
+ import type { DashboardWidget } from "../langwatch-api-dashboard-widgets.js";
8
+ import { getWidgetOnDashboard, updateWidgetOnDashboard } from "../langwatch-api-dashboards.js";
13
9
  import { LangWatchApiError } from "../langwatch-api.js";
14
- import { assertDashboardExists } from "./dashboard-exists.js";
10
+ import type { WidgetSource } from "../schemas/widget-sources.js";
15
11
  import {
16
12
  type DashboardWidgetQueriesInput,
17
13
  normalizeDashboardWidgetQueries,
14
+ withLists,
18
15
  } from "./dashboard-widget-queries.js";
19
16
 
20
17
  export interface UpdateDashboardWidgetParams {
@@ -24,37 +21,41 @@ export interface UpdateDashboardWidgetParams {
24
21
  code?: string;
25
22
  queries?: DashboardWidgetQueriesInput;
26
23
  description?: string;
24
+ /** Set on every query; alone, it is sent with the widget's stored queries. */
25
+ sources?: WidgetSource[] | null;
26
+ /** Set on every query; alone, it is sent with the widget's stored queries. */
27
+ projects?: string[] | null;
27
28
  }
28
29
 
29
30
  export async function handleUpdateDashboardWidget(
30
31
  params: UpdateDashboardWidgetParams,
31
32
  ): Promise<string> {
32
- const { dashboardId, widgetId, name, code, description } = params;
33
- if (
34
- name === undefined &&
35
- code === undefined &&
36
- params.queries === undefined &&
37
- description === undefined
38
- ) {
39
- throw new Error("Provide at least one of name, code, queries or description to change.");
33
+ const { dashboardId, widgetId, name, code, description, sources, projects } = params;
34
+ const fields = [name, code, params.queries, description, sources, projects];
35
+ if (fields.every((field) => field === undefined)) {
36
+ throw new Error(
37
+ "Provide at least one of name, code, queries, description, sources or projects to change.",
38
+ );
40
39
  }
41
- const queries =
40
+
41
+ const current = await widgetOnDashboardOrRefused({ widgetId, dashboardId });
42
+ const given =
42
43
  params.queries === undefined
43
44
  ? undefined
44
45
  : normalizeDashboardWidgetQueries({ queries: params.queries });
46
+ // Sources alone: the stored queries go back with the new list on each.
47
+ const listed = sources !== undefined || projects !== undefined;
48
+ const base = given ?? (listed ? current.definition.queries : undefined);
49
+ const queries = base === undefined ? undefined : withLists({ queries: base, sources, projects });
45
50
 
46
- const project = await getCurrentProject();
47
- await assertDashboardExists({ projectId: project.id, dashboardId });
48
- const current = await getWidgetOnDashboard({ projectId: project.id, widgetId, dashboardId });
49
-
50
- const widget = await updateDashboardWidget({
51
- projectId: project.id,
52
- widgetId: current.id,
51
+ const changes = {
53
52
  ...(name === undefined ? {} : { name }),
54
53
  ...(code === undefined ? {} : { code }),
55
54
  ...(queries === undefined ? {} : { queries }),
56
55
  ...(description === undefined ? {} : { description }),
57
- });
56
+ };
57
+
58
+ const widget = await updateWidgetOnDashboard({ dashboardId, widgetId: current.id, ...changes });
58
59
 
59
60
  return [
60
61
  `Widget "${widget.name}" updated on dashboard "${dashboardId}".`,
@@ -67,31 +68,22 @@ export async function handleUpdateDashboardWidget(
67
68
  ].join("\n");
68
69
  }
69
70
 
70
- /** The widget, refused by id when it is not in this project or not on this dashboard. */
71
- async function getWidgetOnDashboard({
72
- projectId,
71
+ /** The widget, refused by id when it is not on this dashboard (the dashboard route answers 404). */
72
+ async function widgetOnDashboardOrRefused({
73
73
  widgetId,
74
74
  dashboardId,
75
75
  }: {
76
- projectId: string;
77
76
  widgetId: string;
78
77
  dashboardId: string;
79
78
  }): Promise<DashboardWidget> {
80
- let widget: DashboardWidget;
81
79
  try {
82
- widget = await getDashboardWidget({ projectId, widgetId });
80
+ return await getWidgetOnDashboard({ dashboardId, widgetId });
83
81
  } catch (error) {
84
82
  if (error instanceof LangWatchApiError && error.status === 404) {
85
83
  throw new Error(
86
- `No widget with ID "${widgetId}" was found in this project. Use the widget ID add_dashboard_widget returned.`,
84
+ `No widget with ID "${widgetId}" was found on dashboard "${dashboardId}". Use the widget ID add_dashboard_widget returned, and the dashboard it was added to.`,
87
85
  );
88
86
  }
89
87
  throw error;
90
88
  }
91
- if (widget.dashboardId !== dashboardId) {
92
- throw new Error(
93
- `Widget "${widgetId}" is not on dashboard "${dashboardId}". Pass the dashboard the widget was added to.`,
94
- );
95
- }
96
- return widget;
97
89
  }