@ateam-ai/mcp 0.4.57 → 0.4.59

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 (3) hide show
  1. package/package.json +1 -1
  2. package/src/api.js +10 -1
  3. package/src/tools.js +15 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ateam-ai/mcp",
3
- "version": "0.4.57",
3
+ "version": "0.4.59",
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/api.js CHANGED
@@ -460,7 +460,16 @@ function formatError(method, path, status, body, baseUrl) {
460
460
  ].join("\n");
461
461
  }
462
462
 
463
- const hint = hints[status] || "";
463
+ // A GENERIC HINT MUST NOT CONTRADICT A SPECIFIC ONE. When the body already
464
+ // carries its own `code` + `hint`, the endpoint has diagnosed the failure
465
+ // precisely — appending the status-level guess produces two hints pointing
466
+ // opposite ways, and the reader follows the wrong one. Observed 2026-08-21
467
+ // (job_aehopl8z): a patch whose search string did not match came back with
468
+ // the endpoint's correct "re-read the file and copy the exact bytes"
469
+ // followed by "Check the solution_id … use ateam_list_solutions", and the
470
+ // agent went hunting for a missing solution three times.
471
+ const hasSpecificHint = /"code"\s*:/.test(bodyStr) && /"hint"\s*:/.test(bodyStr);
472
+ const hint = hasSpecificHint ? "" : (hints[status] || "");
464
473
  // A JSON error body used to be dropped entirely — only a string body became
465
474
  // `detail`. So an endpoint that answers 4xx WITH the diagnosis (ui.surfaceProbe
466
475
  // returns 422 + the failures that explain why the surface is broken) reached
package/src/tools.js CHANGED
@@ -512,6 +512,19 @@ export const tools = [
512
512
  {
513
513
  name: "ateam_design_advisor",
514
514
  core: true,
515
+ // MEASURED, not estimated. 6 successful calls against dev on 2026-08-21,
516
+ // distinct goals, spaced to avoid provider rate-limiting:
517
+ // 19048 21123 23359 23739 24462 24699 ms (median 23.7s, max 24.7s)
518
+ // It is ONE LLM call over the capability catalog, so the cost is provider
519
+ // latency and there is no meaningful warm path to under-report.
520
+ //
521
+ // WHY IT MATTERS: Core derives its timeout from this (p95 x 4, floored at
522
+ // 30s). Undeclared, the advisor sat under a 30s default while taking ~25s —
523
+ // one bad provider spike from failing, and it failed exactly that way on
524
+ // 2026-08-21 ("HTTP connector timeout after 30000ms"). It is also the FIRST
525
+ // call a building agent makes and it carries the storage decision, so when
526
+ // it times out the run proceeds with no capability guidance at all.
527
+ monitoring: { safe: true, cost: "normal", latency_ms_p95: 25000, output: "bounded" },
515
528
  description:
516
529
  "CONSULT THIS DURING DESIGN — before and while you design a skill/solution. Describe what you're building; it returns POINTERS to the platform capabilities that fit (per-actor storage, widgets, triggers, sub-agents, mobile data, run-scripts, multi-skill, GitHub, …), each with the /spec topic to read next (via ateam_get_spec) and the tool to wire it. Also returns 'missing' hints (capabilities your goal implies but the design hasn't wired) and lifecycle hints (e.g. connect GitHub when the project will iterate). ADVISORY ONLY — you decide and own the design. Stateless: pass the current design_state each call; consult it as often as you like as the design evolves.",
517
530
  inputSchema: {
@@ -5060,7 +5073,7 @@ const handlers = {
5060
5073
  if (!tool) throw new Error("tool required — the tool that misled you");
5061
5074
  if (!error) throw new Error("error required — quote it VERBATIM, do not paraphrase");
5062
5075
  return await post(
5063
- `/solutions/${solution_id}/lessons`,
5076
+ `/deploy/solutions/${solution_id}/lessons`,
5064
5077
  { tool, error, workaround, worked, kind },
5065
5078
  sid,
5066
5079
  );
@@ -5069,7 +5082,7 @@ const handlers = {
5069
5082
  ateam_get_lessons: async ({ solution_id, limit }, sid) => {
5070
5083
  if (!solution_id) throw new Error("solution_id required");
5071
5084
  const qs = Number.isFinite(limit) ? `?limit=${limit}` : "";
5072
- return await get(`/solutions/${solution_id}/lessons${qs}`, sid);
5085
+ return await get(`/deploy/solutions/${solution_id}/lessons${qs}`, sid);
5073
5086
  },
5074
5087
 
5075
5088
  ateam_show_solution_minimal: async ({ solution_id }, sid) => {