@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 +1 -1
- package/src/api.js +5 -5
- package/src/server.js +3 -3
- package/src/tools.js +46 -46
package/package.json
CHANGED
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
-
"
|
|
304
|
-
"
|
|
305
|
-
"
|
|
306
|
-
"
|
|
307
|
-
"
|
|
308
|
-
"
|
|
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
|
-
|
|
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: ["
|
|
336
|
-
{ step: 3, title: "Validate", description: "Run validation before deploying", suggested_tools: ["
|
|
337
|
-
{ step: 4, title: "Deploy", description: "Push the Team to A-Team Core", suggested_tools: ["
|
|
338
|
-
{ step: 5, title: "Iterate", description: "Inspect, update, and redeploy as needed", suggested_tools: ["
|
|
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
|
-
|
|
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
|
-
|
|
399
|
+
ateam_get_spec: async ({ topic }, sid) => get(SPEC_PATHS[topic], sid),
|
|
400
400
|
|
|
401
|
-
|
|
401
|
+
ateam_get_workflows: async (_args, sid) => get("/spec/workflows", sid),
|
|
402
402
|
|
|
403
|
-
|
|
403
|
+
ateam_get_examples: async ({ type }, sid) => get(EXAMPLE_PATHS[type], sid),
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
ateam_validate_skill: async ({ skill }, sid) => post("/validate/skill", { skill }, sid),
|
|
406
406
|
|
|
407
|
-
|
|
407
|
+
ateam_validate_solution: async ({ solution, skills }, sid) =>
|
|
408
408
|
post("/validate/solution", { solution, skills }, sid),
|
|
409
409
|
|
|
410
|
-
|
|
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
|
-
|
|
413
|
+
ateam_deploy_skill: async ({ solution_id, skill }, sid) =>
|
|
414
414
|
post(`/deploy/solutions/${solution_id}/skills`, { skill }, sid),
|
|
415
415
|
|
|
416
|
-
|
|
416
|
+
ateam_deploy_connector: async ({ connector }, sid) =>
|
|
417
417
|
post("/deploy/connector", { connector }, sid),
|
|
418
418
|
|
|
419
|
-
|
|
419
|
+
ateam_list_solutions: async (_args, sid) => get("/deploy/solutions", sid),
|
|
420
420
|
|
|
421
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 === "
|
|
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 === "
|
|
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 === "
|
|
499
|
+
if (toolName === "ateam_get_solution" && result?.skills) {
|
|
500
500
|
return JSON.stringify({
|
|
501
|
-
_note: `Solution with ${result.skills.length} skill(s). Use
|
|
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:
|
|
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.",
|