# com.dragapp/mcp-server (npm · @dragapp/mcp-server)

AI-powered email & WhatsApp for teams — manage your shared inbox from Claude, Cursor or ChatGPT.

- Trust score: 69/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@dragapp/mcp-server`: 69/100 (this document), [markdown](https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server.md), [page](https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@dragapp/mcp-server`
- Version: `0.1.5`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 27 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 75/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 4205 tokens (~89/item across 47 items; 47 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add com-dragapp-mcp-server -- npx -y @dragapp/mcp-server
```

### Codex

```bash
codex mcp add com-dragapp-mcp-server -- npx -y @dragapp/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-dragapp-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@dragapp/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-dragapp-mcp-server --command npx --arg -y --arg @dragapp/mcp-server
```

### Hermes

```yaml
mcp_servers:
  com-dragapp-mcp-server:
    command: "npx"
    args: ["-y", "@dragapp/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "com-dragapp-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@dragapp/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 68, +32)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 36, +8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 28, +2)

- [security regression] Malware scan: pass → unverified
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-29 (score 26, −20)

- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (47)

### `list_boards` (~33 tokens)

List all DragApp boards the user has access to. Returns board name, owner, unread count, and contributor info.

### `get_board` (~39 tokens)

Get details of a specific DragApp board by ID. Returns board name, owner, and members.

Input parameters:

- `boardId` (number, required): The board ID

### `list_columns` (~70 tokens)

List all columns (stages) on a DragApp board. Columns represent workflow stages like To Do, In Progress, Done. Returns label-style IDs (e.g. "Label_1") used by list_threads, filter_threads, and move_thread.

Input parameters:

- `boardId` (number, required): The board ID

### `list_board_members` (~31 tokens)

List all boards with their columns and member info. Returns the main board and secondary boards with columns for each.

### `list_teams` (~38 tokens)

List all teams the user belongs to. Returns team IDs needed by knowledge base tools (list_articles, get_article, create_article, update_article).

### `list_threads` (~166 tokens)

List items in a specific column of a DragApp board. Call list_columns first to get column IDs — they are strings like "Label_1", not numbers. A column can mix three item types: email threads (have `threadId`/`from`/`subject`), task cards (have `cardId`/`title`/`status`), and WhatsApp conversations (have `cardId`/`contact`). Use `cardId` with get_card / update_card / move_card, or with the whatsapp tools for WhatsApp items.

Input parameters:

- `boardId` (number, required): The board ID to list threads from
- `columnId` (string, required): The column ID string (e.g. "Label_1") — use list_columns to find available IDs

### `get_thread` (~113 tokens)

Get a single email message by ID. Returns the HTML body (and a plain-text version), sender, recipients, attachments, and reply-to info for composing a response. You can pass either messageId or threadId — they are the same value.

Input parameters:

- `boardId` (number, required): The board ID the message belongs to
- `messageId` (string): The message/thread ID to retrieve (same value used for both)
- `threadId` (string): Alias for messageId — use either one (they are interchangeable)

### `reply_to_thread` (~175 tokens)

Reply to an existing email thread. Sent from the current user's connected Gmail address (the JWT owner). For single-message threads, threadId works as messageId. For multi-message threads, pass the specific messageId you're replying to — get_thread returns it.

Input parameters:

- `bcc` (string): BCC recipient email address
- `boardId` (number, required): The board ID the thread belongs to
- `body` (string, required): HTML body of the reply
- `cc` (string): CC recipient email address
- `messageId` (string): Specific message ID to reply to. Defaults to threadId, which is correct for threads with a single message.
- `threadId` (string, required): The thread ID to reply to
- `to` (string, required): Recipient email address (use get_thread's replyTo.to or sender field)

### `send_new_email` (~85 tokens)

Compose and send a new email from a DragApp board's connected email address. Creates a new thread in the board.

Input parameters:

- `boardId` (number, required): The board to send from (determines the sender email address)
- `body` (string, required): HTML body of the email
- `subject` (string, required): Email subject line
- `to` (string, required): Recipient email address

### `search_threads` (~134 tokens)

Search items across a board by content or sender. Returns matches with preview snippets. Matches can be email threads (`threadId`), task cards (`cardId`/`title`), or WhatsApp conversations (`cardId`/`contact`). Note: search may return empty results on boards with very few items. Use filter_threads or list_threads as an alternative.

Input parameters:

- `boardId` (number, required): The board ID to search within
- `query` (string, required): Search query text (must not be empty)
- `searchBy` (string): Search by thread content (subject/body) or by sender email. Defaults to content.

### `filter_threads` (~131 tokens)

Filter email threads by criteria such as assignee, tags, or column. More targeted than search — use this when you know specific filter values.

Input parameters:

- `assignees` (array): Filter by assignee user IDs (as strings). Use "-1" for unassigned threads. Get user IDs from list_teams or list_board_members.
- `boardId` (number, required): The board ID to filter within
- `columnId` (string, required): The column ID to filter within (required)
- `tagList` (array): Filter by shared label IDs (as strings). Use list_labels to get available label IDs.

### `move_thread` (~102 tokens)

Move an email thread to a different column or board. Use this to triage emails — e.g. move from Inbox to In Progress, or to a different team's board.

Input parameters:

- `newBoardId` (number, required): Target board ID
- `newColumnId` (string, required): Target column ID
- `position` (number): Position in the target column (0 = top, default: 0)
- `threadId` (string, required): The thread/entity ID to move

### `move_threads_bulk` (~68 tokens)

Move multiple email threads at once to a different column or board. Use this for batch triage operations.

Input parameters:

- `newBoardId` (number, required): Target board ID
- `newColumnId` (string, required): Target column ID
- `threadIds` (array, required): Array of thread IDs to move

### `list_cards_in_column` (~97 tokens)

List all cards in a specific column of a DragApp board. Supports pagination. Cards are email threads or tasks with titles, assignees, due dates, and custom fields.

Input parameters:

- `boardId` (number, required): The board ID
- `columnId` (number, required): The column ID
- `limit` (number): Cards per page (default: 10)
- `page` (number): Page number (default: 1)

### `get_card` (~85 tokens)

Get full details of a card (task or email thread) by ID. Returns title, status, assignees, due date, column, board, note, and timestamps.

Input parameters:

- `boardId` (number): Optional board ID. Speeds up the lookup; not required.
- `cardId` (string, required): The card ID. Numeric task IDs and hex thread IDs both work.

### `create_card` (~134 tokens)

Create a new card (task) on a DragApp board. You can set the title, assign it to a team member, and add a note or comment.

Input parameters:

- `assignee` (string): Email address of an assignee (single email).
- `boardId` (number, required): Board to add the card to
- `columnId` (string, required): Column ID string (e.g. 'Label_1') — use list_columns to find it
- `comment` (string): Comment to add to the card
- `note` (string): Note to add to the card
- `title` (string, required): Card title

### `update_card` (~180 tokens)

Update an existing card. Change the title, reassign, add a note, set a due date, or change status. Comments cannot be modified via this tool.

Input parameters:

- `assignee`: Assignee email(s). Single string or array of strings.
- `boardId` (number): Board the card belongs to
- `cardId` (string, required): The card ID to update
- `color` (string): Card color code
- `columnId` (string): Column the card is in (string column ID like 'Label_1')
- `dueDate` (string): Due date in ISO-8601 (e.g. 2026-05-20T00:00:00.000Z)
- `note` (string): New note body
- `status` (string): Card status
- `title` (string): New card title

### `move_card` (~140 tokens)

Move a card to a different column on the same board, or to another board. newColumnId is the label-style column ID like 'Label_1' (returned by list_columns).

Input parameters:

- `cardId` (string, required): The card ID to move
- `newBoardId` (number): Target board ID. Required for cross-board moves; auto-resolved from the card's current board when omitted.
- `newColumnId` (string, required): Target column ID (label-style string, e.g. 'Label_2'). Get it from list_columns.
- `newPosition` (number): Position in the target column (0 = top, default 0)

### `archive_card` (~33 tokens)

Archive (delete) a card from a DragApp board.

Input parameters:

- `cardId` (number, required): The card ID to archive

### `list_labels` (~43 tokens)

List all shared labels on a board. Labels are coloured markers used to categorise and filter email threads across the team.

Input parameters:

- `boardId` (number, required): The board ID

### `add_label_to_thread` (~78 tokens)

Add a shared label to an email thread (or task). Use list_labels first to find available label IDs for the board.

Input parameters:

- `boardId` (number, required): The board ID the thread belongs to
- `labelId` (number, required): The label ID to assign
- `threadId` (string, required): The thread or task ID to label

### `remove_label_from_thread` (~68 tokens)

Remove a shared label from an email thread (or task).

Input parameters:

- `boardId` (number, required): The board ID the thread belongs to
- `labelId` (number, required): The label ID to remove
- `threadId` (string, required): The thread or task ID to remove the label from

### `toggle_labels` (~93 tokens)

Add some labels and/or remove others from a thread in one call. The backend toggle endpoint is one-label-at-a-time, so this iterates internally.

Input parameters:

- `addLabelIds` (array): Label IDs to add
- `boardId` (number, required): The board ID the thread belongs to
- `removeLabelIds` (array): Label IDs to remove
- `threadId` (string, required): The thread or task ID

### `add_comment` (~53 tokens)

Add a comment to a card. Comments are internal team messages attached to cards, visible to all board members.

Input parameters:

- `body` (string, required): Comment text
- `cardId` (string, required): The card ID to comment on

### `get_comment` (~27 tokens)

Retrieve a specific comment by its ID.

Input parameters:

- `commentId` (number, required): The comment ID

### `list_tags` (~54 tokens)

List all tags (coloured labels) available on a DragApp board. Tags are used to categorise and filter cards. For email thread labels, use list_labels instead.

Input parameters:

- `boardId` (number, required): The board ID

### `add_tag_to_card` (~54 tokens)

Add a tag to a card. Use list_tags first to find available tag IDs for the board.

Input parameters:

- `cardId` (number, required): The card ID
- `tagId` (string, required): The tag ID to add

### `create_task` (~172 tokens)

Create a standalone task in DragApp. Tasks are lightweight to-do items that can be assigned, given a due date, and tracked on a board.

Input parameters:

- `assignee` (string): Email address of the assignee
- `boardId` (number, required): The board to create the task on
- `columnId` (string, required): Column ID to place the task in, e.g. 'Label_1'
- `comment` (string): Initial comment attached to the task
- `dueDate` (string): Due date in ISO-8601 format (e.g. 2026-05-20T00:00:00.000Z). Saved via a separate call after the task is created.
- `note` (string): Initial note attached to the task
- `title` (string, required): Task title

### `search_contacts` (~58 tokens)

Search for contacts by name or email. The search text must not be empty. Returns matching contact records with name, email, phone, and domain.

Input parameters:

- `query` (string, required): Search query — matches against name and email (must not be empty)

### `get_contact_conversations` (~65 tokens)

Get all email conversations involving a specific contact. Returns thread subjects, dates, and preview text. Use search_contacts first to find the contact ID.

Input parameters:

- `contactId` (number, required): The numeric contact ID (use search_contacts to find it — do not pass an email address)

### `create_contact` (~66 tokens)

Create a new contact record in DragApp with name, email, and optional phone and note.

Input parameters:

- `email` (string, required): Contact email address
- `name` (string, required): Contact name
- `note` (string): Note about the contact
- `phone` (string): Phone number

### `list_articles` (~49 tokens)

List all knowledge base articles for a team. Returns article titles, categories, and publication status. Use list_teams to find your team ID first.

Input parameters:

- `teamId` (number, required): The team ID

### `get_article` (~64 tokens)

Get the full content of a knowledge base article by ID, including title, body, category, and publication status. Use list_teams to find your team ID first.

Input parameters:

- `articleId` (number, required): The article ID
- `teamId` (number, required): The team ID

### `create_article` (~84 tokens)

Create a new knowledge base article. Articles can be categorised and published for team or public access. Use list_teams to find your team ID first.

Input parameters:

- `body` (string, required): Article body in HTML
- `categoryId` (number): Category to file the article under
- `teamId` (number, required): The team ID
- `title` (string, required): Article title

### `update_article` (~90 tokens)

Update an existing knowledge base article's title, body, or category. Use list_teams to find your team ID first.

Input parameters:

- `articleId` (number, required): The article ID to update
- `body` (string): New article body in HTML
- `categoryId` (number): New category ID
- `teamId` (number, required): The team ID
- `title` (string): New article title

### `search_knowledge` (~112 tokens)

Search a Help Center knowledge base by keyword. teamId, slug, and query are all optional except query — with no teamId or slug, the first team that has a configured Help Center slug is used.

Input parameters:

- `query` (string, required): Search query text
- `slug` (string): Help Center slug (public identifier). Overrides teamId-based resolution.
- `teamId` (number): Team ID — resolves to the Help Center slug via the team's KB settings. Use list_teams to find your team ID.

### `get_response_times` (~83 tokens)

Get first response time metrics for a board. Shows how quickly the team responds to new emails. Useful for SLA monitoring and performance reviews.

Input parameters:

- `boardId` (number, required): The board ID
- `dateFrom` (string, required): Start date for the period (ISO-8601)
- `dateTo` (string, required): End date for the period (ISO-8601)

### `get_avg_response_time` (~83 tokens)

Get average response time across all replies on a board for a given period. Complements get_response_times which shows first response only.

Input parameters:

- `boardId` (number, required): The board ID
- `dateFrom` (string, required): Start date for the period (ISO-8601)
- `dateTo` (string, required): End date for the period (ISO-8601)

### `get_daily_activity` (~81 tokens)

Get daily email activity counts for a board over a time period. Returns per-day counts useful for volume trends and workload analysis.

Input parameters:

- `boardId` (number, required): The board ID
- `dateFrom` (string, required): Start date for the period (ISO-8601)
- `dateTo` (string, required): End date for the period (ISO-8601)

### `get_closed_activity` (~79 tokens)

Get the count of closed/resolved threads per day for a board. Useful for tracking team throughput and resolution rates.

Input parameters:

- `boardId` (number, required): The board ID
- `dateFrom` (string, required): Start date for the period (ISO-8601)
- `dateTo` (string, required): End date for the period (ISO-8601)

### `list_automations` (~55 tokens)

List all automations configured on a board. Shows automation name, trigger type, actions, and whether each is active. Returns an empty array if no automations exist.

Input parameters:

- `boardId` (number, required): The board ID

### `toggle_automation` (~71 tokens)

Activate or deactivate a board automation. Pass active=true to enable or active=false to disable.

Input parameters:

- `active` (boolean, required): true to activate, false to deactivate
- `automationId` (number, required): The automation ID
- `boardId` (number, required): The board the automation belongs to (required by the API)

### `toggle_ai_drafts` (~93 tokens)

Enable or disable AI-generated draft replies for a board. When enabling, you must choose a category: 'automatic' (drafts created without prompting) or 'manual' (drafts created on demand).

Input parameters:

- `boardId` (number, required): The board ID
- `category` (string): Required when enabling. Defaults to 'automatic'.
- `enabled` (boolean, required): true to enable AI drafts, false to disable

### `get_whatsapp_conversation` (~101 tokens)

Get the full message history of a WhatsApp conversation (card) on a WhatsApp board. Returns the chat messages in order. Use the cardId returned by list_threads / search_threads on a WhatsApp board (the `cardId` field).

Input parameters:

- `cardId` (string, required): The WhatsApp card ID (whatsappCardId), formatted '<id>-<phoneNumber>'. Get it from list_threads or search_threads on a WhatsApp board.

### `list_whatsapp_templates` (~87 tokens)

List the pre-approved WhatsApp message templates available on a WhatsApp board. Returns each template's name, language, status, category, body text, and how many {{n}} variables it expects. Only APPROVED templates can be sent.

Input parameters:

- `boardId` (number, required): The WhatsApp board ID
- `limit` (number): Maximum templates to return (default: 50)

### `send_whatsapp_message` (~129 tokens)

Send a free-text WhatsApp message into an existing conversation. Note: WhatsApp only allows free-text messages inside the 24-hour customer service window; outside it, use send_whatsapp_template instead.

Input parameters:

- `boardId` (number): Board ID. Auto-resolved from the card when omitted.
- `cardId` (string, required): The WhatsApp card ID (whatsappCardId) of the conversation to reply to.
- `columnId` (string): Column ID the card is in. Auto-resolved from the card when omitted.
- `text` (string, required): The message text to send

### `send_whatsapp_template` (~259 tokens)

Send a pre-approved WhatsApp template message into a conversation. Use this to reach a contact outside the 24-hour window. Call list_whatsapp_templates first to get the exact template name and language, and to see how many {{n}} variables it needs.

Input parameters:

- `boardId` (number): Board ID. Auto-resolved from the card when omitted.
- `bodyParameters` (array): Values to fill the template's {{1}}, {{2}}… BODY variables, in order. Required when the template has variables.
- `cardId` (string, required): The WhatsApp card ID (whatsappCardId) of the conversation to send to.
- `columnId` (string): Column ID the card is in. Auto-resolved from the card when omitted.
- `components` (array): Advanced: a fully-formed WhatsApp components array (for templates with media headers or buttons). Overrides bodyParameters when provided.
- `languageCode` (string): Template language code (e.g. 'fr', 'en_US'). Required only when a board has multiple templates sharing the same name; otherwise auto-resolved.
- `templateName` (string, required): The exact template name (e.g. 'french'). Get it from list_whatsapp_templates.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 68
- 2026-08-01: 36
- 2026-07-31: 28
- 2026-07-29: 26
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@dragapp/mcp-server
- Socket report: https://socket.dev/npm/package/@dragapp/mcp-server
- Repository: https://github.com/nick-timms/drag-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-dragapp-mcp-server/dragapp-mcp-server
