@aigentyc/mcp 0.2.2 → 0.4.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/AGENTS.md +3 -1
- package/context7.json +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/llms-full.txt +74 -12
- package/dist/tools/backups.d.ts.map +1 -1
- package/dist/tools/backups.js +17 -12
- package/dist/tools/backups.js.map +1 -1
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +2 -6
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/form_option_sources.d.ts +4 -0
- package/dist/tools/form_option_sources.d.ts.map +1 -0
- package/dist/tools/form_option_sources.js +251 -0
- package/dist/tools/form_option_sources.js.map +1 -0
- package/dist/tools/forms.d.ts +4 -0
- package/dist/tools/forms.d.ts.map +1 -0
- package/dist/tools/forms.js +833 -0
- package/dist/tools/forms.js.map +1 -0
- package/dist/tools/golden_answers.d.ts.map +1 -1
- package/dist/tools/golden_answers.js +32 -8
- package/dist/tools/golden_answers.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/integrations.d.ts +4 -0
- package/dist/tools/integrations.d.ts.map +1 -0
- package/dist/tools/integrations.js +225 -0
- package/dist/tools/integrations.js.map +1 -0
- package/dist/tools/link_sources.d.ts.map +1 -1
- package/dist/tools/link_sources.js +196 -10
- package/dist/tools/link_sources.js.map +1 -1
- package/dist/tools/page_questions.d.ts.map +1 -1
- package/dist/tools/page_questions.js +3 -1
- package/dist/tools/page_questions.js.map +1 -1
- package/dist/tools/tools_crud.d.ts.map +1 -1
- package/dist/tools/tools_crud.js +121 -6
- package/dist/tools/tools_crud.js.map +1 -1
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -54,7 +54,8 @@ First contact in a conversation? → aigentyc_get_started
|
|
|
54
54
|
|
|
55
55
|
Need to add markdown / text content to the KB? → files_upload (paths)
|
|
56
56
|
Need to add raw text without a file? → documents_create_from_text
|
|
57
|
-
Need to
|
|
57
|
+
Need to register URLs under the website KB? → link_sources_add_urls
|
|
58
|
+
then ingest their content → link_sources_process
|
|
58
59
|
Need to extract from a list of public URLs? → extract_from_urls + jobs_wait
|
|
59
60
|
Need to add a structured table (rows of data)? → data_stores_create + bulk_upsert
|
|
60
61
|
Need to scrape a website into a data store? → data_stores_scan_website + jobs_wait
|
|
@@ -78,6 +79,7 @@ This is the canonical journey from "I have docs" to "chat is live on my site":
|
|
|
78
79
|
```
|
|
79
80
|
1. aigentyc_get_started → tells you what's missing
|
|
80
81
|
2. files_upload / documents_create_from_text / extract_from_urls
|
|
82
|
+
OR link_sources_add_urls + link_sources_process
|
|
81
83
|
→ fill the KB
|
|
82
84
|
3. config_update → set systemPrompt + chatModel
|
|
83
85
|
4. tools_create (optional) → expose REST/JS actions to chat
|
package/context7.json
CHANGED
package/dist/client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export interface DashboardClient {
|
|
|
3
3
|
profile: ProfileConfig;
|
|
4
4
|
get<T = unknown>(path: string, query?: Record<string, unknown>): Promise<T>;
|
|
5
5
|
post<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
6
|
+
put<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
6
7
|
patch<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
7
8
|
delete<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
8
9
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,CAuFpE"}
|
package/dist/client.js
CHANGED
|
@@ -57,6 +57,7 @@ export function createClient(profile) {
|
|
|
57
57
|
profile,
|
|
58
58
|
get: (path, query) => request("GET", path, { query }),
|
|
59
59
|
post: (path, body) => request("POST", path, { body }),
|
|
60
|
+
put: (path, body) => request("PUT", path, { body }),
|
|
60
61
|
patch: (path, body) => request("PATCH", path, { body }),
|
|
61
62
|
delete: (path, body) => request("DELETE", path, { body }),
|
|
62
63
|
};
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/llms-full.txt
CHANGED
|
@@ -200,7 +200,8 @@ First contact in a conversation? → aigentyc_get_started
|
|
|
200
200
|
|
|
201
201
|
Need to add markdown / text content to the KB? → files_upload (paths)
|
|
202
202
|
Need to add raw text without a file? → documents_create_from_text
|
|
203
|
-
Need to
|
|
203
|
+
Need to register URLs under the website KB? → link_sources_add_urls
|
|
204
|
+
then ingest their content → link_sources_process
|
|
204
205
|
Need to extract from a list of public URLs? → extract_from_urls + jobs_wait
|
|
205
206
|
Need to add a structured table (rows of data)? → data_stores_create + bulk_upsert
|
|
206
207
|
Need to scrape a website into a data store? → data_stores_scan_website + jobs_wait
|
|
@@ -224,6 +225,7 @@ This is the canonical journey from "I have docs" to "chat is live on my site":
|
|
|
224
225
|
```
|
|
225
226
|
1. aigentyc_get_started → tells you what's missing
|
|
226
227
|
2. files_upload / documents_create_from_text / extract_from_urls
|
|
228
|
+
OR link_sources_add_urls + link_sources_process
|
|
227
229
|
→ fill the KB
|
|
228
230
|
3. config_update → set systemPrompt + chatModel
|
|
229
231
|
4. tools_create (optional) → expose REST/JS actions to chat
|
|
@@ -568,7 +570,7 @@ Server (`@aigentyc/mcp` on npm) and platform (`app.aigentyc.com`) version indepe
|
|
|
568
570
|
All MCP tools registered at server startup, grouped by domain prefix. Use these names verbatim when invoking via an MCP client.
|
|
569
571
|
|
|
570
572
|
|
|
571
|
-
_Total tools: **
|
|
573
|
+
_Total tools: **131**_
|
|
572
574
|
|
|
573
575
|
|
|
574
576
|
### `aigentyc`
|
|
@@ -592,10 +594,10 @@ _Total tools: **86**_
|
|
|
592
594
|
| tool | description |
|
|
593
595
|
| ---- | ----------- |
|
|
594
596
|
| `backups_list` | List available project backups (Qdrant snapshots + MySQL exports). |
|
|
595
|
-
| `backups_create` | Snapshot the project's Qdrant collections + MySQL data.
|
|
597
|
+
| `backups_create` | Snapshot the project's Qdrant collections + MySQL data. API-key callers get an async jobId (poll with jobs_wait); session callers get a synchronous { success: true }. Server-generated snapshot name; the backend does not currently accept a custom label. |
|
|
596
598
|
| `backups_restore` | Restore the project's Qdrant + MySQL state from a backup. HIGHLY DESTRUCTIVE: overwrites current data. |
|
|
597
599
|
| `backups_download` | Download a backup by index. type='mysql' returns JSON (secrets redacted for API-key callers); type='qdrant' returns an opaque Qdrant snapshot reference. |
|
|
598
|
-
| `backups_import` |
|
|
600
|
+
| `backups_import` | Re-attach a previously-exported MySQL backup blob (as returned by backups_download with type='mysql') to an existing Qdrant snapshot on this project. Requires `snapshotName` (the existing Qdrant snapshot to associate the data with). The `backup` body must be a full MysqlBackupData object (version, exportedAt, projectId, tables...) — its `projectId` must match the current project. Qdrant snapshot file uploads (the binary multipart flow) are not supported from MCP — use the dashboard for those. |
|
|
599
601
|
| `backups_delete` | Delete a backup by index. Destructive. |
|
|
600
602
|
|
|
601
603
|
### `branches`
|
|
@@ -661,7 +663,7 @@ _Total tools: **86**_
|
|
|
661
663
|
|
|
662
664
|
| tool | description |
|
|
663
665
|
| ---- | ----------- |
|
|
664
|
-
| `extract_from_urls` | Batch-extract
|
|
666
|
+
| `extract_from_urls` | Batch-extract raw text from a list of PDF/DOC/DOCX/TXT URLs using the document-extraction service. Returns `{ results: [{url, success, data?, error?}], summary }`. **Does NOT persist to the KB on its own** — to ingest, take each successful result and call `documents_create_from_text` (which is where you supply `audience` and `sectorId`). For api-key callers, large batches return a jobId; poll with jobs_wait. |
|
|
665
667
|
|
|
666
668
|
### `files`
|
|
667
669
|
|
|
@@ -685,17 +687,75 @@ _Total tools: **86**_
|
|
|
685
687
|
| `flows_update` | Patch a flow's fields. |
|
|
686
688
|
| `flows_delete` | Delete a flow. Destructive. |
|
|
687
689
|
|
|
690
|
+
### `form`
|
|
691
|
+
|
|
692
|
+
| tool | description |
|
|
693
|
+
| ---- | ----------- |
|
|
694
|
+
| `form_option_sources_list` | List every option source in the project — id, name, provider, isActive, hasSearch. Secrets are never returned. |
|
|
695
|
+
| `form_option_sources_get` | Fetch one option source's metadata + non-secret config. authConfig and headers are never returned. |
|
|
696
|
+
| `form_option_sources_create` | Create a reusable option source for select/radio/checkbox/multi_select fields. **HTTP source**: provider='http', set `url`, optionally `headers`, `authType`, `authConfig.token`. Use {{search}} and {{parent.x}} in `queryParamsTemplate`/`bodyTemplate`. **Salesforce source**: provider='salesforce', set `integrationId` (from integrations_list) and `providerConfig: { sobject, searchField?, soqlTemplate? }`. Omit `url`/`method`/`authType`. |
|
|
697
|
+
| `form_option_sources_update` | Patch any subset of an option source's fields. authConfig/headers omitted from the patch keep their stored values. |
|
|
698
|
+
| `form_option_sources_delete` | Delete an option source. Destructive. Form fields that referenced it will fall back to their inline `options` (or render empty). |
|
|
699
|
+
| `form_option_sources_test` | Hit the upstream with the source's stored config and return the resolved options array (or upstream error). Pass `search`/`parent` to feed templates. |
|
|
700
|
+
| `form_option_sources_test_raw` | Hit an upstream with an inline (unsaved) HTTP option-source config — for debugging before calling form_option_sources_create. Salesforce sources are not supported here. |
|
|
701
|
+
|
|
702
|
+
### `forms`
|
|
703
|
+
|
|
704
|
+
| tool | description |
|
|
705
|
+
| ---- | ----------- |
|
|
706
|
+
| `forms_list` | List every form in the project — id, name, description, field count, action count, isActive, submission count. |
|
|
707
|
+
| `forms_get` | Fetch a single form with its full definition: fields, settings, post-submit actions. |
|
|
708
|
+
| `forms_create` | Create a form. Fields, post-submit actions, and conditional rules are all set up here. **Field types**: text, textarea, number, email, phone, date, time, select, multi_select, checkbox, radio, file. Select-style fields can either inline `options` OR pull `optionsSource` from a form_option_sources row (HTTP or Salesforce-driven). **Actions** run on submission. Use `salesforce` to push to a configured provider integration (see integrations_list). **Linking to a chat tool**: create the form, then call `forms_link_to_tool` to expose it as a renderable tool inside the assistant. |
|
|
709
|
+
| `forms_update` | Patch any subset of form fields, settings, or actions. Send the full new array for `fields`/`postSubmitActions` — they're not deep-merged. |
|
|
710
|
+
| `forms_delete` | Delete a form. Destructive. Submissions and post-submit-action history are lost. By default refuses if the form is linked to a tool — pass `force=true` to override. |
|
|
711
|
+
| `forms_export` | Export a self-contained JSON bundle of the form plus every option source it references and every provider integration those sources point at. Secrets (auth headers, integration credentials) are STRIPPED — re-enter them in the target project after import. |
|
|
712
|
+
| `forms_import` | Import a form bundle (from forms_export) into a project. New IDs are generated for the form, every option source, and every provider integration. Returns warnings for any references that couldn't be remapped (data stores, tool calls, missing integrations) — review before relying on the form. |
|
|
713
|
+
| `forms_linked_tools` | Find every chat tool whose `formConfig.formId` references this form. Use before deleting to know what would break. |
|
|
714
|
+
| `forms_link_to_tool` | Create a chat tool that renders the form inside the assistant. Internally this is a `data_store` tool with `displayType: json_render` and a `_formConfig.formId` set to the form. Call this instead of building the tool by hand. Returns the new tool row. |
|
|
715
|
+
| `forms_submissions_list` | Paginated list of submissions for a form. Returns decrypted submission data + per-action results. |
|
|
716
|
+
| `forms_actions_test_run` | Run a form's post-submit actions against sample data and return per-action results, rendered payloads, and the dot-paths discovered from each action's output (used for `{{steps.<name>.<path>}}` chaining). ⚠️ This executes against LIVE integrations — Salesforce records, webhooks, and emails it produces are REAL, not mocked. Requires `confirm=true`. Pass `actions` to test an unsaved draft array (otherwise the form's saved actions run). `sampleData` is a `{ fieldKey: value }` map fed in as the submission. `untilActionId` stops the chain after that action. Discovered paths are persisted onto saved actions automatically. |
|
|
717
|
+
| `forms_submission_action_retry` | Re-run a single failed/skipped action for a specific submission. Returns the updated submission status and action results. |
|
|
718
|
+
| `forms_submission_action_skip` | Mark a single action as skipped for a submission so it no longer blocks the submission from being considered processed. |
|
|
719
|
+
| `forms_submission_replay` | Re-run a submission's full action chain. Pass `fromActionId` to resume from a specific action instead of the start (earlier successful steps are reused). |
|
|
720
|
+
| `forms_submissions_bulk_retry` | Re-queue every submission with failed actions in the last `withinHours`. Defaults to a DRY RUN that only counts candidates — pass `dryRun=false` to actually enqueue the retries. |
|
|
721
|
+
| `forms_retry_queue_list` | List queued action retries across the project, with attempt counts, last error class/message, and next-retry time. Filter by `state`. |
|
|
722
|
+
| `forms_retry_queue_item` | Operate on a single retry-queue item: `retry-now` schedules an immediate retry; `cancel` removes it from the queue. |
|
|
723
|
+
| `forms_observability` | Project-wide forms health: per-form 24h/7d success rates, needs_manual / needs_retry counts, top failure error codes (7d), retry-queue totals by state, and the recent alert dispatch summary. |
|
|
724
|
+
| `forms_alert_rules_list` | List alert rules. Pass `formId` to scope to one form; omit for project-wide rules too. |
|
|
725
|
+
| `forms_alert_rules_create` | Create an alert rule that fires on form action events. At least one channel is required. Events: action_failed, submission_needs_manual, submission_needs_retry, retry_exhausted, rate_drop, critical_action_failed. Channels: email (list of addresses), webhook ({ url, hmacSecret? }), inApp (boolean). `throttleMs` suppresses duplicates within the window (default 900000 = 15m). Omit `formId` to scope to the whole project. |
|
|
726
|
+
| `forms_alert_rules_update` | Patch any subset of an alert rule's fields. `channels` and `filters` replace wholesale (not deep-merged). |
|
|
727
|
+
| `forms_alert_rules_delete` | Delete an alert rule. Destructive — requires confirm=true. |
|
|
728
|
+
| `forms_alert_rule_test` | Send a synthetic alert through a rule's channels, bypassing the throttle and event filter — confirms email/webhook delivery actually works. Returns the dispatch outcome per channel. |
|
|
729
|
+
| `forms_alert_rules_dispatch_log` | Recent alert dispatch attempts (delivered, throttled, failed). Filter by `ruleId` and look-back window. |
|
|
730
|
+
|
|
688
731
|
### `golden`
|
|
689
732
|
|
|
690
733
|
| tool | description |
|
|
691
734
|
| ---- | ----------- |
|
|
692
735
|
| `golden_answers_list` | List high-priority Q&A pairs used for search ranking and fallback responses. |
|
|
693
|
-
| `golden_answers_create` | Create a golden Q&A pair. |
|
|
694
|
-
| `golden_answers_update` | Patch a golden answer by id. |
|
|
736
|
+
| `golden_answers_create` | Create a golden Q&A pair. Field names match the dashboard's natural terminology — `query` is the question users would ask, `response` is the canonical reply, `variations` is an optional array of paraphrased questions. The MCP maps these to the backend's `originalQuery` / `goldenResponse` / `queryVariations` fields automatically. |
|
|
737
|
+
| `golden_answers_update` | Patch a golden answer by id. Field names match the dashboard's natural terminology — the MCP maps to backend fields automatically (query→originalQuery, response→goldenResponse, variations[]→queryVariations). |
|
|
695
738
|
| `golden_answers_delete` | Delete a golden answer by id. Destructive. |
|
|
696
739
|
| `golden_answers_ai_improve` | Ask the AI to rewrite a response for a query in a chosen tone. Returns `improvedResponse` — you decide whether to save. |
|
|
697
740
|
| `golden_answers_ai_generate_variations` | Generate paraphrased variations of a question to improve retrieval. Returns `variations: [{question, context?}]`. |
|
|
698
741
|
|
|
742
|
+
### `integrations`
|
|
743
|
+
|
|
744
|
+
| tool | description |
|
|
745
|
+
| ---- | ----------- |
|
|
746
|
+
| `integrations_list` | List every provider integration in the project (Salesforce, Hubspot, …). Credentials are NOT returned — only metadata + summary. |
|
|
747
|
+
| `integrations_get` | Fetch one integration's metadata + non-secret config. Credentials are never returned. |
|
|
748
|
+
| `integrations_create` | Create a provider integration. Pre-flight a creation by calling `integrations_test_credentials` to validate without persisting. Common providers: 'salesforce', 'hubspot'. The backend validates `config` and `credentials` against the provider's schema and rejects invalid shapes. |
|
|
749
|
+
| `integrations_update` | Patch any subset of fields on an existing integration. Credentials sent here are MERGED with the stored ones — leave a field blank/omit to keep its current value. Any change to credentials/config invalidates the cached OAuth token. |
|
|
750
|
+
| `integrations_delete` | Delete an integration and invalidate its cached token. Destructive. Any option sources or form actions that referenced it will break (FK is `set null`, so they survive but lose their integration link). |
|
|
751
|
+
| `integrations_test` | Verify a saved integration's stored credentials by attempting a token exchange. Returns `{ ok, summary?, error? }`. |
|
|
752
|
+
| `integrations_test_credentials` | Attempt a token exchange with the supplied credentials/config WITHOUT persisting an integration row. Use to validate creds before calling `integrations_create`. |
|
|
753
|
+
| `integrations_whoami` | Fetch the connected user/org info for the integration. For Salesforce: returns the running user's id, org id, and instance URL. |
|
|
754
|
+
| `integrations_describe` | Provider-specific schema introspection. For Salesforce: returns the full sObject metadata (fields, types, picklist values, required flags). Pass the API name (e.g. 'Lead', 'MyCustomObject__c'). |
|
|
755
|
+
| `integrations_sobjects_list` | List every sObject available to the integration's authenticated user. Use to discover what `sobject` values are valid for `integrations_describe` and the `salesforce` form action. |
|
|
756
|
+
| `integrations_query` | Execute a SOQL query through a Salesforce integration. Use cautiously — queries run with the integration user's permissions and consume API quota. |
|
|
757
|
+
| `integrations_rotate_token` | Invalidate the cached OAuth token and force a fresh exchange on the next call. Use after rotating client secrets or if the cached token is misbehaving. |
|
|
758
|
+
|
|
699
759
|
### `jobs`
|
|
700
760
|
|
|
701
761
|
| tool | description |
|
|
@@ -716,11 +776,13 @@ _Total tools: **86**_
|
|
|
716
776
|
| ---- | ----------- |
|
|
717
777
|
| `link_sources_list` | List website/pdf link sources configured for the project. Each source tracks discovered URLs + processing state. |
|
|
718
778
|
| `link_sources_get` | Fetch a single link source with its status + discovered item counts. |
|
|
719
|
-
| `link_sources_create` | Register a
|
|
720
|
-
| `
|
|
779
|
+
| `link_sources_create` | Register a link source with one or more URLs so they appear under the website knowledge base. `links` is required; each item gets a `linkType` (website\|pdf, auto-detected from extension if omitted). `status` defaults to 'completed' so the URLs are immediately eligible for ingestion via link_sources_process. For the common 'just add these URLs' case, prefer `link_sources_add_urls`. URLs are SSRF-prefiltered both client and server side. |
|
|
780
|
+
| `link_sources_add_urls` | Convenience: register one or more URLs as a single completed link source, ready for ingestion. PDF/document URLs are auto-detected by extension and routed correctly. Mirrors the dashboard's 'Individual link' / 'Sitemap import' add-URL flow. After this, call `link_sources_process` to actually ingest the content into the knowledge base. URLs are SSRF-prefiltered. |
|
|
781
|
+
| `link_sources_process` | Trigger ingestion of URLs previously registered via link_sources_create / link_sources_add_urls. Pass either `selectedUrls` (explicit list) or `filterCriteria` (e.g. {status:'processed',linkType:'website'} to re-scan everything matching). Async by default — returns once the job is queued; poll progress via `unified_links` or `link_sources_list_items`. forceReplace=true (default) deletes & re-ingests existing documents per 2025 RAG best practice. |
|
|
782
|
+
| `link_sources_update` | Update audience tags, crawl parameters, or auto-sync config on an existing source. Set `syncMode='sitemap'` with a `sitemapUrl` and `syncFrequency` to enable scheduled re-discovery; the cron-service polls the sitemap and queues new URLs. |
|
|
721
783
|
| `link_sources_delete` | Delete a link source and its discovered items. Does not delete derived documents. Destructive. |
|
|
722
784
|
| `link_sources_list_items` | Paginated list of discovered URLs for a given link source. Filter by isProcessed / isSkipped. |
|
|
723
|
-
| `link_sources_update_item` | Mark a discovered item as processed/skipped.
|
|
785
|
+
| `link_sources_update_item` | Mark a discovered item as processed/skipped (or annotate the skip reason). Only fields you include are touched server-side — patching isProcessed alone won't reset isSkipped. |
|
|
724
786
|
| `link_sources_delete_item` | Remove one URL from a link source's discovered set. |
|
|
725
787
|
|
|
726
788
|
### `page`
|
|
@@ -746,8 +808,8 @@ _Total tools: **86**_
|
|
|
746
808
|
| ---- | ----------- |
|
|
747
809
|
| `tools_list` | List every custom tool in the project (rest_api, custom_execute, hybrid, data_store, web_search). |
|
|
748
810
|
| `tools_get` | Fetch one custom tool with its full config. |
|
|
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
|
|
811
|
+
| `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!" } } ``` **apiConfig**: use `url` (canonical) — `endpoint` is accepted as a legacy alias and auto-mapped. `queryParams` accepts both Record<string,string> and Array<{key,value}> shapes. **Security**: tool code referencing `process.env` is rejected server-side — put secrets in apiConfig.headers with template placeholders. |
|
|
812
|
+
| `tools_update` | Patch selected fields of an existing custom tool. Every field is truly optional — send only what you want to change (e.g. `{ isActive: false }`, or `{ apiConfig: { headers: {...} } }`). `displayType` is normalized like in tools_create. `apiConfig.endpoint` is accepted as a legacy alias for `apiConfig.url`. |
|
|
751
813
|
| `tools_delete` | Delete a custom tool. Destructive. |
|
|
752
814
|
| `tools_execute_dry_run` | Invoke a custom tool in test mode with sample input. Safe for iteration; does not count against usage. |
|
|
753
815
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backups.d.ts","sourceRoot":"","sources":["../../src/tools/backups.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"backups.d.ts","sourceRoot":"","sources":["../../src/tools/backups.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAmH/D"}
|
package/dist/tools/backups.js
CHANGED
|
@@ -16,16 +16,13 @@ export function backupsTools(client) {
|
|
|
16
16
|
defineTool({
|
|
17
17
|
name: "backups_create",
|
|
18
18
|
title: "Create backup",
|
|
19
|
-
description: "Snapshot the project's Qdrant collections + MySQL data.
|
|
19
|
+
description: "Snapshot the project's Qdrant collections + MySQL data. API-key callers get an async jobId (poll with jobs_wait); session callers get a synchronous { success: true }. Server-generated snapshot name; the backend does not currently accept a custom label.",
|
|
20
20
|
inputSchema: z.object({
|
|
21
21
|
projectId: projectIdArg,
|
|
22
|
-
label: z.string().max(200).optional(),
|
|
23
22
|
}),
|
|
24
23
|
handler: async (args) => {
|
|
25
24
|
const projectId = pid(client, args.projectId);
|
|
26
|
-
return client.post(`/api/dashboard/${projectId}/backups`, {
|
|
27
|
-
label: args.label,
|
|
28
|
-
});
|
|
25
|
+
return client.post(`/api/dashboard/${projectId}/backups`, {});
|
|
29
26
|
},
|
|
30
27
|
}),
|
|
31
28
|
defineTool({
|
|
@@ -61,17 +58,25 @@ export function backupsTools(client) {
|
|
|
61
58
|
}),
|
|
62
59
|
defineTool({
|
|
63
60
|
name: "backups_import",
|
|
64
|
-
title: "Import a backup",
|
|
65
|
-
description: "
|
|
61
|
+
title: "Import a MySQL backup",
|
|
62
|
+
description: "Re-attach a previously-exported MySQL backup blob (as returned by backups_download with type='mysql') to an existing Qdrant snapshot on this project. Requires `snapshotName` (the existing Qdrant snapshot to associate the data with). The `backup` body must be a full MysqlBackupData object (version, exportedAt, projectId, tables...) — its `projectId` must match the current project. Qdrant snapshot file uploads (the binary multipart flow) are not supported from MCP — use the dashboard for those.",
|
|
66
63
|
inputSchema: z.object({
|
|
67
64
|
projectId: projectIdArg,
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
snapshotName: z
|
|
66
|
+
.string()
|
|
67
|
+
.min(1)
|
|
68
|
+
.describe("Name of the Qdrant snapshot to attach this MySQL data to. Get it from backups_list."),
|
|
69
|
+
backup: z
|
|
70
|
+
.record(z.unknown())
|
|
71
|
+
.describe("MysqlBackupData object — shape: { version:1, exportedAt, projectId, tables:{ projectSectors, linkSources, linkSourceItems, uploadedFiles, ... } }. Pass the exact JSON returned by backups_download(type='mysql')."),
|
|
70
72
|
}),
|
|
71
73
|
handler: async (args) => {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
74
|
+
const projectId = pid(client, args.projectId);
|
|
75
|
+
const qs = new URLSearchParams({
|
|
76
|
+
type: "mysql",
|
|
77
|
+
snapshotName: args.snapshotName,
|
|
78
|
+
}).toString();
|
|
79
|
+
return client.post(`/api/dashboard/${projectId}/backups/import?${qs}`, args.backup);
|
|
75
80
|
},
|
|
76
81
|
}),
|
|
77
82
|
defineTool({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backups.js","sourceRoot":"","sources":["../../src/tools/backups.ts"],"names":[],"mappings":"AAAA,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;AAEtD,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,oEAAoE;YACjF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;YAClD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,SAAS,UAAU,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"backups.js","sourceRoot":"","sources":["../../src/tools/backups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CA2B/D"}
|
package/dist/tools/extract.js
CHANGED
|
@@ -5,14 +5,12 @@ export function extractTools(client) {
|
|
|
5
5
|
return [
|
|
6
6
|
defineTool({
|
|
7
7
|
name: "extract_from_urls",
|
|
8
|
-
title: "Extract
|
|
9
|
-
description: "Batch-extract
|
|
8
|
+
title: "Extract text from document URLs",
|
|
9
|
+
description: "Batch-extract raw text from a list of PDF/DOC/DOCX/TXT URLs using the document-extraction service. Returns `{ results: [{url, success, data?, error?}], summary }`. **Does NOT persist to the KB on its own** — to ingest, take each successful result and call `documents_create_from_text` (which is where you supply `audience` and `sectorId`). For api-key callers, large batches return a jobId; poll with jobs_wait.",
|
|
10
10
|
inputSchema: z.object({
|
|
11
11
|
projectId: projectIdArg,
|
|
12
12
|
urls: z.array(z.string().url()).min(1).max(500),
|
|
13
13
|
concurrency: z.number().int().min(1).max(10).default(3),
|
|
14
|
-
sectorId: z.string().optional(),
|
|
15
|
-
audience: z.array(z.string()).optional(),
|
|
16
14
|
}),
|
|
17
15
|
handler: async (args) => {
|
|
18
16
|
for (const url of args.urls) {
|
|
@@ -22,8 +20,6 @@ export function extractTools(client) {
|
|
|
22
20
|
return client.post(`/api/dashboard/${projectId}/extract-documents`, {
|
|
23
21
|
urls: args.urls,
|
|
24
22
|
concurrency: args.concurrency,
|
|
25
|
-
sectorId: args.sectorId,
|
|
26
|
-
audience: args.audience,
|
|
27
23
|
});
|
|
28
24
|
},
|
|
29
25
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA,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;AAEtD,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA,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;AAEtD,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,iCAAiC;YACxC,WAAW,EACT,6ZAA6Z;YAC/Z,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,YAAY;gBACvB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;aACxD,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,eAAe,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;gBACD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC,IAAI,CAChB,kBAAkB,SAAS,oBAAoB,EAC/C;oBACE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CACF,CAAC;YACJ,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,IACE,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,iBAAiB;QAC1B,IAAI,KAAK,0BAA0B;QACnC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form_option_sources.d.ts","sourceRoot":"","sources":["../../src/tools/form_option_sources.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAqJtD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CA+IzE"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { pid, projectIdArg } from "./helpers.js";
|
|
3
|
+
import { defineTool } from "./types.js";
|
|
4
|
+
// Form option sources hydrate select/radio/checkbox/multi_select fields from
|
|
5
|
+
// an external HTTP endpoint OR a provider integration (currently Salesforce).
|
|
6
|
+
// One row → may be referenced by multiple form fields.
|
|
7
|
+
const httpAuthType = z.enum(["none", "bearer", "header"]);
|
|
8
|
+
const authConfig = z
|
|
9
|
+
.object({
|
|
10
|
+
token: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Required when authType='bearer'. Stored encrypted."),
|
|
14
|
+
})
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Auth values for HTTP sources. Stored encrypted; not echoed back.");
|
|
17
|
+
const headers = z
|
|
18
|
+
.record(z.string())
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("Static headers sent with each upstream call. Stored encrypted; not echoed back.");
|
|
21
|
+
const queryParamsTemplate = z
|
|
22
|
+
.record(z.string())
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Static or templated query params. Tokens supported: {{search}} (typed text) and {{parent.<fieldKey>}} (dependent field values).");
|
|
25
|
+
const providerConfigSalesforce = z
|
|
26
|
+
.object({
|
|
27
|
+
sobject: z
|
|
28
|
+
.string()
|
|
29
|
+
.min(1)
|
|
30
|
+
.describe("Salesforce sObject name (e.g. 'Account', 'Lead')."),
|
|
31
|
+
searchField: z
|
|
32
|
+
.string()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("SF field used for {{search}} substring filtering when soqlTemplate is omitted (e.g. 'Name')."),
|
|
35
|
+
soqlTemplate: z
|
|
36
|
+
.string()
|
|
37
|
+
.optional()
|
|
38
|
+
.describe("Optional raw SOQL with {{search}} / {{parent.x}} tokens (SOQL-escaped before substitution)."),
|
|
39
|
+
})
|
|
40
|
+
.passthrough();
|
|
41
|
+
const providerConfig = z
|
|
42
|
+
.union([providerConfigSalesforce, z.record(z.unknown())])
|
|
43
|
+
.optional();
|
|
44
|
+
const sharedFields = {
|
|
45
|
+
name: z.string().min(1).max(255),
|
|
46
|
+
description: z.string().nullable().optional(),
|
|
47
|
+
provider: z
|
|
48
|
+
.enum(["http", "salesforce"])
|
|
49
|
+
.default("http")
|
|
50
|
+
.describe("'http' for legacy URL-based sources; 'salesforce' for SF SOQL."),
|
|
51
|
+
integrationId: z
|
|
52
|
+
.string()
|
|
53
|
+
.min(1)
|
|
54
|
+
.nullable()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Required when provider !== 'http'. ID of a row in provider_integrations."),
|
|
57
|
+
providerConfig,
|
|
58
|
+
url: z
|
|
59
|
+
.string()
|
|
60
|
+
.url()
|
|
61
|
+
.nullable()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Required when provider='http'. Upstream endpoint URL."),
|
|
64
|
+
method: z.enum(["GET", "POST"]).default("GET"),
|
|
65
|
+
authType: httpAuthType.default("none"),
|
|
66
|
+
authConfig,
|
|
67
|
+
headers,
|
|
68
|
+
queryParamsTemplate,
|
|
69
|
+
bodyTemplate: z
|
|
70
|
+
.string()
|
|
71
|
+
.nullable()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Templated JSON body for POST."),
|
|
74
|
+
responsePath: z
|
|
75
|
+
.string()
|
|
76
|
+
.nullable()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Dot-path to the array in the response (e.g. 'data.items'). Empty = auto-detect."),
|
|
79
|
+
valueField: z
|
|
80
|
+
.string()
|
|
81
|
+
.min(1)
|
|
82
|
+
.describe("Dot-path within each item used as the option `value`."),
|
|
83
|
+
labelField: z
|
|
84
|
+
.string()
|
|
85
|
+
.min(1)
|
|
86
|
+
.describe("Dot-path within each item used as the option `label`."),
|
|
87
|
+
searchParamName: z
|
|
88
|
+
.string()
|
|
89
|
+
.nullable()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe("Forwards the form's `?search=` text as this query param upstream."),
|
|
92
|
+
cacheTtlSeconds: z
|
|
93
|
+
.number()
|
|
94
|
+
.int()
|
|
95
|
+
.min(0)
|
|
96
|
+
.max(86400)
|
|
97
|
+
.default(3600)
|
|
98
|
+
.describe("Cache TTL for the resolved options. 0 = no cache."),
|
|
99
|
+
isActive: z.boolean().default(true),
|
|
100
|
+
};
|
|
101
|
+
const createSchema = z.object({
|
|
102
|
+
projectId: projectIdArg,
|
|
103
|
+
...sharedFields,
|
|
104
|
+
});
|
|
105
|
+
const updateSchema = z.object({
|
|
106
|
+
projectId: projectIdArg,
|
|
107
|
+
sourceId: z.string().min(1),
|
|
108
|
+
patch: z
|
|
109
|
+
.object({
|
|
110
|
+
name: z.string().min(1).max(255).optional(),
|
|
111
|
+
description: z.string().nullable().optional(),
|
|
112
|
+
provider: z.enum(["http", "salesforce"]).optional(),
|
|
113
|
+
integrationId: z.string().min(1).nullable().optional(),
|
|
114
|
+
providerConfig: providerConfig,
|
|
115
|
+
url: z.string().url().nullable().optional(),
|
|
116
|
+
method: z.enum(["GET", "POST"]).optional(),
|
|
117
|
+
authType: httpAuthType.optional(),
|
|
118
|
+
authConfig: authConfig,
|
|
119
|
+
headers: headers,
|
|
120
|
+
queryParamsTemplate: queryParamsTemplate,
|
|
121
|
+
bodyTemplate: z.string().nullable().optional(),
|
|
122
|
+
responsePath: z.string().nullable().optional(),
|
|
123
|
+
valueField: z.string().min(1).optional(),
|
|
124
|
+
labelField: z.string().min(1).optional(),
|
|
125
|
+
searchParamName: z.string().nullable().optional(),
|
|
126
|
+
cacheTtlSeconds: z.number().int().min(0).max(86400).optional(),
|
|
127
|
+
isActive: z.boolean().optional(),
|
|
128
|
+
})
|
|
129
|
+
.describe("Subset of fields to update."),
|
|
130
|
+
});
|
|
131
|
+
export function formOptionSourcesTools(client) {
|
|
132
|
+
return [
|
|
133
|
+
defineTool({
|
|
134
|
+
name: "form_option_sources_list",
|
|
135
|
+
title: "List form option sources",
|
|
136
|
+
description: "List every option source in the project — id, name, provider, isActive, hasSearch. Secrets are never returned.",
|
|
137
|
+
inputSchema: z.object({ projectId: projectIdArg }),
|
|
138
|
+
handler: async (args) => {
|
|
139
|
+
const projectId = pid(client, args.projectId);
|
|
140
|
+
return client.get(`/api/dashboard/${projectId}/form-option-sources`);
|
|
141
|
+
},
|
|
142
|
+
}),
|
|
143
|
+
defineTool({
|
|
144
|
+
name: "form_option_sources_get",
|
|
145
|
+
title: "Get a form option source",
|
|
146
|
+
description: "Fetch one option source's metadata + non-secret config. authConfig and headers are never returned.",
|
|
147
|
+
inputSchema: z.object({
|
|
148
|
+
projectId: projectIdArg,
|
|
149
|
+
sourceId: z.string().min(1),
|
|
150
|
+
}),
|
|
151
|
+
handler: async (args) => {
|
|
152
|
+
const projectId = pid(client, args.projectId);
|
|
153
|
+
return client.get(`/api/dashboard/${projectId}/form-option-sources/${encodeURIComponent(args.sourceId)}`);
|
|
154
|
+
},
|
|
155
|
+
}),
|
|
156
|
+
defineTool({
|
|
157
|
+
name: "form_option_sources_create",
|
|
158
|
+
title: "Create a form option source",
|
|
159
|
+
description: [
|
|
160
|
+
"Create a reusable option source for select/radio/checkbox/multi_select fields.",
|
|
161
|
+
"",
|
|
162
|
+
"**HTTP source**: provider='http', set `url`, optionally `headers`, `authType`, `authConfig.token`. Use {{search}} and {{parent.x}} in `queryParamsTemplate`/`bodyTemplate`.",
|
|
163
|
+
"",
|
|
164
|
+
"**Salesforce source**: provider='salesforce', set `integrationId` (from integrations_list) and `providerConfig: { sobject, searchField?, soqlTemplate? }`. Omit `url`/`method`/`authType`.",
|
|
165
|
+
].join("\n"),
|
|
166
|
+
inputSchema: createSchema,
|
|
167
|
+
handler: async (args) => {
|
|
168
|
+
const { projectId: rawPid, ...body } = args;
|
|
169
|
+
const projectId = pid(client, rawPid);
|
|
170
|
+
return client.post(`/api/dashboard/${projectId}/form-option-sources`, body);
|
|
171
|
+
},
|
|
172
|
+
}),
|
|
173
|
+
defineTool({
|
|
174
|
+
name: "form_option_sources_update",
|
|
175
|
+
title: "Update a form option source",
|
|
176
|
+
description: "Patch any subset of an option source's fields. authConfig/headers omitted from the patch keep their stored values.",
|
|
177
|
+
inputSchema: updateSchema,
|
|
178
|
+
handler: async (args) => {
|
|
179
|
+
const projectId = pid(client, args.projectId);
|
|
180
|
+
return client.patch(`/api/dashboard/${projectId}/form-option-sources/${encodeURIComponent(args.sourceId)}`, args.patch);
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
183
|
+
defineTool({
|
|
184
|
+
name: "form_option_sources_delete",
|
|
185
|
+
title: "Delete a form option source",
|
|
186
|
+
description: "Delete an option source. Destructive. Form fields that referenced it will fall back to their inline `options` (or render empty).",
|
|
187
|
+
inputSchema: z.object({
|
|
188
|
+
projectId: projectIdArg,
|
|
189
|
+
sourceId: z.string().min(1),
|
|
190
|
+
confirm: z.boolean().default(false),
|
|
191
|
+
}),
|
|
192
|
+
handler: async (args) => {
|
|
193
|
+
if (!args.confirm) {
|
|
194
|
+
return {
|
|
195
|
+
deleted: false,
|
|
196
|
+
reason: "Destructive. Re-invoke with confirm=true.",
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const projectId = pid(client, args.projectId);
|
|
200
|
+
return client.delete(`/api/dashboard/${projectId}/form-option-sources/${encodeURIComponent(args.sourceId)}`);
|
|
201
|
+
},
|
|
202
|
+
}),
|
|
203
|
+
defineTool({
|
|
204
|
+
name: "form_option_sources_test",
|
|
205
|
+
title: "Test a saved option source",
|
|
206
|
+
description: "Hit the upstream with the source's stored config and return the resolved options array (or upstream error). Pass `search`/`parent` to feed templates.",
|
|
207
|
+
inputSchema: z.object({
|
|
208
|
+
projectId: projectIdArg,
|
|
209
|
+
sourceId: z.string().min(1),
|
|
210
|
+
search: z.string().optional(),
|
|
211
|
+
parent: z
|
|
212
|
+
.record(z.union([z.string(), z.number(), z.boolean()]))
|
|
213
|
+
.optional()
|
|
214
|
+
.describe("Map of dependent field key → value, fed into {{parent.x}} substitutions."),
|
|
215
|
+
}),
|
|
216
|
+
handler: async (args) => {
|
|
217
|
+
const projectId = pid(client, args.projectId);
|
|
218
|
+
return client.post(`/api/dashboard/${projectId}/form-option-sources/${encodeURIComponent(args.sourceId)}/test`, { search: args.search, parent: args.parent });
|
|
219
|
+
},
|
|
220
|
+
}),
|
|
221
|
+
defineTool({
|
|
222
|
+
name: "form_option_sources_test_raw",
|
|
223
|
+
title: "Debug-test a raw HTTP option-source config",
|
|
224
|
+
description: "Hit an upstream with an inline (unsaved) HTTP option-source config — for debugging before calling form_option_sources_create. Salesforce sources are not supported here.",
|
|
225
|
+
inputSchema: z.object({
|
|
226
|
+
projectId: projectIdArg,
|
|
227
|
+
url: z.string().url(),
|
|
228
|
+
method: z.enum(["GET", "POST"]).default("GET"),
|
|
229
|
+
authType: httpAuthType.default("none"),
|
|
230
|
+
authConfig: authConfig,
|
|
231
|
+
headers: headers,
|
|
232
|
+
queryParamsTemplate: queryParamsTemplate,
|
|
233
|
+
bodyTemplate: z.string().nullable().optional(),
|
|
234
|
+
responsePath: z.string().nullable().optional(),
|
|
235
|
+
valueField: z.string().min(1),
|
|
236
|
+
labelField: z.string().min(1),
|
|
237
|
+
searchParamName: z.string().nullable().optional(),
|
|
238
|
+
search: z.string().optional(),
|
|
239
|
+
parent: z
|
|
240
|
+
.record(z.union([z.string(), z.number(), z.boolean()]))
|
|
241
|
+
.optional(),
|
|
242
|
+
}),
|
|
243
|
+
handler: async (args) => {
|
|
244
|
+
const { projectId: rawPid, ...body } = args;
|
|
245
|
+
const projectId = pid(client, rawPid);
|
|
246
|
+
return client.post(`/api/dashboard/${projectId}/form-option-sources/test-raw`, body);
|
|
247
|
+
},
|
|
248
|
+
}),
|
|
249
|
+
];
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=form_option_sources.js.map
|