Skip to main content
Glama
cseguinlz

DoubleTick MCP Server

by cseguinlz

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-cli

Related 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 --last

Commands

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-123

doubletick dashboard

List all your tracked emails with open rates and stats.

doubletick dashboard
doubletick dashboard --limit 50

MCP 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_tracked_email

Send an email with read tracking

check_tracking_status

Check if a tracked email has been opened

list_tracked_emails

List recent tracked emails with stats

How It Works

  1. You compose an email (text or markdown)

  2. The CLI converts it to HTML, generates a tracking ID, and injects a 1x1 tracking pixel

  3. The email is sent via the Gmail API

  4. The track is registered with DoubleTick's backend

  5. When the recipient opens the email, the pixel fires and the open is logged

  6. 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 emails

Requirements

  • Node.js 18+

  • A Gmail account

  • A DoubleTick account (free tier: 5 tracked emails/week)

License

MIT

Available Tools

3 tools
check_tracking_statusA

Check if a tracked email has been opened. Returns open count, device info, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
trackingIdYesTracking ID returned from send_tracked_email

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 200)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient email address
subjectYesEmail subject
bodyYesEmail body in markdown or HTML
ccNoCC recipients (comma-separated)
bccNoBCC recipients (comma-separated)
htmlNoTreat body as raw HTML (skip markdown conversion)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv1.2.0
    • First observedcheck_tracking_status
    • First observedlist_tracked_emails
    • First observedsend_tracked_email

TDQS

A3.7/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    17
    Apache 2.0
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides 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.
    152
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

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