Drag
Triage, reply, and report on your Gmail shared inbox
Documentation
MCP Documentation
MCP Server
The DragApp MCP server exposes 47 tools across 12 categories, giving any MCP-compatible AI client full access to your boards, emails, cards, contacts, knowledge base, analytics, and automations.
Connect in two ways: paste the hosted endpoint URL into your AI client's connector settings (the fastest route, no install), or run the open-source server locally from a config file. Same tools, same permissions, either way.
Built on the Model Context Protocol standard. Open source, MIT licensed.
Connect (hosted endpoint)
The fastest way to connect is the hosted endpoint. Three steps, about two minutes. No config file, no local install, no restart.
- In your AI client's connector settings (in Claude: Settings › Connectors › Add custom connector), paste this URL and save:
https://app.dragapp.com/mcp - Click Connect. A Drag connect page opens in your browser and asks for your DragApp API key.
- Enter your API key. Copy it from DragApp under Settings › Integrations, paste it into the connect page, and submit. Drag verifies the key and hands it to your client as its access token. The connection is live.
To verify, ask your client to "list the boards in my DragApp." It asks your permission the first time it uses each tool, so you control exactly what it may do.
The key is entered once, on the connect page only. It never appears in a web address, and the MCP service stores nothing on its own servers.
Under the hood this is a standard OAuth 2.1 authorization-code flow with PKCE and dynamic client registration, served over MCP's Streamable HTTP transport, so any client that supports remote MCP connectors can connect.
Installation (local route)
Prefer to run the server yourself, or using a config-file client such as Cursor, Windsurf, or Claude Code? The npm package remains fully supported. Run directly with npx; no install needed:
npx -y @dragapp/mcp-server
Or install globally:
npm install -g @dragapp/mcp-server
Authentication
Both routes authenticate with your DragApp API key, and the connection inherits your existing Drag permissions either way. On the hosted endpoint, you enter the key once on the secure connect page and it becomes your client's access token; nothing is stored by the MCP service. On the local route, the server reads the key from the DRAG_API_KEY environment variable.
Get your API key from Settings, then Integrations, inside Drag. You can revoke it there at any time.
Your API key grants full access to your DragApp workspace. Keep it secret and never commit it to version control.
Client setup
Add the following JSON to your AI client's MCP configuration file:
{
"mcpServers": {
"dragapp": {
"command": "npx",
"args": ["-y", "@dragapp/mcp-server"],
"env": {
"DRAG_API_KEY": "your-api-key"
}
}
}
}
Config file locations
| Client | Config path |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| ChatGPT | ChatGPT Desktop app settings |
| Gemini | Gemini Desktop app settings |
| Copilot | Copilot Desktop app settings |
| Cursor | .cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Claude Code | ~/.claude.json or .mcp.json |
Tool reference
47 tools across 12 categories. Each tool is automatically available to any connected MCP client.
8
| Tool | Description |
|---|---|
list_threads | List email threads in a specific column of a board |
get_thread | Get a single email message with full HTML body |
reply_to_thread | Reply to an existing email thread |
send_new_email | Send a new email from a board |
search_threads | Search for threads across all boards |
filter_threads | Filter threads by label, assignee, or status |
move_thread | Move a thread to a different column |
move_threads_bulk | Move multiple threads at once |
Boards
5
| Tool | Description |
|---|---|
list_boards | List all boards the authenticated user has access to |
get_board | Get details of a specific board |
list_columns | List all columns in a board |
list_board_members | List all members of a board |
list_teams | List all teams in the workspace |
Cards
6
| Tool | Description |
|---|---|
list_cards_in_column | List all cards in a specific column |
get_card | Get details of a specific card |
create_card | Create a new card in a column |
update_card | Update card properties (title, description, assignee, due date) |
move_card | Move a card to a different column or position |
archive_card | Archive a card |
Tags
2
| Tool | Description |
|---|---|
list_tags | List all tags in the workspace |
add_tag_to_card | Add a tag to a card |
Tasks
1
| Tool | Description |
|---|---|
create_task | Create a task (checklist item) on a card |
Contacts
3
| Tool | Description |
|---|---|
search_contacts | Search contacts by name or email address |
get_contact_conversations | Get all conversations with a specific contact |
create_contact | Create a new contact in the workspace |
Knowledge Base
5
| Tool | Description |
|---|---|
list_articles | List all articles in the knowledge base |
get_article | Get the full content of a knowledge base article |
create_article | Create a new knowledge base article |
update_article | Update an existing knowledge base article |
search_knowledge | Search the knowledge base by query |
Analytics
4
| Tool | Description |
|---|---|
get_response_times | Get response time metrics for a board |
get_avg_response_time | Get the average response time across boards |
get_daily_activity | Get daily activity metrics (threads created, replied, resolved) |
get_closed_activity | Get metrics on closed/resolved threads |
Automations
3
| Tool | Description |
|---|---|
list_automations | List all automations configured on a board |
toggle_automation | Enable or disable a specific automation |
toggle_ai_drafts | Enable or disable AI draft generation on a board |
4
| Tool | Description |
|---|---|
get_whatsapp_conversation | 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). |
list_whatsapp_templates | 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. |
send_whatsapp_message | 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. |
send_whatsapp_template | 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. |
Examples
Natural language prompts and the tools the AI client will call behind the scenes.
“Show me unread emails on the Support board”
list_boards → list_columns → list_threads
The AI client finds the Support board, identifies the correct column, and lists threads with their subjects, senders, and timestamps.
“Reply to the latest email from Sarah”
search_threads → get_thread → reply_to_thread
Searches across boards for threads from Sarah, retrieves the full message, then composes and sends a reply.
“What's our average response time this week?”
get_avg_response_time
Calls the analytics tool directly to return the average response time with period comparisons.
“Create a card on the Sprint board with this bug report”
list_boards → list_columns → create_card
Finds the Sprint board, identifies the right column (e.g. Backlog), and creates a card with the bug details.
“Assign all billing-related threads to Sarah”
filter_threads → move_threads_bulk
Filters threads by the BILLING label, then moves them to Sarah's assigned column in bulk.
“Search our knowledge base for the refund policy”
search_knowledge
Searches the knowledge base and returns matching articles with excerpts.
Development
Clone the repository and run locally:
git clone https://github.com/nick-timms/drag-mcp-server.git
cd drag-mcp-server
npm install
npm run build
DRAG_API_KEY=your-key node dist/index.js
For development with auto-rebuild:
npm run dev
Links
GitHub repository: source code, issues, contributions
npm package: @dragapp/mcp-server
Model Context Protocol: MCP specification
REST API docs: DragApp REST API reference
License: MIT
Need help?
Help center: guides and tutorials
support@dragapp.com: email support
GitHub issues: bug reports and feature requests