Dovetail MCP

Live

OAUTH 2.0

ANALYTICS

Analytics

Let your agent search customer research, pull insights and highlights, and create notes in Dovetail as the researcher who owns the workspace.

  • Acts as the researcher. Every insight read and note created is attributed to the real user, not a shared research bot.
  • Tokens stay vaulted. Dovetail OAuth credentials sit in an AES-256 vault, resolved per request, never in the prompt.
  • Scoped before every call. Project and workspace scopes enforced ahead of each API call, with a 90-day audit trail.
Dovetail MCP
agent · Acme Q3
Run
What are customers saying about onboarding friction this quarter?
S
dovetail_insights_search
104ms
Dovetail agent
Found 4 insights on onboarding friction. Top themes: confusing setup wizard (18 highlights), slow first-value (11 highlights), and unclear pricing tiers (7 highlights).
Sources: 4 insights, Onboarding Research project, this quarter
dovetailmcp
4 insights
18:29
Message Claude...

Tools your research agent reaches for on Dovetail, scoped per user.

CALL ANY TOOL
Search insights and highlights, read projects and notes, and capture new findings, each call scoped to the authenticated researcher's workspace access.
dovetailmcp_create_channel_datum
Create channel datum
Send a new data point to a Dovetail channel for automated AI processing.
Parameters
Name
Type
Required
Description
channel_id
string
Required
The unique identifier of the Dovetail channel to which the data point will be sent.
content
string
Required
The raw text content of the data point to send (e.g. an app review, NPS response, or support ticket body).
title
string
Optional
Optional title or short label for the data point. Helps identify the item in the channel's data list.
dovetailmcp_create_comment
Create comment
dovetailmcp_create_doc
Create doc
dovetailmcp_create_folder
Create folder
dovetailmcp_create_tag
Create tag
dovetailmcp_download_file
Download file
dovetailmcp_get_channel
Get channel
dovetailmcp_get_channel_datum
Get channel datum
dovetailmcp_get_data_content
Get data content
dovetailmcp_get_doc
Get doc
dovetailmcp_get_doc_content
Get doc content
dovetailmcp_get_dovetail_projects
Get dovetail projects
dovetailmcp_get_file
Get file
dovetailmcp_get_folder
Get folder
dovetailmcp_get_highlight
Get highlight
dovetailmcp_get_insight_content
Get insight content
dovetailmcp_get_project_data
Get project data
dovetailmcp_get_project_highlights
Get project highlights
dovetailmcp_get_tag
Get tag
dovetailmcp_list_channel_data
List channel data
dovetailmcp_list_channel_themes
List channel themes
dovetailmcp_list_channels
List channels
dovetailmcp_list_doc_comments
List doc comments
dovetailmcp_list_docs
List docs
dovetailmcp_list_folders
List folders
dovetailmcp_list_personal_docs
List personal docs
dovetailmcp_list_project_data
List project data
dovetailmcp_list_project_templates
List project templates
dovetailmcp_list_tags
List tags
dovetailmcp_search_workspace
Search workspace

For more tools, view docs.

Build your Agent
The same per-user auth pattern wires into every agent framework.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["dovetailmcp"], toolNames: ["dovetail_insights_search", "dovetail_insight_get", "dovetail_highlights_list"] },
pageSize: 100,
});

const agent = createReactAgent({ llm: new ChatOpenAI({ model: "gpt-4o" }), tools });
await agent.invoke({ messages: [{ role: "user", content: "Summarise onboarding friction insights" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const openai = new OpenAI();
const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["dovetailmcp"], toolNames: ["dovetail_insights_search", "dovetail_insight_get", "dovetail_highlights_list"] },
pageSize: 100,
});

const res = await openai.responses.create({
model: "gpt-4o",
input: "Search insights about onboarding friction",
tools,
});
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const anthropic = new Anthropic();
const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["dovetailmcp"], toolNames: ["dovetail_insights_search", "dovetail_insight_get", "dovetail_highlights_list"] },
pageSize: 100,
});

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
tools,
messages: [{ role: "user", content: "Pull highlights linked to the pricing insight" }],
});
import { LlmAgent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(process.env.SCALEKIT_ENV_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["dovetailmcp"], toolNames: ["dovetail_insights_search", "dovetail_insight_get", "dovetail_highlights_list"] },
pageSize: 100,
});

const agent = new LlmAgent({ name: "dovetail_agent", model: "gemini-2.0-flash", tools });
await agent.run("List insights in the onboarding project");
Try these prompts
Paste any prompt into your agent to start working Dovetail research.
Search & synthesize
Copy the prompt
Copied
What are customers saying about onboarding friction this quarter?
Copy the prompt
Copied
Find insights tagged pricing across all my projects.
Copy the prompt
Copied
Summarise the top themes in the Q2 discovery project.
Investigate
Copy the prompt
Copied
Pull the highlights linked to the checkout confusion insight.
Copy the prompt
Copied
Show me raw transcript data that mentions slow first-value.
Copy the prompt
Copied
Which project has the most highlights about mobile bugs?
Capture & recall
Copy the prompt
Copied
Create a note in the onboarding project summarising this week's calls.
Copy the prompt
Copied
List all research projects I have access to.
Copy the prompt
Copied
How many insights are published in the retention study?
SEE HOW AUTH WORKS
The researcher authorises Dovetail once. Every later agent call uses their token with project scope enforced.
1
Authorize
Your user connects
Dovetail MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Dovetail MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Dovetail MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Dovetail MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other analytics connectors.
People Ops and HR teams
Performance review collector
Collects review feedback from Airtable and Google Forms scoped to each manager's direct reports, writes per-employee summaries to Notion, and DMs the manager a Slack digest.
Support and Ops Teams
Freshdesk CSAT agent
Watches Freshdesk for resolved tickets, emails each requester a CSAT survey from Gmail, and writes the score and the verbatim back onto the ticket, every call on the support rep's own delegated OAuth.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
Test other agents
See the same per-user auth pattern across other analytics connectors.
PEOPLE OPS
Performance review collector agent
Collect review feedback from Airtable and Google Forms per manager, summarise each report in Notion, and DM the digest in Slack.
SUPPORT
Freshdesk CSAT follow-up agent
Spot resolved Freshdesk tickets, email the CSAT survey from Gmail, and write the score back onto the ticket.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Dovetail token looks fine in a demo. In production every note and edit logs as one service account, so you lose track of which researcher acted. Scalekit resolves the real user's credential per call.
// shared token
create_note → research_bot

// scalekit
create_note → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Dovetail today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Dovetail as the user or as a shared key?
As the user. Scalekit resolves the authenticated researcher's own Dovetail credential at request time, so every insight read, note, and edit is attributed to them in the workspace rather than a shared research bot.
Where is the Dovetail token stored?
In an AES-256 encrypted vault, namespaced per tenant. Tokens are fetched only at the moment of a tool call, refreshed automatically before expiry, and revocable from a single dashboard, never exposed to the model or the prompt.
Can I limit what the agent is allowed to do in Dovetail?
Yes. Pass a toolNames filter to listScopedTools to expose only the actions you want, for example read-only insight and highlight search without note creation. Scalekit also runs a scope check before each API call.
What happens when a user revokes Dovetail access?
The credential is invalidated at the next tool call, which fails closed rather than falling back to a shared token. Other users are unaffected, and the revocation is recorded in the audit trail.
Can the agent search raw transcripts, or only published insights?
That is your choice. Expose dovetail_insights_search and dovetail_highlights_list for a synthesis agent that reads finished insights, or add dovetail_data_search to let it query raw transcripts, tickets, and call notes. Each call is scoped per user, so a researcher can only reach data in projects they already own.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""dovetailmcp"": {
""url"": ""https://mcp.scalekit.com/dovetailmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.dovetailmcp]
url = ""https://mcp.scalekit.com/dovetailmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""dovetailmcp"": {
""url"": ""https://mcp.scalekit.com/dovetailmcp"",
""type"": ""http""
}
}
}