@kadoa/mcp 0.5.22 → 0.5.23
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/README.md +9 -9
- package/dist/index.js +15 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -63,15 +63,15 @@ Point your client to `https://mcp.kadoa.com/mcp` with OAuth authentication.
|
|
|
63
63
|
|------|-------------|
|
|
64
64
|
| `scrape` | Immediately fetch one URL as markdown or raw HTML (shown only for enabled workspaces) |
|
|
65
65
|
| `create_workflow` | Create an agentic navigation workflow from a prompt |
|
|
66
|
-
| `create_realtime_monitor` | Create an asynchronous
|
|
66
|
+
| `create_realtime_monitor` | Create an asynchronous realtime monitoring workflow after persisting notification channels; returns workflow/session/thread/job IDs |
|
|
67
67
|
| `list_workflows` | List all workflows with status |
|
|
68
68
|
| `get_workflow` | Get canonical intent, Assistant/session, template ownership, run health, schedule, location, monitoring, and validation details |
|
|
69
69
|
| `request_workflow_update` | Ask the workflow Assistant to change extraction intent, navigation, sourcing, pagination, or generated behavior without changing the workflow ID |
|
|
70
70
|
| `get_workflow_assistant` | Get the workflow Assistant's current activity and any pending clarification question |
|
|
71
|
-
| `get_workflow_assistant_timeline` | Read paginated customer-visible Assistant messages and questions for
|
|
71
|
+
| `get_workflow_assistant_timeline` | Read paginated customer-visible Assistant messages and questions for one-time, scheduled, or realtime workflows |
|
|
72
72
|
| `answer_workflow_assistant_question` | Answer the workflow Assistant's current clarification question and resume it |
|
|
73
73
|
| `interrupt_workflow_assistant` | Safely interrupt active Assistant work without pausing the workflow schedule |
|
|
74
|
-
| `resume_workflow_assistant` | Resume an idle/interrupted
|
|
74
|
+
| `resume_workflow_assistant` | Resume an idle/interrupted workflow Assistant with its persisted role and conversation |
|
|
75
75
|
| `stop_workflow_assistant` | Stop active Assistant work without deleting or replacing the workflow |
|
|
76
76
|
| `get_workflow_strategy` | Get the current customer-safe extraction/build strategy for an Assistant or custom-script workflow |
|
|
77
77
|
| `get_workflow_history` | Get the workflow's configuration revision history (audit log) — who changed it, when, from which channel, and a `changedFields` summary per revision |
|
|
@@ -168,14 +168,14 @@ in `America/New_York`, monitoring fields/conditions, and `limit: null` for all
|
|
|
168
168
|
rows.
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
-
### Create a
|
|
171
|
+
### Create a realtime monitoring workflow
|
|
172
172
|
|
|
173
173
|
```
|
|
174
174
|
> You: Watch https://example-shop.com/products for price changes and alert me by webhook.
|
|
175
175
|
|
|
176
|
-
Claude calls create_realtime_monitor with the URL, schema/change intent, and notification settings. Kadoa persists reusable notification channels first, then
|
|
176
|
+
Claude calls create_realtime_monitor with the URL, schema/change intent, and notification settings. Kadoa persists reusable notification channels first, then asynchronously accepts creation and returns workflow, session, thread, job, and dashboard identifiers.
|
|
177
177
|
|
|
178
|
-
> You: Does
|
|
178
|
+
> You: Does the workflow Assistant need anything from me?
|
|
179
179
|
|
|
180
180
|
Claude uses get_workflow_assistant and the other workflow Assistant tools for follow-up status, questions, interrupts, resumes, or stops. It does not poll or sleep-wait.
|
|
181
181
|
```
|
|
@@ -206,9 +206,9 @@ navigation, and extraction approach.
|
|
|
206
206
|
> You: Interrupt the Assistant for now, then resume it later.
|
|
207
207
|
|
|
208
208
|
Claude calls interrupt_workflow_assistant. When asked later, it calls
|
|
209
|
-
resume_workflow_assistant, which
|
|
210
|
-
|
|
211
|
-
pausing or deleting the workflow itself.
|
|
209
|
+
resume_workflow_assistant, which continues the same Assistant role and
|
|
210
|
+
conversation for either workflow mode. stop_workflow_assistant cancels active
|
|
211
|
+
Assistant work without pausing or deleting the workflow itself.
|
|
212
212
|
```
|
|
213
213
|
|
|
214
214
|
Use `update_workflow` for deterministic metadata such as name, schedule, tags,
|
package/dist/index.js
CHANGED
|
@@ -53129,7 +53129,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53129
53129
|
return urls.length > 0 ? urls : null;
|
|
53130
53130
|
}
|
|
53131
53131
|
function buildRealtimeAssistantInstructions(args, urls) {
|
|
53132
|
-
const lines = ["Create a realtime monitoring workflow
|
|
53132
|
+
const lines = ["Create a realtime monitoring workflow.", "", "Source URLs:"];
|
|
53133
53133
|
for (const url3 of urls)
|
|
53134
53134
|
lines.push(`- ${url3}`);
|
|
53135
53135
|
if (args.prompt)
|
|
@@ -53229,7 +53229,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53229
53229
|
|
|
53230
53230
|
` + "Create a data extraction workflow using agentic navigation. Supports one-time or scheduled runs. " + "If entity and schema are provided, they guide the extraction; otherwise the AI agent auto-detects the schema from the page. " + "The workflow runs asynchronously and may take several minutes. Do NOT poll or sleep-wait for completion. " + `Return the workflow ID to the user and let them check back later with get_workflow or fetch_data.
|
|
53231
53231
|
|
|
53232
|
-
` + "PREFER TEMPLATES: If the user's request matches an existing template, instantiate it via `templateId` instead of writing a fresh prompt/schema. " + "Use `list_templates` to discover available templates and `get_template` to inspect schemas before deciding. " + "When creating from a template, call this tool with the template's `templateId`, the source `urls`, and optional `templateVersion` only. Never copy the template prompt, entity, or schema into standalone creation, and never silently match or rewrite inline configuration.\n\n" + "NOTE: This tool is for one-time or scheduled extraction ONLY. " + "For continuous
|
|
53232
|
+
` + "PREFER TEMPLATES: If the user's request matches an existing template, instantiate it via `templateId` instead of writing a fresh prompt/schema. " + "Use `list_templates` to discover available templates and `get_template` to inspect schemas before deciding. " + "When creating from a template, call this tool with the template's `templateId`, the source `urls`, and optional `templateVersion` only. Never copy the template prompt, entity, or schema into standalone creation, and never silently match or rewrite inline configuration.\n\n" + "NOTE: This tool is for one-time or scheduled extraction ONLY. " + "For continuous realtime monitoring that watches a page for data changes and sends alerts, use the create_realtime_monitor tool instead.",
|
|
53233
53233
|
inputSchema: strictSchema({
|
|
53234
53234
|
...extractionInputShape,
|
|
53235
53235
|
...urlInputShape,
|
|
@@ -53340,9 +53340,9 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53340
53340
|
});
|
|
53341
53341
|
}));
|
|
53342
53342
|
server.registerTool("create_realtime_monitor", {
|
|
53343
|
-
description: "Create a
|
|
53343
|
+
description: "Create a realtime monitoring workflow that continuously watches a page for data changes and sends alerts. " + "Use this when the user wants to monitor, track, or watch a page in realtime. " + "At least one notification channel (email, webhook, slack, or websocket) is required; notification settings are persisted before Assistant creation is dispatched. " + `Realtime monitors CANNOT be converted to/from one-time or scheduled extraction workflows after creation.
|
|
53344
53344
|
|
|
53345
|
-
` + "If entity and schema are provided, they guide what
|
|
53345
|
+
` + "If entity and schema are provided, they guide what the Assistant should monitor; otherwise the Assistant determines what to watch. " + "Creation is asynchronous and the response includes workflow, session, thread, and job IDs plus a dashboard URL. " + "Use generic workflow Assistant tools (get_workflow_assistant, answer_workflow_assistant_question, interrupt_workflow_assistant, resume_workflow_assistant, stop_workflow_assistant) for follow-up status, questions, and controls. " + "Do NOT poll or sleep-wait for completion.",
|
|
53346
53346
|
inputSchema: strictSchema({
|
|
53347
53347
|
...extractionInputShape,
|
|
53348
53348
|
...urlInputShape,
|
|
@@ -53387,7 +53387,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53387
53387
|
threadId: result.threadId,
|
|
53388
53388
|
jobId: result.jobId,
|
|
53389
53389
|
dashboardUrl: workflowDashboardUrl(result.workflowId),
|
|
53390
|
-
message: "
|
|
53390
|
+
message: "Realtime monitoring workflow creation accepted. Notification settings were persisted before Assistant dispatch. Creation is asynchronous; use get_workflow_assistant for status, questions, or controls, and do not poll or sleep-wait."
|
|
53391
53391
|
});
|
|
53392
53392
|
}));
|
|
53393
53393
|
server.registerTool("list_workflows", {
|
|
@@ -53545,7 +53545,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53545
53545
|
});
|
|
53546
53546
|
}));
|
|
53547
53547
|
server.registerTool("get_workflow_assistant", {
|
|
53548
|
-
description: "Get the current Assistant lifecycle for a workflow, including whether it is working, waiting for input, idle, interrupted, or closed and any pending customer question. Works for
|
|
53548
|
+
description: "Get the current Assistant lifecycle for a workflow, including whether it is working, waiting for input, idle, interrupted, or closed and any pending customer question. Works for one-time or scheduled extraction workflows and realtime monitoring workflows.",
|
|
53549
53549
|
inputSchema: strictSchema({
|
|
53550
53550
|
workflowId: exports_external.string().min(1).describe("The workflow ID")
|
|
53551
53551
|
}),
|
|
@@ -53583,7 +53583,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53583
53583
|
});
|
|
53584
53584
|
}));
|
|
53585
53585
|
server.registerTool("get_workflow_assistant_timeline", {
|
|
53586
|
-
description: "Read the customer-visible conversation history for a workflow Assistant, including user messages, Assistant messages, and clarification questions with answers. " + "
|
|
53586
|
+
description: "Read the customer-visible conversation history for a workflow Assistant, including user messages, Assistant messages, and clarification questions with answers. " + "Use this when the user asks what the Assistant said or asked, how a clarification was answered, or to show the latest conversation for a workflow. " + "Supports one-time or scheduled extraction workflows and realtime monitoring workflows. Use get_workflow_history instead for configuration revisions. " + "Results are chronological within each page; use nextCursor to request older items when hasMore is true.",
|
|
53587
53587
|
inputSchema: strictSchema({
|
|
53588
53588
|
workflowId: exports_external.string().min(1).describe("The workflow ID"),
|
|
53589
53589
|
cursor: exports_external.string().min(1).optional().describe("Opaque nextCursor from the previous page"),
|
|
@@ -53685,7 +53685,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53685
53685
|
});
|
|
53686
53686
|
}));
|
|
53687
53687
|
server.registerTool("resume_workflow_assistant", {
|
|
53688
|
-
description: "Resume an idle or interrupted workflow Assistant using the
|
|
53688
|
+
description: "Resume an idle or interrupted workflow Assistant using the role and conversation persisted on its session. Works for one-time or scheduled extraction workflows and realtime monitoring workflows. This does not resume a paused workflow schedule; use approve_workflow for that.",
|
|
53689
53689
|
inputSchema: strictSchema({
|
|
53690
53690
|
workflowId: exports_external.string().min(1).describe("Workflow whose Assistant session should resume")
|
|
53691
53691
|
}),
|
|
@@ -53937,7 +53937,7 @@ function registerTools(server, ctx, capabilities) {
|
|
|
53937
53937
|
});
|
|
53938
53938
|
}));
|
|
53939
53939
|
server.registerTool("list_changes", {
|
|
53940
|
-
description: "List detected data changes across one or more
|
|
53940
|
+
description: "List detected data changes across one or more realtime monitoring workflows. " + "Returns structured diffs showing added, removed, and changed records. " + "Only works for workflows with realtime monitoring enabled.",
|
|
53941
53941
|
inputSchema: {
|
|
53942
53942
|
workflowIds: exports_external.preprocess(coerceArray(true), exports_external.array(exports_external.string())).optional().describe("Workflow IDs to filter by. If omitted, returns changes for all ACTIVE monitoring workflows."),
|
|
53943
53943
|
startDate: exports_external.string().optional().describe("Start date filter (ISO format, e.g. 2025-01-01)"),
|
|
@@ -54047,9 +54047,9 @@ function registerTools(server, ctx, capabilities) {
|
|
|
54047
54047
|
server.registerTool("update_workflow", {
|
|
54048
54048
|
description: `Update a workflow's configuration. All fields are optional - only provided fields will be updated. Use this to change the name, URLs, extraction schema, entity, prompt, schedule, or other metadata.
|
|
54049
54049
|
|
|
54050
|
-
` + `IMPORTANT: You cannot change a workflow's interval to or from REAL_TIME.
|
|
54050
|
+
` + `IMPORTANT: You cannot change a workflow's interval to or from REAL_TIME. Realtime monitoring workflows are architecturally different from one-time or scheduled extraction workflows and must be created with create_realtime_monitor from the start. Existing workflows cannot be converted between these modes in place; do not delete and recreate a workflow as an update workaround.
|
|
54051
54051
|
|
|
54052
|
-
` + "ASSISTANT-OWNED INTENT: Use request_workflow_update - not `userPrompt` - for
|
|
54052
|
+
` + "ASSISTANT-OWNED INTENT: Use request_workflow_update - not `userPrompt` - for Assistant-built workflow changes to extraction intent, navigation, pagination, data sourcing, repair, or generated scripts. The API may reject `userPrompt` because these workflows' canonical intent is owned by the Assistant. " + "Call get_workflow first. If its template.controlledParts contains the setting, create and apply a template version instead of overriding the workflow directly. NEVER delete and recreate a workflow to work around an update limitation - that changes workflowId, breaks downstream tables/connectors, and discards history.",
|
|
54053
54053
|
inputSchema: strictSchema({
|
|
54054
54054
|
workflowId: exports_external.string().describe("The workflow ID to update"),
|
|
54055
54055
|
name: exports_external.string().optional().describe("New name for the workflow"),
|
|
@@ -54092,10 +54092,10 @@ function registerTools(server, ctx, capabilities) {
|
|
|
54092
54092
|
const isCurrentlyRealTime = isRealTimeInterval(workflow.updateInterval);
|
|
54093
54093
|
const isRequestingRealTime = isRealTimeInterval(updates.updateInterval);
|
|
54094
54094
|
if (isRequestingRealTime && !isCurrentlyRealTime) {
|
|
54095
|
-
return errorResult("Cannot change a regular workflow's interval to REAL_TIME. " + "
|
|
54095
|
+
return errorResult("Cannot change a regular workflow's interval to REAL_TIME. " + "Realtime monitoring workflows cannot replace this workflow in place. " + "The existing workflow was left unchanged.");
|
|
54096
54096
|
}
|
|
54097
54097
|
if (!isRequestingRealTime && isCurrentlyRealTime) {
|
|
54098
|
-
return errorResult("Cannot change a
|
|
54098
|
+
return errorResult("Cannot change a realtime monitoring workflow's interval to a scheduled interval. " + "Realtime monitoring workflows are architecturally different and cannot be converted in place. " + "The existing workflow was left unchanged.");
|
|
54099
54099
|
}
|
|
54100
54100
|
}
|
|
54101
54101
|
if (updates.updateInterval === "CUSTOM" && (!updates.schedules || updates.schedules.length === 0)) {
|
|
@@ -54961,7 +54961,7 @@ var package_default;
|
|
|
54961
54961
|
var init_package = __esm(() => {
|
|
54962
54962
|
package_default = {
|
|
54963
54963
|
name: "@kadoa/mcp",
|
|
54964
|
-
version: "0.5.
|
|
54964
|
+
version: "0.5.23",
|
|
54965
54965
|
description: "Kadoa MCP Server — manage workflows from Claude Desktop, Cursor, and other MCP clients",
|
|
54966
54966
|
type: "module",
|
|
54967
54967
|
main: "dist/index.js",
|
|
@@ -60571,7 +60571,7 @@ async function createServer(auth, options) {
|
|
|
60571
60571
|
"",
|
|
60572
60572
|
"Workflow lifecycle: create_workflow \u2192 get_workflow (check status) \u2192 fetch_data (get results). Workflows run asynchronously - never poll or sleep-wait.",
|
|
60573
60573
|
"",
|
|
60574
|
-
"Use create_realtime_monitor only when the user wants continuous
|
|
60574
|
+
"Use create_realtime_monitor only when the user wants continuous realtime change detection with alerts. It first persists notification channels, then asynchronously returns workflow/session/thread/job IDs; use the workflow Assistant tools for follow-up status, questions, and controls.",
|
|
60575
60575
|
"For one-time or scheduled extraction, use create_workflow. Use scrape for an immediate raw HTML or markdown fetch from one URL. Use create_workflow for structured extraction, recurring runs, monitoring, or navigation-heavy jobs.",
|
|
60576
60576
|
"If a one-time or scheduled workflow fails, retry it with run_workflow using the existing workflow ID. Do NOT delete and recreate the workflow just to retry it - preserve its workflow ID and configuration. Realtime workflows cannot be manually run.",
|
|
60577
60577
|
"Use list_changes and get_change to retrieve detected diffs from realtime monitoring workflows.",
|