@ateam-ai/mcp 0.4.27 → 0.4.28
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/tools.js +23 -3
package/package.json
CHANGED
package/src/tools.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
get, post, patch, del,
|
|
13
13
|
setSessionCredentials, isAuthenticated, isExplicitlyAuthenticated,
|
|
14
14
|
getCredentials, parseApiKey, touchSession, getSessionContext,
|
|
15
|
-
setAuthOverride, switchTenant, isMasterMode, listTenants, getWhere,
|
|
15
|
+
setAuthOverride, switchTenant, isMasterMode, listTenants, getWhere, getBaseUrl,
|
|
16
16
|
} from "./api.js";
|
|
17
17
|
|
|
18
18
|
// Mutating / stateful tools whose result should carry a `_where` stamp
|
|
@@ -332,7 +332,7 @@ export const tools = [
|
|
|
332
332
|
properties: {
|
|
333
333
|
topic: {
|
|
334
334
|
type: "string",
|
|
335
|
-
enum: ["overview", "skill", "solution", "enums", "connector-multi-user", "python_helpers", "widgets", "ui-plugins"],
|
|
335
|
+
enum: ["overview", "skill", "solution", "enums", "connector-multi-user", "python_helpers", "widgets", "ui-plugins", "actor-storage", "voice", "voice-native", "triggers", "sub-agent", "consumer-roles", "mobile-connector"],
|
|
336
336
|
description:
|
|
337
337
|
"What to fetch: 'overview' = API overview + endpoints, 'skill' = full skill spec, 'solution' = full solution spec, 'enums' = all enum values, 'connector-multi-user' = multi-user connector guide, 'python_helpers' = adas.* helper namespace for run_python_script orchestration (read this when designing personas that read state → call tools → checkpoint → status; without it, scripts hand-roll JSON parsing and tool delegation = 5-10x larger and brittler), 'widgets' = widget (UI plugin) spec: catalog model, how_to_use block shape (solution.json snippet + opener_call + persona_phrasing + binding_notes), and rules for declaring ui_plugins. Pair with ateam_get_widget_catalog for the live per-tenant inventory. 'ui-plugins' = the DEEP React Native (mobile) plugin build guide: author in rn-src/, compile with a build:rn esbuild script (format=cjs, target=es2015, external react/react-native/@adas/plugin-sdk) to rn-bundle/index.bundle.js, plain-object export — read this before authoring any MOBILE widget.",
|
|
338
338
|
},
|
|
@@ -1863,6 +1863,16 @@ const SPEC_PATHS = {
|
|
|
1863
1863
|
python_helpers: "/spec/python_helpers",
|
|
1864
1864
|
widgets: "/spec/widgets",
|
|
1865
1865
|
"ui-plugins": "/spec/ui-plugins",
|
|
1866
|
+
// Capability topics — MUST stay in sync with the capability catalog's
|
|
1867
|
+
// spec_topic values so every ateam_design_advisor `read_spec` pointer
|
|
1868
|
+
// resolves (was OPEN-19: advisor pointed at topics get_spec didn't accept).
|
|
1869
|
+
"actor-storage": "/spec/actor-storage",
|
|
1870
|
+
voice: "/spec/voice",
|
|
1871
|
+
"voice-native": "/spec/voice-native",
|
|
1872
|
+
triggers: "/spec/triggers",
|
|
1873
|
+
"sub-agent": "/spec/sub-agent",
|
|
1874
|
+
"consumer-roles": "/spec/consumer-roles",
|
|
1875
|
+
"mobile-connector": "/spec/mobile-connector",
|
|
1866
1876
|
};
|
|
1867
1877
|
|
|
1868
1878
|
const EXAMPLE_PATHS = {
|
|
@@ -2723,10 +2733,20 @@ const handlers = {
|
|
|
2723
2733
|
message: `Authenticated to tenant "${resolvedTenant}"${urlNote}. ${result.solutions?.length || 0} solution(s) found.`,
|
|
2724
2734
|
};
|
|
2725
2735
|
} catch (err) {
|
|
2736
|
+
// OPEN-18: a well-formed `adas_<tenant>_<hex>` key that's rejected is often
|
|
2737
|
+
// a key for the OTHER environment (a dev key against the prod base, or vice
|
|
2738
|
+
// versa). Surface the base we tried and, if it looks like that mismatch,
|
|
2739
|
+
// hint the dev-api retry — instead of a generic "invalid/unconfigured key".
|
|
2740
|
+
const base = getBaseUrl(sessionId) || "";
|
|
2741
|
+
const wellFormedKey = parseApiKey(api_key).isValid;
|
|
2742
|
+
const triedProd = /(?:^|\/\/)api\.ateam-ai\.com/.test(base);
|
|
2743
|
+
const hint = wellFormedKey && triedProd
|
|
2744
|
+
? ` This is a well-formed tenant key ("adas_${resolvedTenant}_…") but ${base} rejected it — if it's a DEV key, retry: ateam_auth(api_key, url:"https://dev-api.ateam-ai.com").`
|
|
2745
|
+
: ` (tried ${base || "the default base"})`;
|
|
2726
2746
|
return {
|
|
2727
2747
|
ok: false,
|
|
2728
2748
|
tenant: resolvedTenant,
|
|
2729
|
-
message: `Authentication failed: ${err.message}
|
|
2749
|
+
message: `Authentication failed: ${err.message}.${hint} The user can get a valid API key at https://mcp.ateam-ai.com/get-api-key`,
|
|
2730
2750
|
};
|
|
2731
2751
|
}
|
|
2732
2752
|
},
|