@aigentyc/mcp 0.1.4 → 0.2.0
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/context7.json +1 -1
- package/dist/llms-full.txt +4 -4
- package/dist/tools/embed.d.ts.map +1 -1
- package/dist/tools/embed.js +37 -12
- package/dist/tools/embed.js.map +1 -1
- package/dist/tools/tools_crud.d.ts.map +1 -1
- package/dist/tools/tools_crud.js +222 -16
- package/dist/tools/tools_crud.js.map +1 -1
- package/package.json +1 -1
package/context7.json
CHANGED
package/dist/llms-full.txt
CHANGED
|
@@ -608,8 +608,8 @@ _Total tools: **86**_
|
|
|
608
608
|
|
|
609
609
|
| tool | description |
|
|
610
610
|
| ---- | ----------- |
|
|
611
|
-
| `chat_widget_get_snippet` | Return install command + framework-specific code snippet for embedding the aiGentyc chat widget into an existing app.
|
|
612
|
-
| `chat_widget_setup` | One-shot setup for embedding chat: confirms the project is ready (KB has content, system prompt set), returns a paste-ready snippet, and warns about anything still missing. Use this AFTER adding content. For pure code-snippet generation without status checks, use chat_widget_get_snippet. |
|
|
611
|
+
| `chat_widget_get_snippet` | Return install command + framework-specific code snippet for embedding the aiGentyc chat widget into an existing app. For embeds on third-party domains, an apiKey is required (pass it via apiKey arg to inline it, or leave it blank to emit an env-var placeholder with setup instructions). For URL-sourced content + custom tools to actually do anything, the project must be configured (see aigentyc_get_started). |
|
|
612
|
+
| `chat_widget_setup` | One-shot setup for embedding chat: confirms the project is ready (KB has content, system prompt set), returns a paste-ready snippet, and warns about anything still missing. Use this AFTER adding content. For pure code-snippet generation without status checks, use chat_widget_get_snippet. Pass an `apiKey` if the user has one; the snippet otherwise uses an env-var placeholder and the notes explain where to generate a project-scoped key. |
|
|
613
613
|
| `chat_widget_scaffold` | Run `npm create aigentyc-chat@latest` in a chosen directory to scaffold a Vite or Next.js starter wired to this project. Refuses paths that escape $CWD or $HOME. Asks for confirmation. After scaffolding, the user runs `cd <dir> && npm install && npm run dev`. |
|
|
614
614
|
|
|
615
615
|
### `config`
|
|
@@ -746,8 +746,8 @@ _Total tools: **86**_
|
|
|
746
746
|
| ---- | ----------- |
|
|
747
747
|
| `tools_list` | List every custom tool in the project (rest_api, custom_execute, hybrid, data_store, web_search). |
|
|
748
748
|
| `tools_get` | Fetch one custom tool with its full config. |
|
|
749
|
-
| `tools_create` | Create a custom tool the chat agent can call.
|
|
750
|
-
| `tools_update` | Patch selected fields of an existing custom tool. |
|
|
749
|
+
| `tools_create` | Create a custom tool the chat agent can call. **Display Type** — prefer passing `displayType` (preset \| custom_html \| json_render \| visualization) over the low-level `uiRenderMode`. The MCP normalizes it automatically. • preset — pre-built component (combine with uiComponent) • custom_html — HTML/CSS template (requires customHtml) • json_render — declarative spec (requires jsonRenderSpec) • visualization — recharts; the tool's output must include the chart spec **Forms** (email or custom endpoint) are built as `toolType: "data_store"` + `displayType: "json_render"` + a jsonRenderSpec containing `_formConfig` nested at the spec root. Example: ```json jsonRenderSpec: { root: "form", elements: { form: { type: "Stack", children: [...] }, ... }, state: { form: { name: "", email: "" } }, _formConfig: { mode: "email", to: "you@co.com", subject: "New lead", successMessage: "Thanks!" } } ``` **Security**: tool code referencing `process.env` is rejected server-side — put secrets in apiConfig.headers with template placeholders. |
|
|
750
|
+
| `tools_update` | Patch selected fields of an existing custom tool. `displayType` is normalized the same way as in tools_create. |
|
|
751
751
|
| `tools_delete` | Delete a custom tool. Destructive. |
|
|
752
752
|
| `tools_execute_dry_run` | Invoke a custom tool in test mode with sample input. Safe for iteration; does not count against usage. |
|
|
753
753
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/tools/embed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/tools/embed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAkHtD,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAuL7D"}
|
package/dist/tools/embed.js
CHANGED
|
@@ -6,15 +6,27 @@ import { pid, projectIdArg } from "./helpers.js";
|
|
|
6
6
|
import { defineTool } from "./types.js";
|
|
7
7
|
const SUPPORTED_FRAMEWORKS = ["next", "vite", "react", "html"];
|
|
8
8
|
const PUBLIC_API_DEFAULT = "https://app.aigentyc.com";
|
|
9
|
-
function snippet(framework, projectId, apiEndpoint) {
|
|
9
|
+
function snippet(framework, projectId, apiEndpoint, apiKey) {
|
|
10
|
+
// If the caller passed an apiKey, inline it. Otherwise emit an env-var
|
|
11
|
+
// placeholder so the embed works on third-party domains out of the box.
|
|
12
|
+
const apiKeyProp = apiKey
|
|
13
|
+
? ` apiKey="${apiKey}"\n`
|
|
14
|
+
: ` apiKey={process.env.NEXT_PUBLIC_AIGENTYC_API_KEY}\n`;
|
|
15
|
+
const apiKeyPropVite = apiKey
|
|
16
|
+
? ` apiKey="${apiKey}"\n`
|
|
17
|
+
: ` apiKey={import.meta.env.VITE_AIGENTYC_API_KEY}\n`;
|
|
18
|
+
const commonNotes = [
|
|
19
|
+
"react>=19 and react-dom>=19 are the only required peers.",
|
|
20
|
+
"The CSS import is required — the widget renders unstyled without it.",
|
|
21
|
+
apiKey
|
|
22
|
+
? "apiKey was inlined in the snippet. For client-side code, prefer reading from an env var so you can rotate keys without rebuilding."
|
|
23
|
+
: "**apiKey is required for embeds on domains other than app.aigentyc.com.** Generate a project-scoped key from your Aigentyc dashboard (Settings → API Keys) and set it in your env: `NEXT_PUBLIC_AIGENTYC_API_KEY` (Next.js) or `VITE_AIGENTYC_API_KEY` (Vite). Without it, `/api/kb/chat` returns 401.",
|
|
24
|
+
"Make sure your project's origin allowlist (dashboard → Settings → API Keys → Allowed Origins) includes your embed domain (e.g. https://your-app.com). Otherwise the API rejects the request even with a valid key.",
|
|
25
|
+
];
|
|
10
26
|
const common = {
|
|
11
27
|
install: "npm install @aigentyc/chat-sdk",
|
|
12
28
|
cssImport: 'import "@aigentyc/chat-sdk/theme/styles.css";',
|
|
13
|
-
notes:
|
|
14
|
-
"react>=19 and react-dom>=19 are the only required peers.",
|
|
15
|
-
"The CSS import is required — the widget renders unstyled without it.",
|
|
16
|
-
"No apiKey is needed for public chat. Add one only if your setup requires authenticated tool execution.",
|
|
17
|
-
],
|
|
29
|
+
notes: commonNotes,
|
|
18
30
|
};
|
|
19
31
|
switch (framework) {
|
|
20
32
|
case "next":
|
|
@@ -30,7 +42,7 @@ export default function Page() {
|
|
|
30
42
|
<Chat
|
|
31
43
|
projectId="${projectId}"
|
|
32
44
|
apiEndpoint="${apiEndpoint}"
|
|
33
|
-
/>
|
|
45
|
+
${apiKeyProp} />
|
|
34
46
|
);
|
|
35
47
|
}`,
|
|
36
48
|
};
|
|
@@ -47,7 +59,7 @@ export default function App() {
|
|
|
47
59
|
<Chat
|
|
48
60
|
projectId="${projectId}"
|
|
49
61
|
apiEndpoint="${apiEndpoint}"
|
|
50
|
-
/>
|
|
62
|
+
${apiKeyPropVite} />
|
|
51
63
|
);
|
|
52
64
|
}`,
|
|
53
65
|
};
|
|
@@ -80,19 +92,24 @@ export function embedTools(client) {
|
|
|
80
92
|
defineTool({
|
|
81
93
|
name: "chat_widget_get_snippet",
|
|
82
94
|
title: "Get a paste-ready @aigentyc/chat-sdk snippet",
|
|
83
|
-
description: "Return install command + framework-specific code snippet for embedding the aiGentyc chat widget into an existing app.
|
|
95
|
+
description: "Return install command + framework-specific code snippet for embedding the aiGentyc chat widget into an existing app. For embeds on third-party domains, an apiKey is required (pass it via apiKey arg to inline it, or leave it blank to emit an env-var placeholder with setup instructions). For URL-sourced content + custom tools to actually do anything, the project must be configured (see aigentyc_get_started).",
|
|
84
96
|
inputSchema: z.object({
|
|
85
97
|
projectId: projectIdArg,
|
|
86
98
|
framework: z.enum(SUPPORTED_FRAMEWORKS).default("next"),
|
|
99
|
+
apiKey: z
|
|
100
|
+
.string()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe("Optional project-scoped API key to inline into the snippet. If omitted, the snippet uses an env-var placeholder. For security, prefer env vars over inlined keys in committed code."),
|
|
87
103
|
}),
|
|
88
104
|
handler: async (args) => {
|
|
89
105
|
const projectId = pid(client, args.projectId);
|
|
90
106
|
const apiEndpoint = normalizeBaseForChat(client.profile.baseUrl);
|
|
91
|
-
const parts = snippet(args.framework, projectId, apiEndpoint);
|
|
107
|
+
const parts = snippet(args.framework, projectId, apiEndpoint, args.apiKey);
|
|
92
108
|
return {
|
|
93
109
|
framework: args.framework,
|
|
94
110
|
projectId,
|
|
95
111
|
apiEndpoint,
|
|
112
|
+
apiKeyProvided: Boolean(args.apiKey),
|
|
96
113
|
...parts,
|
|
97
114
|
};
|
|
98
115
|
},
|
|
@@ -100,16 +117,20 @@ export function embedTools(client) {
|
|
|
100
117
|
defineTool({
|
|
101
118
|
name: "chat_widget_setup",
|
|
102
119
|
title: "Embed-ready chat widget setup",
|
|
103
|
-
description: "One-shot setup for embedding chat: confirms the project is ready (KB has content, system prompt set), returns a paste-ready snippet, and warns about anything still missing. Use this AFTER adding content. For pure code-snippet generation without status checks, use chat_widget_get_snippet.",
|
|
120
|
+
description: "One-shot setup for embedding chat: confirms the project is ready (KB has content, system prompt set), returns a paste-ready snippet, and warns about anything still missing. Use this AFTER adding content. For pure code-snippet generation without status checks, use chat_widget_get_snippet. Pass an `apiKey` if the user has one; the snippet otherwise uses an env-var placeholder and the notes explain where to generate a project-scoped key.",
|
|
104
121
|
inputSchema: z.object({
|
|
105
122
|
projectId: projectIdArg,
|
|
106
123
|
framework: z.enum(SUPPORTED_FRAMEWORKS).default("next"),
|
|
124
|
+
apiKey: z
|
|
125
|
+
.string()
|
|
126
|
+
.optional()
|
|
127
|
+
.describe("Optional project-scoped API key. If provided, it is inlined into the snippet. Otherwise the snippet uses an env-var placeholder with setup instructions."),
|
|
107
128
|
}),
|
|
108
129
|
handler: async (args) => {
|
|
109
130
|
const projectId = pid(client, args.projectId);
|
|
110
131
|
const apiEndpoint = normalizeBaseForChat(client.profile.baseUrl);
|
|
111
132
|
const status = await client.get(`/api/dashboard/${projectId}/get-started`);
|
|
112
|
-
const parts = snippet(args.framework, projectId, apiEndpoint);
|
|
133
|
+
const parts = snippet(args.framework, projectId, apiEndpoint, args.apiKey);
|
|
113
134
|
const blockers = [];
|
|
114
135
|
if (!status.kb.ready) {
|
|
115
136
|
blockers.push(`KB is empty — add documents first (files_upload, documents_create_from_text, or extract_from_urls).`);
|
|
@@ -117,11 +138,15 @@ export function embedTools(client) {
|
|
|
117
138
|
if (!status.config.systemPromptSet) {
|
|
118
139
|
blockers.push(`System prompt is empty — set with config_update({ patch: { systemPrompt: "..." } }).`);
|
|
119
140
|
}
|
|
141
|
+
if (!args.apiKey) {
|
|
142
|
+
blockers.push(`apiKey not provided — the snippet uses an env-var placeholder. For embeds on non-aigentyc domains you MUST set NEXT_PUBLIC_AIGENTYC_API_KEY (Next.js) or VITE_AIGENTYC_API_KEY (Vite) in .env, otherwise /api/kb/chat returns 401. Generate a project-scoped key from the dashboard: Settings → API Keys → Create.`);
|
|
143
|
+
}
|
|
120
144
|
return {
|
|
121
145
|
ready: blockers.length === 0,
|
|
122
146
|
framework: args.framework,
|
|
123
147
|
projectId,
|
|
124
148
|
apiEndpoint,
|
|
149
|
+
apiKeyProvided: Boolean(args.apiKey),
|
|
125
150
|
publicChatPreviewUrl: status.embedding.publicChatUrl,
|
|
126
151
|
blockers,
|
|
127
152
|
nextSteps: status.nextSteps,
|
package/dist/tools/embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/tools/embed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/tools/embed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools_crud.d.ts","sourceRoot":"","sources":["../../src/tools/tools_crud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"tools_crud.d.ts","sourceRoot":"","sources":["../../src/tools/tools_crud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AA2QtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAwMjE"}
|
package/dist/tools/tools_crud.js
CHANGED
|
@@ -4,29 +4,159 @@ import { defineTool } from "./types.js";
|
|
|
4
4
|
const toolType = z.enum([
|
|
5
5
|
"rest_api",
|
|
6
6
|
"custom_execute",
|
|
7
|
+
// `transform` is the legacy alias for `custom_execute` — both refer to a
|
|
8
|
+
// pure-JS tool body run in a sandbox. The backend accepts either; we accept
|
|
9
|
+
// both here to avoid rejecting valid requests against the current API.
|
|
10
|
+
"transform",
|
|
7
11
|
"hybrid",
|
|
8
12
|
"data_store",
|
|
9
13
|
"web_search",
|
|
10
14
|
]);
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
/**
|
|
16
|
+
* High-level Display Type — mirrors the dashboard's Display Type selector.
|
|
17
|
+
* Each value maps to a specific (uiRenderMode, required-fields) combination,
|
|
18
|
+
* saving MCP callers from having to guess internal field pairings.
|
|
19
|
+
*/
|
|
20
|
+
const displayType = z
|
|
21
|
+
.enum(["preset", "custom_html", "json_render", "visualization"])
|
|
22
|
+
.optional()
|
|
23
|
+
.describe([
|
|
24
|
+
"High-level Display Type (matches the dashboard's Display Type dropdown).",
|
|
25
|
+
"Sets the right combination of underlying fields automatically:",
|
|
26
|
+
" • preset — pre-built component. Combine with uiComponent (e.g. 'JsonDisplay', 'BattCard').",
|
|
27
|
+
" • custom_html — HTML/CSS template. Requires customHtml; customCss optional.",
|
|
28
|
+
" • json_render — declarative JSON-render spec. Requires jsonRenderSpec.",
|
|
29
|
+
" • visualization — recharts-based chart. The tool's output payload must include the chart spec.",
|
|
30
|
+
"If you pass BOTH displayType AND uiRenderMode, uiRenderMode wins (backwards compat).",
|
|
31
|
+
].join("\n"));
|
|
32
|
+
/**
|
|
33
|
+
* Shape of a tool input parameter, matching `ToolInputParameter` in the
|
|
34
|
+
* backend. Strict schema so MCP callers get clear errors if they misspell
|
|
35
|
+
* `type` (instead of the backend silently coercing it).
|
|
36
|
+
*/
|
|
37
|
+
const toolInputParameterSchema = z.object({
|
|
38
|
+
name: z.string().min(1).describe("camelCase param name exposed to the AI"),
|
|
39
|
+
displayName: z.string().optional(),
|
|
40
|
+
description: z.string().min(1).describe("How the AI should understand this parameter"),
|
|
41
|
+
type: z.enum(["string", "number", "boolean", "array", "object"]).default("string"),
|
|
42
|
+
required: z.boolean().default(false),
|
|
43
|
+
defaultValue: z.unknown().optional(),
|
|
44
|
+
itemType: z.enum(["string", "number", "boolean"]).optional().describe("Only for type=array"),
|
|
45
|
+
enum: z.array(z.string()).optional().describe("Restrict string values to this set"),
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* REST API config for toolType=rest_api / hybrid. Typed so MCP callers don't
|
|
49
|
+
* have to guess — matches `ToolApiConfig` in the backend.
|
|
50
|
+
*/
|
|
51
|
+
const apiConfigSchema = z
|
|
52
|
+
.object({
|
|
53
|
+
endpoint: z.string().url().describe("Full URL (https://…). {{input.x}} templates supported."),
|
|
54
|
+
method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]).default("GET"),
|
|
55
|
+
headers: z.record(z.string()).optional().describe("Header map; {{input.x}} substitution supported."),
|
|
56
|
+
body: z.unknown().optional().describe("JSON body for POST/PUT/PATCH. {{input.x}} substitution supported."),
|
|
57
|
+
queryParams: z.record(z.string()).optional(),
|
|
58
|
+
authConfig: z
|
|
59
|
+
.object({
|
|
60
|
+
type: z.enum(["none", "bearer", "basic", "apiKey"]).default("none"),
|
|
61
|
+
token: z.string().optional(),
|
|
62
|
+
username: z.string().optional(),
|
|
63
|
+
password: z.string().optional(),
|
|
64
|
+
headerName: z.string().optional(),
|
|
65
|
+
})
|
|
66
|
+
.partial()
|
|
67
|
+
.optional(),
|
|
68
|
+
})
|
|
69
|
+
.passthrough(); // allow unknown keys since the backend evolves
|
|
70
|
+
/**
|
|
71
|
+
* Data store config for toolType=data_store. Mirrors the dashboard's
|
|
72
|
+
* "Data Store Configuration" panel (data store picker + searchable /
|
|
73
|
+
* filterable / display columns + result limits).
|
|
74
|
+
*/
|
|
75
|
+
const dataStoreConfigSchema = z
|
|
76
|
+
.object({
|
|
77
|
+
dataStoreId: z.string().min(1).describe("ID of the data store to query (see data_stores_list)"),
|
|
78
|
+
searchableColumns: z
|
|
79
|
+
.array(z.string())
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Columns included in free-text search. Defaults to all columns if omitted."),
|
|
82
|
+
filterableColumns: z
|
|
83
|
+
.array(z.string())
|
|
84
|
+
.optional()
|
|
85
|
+
.describe("Columns the AI can filter on (e.g. input.city, input.status). Each becomes an input parameter the model can pass."),
|
|
86
|
+
displayColumns: z
|
|
87
|
+
.array(z.string())
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Columns shown in the result table. Defaults to all columns if omitted."),
|
|
90
|
+
maxResults: z.number().int().min(1).max(100).optional().describe("Default row cap (default 10)."),
|
|
91
|
+
responseMode: z
|
|
92
|
+
.enum(["rows_only", "full"])
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("rows_only (default): flat projected array. full: { storeName, columns, rows, totalMatches, returned }."),
|
|
95
|
+
columnEnums: z
|
|
96
|
+
.record(z.array(z.string()))
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("Per-column enum values, if you want to restrict what the AI can filter by."),
|
|
99
|
+
})
|
|
100
|
+
.passthrough();
|
|
101
|
+
/**
|
|
102
|
+
* Web search config for toolType=web_search. Opaque enough that we leave it
|
|
103
|
+
* as passthrough — the field most users care about is `extractionPrompt`.
|
|
104
|
+
*/
|
|
105
|
+
const webSearchConfigSchema = z
|
|
106
|
+
.object({
|
|
107
|
+
extractionPrompt: z
|
|
108
|
+
.string()
|
|
109
|
+
.optional()
|
|
110
|
+
.describe("Instruction for the LLM on what to extract from search results."),
|
|
111
|
+
maxResults: z.number().int().min(1).max(20).optional(),
|
|
112
|
+
searchEngine: z.string().optional(),
|
|
113
|
+
})
|
|
114
|
+
.passthrough();
|
|
115
|
+
// Server accepts the JSON fields opaquely; we mirror them with typed shapes
|
|
116
|
+
// so MCP callers get meaningful validation errors instead of the backend
|
|
117
|
+
// silently ignoring misspelt keys.
|
|
118
|
+
const createToolSchemaBase = z
|
|
119
|
+
.object({
|
|
13
120
|
projectId: projectIdArg,
|
|
14
121
|
name: z.string().min(1).max(100),
|
|
15
122
|
displayName: z.string().min(1).max(255),
|
|
16
123
|
description: z.string().min(1),
|
|
17
124
|
toolType: toolType.default("rest_api"),
|
|
18
|
-
inputSchema: z.array(
|
|
19
|
-
apiConfig:
|
|
125
|
+
inputSchema: z.array(toolInputParameterSchema).default([]),
|
|
126
|
+
apiConfig: apiConfigSchema.optional().nullable(),
|
|
20
127
|
transformCode: z
|
|
21
128
|
.string()
|
|
22
129
|
.optional()
|
|
23
130
|
.describe("JavaScript code for toolType=custom_execute (runs as the whole tool body) or hybrid (runs on input.apiResult after the REST call). Sandboxed; no Node APIs. Rejected server-side if it contains `process.env`."),
|
|
24
|
-
dataStoreConfig:
|
|
25
|
-
webSearchConfig:
|
|
26
|
-
stopWhen: z
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
131
|
+
dataStoreConfig: dataStoreConfigSchema.optional().nullable(),
|
|
132
|
+
webSearchConfig: webSearchConfigSchema.optional().nullable(),
|
|
133
|
+
stopWhen: z
|
|
134
|
+
.number()
|
|
135
|
+
.int()
|
|
136
|
+
.min(0)
|
|
137
|
+
.default(0)
|
|
138
|
+
.describe("Max invocations of this tool in a single chat turn. 0 = unlimited. Use e.g. 3 for tools the AI likes to call in loops (search refinements, paginated fetches)."),
|
|
139
|
+
searchKbAfter: z
|
|
140
|
+
.boolean()
|
|
141
|
+
.default(false)
|
|
142
|
+
.describe("If true, the assistant follows up every invocation of this tool with a knowledge-base search. Useful when the tool surfaces facts the model should ground its reply on."),
|
|
143
|
+
timeoutMs: z
|
|
144
|
+
.number()
|
|
145
|
+
.int()
|
|
146
|
+
.min(100)
|
|
147
|
+
.max(60000)
|
|
148
|
+
.default(5000)
|
|
149
|
+
.describe("Max execution time per invocation. Applies to the HTTP call (rest_api/hybrid), the sandboxed JS body (custom_execute/transform), and the data store query."),
|
|
150
|
+
// Only relevant when displayType='preset' (or uiRenderMode='preset'). For
|
|
151
|
+
// other displayTypes this field is ignored. Known presets:
|
|
152
|
+
// • JsonDisplay — default; pretty-prints any JSON payload
|
|
153
|
+
// • DataStoreResult — tabular view; chosen automatically for data_store
|
|
154
|
+
// tools that don't have customHtml
|
|
155
|
+
// • none — render nothing (side-effect-only tools)
|
|
156
|
+
uiComponent: z
|
|
157
|
+
.enum(["JsonDisplay", "DataStoreResult", "none"])
|
|
158
|
+
.default("JsonDisplay")
|
|
159
|
+
.describe("Preset component name. Only used when displayType='preset'. Known values: JsonDisplay | DataStoreResult | none."),
|
|
30
160
|
customHtml: z.string().optional(),
|
|
31
161
|
customCss: z.string().optional(),
|
|
32
162
|
audience: z.array(z.string()).optional(),
|
|
@@ -36,15 +166,67 @@ const createToolSchema = z.object({
|
|
|
36
166
|
tags: z.array(z.string()).optional(),
|
|
37
167
|
componentActions: z.array(z.record(z.unknown())).optional(),
|
|
38
168
|
jsonRenderSpec: z.record(z.unknown()).optional(),
|
|
39
|
-
|
|
169
|
+
// High-level selector (recommended). Normalized in the handler below.
|
|
170
|
+
displayType,
|
|
171
|
+
// Low-level override. Covers the full SDK dispatcher: legacy (HTML template),
|
|
172
|
+
// json/json_render (JSON-render spec), visualization (recharts), preset/text
|
|
173
|
+
// (JSON card), hidden/none (render nothing). `json` and `json_render` are
|
|
174
|
+
// aliases the SDK accepts interchangeably.
|
|
175
|
+
uiRenderMode: z
|
|
176
|
+
.enum([
|
|
177
|
+
"legacy",
|
|
178
|
+
"json",
|
|
179
|
+
"json_render",
|
|
180
|
+
"visualization",
|
|
181
|
+
"preset",
|
|
182
|
+
"text",
|
|
183
|
+
"hidden",
|
|
184
|
+
"none",
|
|
185
|
+
])
|
|
186
|
+
.optional(),
|
|
40
187
|
mobileGridCols: z.number().int().min(1).max(12).optional(),
|
|
41
188
|
desktopGridCols: z.number().int().min(1).max(12).optional(),
|
|
42
189
|
initialRenderLimit: z.number().int().min(0).max(200).optional(),
|
|
43
190
|
});
|
|
191
|
+
// defineTool expects a ZodObject (so its `.shape` can be handed to the MCP
|
|
192
|
+
// SDK's registerTool). `.superRefine(...)` would wrap in ZodEffects and break
|
|
193
|
+
// that contract, so we validate displayType/field pairing manually in the
|
|
194
|
+
// handler below via `assertDisplayTypeValid()`.
|
|
195
|
+
const createToolSchema = createToolSchemaBase;
|
|
196
|
+
function assertDisplayTypeValid(data) {
|
|
197
|
+
if (data.displayType === "custom_html" && !data.customHtml) {
|
|
198
|
+
throw new Error("displayType='custom_html' requires customHtml — pass the HTML template (customCss is optional).");
|
|
199
|
+
}
|
|
200
|
+
if (data.displayType === "json_render" && !data.jsonRenderSpec) {
|
|
201
|
+
throw new Error("displayType='json_render' requires jsonRenderSpec — the declarative spec object with root/elements/state.");
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Map a caller-provided `displayType` to the underlying `uiRenderMode` the
|
|
206
|
+
* backend expects. Explicit `uiRenderMode` wins (so advanced users can opt
|
|
207
|
+
* out). `displayType` itself is stripped — the backend doesn't know about it.
|
|
208
|
+
*/
|
|
209
|
+
function normalizeDisplayType(body) {
|
|
210
|
+
const { displayType: dt, uiRenderMode, ...rest } = body;
|
|
211
|
+
let mode = uiRenderMode;
|
|
212
|
+
if (!mode && dt) {
|
|
213
|
+
if (dt === "preset")
|
|
214
|
+
mode = "preset";
|
|
215
|
+
else if (dt === "custom_html")
|
|
216
|
+
mode = "legacy";
|
|
217
|
+
else if (dt === "json_render")
|
|
218
|
+
mode = "json";
|
|
219
|
+
else if (dt === "visualization")
|
|
220
|
+
mode = "visualization";
|
|
221
|
+
}
|
|
222
|
+
if (!mode)
|
|
223
|
+
mode = "legacy";
|
|
224
|
+
return { ...rest, uiRenderMode: mode };
|
|
225
|
+
}
|
|
44
226
|
const updateToolSchema = z.object({
|
|
45
227
|
projectId: projectIdArg,
|
|
46
228
|
toolId: z.string().min(1),
|
|
47
|
-
patch:
|
|
229
|
+
patch: createToolSchemaBase
|
|
48
230
|
.omit({ projectId: true })
|
|
49
231
|
.partial()
|
|
50
232
|
.describe("Any subset of tool fields to update. Sending executeCode or transformCode containing 'process.env' is rejected server-side."),
|
|
@@ -77,22 +259,46 @@ export function toolsCrudTools(client) {
|
|
|
77
259
|
defineTool({
|
|
78
260
|
name: "tools_create",
|
|
79
261
|
title: "Create a custom tool",
|
|
80
|
-
description:
|
|
262
|
+
description: [
|
|
263
|
+
"Create a custom tool the chat agent can call.",
|
|
264
|
+
"",
|
|
265
|
+
"**Display Type** — prefer passing `displayType` (preset | custom_html | json_render | visualization) over the low-level `uiRenderMode`. The MCP normalizes it automatically.",
|
|
266
|
+
" • preset — pre-built component (combine with uiComponent)",
|
|
267
|
+
" • custom_html — HTML/CSS template (requires customHtml)",
|
|
268
|
+
" • json_render — declarative spec (requires jsonRenderSpec)",
|
|
269
|
+
" • visualization — recharts; the tool's output must include the chart spec",
|
|
270
|
+
"",
|
|
271
|
+
"**Forms** (email or custom endpoint) are built as `toolType: \"data_store\"` + `displayType: \"json_render\"` + a jsonRenderSpec containing `_formConfig` nested at the spec root. Example:",
|
|
272
|
+
"```json",
|
|
273
|
+
"jsonRenderSpec: {",
|
|
274
|
+
" root: \"form\",",
|
|
275
|
+
" elements: { form: { type: \"Stack\", children: [...] }, ... },",
|
|
276
|
+
" state: { form: { name: \"\", email: \"\" } },",
|
|
277
|
+
" _formConfig: { mode: \"email\", to: \"you@co.com\", subject: \"New lead\", successMessage: \"Thanks!\" }",
|
|
278
|
+
"}",
|
|
279
|
+
"```",
|
|
280
|
+
"",
|
|
281
|
+
"**Security**: tool code referencing `process.env` is rejected server-side — put secrets in apiConfig.headers with template placeholders.",
|
|
282
|
+
].join("\n"),
|
|
81
283
|
inputSchema: createToolSchema,
|
|
82
284
|
handler: async (args) => {
|
|
83
|
-
|
|
285
|
+
assertDisplayTypeValid(args);
|
|
286
|
+
const { projectId: rawPid, ...rest } = args;
|
|
84
287
|
const projectId = pid(client, rawPid);
|
|
288
|
+
const body = normalizeDisplayType(rest);
|
|
85
289
|
return client.post(`/api/dashboard/${projectId}/tools`, body);
|
|
86
290
|
},
|
|
87
291
|
}),
|
|
88
292
|
defineTool({
|
|
89
293
|
name: "tools_update",
|
|
90
294
|
title: "Update a custom tool",
|
|
91
|
-
description: "Patch selected fields of an existing custom tool.",
|
|
295
|
+
description: "Patch selected fields of an existing custom tool. `displayType` is normalized the same way as in tools_create.",
|
|
92
296
|
inputSchema: updateToolSchema,
|
|
93
297
|
handler: async (args) => {
|
|
298
|
+
assertDisplayTypeValid(args.patch);
|
|
94
299
|
const projectId = pid(client, args.projectId);
|
|
95
|
-
|
|
300
|
+
const patch = normalizeDisplayType(args.patch);
|
|
301
|
+
return client.patch(`/api/dashboard/${projectId}/tools/${encodeURIComponent(args.toolId)}`, patch);
|
|
96
302
|
},
|
|
97
303
|
}),
|
|
98
304
|
defineTool({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools_crud.js","sourceRoot":"","sources":["../../src/tools/tools_crud.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools_crud.js","sourceRoot":"","sources":["../../src/tools/tools_crud.ts"],"names":[],"mappings":"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"}
|