@ateam-ai/mcp 0.4.42 → 0.4.43

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/tools.js +46 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ateam-ai/mcp",
3
- "version": "0.4.42",
3
+ "version": "0.4.43",
4
4
  "mcpName": "io.github.ariekogan/ateam-mcp",
5
5
  "description": "A-Team MCP Server — build, validate, and deploy multi-agent solutions from any AI environment",
6
6
  "type": "module",
package/src/tools.js CHANGED
@@ -26,6 +26,7 @@ const STAMP_WHERE_TOOLS = new Set([
26
26
  "ateam_github_patch", "ateam_github_write", "ateam_github_push",
27
27
  "ateam_github_promote", "ateam_github_rollback",
28
28
  "ateam_test_skill", "ateam_test_pipeline", "ateam_test_connector", "ateam_test_notification",
29
+ "ateam_verify_surface",
29
30
  ]);
30
31
  import { renderAgentDocHeader, mergeAgentDoc, AGENT_DOC_SENTINEL } from "./agentDoc.js";
31
32
 
@@ -1935,6 +1936,35 @@ export const tools = [
1935
1936
  // INFRASTRUCTURE — redeploy, master key bulk operations
1936
1937
  // ═══════════════════════════════════════════════════════════════════
1937
1938
 
1939
+ {
1940
+ name: "ateam_verify_surface",
1941
+ core: true,
1942
+ description:
1943
+ "PROVE a connector ui_plugin actually renders WITH DATA — the required evidence that a user-visible " +
1944
+ "UI fix is done. A plugin fetches its data over postMessage from its parent window, so opening its " +
1945
+ "iframe alone shows the empty state and 'confirms' the very bug you're checking. This opens the plugin " +
1946
+ "in the REAL host surface in headless Chromium, records every MCP tool call it makes, and returns " +
1947
+ "{ ok, verdict, visible_text, calls, failures }. It distinguishes 'invented tool name' / 'right tool, " +
1948
+ "no data' / 'plugin never asked'. FAIL-CLOSED: a browser-mcp outage returns ok:false verdict:'inconclusive' " +
1949
+ "(never a soft pass). Run AFTER a UI/data fix; quote visible_text in your report. Requires authentication.",
1950
+ inputSchema: {
1951
+ type: "object",
1952
+ properties: {
1953
+ solution_id: { type: "string", description: "The solution id." },
1954
+ plugin_id: {
1955
+ type: "string",
1956
+ description: "The ui_plugin id to probe, e.g. 'mcp:accounting-mcp:spending-dashboard'.",
1957
+ },
1958
+ expect: {
1959
+ type: "object",
1960
+ description: "Optional assertion: { tools: ['memory.get', ...] } — each MUST be called by the plugin, else ok:false.",
1961
+ properties: { tools: { type: "array", items: { type: "string" } } },
1962
+ },
1963
+ actor_id: { type: "string", description: "Optional actor to render as; defaults to the solution's context actor." },
1964
+ },
1965
+ required: ["solution_id", "plugin_id"],
1966
+ },
1967
+ },
1938
1968
  {
1939
1969
  name: "ateam_redeploy",
1940
1970
  core: true,
@@ -2052,6 +2082,7 @@ const TENANT_TOOLS = new Set([
2052
2082
  "ateam_test_skill",
2053
2083
  "ateam_test_notification",
2054
2084
  "ateam_test_pipeline",
2085
+ "ateam_verify_surface",
2055
2086
  "ateam_test_voice",
2056
2087
  "ateam_test_status",
2057
2088
  "ateam_test_abort",
@@ -2588,7 +2619,7 @@ const handlers = {
2588
2619
  { step: 2, action: "Build & Run", description: "Define your solution + skills + connector code, then validate, deploy, and health-check in one call. Include mcp_store with connector source code on the first deploy.", tools: ["ateam_build_and_run"] },
2589
2620
  { step: 3, action: "Version", description: "Every deploy auto-pushes to main on GitHub. The repo (tenant--solution-id) is the source of truth for connector code.", tools: ["ateam_github_status", "ateam_github_log"] },
2590
2621
  { step: 4, action: "Iterate", description: "Edit connector code ONE FILE AT A TIME via ateam_github_patch, then redeploy with ateam_build_and_run (auto-pulls from GitHub). NEVER re-pass all connector code inline after first deploy. For skill definitions, use ateam_patch.", tools: ["ateam_github_patch", "ateam_build_and_run", "ateam_patch"] },
2591
- { step: 5, action: "Test & Debug", description: "Chat with the solution via ateam_conversation (auto-routes; multi-turn via actor_id). It is ASYNC — see conversation_flow below: kick off → get chain_id → poll ateam_chain_status until chain_done → read the reply. Use ateam_test_pipeline for intent debugging, ateam_test_voice for voice. Diagnose with logs and metrics.", tools: ["ateam_conversation", "ateam_chain_status", "ateam_get_chain", "ateam_test_pipeline", "ateam_test_skill", "ateam_test_voice", "ateam_get_execution_logs", "ateam_get_metrics"] },
2622
+ { step: 5, action: "Test & Debug", description: "Chat with the solution via ateam_conversation (auto-routes; multi-turn via actor_id). It is ASYNC — see conversation_flow below: kick off → get chain_id → poll ateam_chain_status until chain_done → read the reply. Use ateam_test_pipeline for intent debugging, ateam_test_voice for voice. For a UI plugin, ateam_verify_surface PROVES it renders with data (required evidence for a user-visible fix). Diagnose with logs and metrics.", tools: ["ateam_conversation", "ateam_chain_status", "ateam_get_chain", "ateam_test_pipeline", "ateam_test_skill", "ateam_test_voice", "ateam_verify_surface", "ateam_get_execution_logs", "ateam_get_metrics"] },
2592
2623
  { step: 6, action: "Checkpoint", description: "When solution is in a good state, create a checkpoint (safe point). You can rollback to any checkpoint if something breaks.", tools: ["ateam_github_promote", "ateam_github_list_versions"] },
2593
2624
  ],
2594
2625
  },
@@ -3951,6 +3982,20 @@ const handlers = {
3951
3982
  };
3952
3983
  },
3953
3984
 
3985
+ ateam_verify_surface: async ({ solution_id, plugin_id, expect, actor_id }, sid) => {
3986
+ if (!solution_id) return { ok: false, error: "solution_id required" };
3987
+ if (!plugin_id) return { ok: false, error: "plugin_id required" };
3988
+ const body = {};
3989
+ if (expect) body.expect = expect;
3990
+ if (actor_id) body.actor_id = actor_id;
3991
+ // Forwards to the skill-validator, which runs Core's ui.surfaceProbe via /mcp.
3992
+ // 60s: navigate + settle + warm-retry inside Core, plus the hop.
3993
+ return await post(
3994
+ `/deploy/solutions/${solution_id}/plugins/${encodeURIComponent(plugin_id)}/verify-surface`,
3995
+ body, sid, { timeoutMs: 60000 }
3996
+ );
3997
+ },
3998
+
3954
3999
  ateam_test_skill: async ({ solution_id, skill_id, message, wait, wait_for, chain_timeout_ms, actor_id }, sid) => {
3955
4000
  // Resolve wait mode. Priority: wait_for (new explicit form) > wait (legacy).
3956
4001
  // wait:false → "never" (return job_id, no polling)