---
title: "Dex MCP server"
url: "https://martechdb.com/vendors/dex"
markdown_url: "https://martechdb.com/vendors/dex.md"
api_url: "https://martechdb.com/api/v1/vendors/getdex.com"
updated: "2026-10-22"
---

# Dex MCP server

Yes. Dex publishes an official MCP server at https://mcp.getdex.com/mcp. It's hosted. It offers 57 tools. We last checked it on 23 Oct 2026. MartechDB lists only servers the vendor publishes itself, never community servers.

**Key facts:** As of 23 Oct 2026, Dex's official MCP server scores 65/100 (provisional) on MartechDB's Agent Readiness Index (v1.1). It lists 57 tools.

- Website: [getdex.com](https://getdex.com)
- Categories: [CRM](https://martechdb.com/categories/crm.md)

## Review

Dex's Dex MCP Server scores 65/100 on MartechDB's Agent Readiness Index: easy to connect an AI agent to, with a few gaps.

The good:

- Hosted by Dex: connect by URL, with nothing to install
- Documented, with 57 tools known

Not checked yet: how you sign in; what agent access costs.

## Agent Readiness Index: 65/100 (provisional)

How friendly Dex is to AI agents, from its best official MCP server. Anything not yet researched scores nothing, so this score may rise once it is. Methodology v1.1: https://martechdb.com/methodology.

- Official MCP server: 30/30 (Published by the vendor)
- Hosted by the vendor: 25/25 (Connect by URL, nothing to install)
- OAuth sign-in: pending (Sign-in: see vendor docs)
- Documented tools: 10/10 (A docs page, and its tools are known)
- Free to start, pay as you go: pending (Not checked yet)

## Dex MCP Server

- Address: https://mcp.getdex.com/mcp
- Runs: Hosted
- Sign-in: Sign-in: see vendor docs (`unknown`)
- Official MCP Registry: not listed
- Documentation: https://getdex.com/docs/ai/mcp-server
- How we know it's official: Documented on Dex's own site, at getdex.com
- First seen: 2026-10-22
- Last checked: 2026-10-23

### Tools (57)

As the server lists them on 2026-10-23. Names and descriptions come from the vendor's server.

- `dex_search_contacts` (read-only): Search contacts by name, email, phone number, or any keyword. Phone numbers are matched on digits; formatting and country code are ignored (a query that is only a phone number searches phone numbers instead of the text fields, so "+420 604 354 254", "420604354254" and "604354254" all find the same contact). Use \`near\` (Personal Dex only) for geographic proximity ("contacts in the Bay Area", "near Sydney") — the place is geocoded and contacts are matched by their own coordinates, so it finds people whose saved location differs from the query (e.g. "San Francisco" still matches "Bay Area"). \`near\` and \`query\` combine (AND): "engineers in the Bay Area" → query "engineer" + near "Bay Area". Returns up to \`limit\` results. Use an empty query to list contacts sorted by most recently interacted. In a Dex for Teams workspace these rows carry no keep-in-touch cadence: read one contact's Team and My cadences with dex\_get\_contact, see who is due with dex\_list\_upcoming\_reminders\_and\_birthdays, or…
- `dex_list_contacts` (read-only): List all contacts with cursor-based pagination. Returns lightweight contact summaries (id, name, company, job title, location). Use dex\_get\_contact for full details on a specific contact. Use dex\_search\_contacts for keyword search. In a Dex for Teams workspace these rows carry no keep-in-touch cadence: read one contact's Team and My cadences with dex\_get\_contact, see who is due with dex\_list\_upcoming\_reminders\_and\_birthdays, or select contacts by cadence with dex\_filter\_contacts' has\_frequency (true/false; it matches Team cadences only, so a contact with only a My cadence matches false).
- `dex_get_contact` (read-only): Get a single contact by ID with full details including emails, phone numbers, location (text plus latitude/longitude when geocoded), keep-in-touch cadence (\`frequency\` / \`never\_keep\_in\_touch\` on Personal Dex; in a Dex for Teams workspace, \`keep\_in\_touch\` with the contact's Team cadence as \`team\` and your own My cadence as \`my\`, each left out or null when not set, so \`keep\_in\_touch: {}\` means the contact has neither), tags, groups, custom fields, related contacts, and optionally recent notes/timeline. Workspace connections also include \`team\_interactions\`: up to 20 members by recency, \`members\_total\`, and the strongest current connection (2 × meeting\_count + email\_count; ties or all-zero use most recent email, meeting or shared note). Counts cover all of the member's emails/meetings with the contact across connected accounts, not just shared accounts, and require active membership and current sharing for that channel. Null means unknown. Former members retain dates only and never rank…
- `dex_create_contact`: Create one or more contacts. For a single contact, pass fields directly (first\_name, email, etc.). For batch creation (e.g. CSV import), pass a \`contacts\` array instead (max 100). Creating does NOT deduplicate: a contact with the same name or email as an existing one becomes a second contact, so search first (dex\_search\_contacts) when the person may already be in Dex. For a batch, pass an \`idempotency\_key\` and reuse it if you must send the same call again; without one, a repeated call creates every contact a second time. Returns every created contact (up to 100) with its new \`id\`; when full rows would not fit the response size limit, each row is trimmed to its id, names, job title and company (or, failing that, its id and names) — read the rest with dex\_get\_contact.
- `dex_update_contact` (can delete or overwrite): Update an existing contact. Only provided fields are changed. Pass \`null\` to clear an optional scalar such as website, company, job title, social profile, birthday, description, or location. For emails and phone numbers, you can add or remove entries — existing ones are preserved automatically. \`is\_archived: true\` ARCHIVES the contact (hidden from lists, search, and reminders; reversible) — confirm with the user first, and use dex\_archive\_contacts for more than one contact. On a Dex for Teams workspace connection, where dex\_archive\_contacts is refused, this is the way to archive (true) or restore (false), one contact at a time.
- `dex_complete_keep_in_touch`: Mark a keep-in-touch contact as done — records that the user was just in touch, so the cadence resets and the next reminder lands one frequency interval from now (the dashboard's "Mark as complete"). Pass snooze\_days to instead push the next reminder out without recording a touch (the dashboard's snooze uses 7). Set or clear the cadence itself via dex\_update\_contact's keep\_in\_touch field, or dex\_set\_keep\_in\_touch for many contacts at once. In a Dex for Teams workspace it acts on the contact's Team or My cadence (pass kind when the contact has both) and returns the rescheduled \`cadence\`: "We met" on a Team cadence writes a note shared with the workspace, on a My cadence a private note (returned as \`note\_id\`), and a viewer gets no note. That shared note counts as your own touch too, so marking the Team cadence done also restarts your My cadence on the contact, if you have one. A snooze only hides the cadence until it ends and never moves its due date, so one that ends on or before the n…
- `dex_set_keep_in_touch` (can delete or overwrite): Set or clear the keep-in-touch cadence for up to 500 contacts in one call (chunk larger sets into multiple calls) — the bulk companion to dex\_update\_contact's keep\_in\_touch field. An interval sets how often to stay in touch ("7 days" = weekly, "14 days" = every 2 weeks, "1 mon" = monthly, "42 days" = every 6 weeks, "3 mons" = quarterly, "6 mons" = every 6 months, "1 year" = yearly) — this is "remind me to reach out every N", "stay in touch every N". "never" is the explicit don't-keep-in-touch mark — "no regular outreach", "stop reaching out", "don't keep in touch with them", "stop reminding me about them". "unset" simply clears the cadence so the contact has none — "no cadence", "remove the keep-in-touch" — leaving them unmarked rather than flagged. Every value overwrites whatever cadence each contact already has — and "never"/"unset" leave nothing in its place — so confirm with the user before changing a large set. Marking a due keep-in-touch as done is dex\_complete\_keep\_in\_touch, no…
- `dex_archive_contacts`: Archive or unarchive up to 500 contacts by ID (chunk larger sets into multiple calls). Archived contacts keep all their data (notes, reminders, history) but are hidden from the default contact list, search, and keep-in-touch reminders — the reversible alternative to dex\_delete\_contacts, recommended for bulk cleanup. Always show the user which contacts will be archived and get their confirmation first. Archiving MORE THAN 20 contacts in one call is server-enforced: the call is rejected (nothing changes) unless it carries confirm: true AND expected\_count equal to the number of distinct contact\_ids — the count the user confirmed. Restoring (archived: false) is never gated. Find archived contacts with dex\_filter\_contacts archived\_only:true and restore them with archived:false. Not available on a Dex for Teams workspace connection: archive or restore one contact at a time with dex\_update\_contact is\_archived (true or false). That covers any number of contacts, and restoring too.
- `dex_delete_contacts` (can delete or overwrite): Delete one or more contacts by their IDs. This action is irreversible — when the user might want the contacts back later, use dex\_archive\_contacts instead. Not available on a Dex for Teams workspace connection: delete workspace contacts in the Dex app, or archive one contact at a time with dex\_update\_contact is\_archived: true.
- `dex_merge_contacts` (can delete or overwrite): Merge duplicate contacts. Each group of IDs is consolidated into one surviving contact — all data is combined onto it and the other IDs are deleted. The survivor defaults to the oldest (longest-lived) record in the group, NOT the first ID you pass; to choose the survivor yourself, pass the group as { contact\_ids, primary\_contact\_id } instead of a plain array. A chosen survivor also keeps its own fields (photo, company, title, LinkedIn); the others only fill its empty ones. Without one, values from the most recently updated contact win. Read the returned mergedContactIds to learn which contact ID survived each group instead of assuming the order you sent. This is irreversible. Not available on a Dex for Teams workspace connection: merge workspace contacts in the Dex app.
- `dex_get_priority_tiers` (read-only): Read the user's relationship-priority tiers (tier\_number + the label the user sees) and, optionally, the current priority of specific contacts. Priority is a built-in field on every contact, the same one the Priority Map and the contact page's priority control edit. Tiers are numbered from 1 (highest); the defaults are 1 Top, 2 High, 3 Medium, 4 Low, 5 None, but the user may have RENAMED them — always call this first and speak in the user's own labels, never the defaults. A contact with no priority\_tier has no priority set, which is different from the "None" tier (a priority the user chose). Set priorities with dex\_set\_contact\_priority. Personal Dex only.
- `dex_set_contact_priority` (can delete or overwrite): Set or clear the relationship priority of up to 500 contacts in one call (chunk larger sets into multiple calls). It writes the same field the Priority Map and the contact page's priority control edit. Pass \`tier\` as the user's tier label (e.g. "Inner circle", matched case-insensitively) or its tier\_number, both from dex\_get\_priority\_tiers; null clears the priority, which is different from the "None" tier. An unknown tier is refused and nothing changes. Every value OVERWRITES each contact's current priority, so show the user exactly which contacts go to which tier and get explicit confirmation before calling. Build audiences with dex\_filter\_contacts (its priority\_tier filter finds who is already in a tier). Personal Dex only.
- `dex_filter_contacts` (read-only): Filter contacts with the same structured filters as Dex views: tags, groups, company, job title, social profile presence, LinkedIn history, location, interaction dates, keep-in-touch cadence, custom fields, and more. All conditions combine with AND. Up to 100 contact IDs can be fetched in one call; tenant ownership is enforced server-side. Archived contacts are omitted unless \`archived\_only: true\`. Use this to answer questions like "contacts tagged investor at Google I talked to this year". For plain keyword or geographic search use dex\_search\_contacts; for full details on one contact use dex\_get\_contact.
- `dex_add_related_contacts`: Link one or more contacts to a contact as related contacts (e.g. family members, colleagues, people met through them). Relations are symmetric — linking A to B also links B to A — and carry no relationship label, so record the nature of the relationship in a note or the description instead. Resolve names to IDs with dex\_search\_contacts first. Related contacts appear in dex\_get\_contact under \`related\_contacts\`. Re-linking an existing pair is a no-op.
- `dex_remove_related_contacts` (can delete or overwrite): Unlink one or more related contacts from a contact. Relations are symmetric, so removing A↔B clears the link from both sides. The contacts themselves are not modified or deleted.
- `dex_list_groups` (read-only): List contact groups, most recent page first. Returns up to \`limit\` groups; if \`has\_more\` is true, pass \`next\_cursor\` back as \`cursor\` to fetch the rest.
- `dex_get_group` (read-only): Get a single group by ID, with its direct sub-groups (\`sub\_groups\`) and its counts (\`\_count.groups\_contacts\` active contacts, \`\_count.sub\_groups\`), the same shape dex\_create\_group and dex\_update\_group return.
- `dex_create_group`: Create a new contact group, optionally nested under an existing group. A group cannot be its own parent or ancestor.
- `dex_update_group` (can delete or overwrite): Update an existing group: name, emoji, description, or parent group. To nest a group under another, pass parent\_id; pass parent\_id: null to move it to the top level. A group cannot be its own parent or ancestor. Because null fields are omitted from tool results, a top-level group reads back with no parent\_id key.
- `dex_delete_group` (can delete or overwrite): Delete a group. This action is irreversible. Not available on a Dex for Teams workspace connection: delete workspace groups in the Dex app.
- `dex_add_contacts_to_group`: Add up to 500 contacts to a group per call. Split larger selections into separate calls. result.added counts new memberships (the same number as result.count) and result.already\_linked the IDs that were members already; any other processed ID matched no contact you can add. result.remaining is always present: retry any IDs in it to finish a partial write, and an empty list means every ID was processed.
- `dex_remove_contacts_from_group` (can delete or overwrite): Remove up to 500 contacts from a group per call. Split larger selections into separate calls. remaining is always present: retry any IDs in it to finish a partial write, and an empty list means every ID was processed.
- `dex_list_group_contacts` (read-only): List contacts in a group with pagination.
- `dex_list_tags` (read-only): List all tags with optional pagination.
- `dex_get_tag` (read-only): Get a single tag by ID.
- `dex_create_tag`: Create a new tag. Tag names are unique regardless of letter case: if a tag with the same name already exists (e.g. "Design Partner" when you pass "design partner"), that tag is returned instead of a duplicate, with \`existing: true\` when its stored name differs in letter case from the one you passed. Repeating the exact name returns the same tag without the flag.
- `dex_update_tag` (can delete or overwrite): Update an existing tag.
- `dex_delete_tag` (can delete or overwrite): Delete a tag. This action is irreversible. Not available on a Dex for Teams workspace connection: delete workspace tags in the Dex app.
- `dex_add_tags_to_contacts`: Add tags to contacts. \`tags\` and \`affected\` cover every requested pair that is tagged after the call, including pairs that already were; \`added\` counts the links this call created and \`already\_linked\` the ones that existed before it, so a pair in neither was not tagged. A retry with the same \`idempotency\_key\` after the first call completed reports those pairs as \`already\_linked\`.
- `dex_remove_tags_from_contacts` (can delete or overwrite): Remove tags from contacts.
- `dex_list_reminders` (read-only): List reminders/tasks with optional filtering by contact, completion status, overdue status and due-date range, plus sorting and pagination. Each row carries the contacts it is linked to (\`reminders\_contacts\`) and, on a Dex for Teams workspace connection, its tags (\`tags\`). "Today" and "overdue" are judged by the calendar day in UTC, not the user's timezone. On a Dex for Teams workspace connection, \`assignee\_id\` also filters by who a reminder is assigned to.
- `dex_get_reminder` (read-only): Get a single reminder by ID.
- `dex_create_reminder`: Create a new reminder/task. When \`idempotency\_key\` is supplied, repeat calls with the same key within the server's 24-hour idempotency window return the original reminder instead of creating a duplicate. On a Dex for Teams workspace connection the reminder is assigned to you unless \`assignee\_id\` names another member (or null for unassigned).
- `dex_update_reminder` (can delete or overwrite): Update an existing reminder. On a Dex for Teams workspace connection, \`assignee\_id\` reassigns it (null unassigns).
- `dex_delete_reminder` (can delete or overwrite): Delete a reminder. This action is irreversible.
- `dex_list_notes` (read-only): List notes on contact timelines with optional filtering by contact and date range. In a workspace, contact\_id is required and date filters are unavailable.
- `dex_get_note` (read-only): Get a single note by ID.
- `dex_list_note_types` (read-only): List available note types (e.g. Meeting, Call, Coffee, Note).
- `dex_create_note`: Create a new note. Use dex\_list\_note\_types first to discover available note types and pick the most appropriate one. \`event\_time\` is required when \`idempotency\_key\` is supplied; repeat calls with the same key and arguments within the server's 24-hour idempotency window return the original note instead of creating a duplicate. In a workspace, notes are shared with every member unless you pass audience "private" (only when the user asks for a private note).
- `dex_update_note` (can delete or overwrite): Update an existing note's content or event\_time. Only those two can change: this tool cannot change the note type, the audience (shared or private) or the linked contacts, so tell the user when they ask for one of those.
- `dex_delete_note` (can delete or overwrite): Delete a note. This action is irreversible.
- `dex_list_custom_fields` (read-only): List all custom field definitions.
- `dex_create_custom_field`: Create a new custom field definition. In a Dex for Teams workspace, only owners and admins can create field definitions.
- `dex_update_custom_field` (can delete or overwrite): Update an existing custom field definition. In a Dex for Teams workspace, only owners and admins can edit field definitions.
- `dex_delete_custom_field` (can delete or overwrite): Delete a custom field definition. This action is irreversible. Deleting an ID that does not exist — including one you already deleted — returns a not-found error, NOT a success. Do not retry a delete that already succeeded; treat the first success as final. Not available on a Dex for Teams workspace connection: delete workspace custom fields in the Dex app.
- `dex_set_custom_field_values` (can delete or overwrite): Batch-update custom field values on contacts. Each update has a mode: "replace" (the default) overwrites the stored value; "prepend" / "append" preserve the existing text atomically on the server and add the new text in front of / after it, joined by \`separator\` (defaults to a newline) — you do NOT need to read the current value first. Array values prepend/append as a de-duplicated list; date values only support replace. Send the one value key the field type takes: text\_value (input, autocomplete), date\_value (datepicker), array\_value (multiselect). In a Dex for Teams workspace also: member\_user\_id (teammate), number\_value (number), boolean\_value (boolean) and linked\_contact\_ids (contact; replaces the whole set). Those four are replace-only, take no separator, and cannot be combined with any other value key; null (or \[\] for linked\_contact\_ids) clears the value.
- `dex_list_calendar_events` (read-only): List events across ALL of the user's connected calendars (Google/Microsoft) within a time range. Defaults to the next 7 days when no range is given. An optional free-text \`query\` searches titles, descriptions, locations, and attendees — combine it with a wide start/end range to find past or future meetings matching a person or company. Events are fetched live from the providers. A failure across all accounts returns an error; warnings indicate incomplete results when only some accounts failed. Each event's \`email\` field identifies which connected account it belongs to — pass that as \`account\_email\` to get/update/delete it. On a Dex for Teams workspace connection it reads only what members share with the workspace. With a range (one day from \`start\` by default, at most 7 days; \`query\` is Personal Dex only and \`limit\` applies only with \`contact\_id\`) it returns every event on your own calendars that you share with this workspace, in full, plus teammates' meetings with workspace contacts,…
- `dex_get_calendar_event` (read-only): Get a single calendar event by its provider event ID, including attendees, conferencing links, and recurrence flags, fetched live from the connected Google/Microsoft account. This tool writes nothing: it opts out of the note-metadata refresh the API performs for other clients. When the same address is connected under both providers, pass account\_provider from the event returned by dex\_list\_calendar\_events. Personal Dex connection only (on a Dex for Teams workspace connection it is refused). On a workspace connection, dex\_list\_calendar\_events already returns your own events from the calendars you share there in full.
- `dex_create_calendar_event` (can delete or overwrite): Create an event on the user's connected calendar (primary account by default). For a timed event set start\_datetime + end\_datetime; for an all-day event set start\_date (end\_date optional for multi-day). Attendees are added to the invite; whether they are emailed follows the calendar provider's default behavior. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
- `dex_update_calendar_event` (can delete or overwrite): Update an existing calendar event by its provider event ID. Only provided fields change. To reschedule, provide BOTH start\_datetime and end\_datetime (or start\_date for all-day) — new times replace the old ones and can switch an event between timed and all-day. Recurring events: this edits the whole series when given the series ID. Supply idempotency\_key from the first attempt to safely retry a timed-out operation; use a fresh key for a new edit. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
- `dex_delete_calendar_event` (can delete or overwrite): Delete a calendar event by its provider event ID. Irreversible — and if the user organizes the event, deleting it cancels the meeting for all attendees. Personal Dex connection only (on a Dex for Teams workspace connection it is refused).
- `dex_search_emails` (read-only): Search or list emails across ALL of the user's connected mail accounts (Google/Microsoft), fetched live from the providers. Omit \`query\` to LIST the most recent emails — set folder:'inbox' for received mail only ("my inbox"); the default includes the user's own sent messages. With \`query\`, matches plain text against subject, body, and participants — pass keywords like a name, company, or email domain; provider search operators (from:, to:) are neutralized. Date ranges: without \`after\`/\`before\`, results cover roughly the last 6 months — when listing, prefer following \`next\_cursor\` over widening the range, and pass bounds only when the request names a period. Returns message metadata (sender, participants, subject, snippet, date, provider link) — not full bodies. Only listings paginate: search results are a single relevance-ranked page (\`cursor\` with \`query\` is rejected) — narrow a search with dates or better keywords instead. On a Dex for Teams workspace connection it reads only what m…
- `dex_research_contacts` (can delete or overwrite): Run Dex Research on 1–5 contacts: searches the public web, reads the best pages, and stores a cited research note per contact (one-line summary + "Current focus" / "Background" / "Interests" bullets with \[\[n\]\] citations into \`sources\`) plus structured findings (LinkedIn, website, email, phone) with confidence and evidence. This is a PAID action that takes a minute or more per contact (contacts run in parallel, so the call lasts as long as the slowest one) — confirm with the user before researching a large set, and chunk bigger sets into several calls. A contact researched within the last 30 days returns its cached note at no cost unless \`force: true\`. A run auto-fills a contact's EMPTY linkedin/website fields from high-confidence findings (reported in \`applied\`) and preserves populated contact fields; a fresh run replaces the previous stored research note, findings, and review statuses. Email/phone findings come back \`pending\` for the user to confirm before you apply them with dex\_upd…
- `dex_get_contact_research` (read-only): Read the stored Dex Research note for 1–10 contacts without running anything (free and fast). Returns each contact's cited note and structured findings from its last run, or no \`research\` key when the contact has never been researched. Use this to check for existing research before paying for dex\_research\_contacts, to pick up a run that came back \`in\_progress\`, or to re-read results a large run response truncated.
- `dex_list_upcoming_reminders_and_birthdays` (read-only): What's coming up for the user inside a date window, like the Dex homepage: the contacts whose birthday falls in the window, the open reminders due in it, and the keep-in-touch contacts due for a touch by the end of it. Defaults to the next 7 days starting today — use \`days: 30\` for the next month, or set \`from\` to look at a specific week. Use this for questions like "whose birthday is next week?", "who should I reach out to this week?" or "what do I have coming up?". Recurring reminders are listed on their next occurrence. Birthdays the user already marked done this year on the homepage are omitted. \`keep\_in\_touch\` DOES include contacts already overdue for a touch (flagged \`is\_overdue\`) — the homepage keeps showing them as due until the touch is logged. Reminders are picked by the day they come up inside the window, so reminders due before \`from\` are NOT included — call dex\_list\_reminders with is\_overdue=true for those. Dates, "today" and \`is\_overdue\` are judged in UTC, not the user's…
- `dex_list_workspaces` (read-only): List the Dex for Teams workspaces the user belongs to, with their role in each and whether API & MCP access is turned on (api\_access\_enabled), and say where this MCP connection acts: \`connection\` is { kind: "personal" } for Personal Dex or { kind: "workspace", workspace\_id } for a workspace, whose row is marked current: true. A connection acts in that one place only. To work somewhere else, an OAuth or device-code connection connects again and picks Personal or another workspace on the Dex consent page; an API key acts where it was created (Personal or one workspace), so use a key created for the other place in Dex under Settings → Dex API & MCP. Naming another workspace with ?workspace= is refused. A workspace only works with api\_access\_enabled true, which a workspace owner or admin turns on in the workspace's settings. Roles: viewer can read; standard, admin and owner can read and write, and owners and admins can also create and edit custom-field definitions over MCP. Whatever the r…
- `dex_list_workspace_members` (read-only): List the active members of this connection's Dex for Teams workspace: member\_id, name, email, role and is\_you (the caller). Use a member's member\_id as \`assignee\_id\` on dex\_create\_reminder, dex\_update\_reminder and dex\_list\_reminders. Pass \`query\` (part of a name or email) to find a specific member, e.g. before assigning a reminder. Returns up to \`limit\` members (default 50); if \`has\_more\` is true, pass \`next\_cursor\` back as \`cursor\` with the SAME \`query\` to continue; a new query starts without a cursor. Only active members can be assigned. Viewers can read but cannot edit or complete a reminder, so assigning one strands it; prefer owner, admin or standard members. Workspace connections only: a Personal connection has no workspace and this tool is refused.

### Connect it

Claude Code:

```sh
claude mcp add --transport http dex https://mcp.getdex.com/mcp
```

- Add to Cursor: <cursor://anysphere.cursor-deeplink/mcp/install?name=dex&config=eyJ1cmwiOiJodHRwczovL21jcC5nZXRkZXguY29tL21jcCJ9>
- Add to VS Code: <vscode:mcp/install?%7B%22name%22%3A%22dex%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.getdex.com%2Fmcp%22%7D>
- Claude.ai and Claude Desktop: Customize, Connectors, "+", Add custom connector, then paste https://mcp.getdex.com/mcp
- ChatGPT: Settings, Apps, Advanced settings, turn on Developer mode, Create, then paste https://mcp.getdex.com/mcp (this usually works only with servers that use self-serve sign-in or none)

JSON for Cursor, Windsurf and other clients that connect to hosted servers:

```json
{
    "mcpServers": {
        "dex": {
            "type": "http",
            "url": "https://mcp.getdex.com/mcp"
        }
    }
}
```

## Questions

### Does Dex have an official MCP server?

Yes. Dex publishes its MCP server itself. Dex's own documentation describes it. MartechDB only lists servers a vendor publishes, never community copies.

### What is the Dex MCP server URL?

The address is https://mcp.getdex.com/mcp.

### How do I connect Dex MCP to Claude, ChatGPT or Cursor?

In Claude, add https://mcp.getdex.com/mcp as a custom connector (Customize, Connectors, Add custom connector). In Cursor, use the Add to Cursor link on MartechDB's page, or paste the JSON settings into your mcp.json. In Claude Code, run: claude mcp add --transport http dex https://mcp.getdex.com/mcp

### What can the Dex MCP server do?

It offers 57 tools, including dex\_search\_contacts, dex\_list\_contacts, dex\_get\_contact, dex\_create\_contact and dex\_update\_contact (as listed on 23 Oct 2026). 23 are marked read-only and 23 can delete or overwrite data.

### Is the Dex MCP server in the official MCP Registry?

No. Dex hasn't published it to the official MCP Registry.

### Is the Dex MCP server working?

Yes. It answered our most recent check. We last checked it on 23 Oct 2026.

### What are the alternatives to Dex's MCP server?

In CRM, the most agent-friendly alternatives with an official MCP server are Attio (97/100), Zero (97/100), Pipedrive (96/100), NetHunt (95/100) and Twenty (94/100). Dex scores 65/100 on the same index.

## Change history

- 2026-10-22: Added to MartechDB with Dex MCP Server

## Alternatives to Dex's MCP server

In CRM, the most agent-friendly first:

- [Attio](https://martechdb.com/vendors/attio.md) (attio.com), Agent Readiness Index 97/100
- [Zero](https://martechdb.com/vendors/zero.md) (zero.inc), Agent Readiness Index 97/100
- [Pipedrive](https://martechdb.com/vendors/pipedrive.md) (pipedrive.com), Agent Readiness Index 96/100
- [NetHunt](https://martechdb.com/vendors/nethunt.md) (nethunt.com), Agent Readiness Index 95/100
- [Twenty](https://martechdb.com/vendors/twenty.md) (twenty.com), Agent Readiness Index 94/100

## Get this data

- API: `curl https://martechdb.com/api/v1/vendors/getdex.com`
- MCP: `claude mcp add --transport http martechdb https://martechdb.com/mcp`, then ask about Dex.
- Web page: https://martechdb.com/vendors/dex
