> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Dovetail MCP server

The Dovetail MCP connector routes your AI agent's tool calls to Dovetail's own MCP server through Scalekit. Each user connects their own Dovetail access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 44 tools.

**Authentication:** Bearer Token
**Categories:** AI, Analytics
**Tools:** 44: 36 read, 8 write, 0 destructive
**Users sign in with:** Access token
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=DOVETAILMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Dovetail MCP connection

   In **AgentKit > Connections**, create a Dovetail MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'dovetailmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Dovetail MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'dovetailmcp_get_dovetail_projects',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "dovetailmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Dovetail MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="dovetailmcp_get_dovetail_projects",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Dovetail MCP server credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'dovetailmcp_download_file',
  toolInput: {
    file_id: '<file_id>',
  },
  connector: 'dovetailmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="dovetailmcp_download_file",
    tool_input={
        "file_id": "<file_id>",
    },
    connection_name="dovetailmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `dovetailmcp_download_file`

Download File · Read-only

Get a short-lived presigned URL to download the raw content of a file attachment.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `file_id` (`string`, required): The unique identifier of the file attachment for which to generate a presigned download URL.

Example input: `{"file_id":"<file_id>"}`

### `dovetailmcp_get_channel`

Get Channel · Read-only

Retrieve detailed information about a specific channel by its unique ID, including its topics.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channel_id` (`string`, required): The unique identifier of the Dovetail channel to retrieve.

Example input: `{"channel_id":"<channel_id>"}`

### `dovetailmcp_get_channel_datum`

Get Channel Datum · Read-only

Retrieve a single channel data point by its ID, including its theme classifications.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `datum_id` (`string`, required): The unique identifier of the data point to retrieve.

Example input: `{"datum_id":"<datum_id>"}`

### `dovetailmcp_get_contact`

Get Contact · Read-only

Retrieve a single contact by its unique identifier. Contacts represent research participants or customers in the Dovetail workspace.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): The unique identifier of the contact to retrieve.

Example input: `{"contact_id":"<contact_id>"}`

### `dovetailmcp_get_data_content`

Get Data Content · Read-only

Export and retrieve the complete content of a research data entry as markdown.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data_id` (`string`, required): The unique identifier of the research data entry whose content you want to retrieve.
- `include_file_content` (`boolean`, optional): Set to true to also read the extracted text of the entry's attached document files (PDF, DOCX, PPTX, XLSX). By default attached files appear only as links and their text is not included.
- `max_chars` (`integer`, optional): Maximum number of characters of the content body to return. Omit to return from offset to the end.
- `offset` (`integer`, optional): Character offset into the content body to start from. Combine with max_chars to page through long content. Defaults to 0 (start of body).

Example input: `{"data_id":"<data_id>"}`

### `dovetailmcp_get_doc`

Get Doc · Read-only

Retrieve detailed metadata for a single Dovetail doc by its unique ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): The unique identifier of the Dovetail doc to retrieve.

Example input: `{"doc_id":"<doc_id>"}`

### `dovetailmcp_get_doc_comment`

Get Doc Comment · Read-only

Retrieve a single comment on a Dovetail doc by its unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `comment_id` (`string`, required): The unique identifier of the comment to retrieve.
- `doc_id` (`string`, required): The unique identifier of the Dovetail doc that contains the comment.

Example input: `{"comment_id":"<comment_id>","doc_id":"<doc_id>"}`

### `dovetailmcp_get_doc_content`

Get Doc Content · Read-only

Export and retrieve the complete content of a Dovetail doc in markdown format.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): The unique identifier of the Dovetail doc whose content should be exported.
- `max_chars` (`integer`, optional): Maximum number of characters of the content body to return. Omit to return from offset to the end.
- `offset` (`integer`, optional): Character offset into the content body to start from. Combine with max_chars to page through long content. Defaults to 0 (start of body).

Example input: `{"doc_id":"<doc_id>"}`

### `dovetailmcp_get_dovetail_projects`

Get Dovetail Projects · Read-only

Browse and discover all projects in the Dovetail workspace. Projects are the primary container for research data, docs, and insights.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, optional): Filter projects by the folder they belong to. Optional — omit to list projects across all folders.
- `limit` (`integer`, optional): Maximum number of projects to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous response. Pass this to retrieve the next page of results. Optional.
- `title` (`string`, optional): Filter projects by title. Optional.

Example input: `{}`

### `dovetailmcp_get_field`

Get Field · Read-only

Retrieve a single custom field definition by its unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `field_id` (`string`, required): The unique identifier of the custom field to retrieve.

Example input: `{"field_id":"<field_id>"}`

### `dovetailmcp_get_file`

Get File · Read-only

Retrieve metadata for a single file attachment by its unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `file_id` (`string`, required): The unique identifier of the file attachment to retrieve metadata for.

Example input: `{"file_id":"<file_id>"}`

### `dovetailmcp_get_folder`

Get Folder · Read-only

Retrieve a single folder by its unique identifier, including its metadata.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): The unique identifier of the Dovetail folder to retrieve.

Example input: `{"folder_id":"<folder_id>"}`

### `dovetailmcp_get_folder_contents`

Get Folder Contents · Read-only

List all items contained directly within a specific folder — projects, docs, and channels.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): The unique identifier of the folder whose contents you want to list.
- `limit` (`integer`, optional): Maximum number of items to return in a single page of results. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous response. Pass this to retrieve the next page of results. Optional.

Example input: `{"folder_id":"<folder_id>"}`

### `dovetailmcp_get_highlight`

Get Highlight · Read-only

Retrieve a single highlight by its unique identifier, including its content and associated tags.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `highlight_id` (`string`, required): The unique identifier of the highlight to retrieve.

Example input: `{"highlight_id":"<highlight_id>"}`

### `dovetailmcp_get_insight_content`

Get Insight Content · Read-only

(Deprecated — use get_doc_content instead.) Export and retrieve the complete content of an insight in markdown format.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `insight_id` (`string`, required): The unique identifier of the insight whose content to retrieve.
- `max_chars` (`integer`, optional): Maximum number of characters of the content body to return. Omit to return from offset to the end.
- `offset` (`integer`, optional): Character offset into the content body to start from. Combine with max_chars to page through long content. Defaults to 0 (start of body).

Example input: `{"insight_id":"<insight_id>"}`

### `dovetailmcp_get_project`

Get Project · Read-only

Retrieve metadata for a single Dovetail project by its unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project to retrieve.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_get_project_data`

Get Project Data · Read-only

Retrieve detailed metadata and information about a specific research data entry.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data_id` (`string`, required): The unique identifier of the research data entry to retrieve.

Example input: `{"data_id":"<data_id>"}`

### `dovetailmcp_get_project_highlights`

Get Project Highlights · Read-only

Retrieve customer feedback highlights and key quotes from a Dovetail project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project whose highlights you want to retrieve.
- `limit` (`integer`, optional): Maximum number of highlights to return per page. Use with start_cursor for pagination.
- `start_cursor` (`string`, optional): Pagination cursor to retrieve the next page of highlights. Obtained from the previous response.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_get_project_insight`

Get Project Insight · Read-only

(Deprecated — use get_doc instead.) Retrieve a specific insight by its unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `insight_id` (`string`, required): The unique identifier of the insight to retrieve.

Example input: `{"insight_id":"<insight_id>"}`

### `dovetailmcp_get_tag`

Get Tag · Read-only

Retrieve a single tag by its unique identifier, including its title and color.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`string`, required): The unique identifier of the tag to retrieve.

Example input: `{"tag_id":"<tag_id>"}`

### `dovetailmcp_get_user`

Get User · Read-only

Retrieve a single workspace member's profile by their unique identifier.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): The unique identifier of the workspace member to retrieve.

Example input: `{"user_id":"<user_id>"}`

### `dovetailmcp_list_channel_data`

List Channel Data · Read-only

List the raw data points (e.g. app reviews, NPS responses, support tickets) in a Dovetail channel.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channel_id` (`string`, required): The unique identifier of the Dovetail channel whose data points you want to list.
- `limit` (`integer`, optional): Maximum number of data points to return per page. Defaults to the server's default page size if omitted.
- `source_timestamp_from` (`string`, optional): Filter results to data points with a source timestamp on or after this ISO 8601 value. Optional.
- `source_timestamp_to` (`string`, optional): Filter results to data points with a source timestamp on or before this ISO 8601 value. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results.

Example input: `{"channel_id":"<channel_id>"}`

### `dovetailmcp_list_channel_themes`

List Channel Themes · Read-only

Retrieve all AI-generated themes for a Dovetail channel. Themes are AI-generated clusters of related feedback.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channel_id` (`string`, required): The unique identifier of the Dovetail channel whose AI-generated themes you want to retrieve.
- `limit` (`integer`, optional): Maximum number of themes to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results. Optional.

Example input: `{"channel_id":"<channel_id>"}`

### `dovetailmcp_list_channels`

List Channels · Read-only

Browse and discover all channels in the Dovetail workspace. Channels are automated analysis pipelines processing high-volume customer feedback into structured insights.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, optional): Filter channels by the ID of a specific folder. If omitted, channels from all folders are returned.
- `limit` (`integer`, optional): Maximum number of channels to return per page. Must be between 1 and 100. Defaults to the server's default page size if omitted.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results.

Example input: `{}`

### `dovetailmcp_list_contacts`

List Contacts · Read-only

Browse the contacts database in the Dovetail workspace. Contacts are research participants or customers linked to data entries.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of contacts to return per page. Optional.
- `name` (`string`, optional): Filter contacts by name. Optional.
- `start_cursor` (`string`, optional): Pagination cursor for fetching the next page of results. Pass the cursor returned from a previous response. Optional.

Example input: `{}`

### `dovetailmcp_list_doc_comments`

List Doc Comments · Read-only

Retrieve all comments on a specific Dovetail doc, returned in chronological order.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): The unique identifier of the Dovetail doc whose comments should be retrieved.
- `limit` (`integer`, optional): Maximum number of comments to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results. Optional.

Example input: `{"doc_id":"<doc_id>"}`

### `dovetailmcp_list_docs`

List Docs · Read-only

Browse and discover all docs in the Dovetail workspace. Docs are rich-text documents used for insights, reports, and notes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of docs to return in a single response. Use with start_cursor for pagination.
- `project_id` (`string`, optional): Filter docs to only those belonging to the specified project.
- `start_cursor` (`string`, optional): Pagination cursor returned from a previous response. Pass this value to retrieve the next page of docs.

Example input: `{}`

### `dovetailmcp_list_fields`

List Fields · Read-only

Retrieve all custom fields defined on a Dovetail project. Fields are user-defined metadata attributes attached to data entries.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `field_set_type` (`string`, required): The field set type to filter fields by.
- `project_id` (`string`, required): The unique identifier of the Dovetail project whose custom fields you want to list.
- `limit` (`integer`, optional): Maximum number of fields to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results. Optional.

Example input: `{"field_set_type":"<field_set_type>","project_id":"<project_id>"}`

### `dovetailmcp_list_folders`

List Folders · Read-only

Browse all folders in the Dovetail workspace. Folders organize projects, docs, and channels.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of folders to return per page. Defaults to the server's default page size if omitted.
- `parent_folder_id` (`string`, optional): Filter folders to only those nested within the specified parent folder. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results.
- `title` (`string`, optional): Filter folders by title. Optional.

Example input: `{}`

### `dovetailmcp_list_personal_docs`

List Personal Docs · Read-only

Retrieve all docs authored by or assigned to a specific user in the Dovetail workspace.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): The unique identifier of the user whose personal docs should be retrieved.
- `limit` (`integer`, optional): Maximum number of docs to return in a single response. Use with start_cursor for pagination.
- `start_cursor` (`string`, optional): Pagination cursor returned from a previous response. Pass this value to retrieve the next page of docs.

Example input: `{"user_id":"<user_id>"}`

### `dovetailmcp_list_project_data`

List Project Data · Read-only

Browse and discover all research data entries within a specific Dovetail project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project whose data entries you want to list.
- `created_at_from` (`string`, optional): Filter data entries created on or after this ISO 8601 timestamp. Optional.
- `created_at_to` (`string`, optional): Filter data entries created on or before this ISO 8601 timestamp. Optional.
- `limit` (`integer`, optional): Maximum number of data entries to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous response. Pass this to retrieve the next page of results. Optional.
- `title` (`string`, optional): Filter data entries by title. Optional.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_list_project_insights`

List Project Insights · Read-only

(Deprecated — use list_docs instead.) List insights within a Dovetail project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project whose insights to list.
- `limit` (`integer`, optional): Maximum number of insights to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor for fetching the next page of results. Pass the cursor returned from a previous response. Optional.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_list_project_templates`

List Project Templates · Read-only

List all project templates available in the Dovetail workspace.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of templates to return per page. Optional.
- `start_cursor` (`string`, optional): Pagination cursor returned by a previous list call. Pass this value to retrieve the next page of results. Optional.

Example input: `{}`

### `dovetailmcp_list_tags`

List Tags · Read-only

Browse and discover tags in the Dovetail workspace, scoped to a specific project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project whose tags you want to list.
- `limit` (`integer`, optional): Maximum number of tags to return per page. Use with start_cursor for pagination.
- `start_cursor` (`string`, optional): Pagination cursor to retrieve the next page of tags. Obtained from the previous response.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_list_users`

List Users · Read-only

List all members of the Dovetail workspace, including their roles and contact information.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email` (`string`, optional): Filter workspace members by email. Optional.
- `limit` (`integer`, optional): Maximum number of workspace members to return per page. Optional.
- `name` (`string`, optional): Filter workspace members by name. Optional.
- `start_cursor` (`string`, optional): Pagination cursor for fetching the next page of results. Pass the cursor returned from a previous response. Optional.

Example input: `{}`

### `dovetailmcp_search_workspace`

Search Workspace · Read-only

Perform powerful text-based search across all content types in the Dovetail workspace — projects, docs, data, highlights, and contacts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date_field` (`string`, optional): Which timestamp the date filter applies to. Defaults to CREATED. Has no effect unless date_from and date_to are both provided. One of: `CREATED`, `UPDATED`.
- `date_from` (`string`, optional): Start of the date range filter, as an ISO 8601 datetime string. Must be provided together with date_to.
- `date_to` (`string`, optional): End of the date range filter, as an ISO 8601 datetime string. Must be provided together with date_from.
- `limit` (`integer`, optional): Maximum number of search results to return per page. Optional.
- `location_ids` (`array`, optional): Scope results to objects located inside these folders or projects. Accepts folder and/or project IDs. Folder IDs are expanded recursively to include all nested sub-folders and their projects.
- `offset` (`integer`, optional): Number of items to skip for pagination (default 0). Optional.
- `query` (`string`, optional): The text search query to run across all content in the Dovetail workspace. Omit or pass an empty string to list all items of the chosen types.
- `types` (`array`, optional): Content types to include in search results (default: all types).

Example input: `{}`

### `dovetailmcp_create_channel_datum`

Create Channel Datum · Write

Send a new data point to a Dovetail channel for automated AI processing.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `channel_id` (`string`, required): The unique identifier of the Dovetail channel to which the data point will be sent.
- `text` (`string`, required): The raw text content of the customer feedback data point to send (e.g. an app review, NPS response, or support ticket body).
- `timestamp` (`string`, required): ISO 8601 timestamp recording when the feedback was originally received.
- `source_title` (`string`, optional): Optional title of the source the feedback came from (e.g. the support ticket subject).
- `source_url` (`string`, optional): Optional URL of the source the feedback came from, if available.

Example input: `{"channel_id":"<channel_id>","text":"<text>","timestamp":"<timestamp>"}`

### `dovetailmcp_create_comment`

Create Comment · Write

Post a top-level comment on a Dovetail doc. Comments are discussion threads attached to docs.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): The comment content. Interpreted according to body_type.
- `doc_id` (`string`, required): The unique identifier of the Dovetail doc on which to post the comment.
- `body_type` (`string`, optional): Format of the body. Defaults to "text"; use "html" for rich-text content. One of: `text`, `html`.

Example input: `{"body":"<body>","doc_id":"<doc_id>"}`

### `dovetailmcp_create_data`

Create Data · Write

Create a new research data entry within a Dovetail project. Data entries store raw research materials such as interview transcripts, survey responses, or notes.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project to create the data entry in.
- `content` (`string`, optional): The body content of the research data entry in markdown format. Optional — omit to create an empty entry.
- `fields` (`array`, optional): Custom fields to set on the new data entry. Each item is an object with `label`, `value`, and optional `type`. `label` matches an existing field in the project (or creates a new one). `value` depends on the field type: a string for TEXT/EMAIL/URL/PHONE, a boolean for BOOLEAN, a number for NUMBER/NPS, an ISO 8601 string for DATETIME, a string array for SELECT, a contact name for PERSON, or null to clear. Include `type` only when creating a new field; it defaults to TEXT and must be omitted when referencing an existing field.
- `title` (`string`, optional): The name or title of the new research data entry. Optional.

Example input: `{"project_id":"<project_id>"}`

### `dovetailmcp_create_doc`

Create Doc · Write

Create a new doc in the Dovetail workspace. Docs are rich-text documents used for insights, reports, and notes.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, optional): Initial body content for the doc. Interpreted according to content_type (defaults to HTML).
- `content_type` (`string`, optional): Format of the content field. Defaults to "html". Use "markdown" or "text" for those formats. One of: `html`, `markdown`, `text`.
- `folder_id` (`string`, optional): The unique identifier of the folder to place the doc in. If omitted, the doc is created at the root level. Mutually exclusive with project_id.
- `project_id` (`string`, optional): The unique identifier of the project to create the doc within. If omitted, the doc is created outside any project. Mutually exclusive with folder_id.
- `title` (`string`, optional): The title of the new Dovetail doc. Optional.

Example input: `{}`

### `dovetailmcp_create_folder`

Create Folder · Write

Create a new folder in the Dovetail workspace to organize projects, docs, and channels.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `title` (`string`, required): The display name for the new folder.
- `parent_folder_id` (`string`, optional): The ID of the parent folder under which this new folder will be created. If omitted, the folder is created at the top level of the workspace.

Example input: `{"title":"<title>"}`

### `dovetailmcp_create_project`

Create Project · Write

Create a new project in the Dovetail workspace. Projects are the primary container for research data, docs, and insights.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `folder_id` (`string`, optional): The unique identifier of the folder to create the project in. Optional — omit to create the project at the workspace root.
- `template_id` (`string`, optional): The unique identifier of a project template to use as the starting structure for the new project. Optional.
- `title` (`string`, optional): The name of the new project to create. Optional.

Example input: `{}`

### `dovetailmcp_create_tag`

Create Tag · Write

Create a new tag within a Dovetail project. Tags are project-scoped labels used to categorize highlights and data.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`string`, required): The unique identifier of the Dovetail project in which to create the tag.
- `title` (`string`, required): The display name for the new tag.

Example input: `{"project_id":"<project_id>","title":"<title>"}`

### `dovetailmcp_create_transcript_highlight`

Create Transcript Highlight · Write

Create a highlight on an audio or video transcript by marking a start/end time range in seconds.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `end_time` (`number`, required): The end of the highlight in seconds within the transcript.
- `note_id` (`string`, required): The unique identifier of the data entry (note) that owns the transcript to highlight.
- `start_time` (`number`, required): The start of the highlight in seconds within the transcript.
- `tag_ids` (`array`, optional): Optional list of tag IDs to attach to the newly created highlight.

Example input: `{"end_time":1,"note_id":"<note_id>","start_time":1}`

## Related

Other AI connectors ([all 116](/agentkit/connectors/?category=ai)):

- [Chorus](/agentkit/connectors/chorus/): Scalekit connector, Username and password, 9 tools
- [Gong](/agentkit/connectors/gong/): Scalekit connector, OAuth, 49 tools
- [Jiminny](/agentkit/connectors/jiminny/): Scalekit connector, Access token, 27 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
