DoubleTick MCP Server
DoubleTick CLI
Open-source CLI and MCP server for email read tracking via Gmail. Know when your emails are opened — from the terminal.
Works with the DoubleTick backend. Tracks from the CLI show up alongside tracks from the Chrome extension.
Install
npm install -g doubletick-cliRelated MCP server: Gmail MCP Server
Quick Start
# 1. Log in with your Gmail account (one-time)
doubletick login
# 2. Send a tracked email
doubletick send --to jane@company.com --subject "Q1 Planning" --body "Hi Jane, here are the numbers..."
# 3. Check if they read it
doubletick status --lastCommands
doubletick login
Authenticate with Gmail and DoubleTick. Opens your browser for Google sign-in. One-time setup — credentials are stored locally in ~/.doubletick/credentials.json.
doubletick logout
Remove stored credentials.
doubletick send
Send a tracked email. Injects a read-tracking pixel, sends via Gmail API, and registers the track.
# Send a tracked email (body is markdown by default)
doubletick send --to jane@co.com --subject "Hi" --body "Hello **Jane**"
# HTML body instead of markdown
doubletick send --to jane@co.com --subject "Hi" --body "<h1>Hello</h1>" --html
# Body from file
doubletick send --to jane@co.com --subject "Hi" --body-file ./email.md
# With CC/BCC
doubletick send --to jane@co.com --cc "bob@co.com" --subject "Hi" --body "Hello"doubletick status
Check if a tracked email has been opened.
# Most recent tracked email
doubletick status --last
# Find by recipient
doubletick status --to jane@company.com
# By tracking ID
doubletick status abc-123doubletick dashboard
List all your tracked emails with open rates and stats.
doubletick dashboard
doubletick dashboard --limit 50MCP Server
DoubleTick works as an MCP server so AI agents (Claude Code, Claude Desktop, etc.) can send and track emails natively.
Setup
Add to your Claude configuration:
{
"mcpServers": {
"doubletick": {
"command": "npx",
"args": ["-y", "doubletick-cli"]
}
}
}You must run doubletick login first — the MCP server uses the same stored credentials.
Tools
Tool | Description |
| Send an email with read tracking |
| Check if a tracked email has been opened |
| List recent tracked emails with stats |
How It Works
You compose an email (text or markdown)
The CLI converts it to HTML, generates a tracking ID, and injects a 1x1 tracking pixel
The email is sent via the Gmail API
The track is registered with DoubleTick's backend
When the recipient opens the email, the pixel fires and the open is logged
You check the status via
doubletick status
The entire DoubleTick backend (pixel serving, open logging, deduplication, device detection) works unchanged. The CLI is just a new way to inject the pixel — replacing the Chrome extension's role for terminal/agent workflows.
Architecture
doubletick CLI / MCP server
├── Gmail API → send emails
└── DoubleTick API → register tracks, check status
├── GET /img?t=<id> → tracking pixel
├── POST /track → register tracked email
├── GET /status?id= → check opens
└── GET /dashboard → list tracked emailsRequirements
Node.js 18+
A Gmail account
A DoubleTick account (free tier: 5 tracked emails/week)
License
MIT
Available Tools
3 toolscheck_tracking_statusA
Check if a tracked email has been opened. Returns open count, device info, and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| trackingId | Yes | Tracking ID returned from send_tracked_email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return data (open count, device info, timestamps) which is valuable behavioral information, but doesn't mention potential limitations like rate limits, authentication requirements, or error conditions. It adds some context but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste - first states the purpose, second describes the return values. Perfectly front-loaded and appropriately sized for this simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter query tool with no output schema, the description provides good coverage of purpose and return values. However, without annotations or output schema, it could benefit from more behavioral context about limitations or error handling. It's mostly complete but has minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the single parameter. The description adds no additional parameter information beyond what's in the schema. Baseline 3 is appropriate when the schema does all the parameter documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('check if a tracked email has been opened'), identifies the resource ('tracked email'), and distinguishes from siblings by focusing on status checking rather than listing or sending emails. It provides a complete verb+resource+outcome statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning 'tracking ID returned from send_tracked_email' (referencing a sibling tool), but doesn't explicitly state when to use this tool versus alternatives like list_tracked_emails. It provides clear context but lacks explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracked_emailsC
List recent tracked emails with their open status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'recent' and 'open status', but doesn't clarify what 'recent' means (e.g., time range), whether results are paginated, if authentication is required, or any rate limits. For a read operation with zero annotation coverage, this leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'List recent tracked emails with their open status.' It's front-loaded with the core action and resource, with no wasted words. Every part of the sentence contributes meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with one parameter) and lack of annotations or output schema, the description is incomplete. It doesn't explain what 'recent' entails, the format of returned emails, or any behavioral traits like pagination. For a tool that lists data, more context is needed to fully understand its usage and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'limit' fully documented in the input schema (type, default, max). The description doesn't add any parameter-specific information beyond what the schema provides, such as clarifying 'recent' as a parameter. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List recent tracked emails with their open status.' It specifies the verb ('List'), resource ('tracked emails'), and scope ('recent'), distinguishing it from siblings like 'check_tracking_status' (likely for a single email) and 'send_tracked_email' (a write operation). However, it doesn't explicitly differentiate from siblings beyond the verb, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'check_tracking_status' or 'send_tracked_email', nor does it specify prerequisites, such as needing tracked emails to exist. The context is implied ('recent'), but no explicit usage rules are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_tracked_emailA
Send an email with read tracking via Gmail. Body accepts markdown (converted to HTML automatically). The email is sent immediately via Gmail API.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address | |
| subject | Yes | Email subject | |
| body | Yes | Email body in markdown or HTML | |
| cc | No | CC recipients (comma-separated) | |
| bcc | No | BCC recipients (comma-separated) | |
| html | No | Treat body as raw HTML (skip markdown conversion) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context such as 'read tracking', 'body accepts markdown (converted to HTML automatically)', and 'sent immediately via Gmail API', which go beyond basic functionality. However, it does not cover aspects like error handling, rate limits, or authentication requirements, leaving some behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with two sentences that efficiently convey key information: the tool's purpose and its main features (tracking, markdown conversion, immediate sending). Every sentence adds value without redundancy, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation tool with no annotations and no output schema), the description is fairly complete. It covers the core functionality, key features, and behavioral aspects like tracking and sending method. However, it lacks details on error handling, return values, or prerequisites, which could be important for a mutation tool. The absence of an output schema means the description should ideally explain what is returned, but it does not, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning markdown conversion for the body and the immediate sending via Gmail API, but does not provide additional semantics for parameters like 'to', 'subject', or 'cc/bcc'. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('send an email') and resources ('via Gmail'), and distinguishes it from sibling tools by specifying 'with read tracking' (unlike check_tracking_status or list_tracked_emails). It explicitly mentions the action and the unique feature of tracking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating 'send an email with read tracking' and 'sent immediately via Gmail API', but does not explicitly state when to use this tool versus alternatives like check_tracking_status or list_tracked_emails. It provides some guidance on the tool's function but lacks explicit comparisons or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.2.0- First observed
check_tracking_status - First observed
list_tracked_emails - First observed
send_tracked_email
TDQS
Each tool has a clearly distinct purpose: check_tracking_status focuses on detailed status of a specific tracked email, list_tracked_emails provides a summary list of recent emails, and send_tracked_email handles sending new emails. There is no overlap in functionality, making it easy for an agent to select the right tool.
All tool names follow a consistent verb_noun pattern with snake_case (check_tracking_status, list_tracked_emails, send_tracked_email). The naming is predictable and readable, with no deviations in style or convention.
With 3 tools, the server is well-scoped for email tracking via Gmail, covering core operations: sending, listing, and checking status. It feels slightly thin but reasonable, as it handles the essential workflow without unnecessary complexity.
The tool set covers the main email tracking lifecycle: send, list, and check status. A minor gap exists in operations like deleting or updating tracked emails, but agents can work around this, and the core functionality is adequately covered for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
AI-powered email outreach platform — send campaigns with deliverability tracking.
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organiz…
Find verified work emails from a name, company, role or LinkedIn URL, and verify emails you have.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Gmail through the Gmail API to read, send, and manage emails. Supports multiple Gmail accounts with real-time monitoring and advanced features for email search and attachment handling.17Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Gmail through the Gmail API with OAuth2 authentication. Supports reading, sending, searching emails, and managing read status through natural language.-
- AlicenseNot gradedqualityFmaintenanceProvides comprehensive Gmail integration with 25+ tools for intelligent email management, including AI-powered categorization, advanced search and filtering, automated archiving and cleanup, analytics, and secure OAuth2 authentication.1522MIT
- FlicenseNot gradedqualityCmaintenanceEnables read and compose access to three Gmail accounts simultaneously, with tools for searching, viewing threads and messages, and drafting or sending replies.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cseguinlz/doubletick-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server