@inspectr/mcplab 1.28.5 → 1.30.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 (181) hide show
  1. package/README.md +74 -6
  2. package/dist/app/assets/index-8I9ZyPIK.js +243 -0
  3. package/dist/app/assets/index-jX7LoIQP.css +2 -0
  4. package/dist/app/assets/sse-queue-worker-Iwmqd2oW.js +1 -0
  5. package/dist/app/index.html +2 -2
  6. package/dist/app-server/app-context.d.ts +75 -115
  7. package/dist/app-server/app-context.d.ts.map +1 -1
  8. package/dist/app-server/app-dist.d.ts +3 -3
  9. package/dist/app-server/app-dist.js.map +1 -1
  10. package/dist/app-server/app-run-artifacts.d.ts +4 -0
  11. package/dist/app-server/app-run-artifacts.d.ts.map +1 -0
  12. package/dist/app-server/app-run-artifacts.js +66 -0
  13. package/dist/app-server/app-run-artifacts.js.map +1 -0
  14. package/dist/app-server/assistant-common.d.ts +27 -37
  15. package/dist/app-server/assistant-common.d.ts.map +1 -1
  16. package/dist/app-server/assistant-common.js +110 -1
  17. package/dist/app-server/assistant-common.js.map +1 -1
  18. package/dist/app-server/assistant-events.d.ts +8 -28
  19. package/dist/app-server/browser-launch.d.ts +3 -3
  20. package/dist/app-server/browser-launch.js.map +1 -1
  21. package/dist/app-server/browser-provider-learning.d.ts +26 -0
  22. package/dist/app-server/browser-provider-learning.d.ts.map +1 -0
  23. package/dist/app-server/browser-provider-learning.js +353 -0
  24. package/dist/app-server/browser-provider-learning.js.map +1 -0
  25. package/dist/app-server/config-store.d.ts +13 -21
  26. package/dist/app-server/connection-test-routes.d.ts +8 -0
  27. package/dist/app-server/connection-test-routes.d.ts.map +1 -0
  28. package/dist/app-server/connection-test-routes.js +34 -0
  29. package/dist/app-server/connection-test-routes.js.map +1 -0
  30. package/dist/app-server/decision-routes.d.ts +8 -0
  31. package/dist/app-server/decision-routes.d.ts.map +1 -0
  32. package/dist/app-server/decision-routes.js +27 -0
  33. package/dist/app-server/decision-routes.js.map +1 -0
  34. package/dist/app-server/dev-mcp.d.ts +2 -5
  35. package/dist/app-server/evals-routes.d.ts +8 -18
  36. package/dist/app-server/evaluation-group-results.d.ts +11 -0
  37. package/dist/app-server/evaluation-group-results.d.ts.map +1 -0
  38. package/dist/app-server/evaluation-group-results.js +46 -0
  39. package/dist/app-server/evaluation-group-results.js.map +1 -0
  40. package/dist/app-server/evaluation-journal-projection.d.ts +9 -0
  41. package/dist/app-server/evaluation-journal-projection.d.ts.map +1 -0
  42. package/dist/app-server/evaluation-journal-projection.js +76 -0
  43. package/dist/app-server/evaluation-journal-projection.js.map +1 -0
  44. package/dist/app-server/evaluation-journal-writer.d.ts +23 -0
  45. package/dist/app-server/evaluation-journal-writer.d.ts.map +1 -0
  46. package/dist/app-server/evaluation-journal-writer.js +41 -0
  47. package/dist/app-server/evaluation-journal-writer.js.map +1 -0
  48. package/dist/app-server/evaluation-result-projection.d.ts +12 -0
  49. package/dist/app-server/evaluation-result-projection.d.ts.map +1 -0
  50. package/dist/app-server/evaluation-result-projection.js +107 -0
  51. package/dist/app-server/evaluation-result-projection.js.map +1 -0
  52. package/dist/app-server/execution-journal.d.ts +13 -0
  53. package/dist/app-server/execution-journal.d.ts.map +1 -0
  54. package/dist/app-server/execution-journal.js +39 -0
  55. package/dist/app-server/execution-journal.js.map +1 -0
  56. package/dist/app-server/http.d.ts +1 -1
  57. package/dist/app-server/index.d.ts +1 -1
  58. package/dist/app-server/inspectr-session-manager.d.ts +45 -0
  59. package/dist/app-server/inspectr-session-manager.d.ts.map +1 -0
  60. package/dist/app-server/inspectr-session-manager.js +203 -0
  61. package/dist/app-server/inspectr-session-manager.js.map +1 -0
  62. package/dist/app-server/jobs.d.ts +6 -9
  63. package/dist/app-server/libraries-store.d.ts +26 -10
  64. package/dist/app-server/libraries-store.d.ts.map +1 -1
  65. package/dist/app-server/libraries-store.js +130 -3
  66. package/dist/app-server/libraries-store.js.map +1 -1
  67. package/dist/app-server/live-tests-routes.d.ts +17 -0
  68. package/dist/app-server/live-tests-routes.d.ts.map +1 -0
  69. package/dist/app-server/live-tests-routes.js +82 -0
  70. package/dist/app-server/live-tests-routes.js.map +1 -0
  71. package/dist/app-server/live-tests.d.ts +78 -0
  72. package/dist/app-server/live-tests.d.ts.map +1 -0
  73. package/dist/app-server/live-tests.js +285 -0
  74. package/dist/app-server/live-tests.js.map +1 -0
  75. package/dist/app-server/markdown-reports.d.ts +7 -7
  76. package/dist/app-server/oauth-debugger-domain.d.ts +183 -207
  77. package/dist/app-server/oauth-debugger-domain.js.map +1 -1
  78. package/dist/app-server/oauth-debugger.d.ts +10 -17
  79. package/dist/app-server/oauth-debugger.js +1 -1
  80. package/dist/app-server/oauth-debugger.js.map +1 -1
  81. package/dist/app-server/oauth-runtime-domain.d.ts +42 -53
  82. package/dist/app-server/oauth-runtime-domain.js.map +1 -1
  83. package/dist/app-server/oauth-runtime-routes.d.ts +12 -12
  84. package/dist/app-server/oauth-session-manager.d.ts +44 -50
  85. package/dist/app-server/oauth-session-manager.d.ts.map +1 -1
  86. package/dist/app-server/oauth-session-manager.js.map +1 -1
  87. package/dist/app-server/provider-models.d.ts +2 -7
  88. package/dist/app-server/provider-models.d.ts.map +1 -1
  89. package/dist/app-server/provider-models.js +11 -12
  90. package/dist/app-server/provider-models.js.map +1 -1
  91. package/dist/app-server/request-origin.d.ts +6 -0
  92. package/dist/app-server/request-origin.d.ts.map +1 -0
  93. package/dist/app-server/request-origin.js +61 -0
  94. package/dist/app-server/request-origin.js.map +1 -0
  95. package/dist/app-server/result-assistant-domain.d.ts +66 -82
  96. package/dist/app-server/result-assistant-domain.d.ts.map +1 -1
  97. package/dist/app-server/result-assistant-domain.js.map +1 -1
  98. package/dist/app-server/result-assistant-tools.d.ts +5 -5
  99. package/dist/app-server/result-assistant.d.ts +9 -21
  100. package/dist/app-server/result-assistant.js.map +1 -1
  101. package/dist/app-server/router.d.ts +7 -1
  102. package/dist/app-server/router.d.ts.map +1 -1
  103. package/dist/app-server/router.js +375 -57
  104. package/dist/app-server/router.js.map +1 -1
  105. package/dist/app-server/rover-connection.d.ts +48 -0
  106. package/dist/app-server/rover-connection.d.ts.map +1 -0
  107. package/dist/app-server/rover-connection.js +172 -0
  108. package/dist/app-server/rover-connection.js.map +1 -0
  109. package/dist/app-server/run-agent-selection.d.ts +2 -5
  110. package/dist/app-server/run-queue-domain.d.ts +89 -65
  111. package/dist/app-server/run-queue-domain.d.ts.map +1 -1
  112. package/dist/app-server/run-queue-domain.js +723 -9
  113. package/dist/app-server/run-queue-domain.js.map +1 -1
  114. package/dist/app-server/run-queue-events.d.ts +3 -10
  115. package/dist/app-server/run-queue-events.d.ts.map +1 -1
  116. package/dist/app-server/run-queue-events.js +114 -14
  117. package/dist/app-server/run-queue-events.js.map +1 -1
  118. package/dist/app-server/run-queue-executor.d.ts +22 -48
  119. package/dist/app-server/run-queue-executor.d.ts.map +1 -1
  120. package/dist/app-server/run-queue-executor.js +91 -30
  121. package/dist/app-server/run-queue-executor.js.map +1 -1
  122. package/dist/app-server/run-queue-state.d.ts +81 -47
  123. package/dist/app-server/run-queue-state.d.ts.map +1 -1
  124. package/dist/app-server/run-queue-state.js.map +1 -1
  125. package/dist/app-server/runs-routes.d.ts +13 -35
  126. package/dist/app-server/runs-routes.d.ts.map +1 -1
  127. package/dist/app-server/runs-routes.js +196 -29
  128. package/dist/app-server/runs-routes.js.map +1 -1
  129. package/dist/app-server/runs-routes.test-helpers.d.ts +42 -38
  130. package/dist/app-server/runs-routes.test-helpers.d.ts.map +1 -1
  131. package/dist/app-server/runs-routes.test-helpers.js +4 -1
  132. package/dist/app-server/runs-routes.test-helpers.js.map +1 -1
  133. package/dist/app-server/runs-store.d.ts +60 -43
  134. package/dist/app-server/runs-store.d.ts.map +1 -1
  135. package/dist/app-server/runs-store.js +157 -70
  136. package/dist/app-server/runs-store.js.map +1 -1
  137. package/dist/app-server/scenario-assistant-domain.d.ts +131 -157
  138. package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
  139. package/dist/app-server/scenario-assistant-domain.js +7 -15
  140. package/dist/app-server/scenario-assistant-domain.js.map +1 -1
  141. package/dist/app-server/scenario-assistant.d.ts +10 -26
  142. package/dist/app-server/scenario-assistant.js.map +1 -1
  143. package/dist/app-server/settings-store.d.ts +4 -8
  144. package/dist/app-server/settings-store.d.ts.map +1 -1
  145. package/dist/app-server/settings-store.js +33 -15
  146. package/dist/app-server/settings-store.js.map +1 -1
  147. package/dist/app-server/static-serving.d.ts +7 -13
  148. package/dist/app-server/store-utils.d.ts +1 -1
  149. package/dist/app-server/tool-analysis-domain.d.ts +167 -183
  150. package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
  151. package/dist/app-server/tool-analysis-domain.js +2 -59
  152. package/dist/app-server/tool-analysis-domain.js.map +1 -1
  153. package/dist/app-server/tool-analysis-storage.d.ts +20 -34
  154. package/dist/app-server/tool-analysis.d.ts +10 -19
  155. package/dist/app-server/types.d.ts +26 -27
  156. package/dist/app-server/types.d.ts.map +1 -1
  157. package/dist/app-server/version-info.d.ts +6 -6
  158. package/dist/app-server/version-info.js.map +1 -1
  159. package/dist/app-server/workspace-paths.d.ts +2 -1
  160. package/dist/app-server/workspace-paths.d.ts.map +1 -1
  161. package/dist/app-server/workspace-paths.js +5 -1
  162. package/dist/app-server/workspace-paths.js.map +1 -1
  163. package/dist/cli-branding.d.ts +1 -1
  164. package/dist/cli-branding.js.map +1 -1
  165. package/dist/cli.d.ts +1 -1
  166. package/dist/cli.js +5 -6
  167. package/dist/cli.js.map +1 -1
  168. package/dist/eval-config-files.d.ts +5 -8
  169. package/dist/interactive-helpers.d.ts +11 -15
  170. package/dist/migrate-utils.d.ts +1 -1
  171. package/dist/results/context.d.ts +1 -1
  172. package/dist/results/format.d.ts +7 -14
  173. package/dist/results/indexer.d.ts +2 -9
  174. package/dist/results/search.d.ts +1 -1
  175. package/dist/results/types.d.ts +2 -11
  176. package/dist/run-interactive.d.ts +21 -23
  177. package/dist/test-results-fixture.d.ts +4 -4
  178. package/package.json +8 -6
  179. package/dist/app/assets/index-Bxq-wlTN.css +0 -1
  180. package/dist/app/assets/index-j_NpCqyK.js +0 -258
  181. package/dist/app/assets/sse-queue-worker-BMo6aPaB.js +0 -1
package/README.md CHANGED
@@ -27,13 +27,36 @@ Perfect for MCP server developers who want to ensure their tools work reliably a
27
27
 
28
28
  Visit [mcplab.inspectr.dev](https://mcplab.inspectr.dev/) to learn more.
29
29
 
30
+ ### Browser evaluations with Rover
31
+
32
+ [MCPLab Rover](https://github.com/inspectr-hq/mcplab-rover) is the browser extension for running scenarios in Claude, ChatGPT, and learned browser providers. MCPLab owns the evaluation queue, assertions, and results. Rover submits prompts in the chat page and returns completed responses for evaluation.
33
+
34
+ **Set up your first browser agent:**
35
+
36
+ 1. Start the local app with `npx @inspectr/mcplab app --open`.
37
+ 2. [Download Rover](https://github.com/inspectr-hq/mcplab-rover/releases/latest), unzip it, and load the folder through **Load unpacked** in `chrome://extensions` with **Developer mode** enabled.
38
+ 3. In MCPLab, open **Agents → Browser → Add Agent**. Select the Claude or ChatGPT provider, enter the chat URL, and save.
39
+ 4. Open that chat page, sign in, and click the Rover toolbar icon. Its default MCPLab endpoint is `http://127.0.0.1:8787`; use Rover's settings if your app uses another loopback port.
40
+ 5. In **Run Evaluation**, select your config, scenarios, and browser agent. Choose the **Conversation behavior**, then start the run. Work waits until Rover is available on the matching provider. Review the captured responses and checks in MCPLab's results.
41
+
42
+ Claude and ChatGPT are built-in **provider profiles**, available even when Rover is disconnected. A profile defines how Rover interacts with the page; a saved **browser agent** makes that provider selectable for evaluations. Connecting Rover does not automatically create agents, and there is currently no setting to hide the built-in profiles.
43
+
44
+ **Learn another provider:** Open its chat page, start learning in Rover's **Learn** tab, type and send one message, and wait for its response. Review the detected composer, submission, response, and completion signals. If Rover finds a New Chat action, open a new conversation on the provider page to confirm it before saving with that capability. **Improve with MCPLab AI** uses the configured Evaluation Judge to refine the profile; Rover still validates the proposal before saving. Saving a new learned provider also creates its browser agent in MCPLab.
45
+
46
+ **Save without New Chat support** omits that action from the profile. To run that agent, select **Continue the same conversation** in MCPLab. Runs that request a new conversation require New Chat support. **Use agent default** starts a new conversation before the run and uses the agent's setting between scenarios.
47
+
48
+ Browser agents run through Rover in app mode. They use your signed-in browser session instead of an LLM API key, and cannot serve as the Evaluation Judge. API keys are still needed for any API-based judge or assistant you choose. Browser-only capture does not observe MCP tool calls, so tool-dependent checks are `not_evaluated`; a run with passing evaluated checks and unavailable checks is `incomplete`.
49
+
50
+ See the [Rover Browser Agents guide](https://mcplab.inspectr.dev/docs/app/rover/) for more detail.
51
+
30
52
  ---
31
53
 
32
54
  ## ✨ Features
33
55
 
34
56
  ### Core Capabilities
35
57
  - **HTTP SSE Transport** - Test MCP servers over Streamable HTTP
36
- - **Multi-LLM Support** - OpenAI, Anthropic Claude, Azure OpenAI
58
+ - **Multi-LLM Support** - OpenAI, Anthropic Claude, Azure OpenAI, Azure Foundry
59
+ - **Browser Agents** - Run evaluations in browser chats through the MCPLab Rover extension
37
60
  - **Rich Assertions** - Validate tool usage, sequences, and response content
38
61
  - **Variance Testing** - Run multiple iterations to measure stability
39
62
  - **Detailed Traces** - JSONL logs of every tool call and LLM response
@@ -151,7 +174,7 @@ servers: # MCP servers to test against
151
174
  url: "http://localhost:3000/mcp"
152
175
  - ref: "shared-server"
153
176
 
154
- agents: # LLM agents to use for testing
177
+ agents: # API or browser agents to use for testing
155
178
  - id: local-agent
156
179
  provider: "anthropic"
157
180
  model: "claude-sonnet-4-6"
@@ -210,7 +233,7 @@ auth:
210
233
 
211
234
  ### Agents
212
235
 
213
- Configure LLM agents with provider-specific settings:
236
+ Configure API-based LLM agents or browser agents with provider-specific settings:
214
237
 
215
238
  **Anthropic (Claude):**
216
239
  ```yaml
@@ -245,10 +268,53 @@ agents:
245
268
  system: "You are a helpful assistant."
246
269
  ```
247
270
 
248
- **Required environment variables:**
271
+ The legacy Azure OpenAI provider uses `AZURE_OPENAI_DEPLOYMENT` at runtime. Existing configurations retain this behavior.
272
+
273
+ **Azure Foundry:**
274
+
275
+ ```yaml
276
+ agents:
277
+ - id: foundry-agent
278
+ provider: azure_foundry
279
+ model: my-chat-deployment
280
+ max_tokens: 2048
281
+ ```
282
+
283
+ Each Foundry agent uses its own `model` value as the deployment name. Configure `AZURE_FOUNDRY_ENDPOINT` with the resource endpoint, such as `https://your-resource.services.ai.azure.com`, and `AZURE_FOUNDRY_API_KEY` on the backend. If the dedicated key is absent, MCPLab uses `AZURE_OPENAI_API_KEY`; that key must belong to the same resource. The endpoint remains explicit. Restart MCPLab after changing environment variables.
284
+
285
+ In **Libraries → Agents**, choose **Azure Foundry**, enter the deployment name, and save. **Test Connection** sends a small inference request using the current provider and deployment, even before saving a new agent. It uses a 30-second timeout and clears or cancels the test when the draft changes. Success confirms basic inference access; it does not establish support for every tool or structured-output capability.
286
+
287
+ Optional `AZURE_FOUNDRY_DEPLOYMENTS` contains comma-separated deployment suggestions. **Load configured deployments** reads this backend environment variable and does not query Azure. Manual entry works without suggestions. Foundry agents can be selected for evaluation runs, assistants, or the Evaluation Judge. Decision Engine deployment and threshold settings remain independent.
288
+
289
+ V1 supports API-key authentication and deployments compatible with Foundry's `/openai/v1/chat/completions` API through the existing OpenAI SDK. Microsoft-Decision-1 uses the separate Decision Engine setting. Entra authentication, Responses API, and native Anthropic endpoints are outside this integration. See [Microsoft's v1 API documentation](https://learn.microsoft.com/en-us/azure/foundry/openai/api-version-lifecycle).
290
+
291
+ **Browser agents (Rover):**
292
+
293
+ Define a reusable browser agent in `mcplab/agents.yaml`:
294
+
295
+ ```yaml
296
+ chatgpt-browser:
297
+ name: ChatGPT browser
298
+ type: browser
299
+ provider: chatgpt-com
300
+ url: https://chatgpt.com/
301
+ new_conversation_between_scenarios: true
302
+ ```
303
+
304
+ Reference it from an evaluation config:
305
+
306
+ ```yaml
307
+ agents:
308
+ - ref: chatgpt-browser
309
+ ```
310
+
311
+ Use `claude` for Claude, `chatgpt-com` for ChatGPT, or the id of a learned provider. Browser agents use `url` instead of an API `model`. Select them in **Run Evaluation** in the app and run them through Rover. The agent's `new_conversation_between_scenarios` setting is used when **Conversation behavior** is **Use agent default**; the run can override it.
312
+
313
+ **Required environment variables for API-based LLM agents:**
249
314
  - Anthropic: `ANTHROPIC_API_KEY`
250
315
  - OpenAI: `OPENAI_API_KEY`
251
316
  - Azure: `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_DEPLOYMENT`
317
+ - Azure Foundry: `AZURE_FOUNDRY_ENDPOINT`, `AZURE_FOUNDRY_API_KEY` (or `AZURE_OPENAI_API_KEY` for the same resource)
252
318
 
253
319
  ### Scenarios
254
320
 
@@ -497,7 +563,8 @@ Define servers, agents, and scenarios once and reuse them across multiple eval f
497
563
  ```
498
564
  mcplab/
499
565
  ├── servers.yaml # Shared MCP server definitions
500
- ├── agents.yaml # Shared LLM agent definitions
566
+ ├── agents.yaml # Shared API and browser agent definitions
567
+ ├── browser-providers/ # Learned browser interaction profiles
501
568
  └── scenarios/
502
569
  ├── scenario-a.yaml
503
570
  └── scenario-b.yaml
@@ -540,7 +607,8 @@ mcplab/
540
607
  │ └── tool-analysis/ # Saved tool analysis reports
541
608
  ├── reports/ # Custom markdown reports
542
609
  ├── servers.yaml # Library: shared server definitions
543
- ├── agents.yaml # Library: shared agent definitions
610
+ ├── agents.yaml # Library: shared API and browser agents
611
+ ├── browser-providers/ # Library: learned browser provider profiles
544
612
  └── scenarios/ # Library: shared scenario files
545
613
  ```
546
614