@ateam-ai/mcp 0.4.70 → 0.4.72

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 +72 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ateam-ai/mcp",
3
- "version": "0.4.70",
3
+ "version": "0.4.72",
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
@@ -972,7 +972,8 @@ export const tools = [
972
972
  description:
973
973
  "⚠️ CASCADING — any skill whose engine.bootstrap_tools or tools[] name a tool from this connector will FAIL its next execution. " +
974
974
  "Stops and deletes the connector from A-Team Core; drops references from the solution definition (grants, platform_connectors, ui_plugins ids starting `mcp:<connector-id>:*`) and skill definitions (connectors array); cleans up mcp-store files. " +
975
- "GitHub source is preserved a follow-up `ateam_build_and_run(github:true)` can resurrect. " +
975
+ "ALSO REMOVES THE SOURCE: `connectors/<id>/` is deleted from the repo (main AND dev) in the same call, so the delete is DURABLE. " +
976
+ "This CHANGED on 2026-08-23 — it used to preserve the source and name `ateam_build_and_run(github:true)` as a way to resurrect. That made a delete undo itself on a later publish, and only in some states, since connectors[] is synthesized from mcp_store keys ONLY when it is empty. If you want the code kept, copy it out (ateam_get_connector_source) BEFORE deleting. If the repo removal fails the response says so under `github` — Core is clean but the source is still there. " +
976
977
  "REQUIRES `confirm:true`.",
977
978
  inputSchema: {
978
979
  type: "object",
@@ -1030,6 +1031,57 @@ export const tools = [
1030
1031
  },
1031
1032
  },
1032
1033
 
1034
+ {
1035
+ name: "ateam_log_progress",
1036
+ core: true,
1037
+ description:
1038
+ "Record that a build STEP is done, so a later run does not redo it. Write it AS IT HAPPENS, never at the end — the runs that most need a journal are the ones the clock kills.\n\n" +
1039
+ "WHY: a continuation cannot otherwise tell what the previous run achieved, so it re-runs the whole orientation (bootstrap, get_workflows, list_solutions, get_solution, get_spec, get_examples, github_read) to re-derive from documents what was already established — and re-inflates its prompt into the region where provider latency collapses. Measured across 13 runs: stalls track PROMPT SIZE (~60k), not turn count. ateam_get_progress is ONE call instead of nine.\n\n" +
1040
+ "status — three values, and the third is the point:\n" +
1041
+ " built — the artefact exists (files written, committed)\n" +
1042
+ " deployed — the platform accepted it\n" +
1043
+ " verified — YOU CALLED IT AND GOT REAL DATA BACK\n\n" +
1044
+ "`verified` REQUIRES verified_by, and a deploy response is not verification. `connected` and `tools > 0` are tools/list facts: a clinic connector showed 9 tools while every storage call returned 401. A journal that stops at `deployed` records that build as finished.\n\n" +
1045
+ "Re-log the same step as it advances (built → deployed → verified) — latest wins, no update path. If a step REGRESSES, re-log it at the lower status: silence must not read as \"still fine\".",
1046
+ inputSchema: {
1047
+ type: "object",
1048
+ properties: {
1049
+ solution_id: { type: "string", description: "The solution ID" },
1050
+ step: {
1051
+ type: "string",
1052
+ description: "STABLE slug a later run can MATCH rather than enumerate: 'connector:<id>', 'skill:<id>', 'widget:<name>', 'seed:<what>'. Keep it identical across runs — a renamed step reads as a new one.",
1053
+ },
1054
+ status: {
1055
+ type: "string",
1056
+ enum: ["built", "deployed", "verified"],
1057
+ description: "built = artefact exists · deployed = platform accepted it · verified = you called it and got real data back",
1058
+ },
1059
+ detail: { type: "string", description: "One line of what exists — e.g. '10 tools, 8 seeded appointments'." },
1060
+ verified_by: {
1061
+ type: "string",
1062
+ description: "REQUIRED when status is 'verified': the literal call that proved it and what came back, e.g. 'ateam_test_connector(clinic-data-mcp, appointments.list_all) → 23 rows'. Storing the evidence beside the claim is what makes the journal auditable instead of self-reported.",
1063
+ },
1064
+ },
1065
+ required: ["solution_id", "step", "status"],
1066
+ },
1067
+ },
1068
+ {
1069
+ name: "ateam_get_progress",
1070
+ core: true,
1071
+ description:
1072
+ "What this build has already ACHIEVED — read it FIRST when continuing a run, before any orientation call. Returns the CURRENT status per step (latest entry wins) plus recent history.\n\n" +
1073
+ "Then build only the steps that are ABSENT or not yet `verified`.\n\n" +
1074
+ "ABSENT IS NOT \"NOTHING WAS DONE\" — the journal may predate a step, or a run may have died before writing. It is a fast path, not a new source of truth: check before rebuilding something expensive.\n\n" +
1075
+ "Complements ateam_get_lessons, which records what BROKE. This records what WORKS.",
1076
+ inputSchema: {
1077
+ type: "object",
1078
+ properties: {
1079
+ solution_id: { type: "string", description: "The solution ID" },
1080
+ limit: { type: "number", description: "History entries to return (default 60). `steps` is always complete." },
1081
+ },
1082
+ required: ["solution_id"],
1083
+ },
1084
+ },
1033
1085
  {
1034
1086
  name: "ateam_log_lesson",
1035
1087
  core: true,
@@ -2320,6 +2372,8 @@ const TENANT_TOOLS = new Set([
2320
2372
  // tenant's lessons. Tenant isolation is the one boundary this platform
2321
2373
  // treats as absolute.
2322
2374
  "ateam_log_lesson",
2375
+ "ateam_log_progress",
2376
+ "ateam_get_progress",
2323
2377
  "ateam_get_lessons",
2324
2378
 
2325
2379
  // Write operations
@@ -5375,6 +5429,23 @@ const handlers = {
5375
5429
  );
5376
5430
  },
5377
5431
 
5432
+ ateam_log_progress: async ({ solution_id, step, status, detail, verified_by }, sid) => {
5433
+ if (!solution_id) throw new Error("solution_id required");
5434
+ if (!step) throw new Error("step required — a STABLE slug a later run can match on, e.g. \"connector:clinic-data-mcp\"");
5435
+ if (!status) throw new Error("status required — built | deployed | verified");
5436
+ return await post(
5437
+ `/deploy/solutions/${solution_id}/progress`,
5438
+ { step, status, detail, verified_by },
5439
+ sid,
5440
+ );
5441
+ },
5442
+
5443
+ ateam_get_progress: async ({ solution_id, limit }, sid) => {
5444
+ if (!solution_id) throw new Error("solution_id required");
5445
+ const qs = Number.isFinite(limit) ? `?limit=${limit}` : "";
5446
+ return await get(`/deploy/solutions/${solution_id}/progress${qs}`, sid);
5447
+ },
5448
+
5378
5449
  ateam_get_lessons: async ({ solution_id, limit }, sid) => {
5379
5450
  if (!solution_id) throw new Error("solution_id required");
5380
5451
  const qs = Number.isFinite(limit) ? `?limit=${limit}` : "";