@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.
Files changed (3) hide show
  1. package/README.md +9 -9
  2. package/dist/index.js +15 -15
  3. 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 Julie realtime monitor after persisting notification channels; returns workflow/session/thread/job IDs |
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 Lighthouse or Julie |
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 Lighthouse or Julie session with its persisted persona |
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 Julie realtime monitor
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 Julie asynchronously accepts creation and returns workflow, session, thread, job, and dashboard identifiers.
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 Julie need anything from me?
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 preserves whether the session is Lighthouse
210
- or Julie. stop_workflow_assistant cancels active Assistant work without
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 with Julie.", "", "Source URLs:"];
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 Julie realtime monitoring (watching a page for data changes and alerting), use the create_realtime_monitor tool instead.",
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 Julie 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 Julie is dispatched. " + `Realtime monitors CANNOT be converted to/from regular extraction workflows after creation.
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 Julie should monitor; otherwise Julie auto-detects 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.",
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: "Julie realtime workflow creation accepted. Notification settings were persisted before Julie dispatch. Creation is asynchronous; use get_workflow_assistant for status, questions, or controls, and do not poll or sleep-wait."
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 both Shelly/Lighthouse and Julie workflows.",
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. " + "Works for both Shelly/Lighthouse and Julie 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.",
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 persona and conversation persisted on its session. Works for both Lighthouse and Julie. This does not resume a paused workflow schedule; use approve_workflow for that.",
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 Julie realtime monitoring workflows. " + "Returns structured diffs showing added, removed, and changed records. " + "Only works for workflows with realtime monitoring enabled.",
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. Julie realtime workflows are architecturally different from scheduled 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.
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 agent-built workflow changes to extraction intent, navigation, pagination, data sourcing, repair, or generated scripts. `userPrompt` may be rejected with `SHELLY_INTENT_REQUIRES_EXTRACTION_SPEC` because those 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.",
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. " + "Julie realtime workflows cannot replace this workflow in place. " + "The existing workflow was left unchanged.");
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 Julie realtime workflow's interval to a scheduled interval. " + "Julie realtime workflows are architecturally different and cannot be converted in place. " + "The existing workflow was left unchanged.");
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.22",
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 Julie 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.",
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.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kadoa/mcp",
3
- "version": "0.5.22",
3
+ "version": "0.5.23",
4
4
  "description": "Kadoa MCP Server — manage workflows from Claude Desktop, Cursor, and other MCP clients",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",