DragApp MCP Server
# DragApp MCP Server
An [MCP](https://modelcontextprotocol.io) server for [DragApp](https://dragapp.com) — AI-powered email & WhatsApp for teams. Read and reply to emails, send WhatsApp messages, search threads, manage boards, and more from Claude, ChatGPT, Cursor, or any MCP-compatible AI tool.
## Setup
### Fastest: connect from your AI client (hosted)
Add this URL as a custom connector:
```
https://app.dragapp.com/mcp
```
- **Claude** — Settings → Connectors → Add custom connector → paste the URL
- **ChatGPT** — Settings → Connectors → Add → paste the URL
- **Gemini** — add it as a remote MCP server with the same URL
When you connect, a Drag page opens and asks for your API key once
([DragApp](https://app.dragapp.com) → Settings → Integrations). The key is
verified and handed to your client as its access token; the service stores
nothing, and the connect flow never puts your key in a URL. Works in any
client that supports remote MCP connectors (OAuth 2.1 + PKCE, dynamic client
registration). Nothing to install.
### Local (config-file clients: Cursor, Windsurf, Claude Code)
#### 1. Get your API key
Go to [DragApp](https://app.dragapp.com) → Settings → Integrations → copy your API key.
#### 2. Connect to your AI tool
**Claude Desktop** — add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"dragapp": {
"command": "npx",
"args": ["-y", "@dragapp/mcp-server"],
"env": {
"DRAG_API_KEY": "your-api-key"
}
}
}
}
```
**Cursor** — add to `.cursor/mcp.json`:
```json
{
"mcpServers": {
"dragapp": {
"command": "npx",
"args": ["-y", "@dragapp/mcp-server"],
"env": {
"DRAG_API_KEY": "your-api-key"
}
}
}
}
```
Works with any MCP-compatible client — ChatGPT, Windsurf, Claude Code, etc.
## What you can do
Ask your AI assistant:
- "Show me unread emails on the Support board"
- "Read the latest email from Acme Corp and draft a reply"
- "Move all billing threads to the Done column"
- "Search for emails mentioning 'invoice' on the Sales board"
- "What's my team's average response time this week?"
- "List all knowledge base articles"
- "Search our help center for how invoices work"
- "Assign the newest email on the Support board to Sarah"
- "Create a task on the Support board assigned to Sarah"
## Tools
### Email (8 tools)
`list_threads` · `get_thread` · `reply_to_thread` · `send_new_email` · `search_threads` · `filter_threads` · `move_thread` · `move_threads_bulk`
### Boards (5 tools)
`list_boards` · `get_board` · `list_columns` · `list_board_members` · `list_teams`
### Cards (6 tools)
`list_cards_in_column` · `get_card` · `create_card` · `update_card` · `move_card` · `archive_card`
### Labels (4 tools)
`list_labels` · `add_label_to_thread` · `remove_label_from_thread` · `toggle_labels`
### Contacts (3 tools)
`search_contacts` · `get_contact_conversations` · `create_contact`
### Knowledge Base (5 tools)
`list_articles` · `get_article` · `create_article` · `update_article` · `search_knowledge`
### Analytics (4 tools)
`get_response_times` · `get_avg_response_time` · `get_daily_activity` · `get_closed_activity`
### Automations (3 tools)
`list_automations` · `toggle_automation` · `toggle_ai_drafts`
### WhatsApp (4 tools)
`send_whatsapp_message` · `send_whatsapp_template` · `list_whatsapp_templates` · `get_whatsapp_conversation`
### Comments (2 tools)
`add_comment` · `get_comment`
### Tags (2 tools)
`list_tags` · `add_tag_to_card`
### Tasks (1 tool)
`create_task`
**47 tools across 12 categories.**
## Development
```bash
git clone https://github.com/nick-timms/drag-mcp-server.git
cd drag-mcp-server
npm install
cp .env.example .env # add your API key
npm run build
npm start
```
### Secret-scanning pre-commit hook
This is a **public** repository. Before committing, install the pre-commit hook so
[gitleaks](https://github.com/gitleaks/gitleaks) scans your staged changes for
secrets (keys, JWTs, tokens):
```bash
pip install pre-commit # one-time, if you don't have it
pre-commit install # installs the git hook in this repo
```
Run it manually against everything at any time:
```bash
pre-commit run --all-files
```
The hook uses [`.gitleaks.toml`](./.gitleaks.toml). The same scan runs in CI on every
push and pull request (`.github/workflows/secret-scan.yml`), and `npm publish` runs a
tarball guard (`scripts/check-tarball.mjs`) that blocks the release if the built
package contains any known-sensitive term.
## License
MIT
TDQS
Scored across 47 tools
Multiple tool overlaps exist (create_card vs create_task, get_card vs get_thread, add/remove/toggle_labels, move_card vs move_thread). Descriptions help but an agent could easily mis-select, especially between card and thread operations.
Most tools follow verb_noun pattern (create_card, list_boards, get_thread). Minor inconsistencies: get_avg_response_time vs get_response_times, list_board_members (misleading name), and list_cards_in_column (preposition 'in'). Overall solid.
47 tools is on the high side but reflects DragApp's broad feature set (boards, cards, email, WhatsApp, KB, metrics). Could be trimmed by merging redundant tools (e.g., create_card/create_task). Borderline acceptable.
Missing CRUD for contacts (no update/delete), knowledge base articles (no delete), and board management (no create/update/delete). No file attachment tools. Significant gaps that will hinder full agent workflows.