@ateam-ai/mcp 0.1.10 → 0.1.11

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ateam-ai/mcp",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
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
@@ -2,7 +2,7 @@
2
2
  * A-Team API client — thin HTTP wrapper for the External Agent API.
3
3
  *
4
4
  * Credentials resolve in this order:
5
- * 1. Per-session override (set via adas_auth tool — used by HTTP transport)
5
+ * 1. Per-session override (set via ateam_auth tool — used by HTTP transport)
6
6
  * 2. Environment variables (ADAS_API_KEY, ADAS_TENANT — used by stdio transport)
7
7
  * 3. Defaults (no key, tenant "main")
8
8
  */
@@ -33,7 +33,7 @@ export function parseApiKey(key) {
33
33
  }
34
34
 
35
35
  /**
36
- * Set credentials for a session (called by adas_auth tool).
36
+ * Set credentials for a session (called by ateam_auth tool).
37
37
  * If tenant is not provided, it's auto-extracted from the key.
38
38
  */
39
39
  export function setSessionCredentials(sessionId, { tenant, apiKey }) {
@@ -91,11 +91,11 @@ function headers(sessionId) {
91
91
  */
92
92
  function formatError(method, path, status, body) {
93
93
  const hints = {
94
- 401: "Your API key may be invalid or expired. Get a valid key at https://mcp.ateam-ai.com/get-api-key then call adas_auth(api_key: \"your_key\").",
94
+ 401: "Your API key may be invalid or expired. Get a valid key at https://mcp.ateam-ai.com/get-api-key then call ateam_auth(api_key: \"your_key\").",
95
95
  403: "You don't have permission for this operation. Check your tenant and API key. Get a key at https://mcp.ateam-ai.com/get-api-key",
96
- 404: "Resource not found. Check the solution_id or skill_id you're using. Use adas_list_solutions to see available solutions.",
96
+ 404: "Resource not found. Check the solution_id or skill_id you're using. Use ateam_list_solutions to see available solutions.",
97
97
  409: "Conflict — the resource may already exist or is in a conflicting state.",
98
- 422: "Validation failed. Check the request payload against the spec (use adas_get_spec).",
98
+ 422: "Validation failed. Check the request payload against the spec (use ateam_get_spec).",
99
99
  429: "Rate limited. Wait a moment and try again.",
100
100
  500: "A-Team server error. The platform may be temporarily unavailable. Try again in a minute.",
101
101
  502: "A-Team API is unreachable. The service may be restarting. Try again in a minute.",
package/src/server.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Shared MCP server factory — used by both stdio and HTTP transports.
3
3
  *
4
4
  * Each server instance is bound to a sessionId so that tool handlers
5
- * can resolve per-session credentials (set via the adas_auth tool).
5
+ * can resolve per-session credentials (set via the ateam_auth tool).
6
6
  */
7
7
 
8
8
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
@@ -18,12 +18,12 @@ import { tools, handleToolCall } from "./tools.js";
18
18
  */
19
19
  export function createServer(sessionId = "stdio") {
20
20
  const server = new Server(
21
- { name: "ateam-mcp", version: "0.1.10" },
21
+ { name: "ateam-mcp", version: "0.1.11" },
22
22
  {
23
23
  capabilities: { tools: {} },
24
24
  instructions: [
25
25
  "You are connected to A-Team MCP — an AI Team Solution Platform.",
26
- "IMPORTANT: On first user message, ALWAYS call the adas_bootstrap tool before responding.",
26
+ "IMPORTANT: On first user message, ALWAYS call the ateam_bootstrap tool before responding.",
27
27
  "Use its structured output to introduce the platform, explain core concepts, and ask discovery questions.",
28
28
  "Do NOT improvise an introduction from tool names. The bootstrap tool contains the canonical onboarding narrative.",
29
29
  ].join(" "),
package/src/tools.js CHANGED
@@ -12,7 +12,7 @@ import {
12
12
 
13
13
  export const tools = [
14
14
  {
15
- name: "adas_bootstrap",
15
+ name: "ateam_bootstrap",
16
16
  description:
17
17
  "REQUIRED onboarding entrypoint for A-Team MCP. MUST be called when user greets, says hi, asks what this is, asks for help, explores capabilities, or when MCP is first connected. Returns platform explanation, example solutions, and assistant behavior instructions. Do NOT improvise an introduction — call this tool instead.",
18
18
  inputSchema: {
@@ -21,7 +21,7 @@ export const tools = [
21
21
  },
22
22
  },
23
23
  {
24
- name: "adas_auth",
24
+ name: "ateam_auth",
25
25
  description:
26
26
  "Authenticate with A-Team. Required before deploying or modifying solutions. The user can get their API key at https://mcp.ateam-ai.com/get-api-key. Read-only operations (spec, examples, validate) work without auth.",
27
27
  inputSchema: {
@@ -40,7 +40,7 @@ export const tools = [
40
40
  },
41
41
  },
42
42
  {
43
- name: "adas_get_spec",
43
+ name: "ateam_get_spec",
44
44
  description:
45
45
  "Get the A-Team specification — schemas, validation rules, system tools, agent guides, and templates. Start here after bootstrap to understand how to build skills and solutions.",
46
46
  inputSchema: {
@@ -57,7 +57,7 @@ export const tools = [
57
57
  },
58
58
  },
59
59
  {
60
- name: "adas_get_workflows",
60
+ name: "ateam_get_workflows",
61
61
  description:
62
62
  "Get the builder workflows — step-by-step state machines for building skills and solutions. Use this to guide users through the entire build process conversationally. Returns phases, what to ask, what to build, exit criteria, and tips for each stage.",
63
63
  inputSchema: {
@@ -66,7 +66,7 @@ export const tools = [
66
66
  },
67
67
  },
68
68
  {
69
- name: "adas_get_examples",
69
+ name: "ateam_get_examples",
70
70
  description:
71
71
  "Get complete working examples that pass validation. Study these before building your own.",
72
72
  inputSchema: {
@@ -83,7 +83,7 @@ export const tools = [
83
83
  },
84
84
  },
85
85
  {
86
- name: "adas_validate_skill",
86
+ name: "ateam_validate_skill",
87
87
  description:
88
88
  "Validate a skill definition through the 5-stage A-Team validation pipeline. Part of building a governed AI Team solution. Returns errors and suggestions to fix. Always validate before deploying.",
89
89
  inputSchema: {
@@ -98,7 +98,7 @@ export const tools = [
98
98
  },
99
99
  },
100
100
  {
101
- name: "adas_validate_solution",
101
+ name: "ateam_validate_solution",
102
102
  description:
103
103
  "Validate a governed AI Team solution — cross-skill contracts, grant economy, handoffs, and LLM quality scoring. Part of building a governed AI Team solution. Always validate before deploying.",
104
104
  inputSchema: {
@@ -118,9 +118,9 @@ export const tools = [
118
118
  },
119
119
  },
120
120
  {
121
- name: "adas_deploy_solution",
121
+ name: "ateam_deploy_solution",
122
122
  description:
123
- "Deploy a governed AI Team solution to A-Team Core — identity, connectors, skills. The Skill Builder auto-generates MCP servers from tool definitions. Used after defining system architecture. Always validate first using adas_validate_solution. Requires authentication (call adas_auth first if not using env vars).",
123
+ "Deploy a governed AI Team solution to A-Team Core — identity, connectors, skills. The Skill Builder auto-generates MCP servers from tool definitions. Used after defining system architecture. Always validate first using ateam_validate_solution. Requires authentication (call ateam_auth first if not using env vars).",
124
124
  inputSchema: {
125
125
  type: "object",
126
126
  properties: {
@@ -148,7 +148,7 @@ export const tools = [
148
148
  },
149
149
  },
150
150
  {
151
- name: "adas_deploy_skill",
151
+ name: "ateam_deploy_skill",
152
152
  description: "Deploy a single skill into an existing solution. Requires authentication.",
153
153
  inputSchema: {
154
154
  type: "object",
@@ -166,7 +166,7 @@ export const tools = [
166
166
  },
167
167
  },
168
168
  {
169
- name: "adas_deploy_connector",
169
+ name: "ateam_deploy_connector",
170
170
  description: "Deploy a connector — registers in the Skill Builder catalog and connects in A-Team Core. Requires authentication.",
171
171
  inputSchema: {
172
172
  type: "object",
@@ -180,7 +180,7 @@ export const tools = [
180
180
  },
181
181
  },
182
182
  {
183
- name: "adas_list_solutions",
183
+ name: "ateam_list_solutions",
184
184
  description: "List all solutions deployed in the Skill Builder.",
185
185
  inputSchema: {
186
186
  type: "object",
@@ -188,7 +188,7 @@ export const tools = [
188
188
  },
189
189
  },
190
190
  {
191
- name: "adas_get_solution",
191
+ name: "ateam_get_solution",
192
192
  description:
193
193
  "Read solution state — definition, skills, health, status, or export. Use this to inspect deployed solutions.",
194
194
  inputSchema: {
@@ -213,7 +213,7 @@ export const tools = [
213
213
  },
214
214
  },
215
215
  {
216
- name: "adas_update",
216
+ name: "ateam_update",
217
217
  description:
218
218
  "Update a deployed solution or skill incrementally using PATCH. Supports dot notation for scalar fields and _push/_delete/_update for arrays. Requires authentication.",
219
219
  inputSchema: {
@@ -242,7 +242,7 @@ export const tools = [
242
242
  },
243
243
  },
244
244
  {
245
- name: "adas_redeploy",
245
+ name: "ateam_redeploy",
246
246
  description:
247
247
  "Re-deploy after making updates. Regenerates MCP servers and pushes to A-Team Core. Requires authentication.",
248
248
  inputSchema: {
@@ -261,7 +261,7 @@ export const tools = [
261
261
  },
262
262
  },
263
263
  {
264
- name: "adas_solution_chat",
264
+ name: "ateam_solution_chat",
265
265
  description:
266
266
  "Send a message to the Solution Bot — an AI assistant that understands your deployed solution and can help with modifications.",
267
267
  inputSchema: {
@@ -300,16 +300,16 @@ const EXAMPLE_PATHS = {
300
300
 
301
301
  // Tools that require authentication (write operations)
302
302
  const WRITE_TOOLS = new Set([
303
- "adas_deploy_solution",
304
- "adas_deploy_skill",
305
- "adas_deploy_connector",
306
- "adas_update",
307
- "adas_redeploy",
308
- "adas_solution_chat",
303
+ "ateam_deploy_solution",
304
+ "ateam_deploy_skill",
305
+ "ateam_deploy_connector",
306
+ "ateam_update",
307
+ "ateam_redeploy",
308
+ "ateam_solution_chat",
309
309
  ]);
310
310
 
311
311
  const handlers = {
312
- adas_bootstrap: async () => ({
312
+ ateam_bootstrap: async () => ({
313
313
  platform_positioning: {
314
314
  name: "A-Team",
315
315
  category: "AI Team Solution Platform",
@@ -332,10 +332,10 @@ const handlers = {
332
332
  ],
333
333
  recommended_flow: [
334
334
  { step: 1, title: "Clarify the goal", description: "Understand what the user wants their Team to do", suggested_tools: [] },
335
- { step: 2, title: "Generate Team map", description: "Design skills, solution architecture, and connectors", suggested_tools: ["adas_get_spec", "adas_get_examples", "adas_get_workflows"] },
336
- { step: 3, title: "Validate", description: "Run validation before deploying", suggested_tools: ["adas_validate_skill", "adas_validate_solution"] },
337
- { step: 4, title: "Deploy", description: "Push the Team to A-Team Core", suggested_tools: ["adas_auth", "adas_deploy_solution"] },
338
- { step: 5, title: "Iterate", description: "Inspect, update, and redeploy as needed", suggested_tools: ["adas_get_solution", "adas_update", "adas_redeploy", "adas_solution_chat"] },
335
+ { step: 2, title: "Generate Team map", description: "Design skills, solution architecture, and connectors", suggested_tools: ["ateam_get_spec", "ateam_get_examples", "ateam_get_workflows"] },
336
+ { step: 3, title: "Validate", description: "Run validation before deploying", suggested_tools: ["ateam_validate_skill", "ateam_validate_solution"] },
337
+ { step: 4, title: "Deploy", description: "Push the Team to A-Team Core", suggested_tools: ["ateam_auth", "ateam_deploy_solution"] },
338
+ { step: 5, title: "Iterate", description: "Inspect, update, and redeploy as needed", suggested_tools: ["ateam_get_solution", "ateam_update", "ateam_redeploy", "ateam_solution_chat"] },
339
339
  ],
340
340
  first_questions: [
341
341
  { id: "goal", question: "What do you want your Team to accomplish?", type: "text" },
@@ -371,7 +371,7 @@ const handlers = {
371
371
  },
372
372
  }),
373
373
 
374
- adas_auth: async ({ api_key, tenant }, sessionId) => {
374
+ ateam_auth: async ({ api_key, tenant }, sessionId) => {
375
375
  // Auto-extract tenant from key if not provided
376
376
  let resolvedTenant = tenant;
377
377
  if (!resolvedTenant) {
@@ -396,29 +396,29 @@ const handlers = {
396
396
  }
397
397
  },
398
398
 
399
- adas_get_spec: async ({ topic }, sid) => get(SPEC_PATHS[topic], sid),
399
+ ateam_get_spec: async ({ topic }, sid) => get(SPEC_PATHS[topic], sid),
400
400
 
401
- adas_get_workflows: async (_args, sid) => get("/spec/workflows", sid),
401
+ ateam_get_workflows: async (_args, sid) => get("/spec/workflows", sid),
402
402
 
403
- adas_get_examples: async ({ type }, sid) => get(EXAMPLE_PATHS[type], sid),
403
+ ateam_get_examples: async ({ type }, sid) => get(EXAMPLE_PATHS[type], sid),
404
404
 
405
- adas_validate_skill: async ({ skill }, sid) => post("/validate/skill", { skill }, sid),
405
+ ateam_validate_skill: async ({ skill }, sid) => post("/validate/skill", { skill }, sid),
406
406
 
407
- adas_validate_solution: async ({ solution, skills }, sid) =>
407
+ ateam_validate_solution: async ({ solution, skills }, sid) =>
408
408
  post("/validate/solution", { solution, skills }, sid),
409
409
 
410
- adas_deploy_solution: async ({ solution, skills, connectors, mcp_store }, sid) =>
410
+ ateam_deploy_solution: async ({ solution, skills, connectors, mcp_store }, sid) =>
411
411
  post("/deploy/solution", { solution, skills, connectors, mcp_store }, sid),
412
412
 
413
- adas_deploy_skill: async ({ solution_id, skill }, sid) =>
413
+ ateam_deploy_skill: async ({ solution_id, skill }, sid) =>
414
414
  post(`/deploy/solutions/${solution_id}/skills`, { skill }, sid),
415
415
 
416
- adas_deploy_connector: async ({ connector }, sid) =>
416
+ ateam_deploy_connector: async ({ connector }, sid) =>
417
417
  post("/deploy/connector", { connector }, sid),
418
418
 
419
- adas_list_solutions: async (_args, sid) => get("/deploy/solutions", sid),
419
+ ateam_list_solutions: async (_args, sid) => get("/deploy/solutions", sid),
420
420
 
421
- adas_get_solution: async ({ solution_id, view, skill_id }, sid) => {
421
+ ateam_get_solution: async ({ solution_id, view, skill_id }, sid) => {
422
422
  const base = `/deploy/solutions/${solution_id}`;
423
423
  if (skill_id) return get(`${base}/skills/${skill_id}`, sid);
424
424
  const paths = {
@@ -433,21 +433,21 @@ const handlers = {
433
433
  return get(paths[view], sid);
434
434
  },
435
435
 
436
- adas_update: async ({ solution_id, target, skill_id, updates }, sid) => {
436
+ ateam_update: async ({ solution_id, target, skill_id, updates }, sid) => {
437
437
  if (target === "skill") {
438
438
  return patch(`/deploy/solutions/${solution_id}/skills/${skill_id}`, { updates }, sid);
439
439
  }
440
440
  return patch(`/deploy/solutions/${solution_id}`, { state_update: updates }, sid);
441
441
  },
442
442
 
443
- adas_redeploy: async ({ solution_id, skill_id }, sid) => {
443
+ ateam_redeploy: async ({ solution_id, skill_id }, sid) => {
444
444
  if (skill_id) {
445
445
  return post(`/deploy/solutions/${solution_id}/skills/${skill_id}/redeploy`, {}, sid);
446
446
  }
447
447
  return post(`/deploy/solutions/${solution_id}/redeploy`, {}, sid);
448
448
  },
449
449
 
450
- adas_solution_chat: async ({ solution_id, message }, sid) =>
450
+ ateam_solution_chat: async ({ solution_id, message }, sid) =>
451
451
  post(`/deploy/solutions/${solution_id}/chat`, { message }, sid),
452
452
  };
453
453
 
@@ -477,7 +477,7 @@ function formatResult(result, toolName) {
477
477
  */
478
478
  function summarizeLargeResult(result, toolName) {
479
479
  // Spec responses — keep content but cap size
480
- if (toolName === "adas_get_spec" && result && typeof result === "object") {
480
+ if (toolName === "ateam_get_spec" && result && typeof result === "object") {
481
481
  const keys = Object.keys(result);
482
482
  return JSON.stringify({
483
483
  _note: `A-Team spec with ${keys.length} sections. Content truncated — ask about specific sections for detail.`,
@@ -487,7 +487,7 @@ function summarizeLargeResult(result, toolName) {
487
487
  }
488
488
 
489
489
  // Validation results — keep errors/warnings, trim echoed input
490
- if ((toolName === "adas_validate_skill" || toolName === "adas_validate_solution") && result) {
490
+ if ((toolName === "ateam_validate_skill" || toolName === "ateam_validate_solution") && result) {
491
491
  const slim = { ...result };
492
492
  if (slim.skill) delete slim.skill;
493
493
  if (slim.solution) delete slim.solution;
@@ -496,9 +496,9 @@ function summarizeLargeResult(result, toolName) {
496
496
  }
497
497
 
498
498
  // Export results — summarize structure
499
- if (toolName === "adas_get_solution" && result?.skills) {
499
+ if (toolName === "ateam_get_solution" && result?.skills) {
500
500
  return JSON.stringify({
501
- _note: `Solution with ${result.skills.length} skill(s). Use adas_get_solution with skill_id to inspect individual skills.`,
501
+ _note: `Solution with ${result.skills.length} skill(s). Use ateam_get_solution with skill_id to inspect individual skills.`,
502
502
  solution_id: result.solution?.id || result.id,
503
503
  skill_ids: result.skills.map(s => s.id || s.name),
504
504
  ...result,
@@ -531,7 +531,7 @@ export async function handleToolCall(name, args, sessionId) {
531
531
  "This tool needs an API key. Please ask the user to:",
532
532
  "",
533
533
  "1. Get their API key at: https://mcp.ateam-ai.com/get-api-key",
534
- "2. Then call: adas_auth(api_key: \"<their key>\")",
534
+ "2. Then call: ateam_auth(api_key: \"<their key>\")",
535
535
  "",
536
536
  "The key looks like: adas_<tenant>_<32hex>",
537
537
  "The tenant is auto-extracted — no separate tenant parameter needed.",