diff --git a/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx b/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx
new file mode 100644
index 000000000..c904b0067
--- /dev/null
+++ b/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx
@@ -0,0 +1,78 @@
+{/* TODO: stub cloned from _section-after-setup-atlassianmcp-common-workflows.mdx for Dart AI MCP. Review and update connector-specific references (URLs, scopes, app-registration steps) before merging. */}
+export const sectionTitle = 'Common workflows'
+
+import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'
+
+### Get your cloud ID
+
+Most Dart AI MCP tools require a `cloudId` — the UUID that identifies your Atlassian cloud site. Call `dartai_getaccessibleatlassianresources` once to retrieve it, then pass the `id` field value in every subsequent tool call.
+
+
+
+
+
+ ```typescript
+ // Step 1 — get the cloud ID
+ const resources = await actions.executeTool({
+ connectionName: 'dartai',
+ identifier: 'user_123',
+ toolName: 'dartai_getaccessibleatlassianresources',
+ toolInput: {},
+ });
+ const cloudId = resources[0].id;
+
+ // Step 2 — use cloudId in subsequent calls
+ const issue = await actions.executeTool({
+ connectionName: 'dartai',
+ identifier: 'user_123',
+ toolName: 'dartai_getjiraissue',
+ toolInput: {
+ cloudId,
+ issueIdOrKey: 'KAN-1',
+ },
+ });
+ console.log(issue);
+ ```
+
+
+ ```python
+ # Step 1 — get the cloud ID
+ resources = actions.execute_tool(
+ connection_name="dartai",
+ identifier="user_123",
+ tool_name="dartai_getaccessibleatlassianresources",
+ tool_input={},
+ )
+ cloud_id = resources[0]["id"]
+
+ # Step 2 — use cloud_id in subsequent calls
+ issue = actions.execute_tool(
+ connection_name="dartai",
+ identifier="user_123",
+ tool_name="dartai_getjiraissue",
+ tool_input={
+ "cloudId": cloud_id,
+ "issueIdOrKey": "KAN-1",
+ },
+ )
+ print(issue)
+ ```
+
+
+
+The `dartai_getaccessibleatlassianresources` response looks like this:
+
+```json
+[
+ {
+ "id": "a4c9b3e2-1234-5678-abcd-ef0123456789",
+ "name": "My Company",
+ "url": "https://mycompany.atlassian.net",
+ "scopes": ["read:jira-work", "write:jira-work", "read:confluence-content.all"]
+ }
+]
+```
+
+Use `id` as the `cloudId` parameter. If the user belongs to multiple Atlassian sites, the list contains one entry per site — pick the one matching the target `url`.
diff --git a/src/components/templates/agent-connectors/_setup-dartai.mdx b/src/components/templates/agent-connectors/_setup-dartai.mdx
new file mode 100644
index 000000000..cf02fba81
--- /dev/null
+++ b/src/components/templates/agent-connectors/_setup-dartai.mdx
@@ -0,0 +1,26 @@
+{/* TODO: stub cloned from _setup-atlassianmcp.mdx for Dart AI MCP. Review and update connector-specific references (URLs, scopes, app-registration steps) before merging. */}
+import { Steps, Aside } from '@astrojs/starlight/components'
+
+Dart AI MCP uses OAuth 2.1 with Dynamic Client Registration (DCR) and PKCE — no client ID or secret is needed. Scalekit automatically registers an OAuth client on behalf of each user and handles token management.
+
+
+1. ### Create a connection in Scalekit
+
+ In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and click **Create Connection**. Find **Dart AI MCP** in the catalog and click **Create**.
+
+ {/* TODO: add screenshot — alt: "Create connection for Dart AI MCP in Scalekit dashboard", original src: @/assets/docs/agent-connectors/dartai/create-connection.png */}
+
+2. ### Authorize the connection
+
+ Click **Authorize** on the connection detail page. Scalekit initiates the OAuth 2.1 + PKCE flow with Dynamic Client Registration. You will be redirected to Dart AI to grant access.
+
+ {/* TODO: add provider-specific steps — describe where in Dart AI the authorization consent screen appears and what permissions are requested */}
+
+ {/* TODO: add screenshot — alt: "Dart AI MCP OAuth consent screen", original src: @/assets/docs/agent-connectors/dartai/oauth-consent.png */}
+
+3. ### Verify the connection is active
+
+ After authorizing, you are redirected back to Scalekit. The connection status should show **Active**. You can now call Dart AI tools through Scalekit AgentKit.
+
+ {/* TODO: add screenshot — alt: "Active Dart AI MCP connection in Scalekit dashboard", original src: @/assets/docs/agent-connectors/dartai/connection-active.png */}
+
diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts
index ded5fb340..c996672f7 100644
--- a/src/components/templates/agent-connectors/index.ts
+++ b/src/components/templates/agent-connectors/index.ts
@@ -22,6 +22,7 @@ export { default as SetupCloseSection } from './_setup-close.mdx'
export { default as SetupCommonroommcpSection } from './_setup-commonroommcp.mdx'
export { default as SetupConfluenceSection } from './_setup-confluence.mdx'
export { default as SetupCustomeriomcpSection } from './_setup-customeriomcp.mdx'
+export { default as SetupDartaiSection } from './_setup-dartai.mdx'
export { default as SetupDatabricksSection } from './_setup-databricks.mdx'
export { default as SetupDatadogSection } from './_setup-datadog.mdx'
export { default as SetupDevinmcpSection } from './_setup-devinmcp.mdx'
@@ -132,6 +133,7 @@ export { default as SectionAfterSetupCloseCommonWorkflows } from './_section-aft
export { default as SectionAfterSetupCommonroommcpCommonWorkflows } from './_section-after-setup-commonroommcp-common-workflows.mdx'
export { default as SectionAfterSetupConfluenceCommonWorkflows } from './_section-after-setup-confluence-common-workflows.mdx'
export { default as SectionAfterSetupCustomeriomcpCommonWorkflows } from './_section-after-setup-customeriomcp-common-workflows.mdx'
+export { default as SectionAfterSetupDartaiCommonWorkflows } from './_section-after-setup-dartai-common-workflows.mdx'
export { default as SectionAfterSetupDatabricksCommonWorkflows } from './_section-after-setup-databricks-common-workflows.mdx'
export { default as SectionAfterSetupDatadogCommonWorkflows } from './_section-after-setup-datadog-common-workflows.mdx'
export { default as SectionAfterSetupDiarizeCommonWorkflows } from './_section-after-setup-diarize-common-workflows.mdx'
diff --git a/src/content/docs/agentkit/connectors/dartai.mdx b/src/content/docs/agentkit/connectors/dartai.mdx
new file mode 100644
index 000000000..2dd1e208c
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/dartai.mdx
@@ -0,0 +1,72 @@
+---
+title: 'Dart AI MCP connector'
+tableOfContents: true
+description: 'AI-native project management tool for task and document management with deep AI integration.'
+sidebar:
+ label: 'Dart AI MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/dartai.svg
+connectorAuthType: OAuth2.1/DCR
+connectorCategories: [Project Management, AI, Productivity]
+head:
+ - tag: style
+ content: |
+ .sl-markdown-content h2 {
+ font-size: var(--sl-text-xl);
+ }
+ .sl-markdown-content h3 {
+ font-size: var(--sl-text-lg);
+ }
+---
+
+import ToolList from '@/components/ToolList.astro'
+import { tools } from '@/data/agent-connectors/dartai'
+import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
+import { AgentKitCredentials } from '@components/templates'
+import { QuickstartGenericOauthSection } from '@components/templates'
+
+
+
+1. ### Install the SDK
+
+
+
+ ```bash frame="terminal"
+ npm install @scalekit-sdk/node
+ ```
+
+
+ ```bash frame="terminal"
+ pip install scalekit
+ ```
+
+
+
+ Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/)
+
+2. ### Set your credentials
+
+
+
+3. ### Authorize and make your first call
+
+
+
+
+
+## What you can do
+
+Connect this agent connector to let your agent:
+
+- **Url add task attachment from** — Attach a file from a provided URL to a task
+- **Comment add task** — Record a new comment that the user intends to add to a given task
+- **Tracking add task time** — Record an additional time tracking entry on a task
+- **Create agent, doc, task** — Create a new agent in the workspace with a name and optional description or instructions
+- **Delete agent, doc, task** — Delete an agent by its ID
+- **Get agent, config, dartboard** — Retrieve an existing agent by its ID, including its name and current description
+
+## Tool list
+
+Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.
+
+
diff --git a/src/data/agent-connectors/catalog.ts b/src/data/agent-connectors/catalog.ts
index c8951b28f..4d642fbfe 100644
--- a/src/data/agent-connectors/catalog.ts
+++ b/src/data/agent-connectors/catalog.ts
@@ -1249,4 +1249,9 @@ export const catalog: Record = {
authType: 'OAuth 2.0',
categories: ['Communication'],
},
+ dartai: {
+ iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/dartai.svg',
+ authType: 'OAuth2.1/DCR',
+ categories: ['Project Management', 'AI', 'Productivity'],
+ },
}
diff --git a/src/data/agent-connectors/dartai.ts b/src/data/agent-connectors/dartai.ts
new file mode 100644
index 000000000..e3b527252
--- /dev/null
+++ b/src/data/agent-connectors/dartai.ts
@@ -0,0 +1,818 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'dartai_add_task_attachment_from_url',
+ description: `Attach a file from a provided URL to a task.`,
+ params: [
+ { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` },
+ {
+ name: 'url',
+ type: 'string',
+ required: true,
+ description: `The URL of the file to attach.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Optional display name for the attachment.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_add_task_comment',
+ description: `Record a new comment that the user intends to add to a given task.`,
+ params: [
+ {
+ name: 'taskDuid',
+ type: 'string',
+ required: true,
+ description: `The ID of the task to add a comment to.`,
+ },
+ { name: 'text', type: 'string', required: true, description: `The comment text.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_add_task_time_tracking',
+ description: `Record an additional time tracking entry on a task.`,
+ params: [
+ {
+ name: 'minutes',
+ type: 'integer',
+ required: true,
+ description: `Number of minutes to log.`,
+ },
+ { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ {
+ name: 'startedAt',
+ type: 'string',
+ required: false,
+ description: `When the time tracking started.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_create_agent',
+ description: `Create a new agent in the workspace with a name and optional description or instructions.`,
+ params: [
+ {
+ name: 'item_name',
+ type: 'string',
+ required: true,
+ description: `The display name of the new agent.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'item_executionMode',
+ type: 'string',
+ required: false,
+ description: `How the agent runs when triggered.`,
+ },
+ {
+ name: 'item_forwarding_body',
+ type: 'string',
+ required: false,
+ description: `Custom request body template for the forwarding webhook.`,
+ },
+ {
+ name: 'item_forwarding_responseKey',
+ type: 'string',
+ required: false,
+ description: `Key in the webhook response to extract as the agent's output.`,
+ },
+ {
+ name: 'item_forwarding_url',
+ type: 'string',
+ required: false,
+ description: `Webhook URL to forward tasks to (used when executionMode is Forwarding).`,
+ },
+ {
+ name: 'item_instructions_markdown',
+ type: 'string',
+ required: false,
+ description: `Markdown instructions for the agent (used when executionMode is Instructions).`,
+ },
+ {
+ name: 'item_instructions_model',
+ type: 'string',
+ required: false,
+ description: `LLM model to use for the agent's instructions.`,
+ },
+ {
+ name: 'item_instructions_thinkingLevel',
+ type: 'string',
+ required: false,
+ description: `Thinking depth level for the agent's LLM.`,
+ },
+ {
+ name: 'item_instructions_webEnabled',
+ type: 'boolean',
+ required: false,
+ description: `Whether the agent can browse the web.`,
+ },
+ {
+ name: 'item_local_agent',
+ type: 'string',
+ required: false,
+ description: `Local CLI agent to use when executionMode is Local.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_create_doc',
+ description: `Record a new doc that the user intends to write down.`,
+ params: [
+ { name: 'item_title', type: 'string', required: true, description: `The title of the doc.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'item_dartboardDuid',
+ type: 'string',
+ required: false,
+ description: `The ID of the dartboard to place the doc in.`,
+ },
+ {
+ name: 'item_text',
+ type: 'string',
+ required: false,
+ description: `The doc content in markdown format.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_create_task',
+ description: `Record a new task that the user intends to do.`,
+ params: [
+ { name: 'item', type: 'object', required: true, description: `The task object to create.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_delete_agent',
+ description: `Delete an agent by its ID.`,
+ params: [
+ {
+ name: 'duid',
+ type: 'string',
+ required: true,
+ description: `The ID of the agent to delete.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_delete_doc',
+ description: `Move an existing doc to the trash.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the doc to delete.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_delete_task',
+ description: `Move an existing task to the trash.`,
+ params: [
+ {
+ name: 'duid',
+ type: 'string',
+ required: true,
+ description: `The ID of the task to delete.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_agent',
+ description: `Retrieve an existing agent by its ID, including its name and current description.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the agent.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_config',
+ description: `Get information about the user's space, including all possible values.`,
+ params: [
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_dartboard',
+ description: `Retrieve an existing dartboard.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the dartboard.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_doc',
+ description: `Retrieve an existing doc.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the doc.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_folder',
+ description: `Retrieve an existing folder by its ID.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the folder.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_task',
+ description: `Retrieve an existing task by its ID.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the task.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_get_view',
+ description: `Retrieve an existing view by its ID.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the view.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_list_agents',
+ description: `List all agents in the workspace.`,
+ params: [
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_list_comments',
+ description: `List comments for a task with filtering options.`,
+ params: [
+ { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Max number of comments to return.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of comments to skip.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_list_docs',
+ description: `List docs with filtering and search capabilities.`,
+ params: [
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'dartboardDuid',
+ type: 'string',
+ required: false,
+ description: `Filter by dartboard ID.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Max number of docs to return.`,
+ },
+ { name: 'offset', type: 'integer', required: false, description: `Number of docs to skip.` },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ { name: 'text', type: 'string', required: false, description: `Search text.` },
+ ],
+ },
+ {
+ name: 'dartai_list_help_center_articles',
+ description: `Search for up to two help center articles by semantic similarity to a query.`,
+ params: [
+ { name: 'text', type: 'string', required: true, description: `The search query text.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_list_tasks',
+ description: `List tasks with powerful filtering options.`,
+ params: [
+ {
+ name: 'assigneeDuid',
+ type: 'string',
+ required: false,
+ description: `Filter by assignee user ID.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'dartboardDuid',
+ type: 'string',
+ required: false,
+ description: `Filter by dartboard ID.`,
+ },
+ { name: 'limit', type: 'integer', required: false, description: `Max number of tasks.` },
+ { name: 'offset', type: 'integer', required: false, description: `Number of tasks to skip.` },
+ { name: 'priority', type: 'string', required: false, description: `Filter by priority.` },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ { name: 'statusDuid', type: 'string', required: false, description: `Filter by status ID.` },
+ { name: 'text', type: 'string', required: false, description: `Search text.` },
+ ],
+ },
+ {
+ name: 'dartai_move_task',
+ description: `Move a task to a specific position within results.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the task to move.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'dartboardDuid',
+ type: 'string',
+ required: false,
+ description: `The target dartboard ID.`,
+ },
+ { name: 'order', type: 'number', required: false, description: `The order/position value.` },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_report_issue',
+ description: `Create a concise markdown issue report for Dart Support.`,
+ params: [
+ {
+ name: 'description',
+ type: 'string',
+ required: true,
+ description: `Detailed description of the issue.`,
+ },
+ { name: 'title', type: 'string', required: true, description: `The issue title.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_retrieve_skill_by_title',
+ description: `Retrieve a skill by its title.`,
+ params: [
+ {
+ name: 'title',
+ type: 'string',
+ required: true,
+ description: `The title of the skill to retrieve.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_update_agent',
+ description: `Update an agent's name and/or description. Only the fields provided will be changed.`,
+ params: [
+ {
+ name: 'duid',
+ type: 'string',
+ required: true,
+ description: `The ID of the agent to update.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'item_executionMode',
+ type: 'string',
+ required: false,
+ description: `How the agent runs when triggered.`,
+ },
+ {
+ name: 'item_forwarding_body',
+ type: 'string',
+ required: false,
+ description: `Updated custom request body for the forwarding webhook.`,
+ },
+ {
+ name: 'item_forwarding_responseKey',
+ type: 'string',
+ required: false,
+ description: `Updated key in the webhook response to extract.`,
+ },
+ {
+ name: 'item_forwarding_url',
+ type: 'string',
+ required: false,
+ description: `Updated webhook URL for forwarding mode.`,
+ },
+ {
+ name: 'item_instructions_markdown',
+ type: 'string',
+ required: false,
+ description: `Updated markdown instructions for the agent.`,
+ },
+ {
+ name: 'item_instructions_model',
+ type: 'string',
+ required: false,
+ description: `Updated LLM model for the agent.`,
+ },
+ {
+ name: 'item_instructions_thinkingLevel',
+ type: 'string',
+ required: false,
+ description: `Updated thinking depth level for the agent's LLM.`,
+ },
+ {
+ name: 'item_instructions_webEnabled',
+ type: 'boolean',
+ required: false,
+ description: `Whether the agent can browse the web.`,
+ },
+ {
+ name: 'item_local_agent',
+ type: 'string',
+ required: false,
+ description: `Updated local CLI agent for Local execution mode.`,
+ },
+ {
+ name: 'item_name',
+ type: 'string',
+ required: false,
+ description: `New display name for the agent.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_update_doc',
+ description: `Update certain properties of an existing doc.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the doc to update.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'item_dartboardDuid',
+ type: 'string',
+ required: false,
+ description: `Updated dartboard ID to move the doc to.`,
+ },
+ {
+ name: 'item_title',
+ type: 'string',
+ required: false,
+ description: `Updated title for the doc.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_update_doc_text',
+ description: `Apply targeted text updates to a doc's content.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the doc.` },
+ {
+ name: 'operations',
+ type: 'array',
+ required: true,
+ description: `List of text update operations to apply.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_update_task',
+ description: `Update properties of an existing task.`,
+ params: [
+ {
+ name: 'duid',
+ type: 'string',
+ required: true,
+ description: `The ID of the task to update.`,
+ },
+ { name: 'item', type: 'object', required: true, description: `The task fields to update.` },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+ {
+ name: 'dartai_update_task_description',
+ description: `Apply targeted text updates to a task's description.`,
+ params: [
+ { name: 'duid', type: 'string', required: true, description: `The ID of the task.` },
+ {
+ name: 'operations',
+ type: 'array',
+ required: true,
+ description: `List of text update operations.`,
+ },
+ {
+ name: 'conversation_id',
+ type: 'string',
+ required: false,
+ description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`,
+ },
+ {
+ name: 'reason_for_invocation',
+ type: 'string',
+ required: false,
+ description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`,
+ },
+ ],
+ },
+]