Playwright MCP Server
mcp.so:dex/dex
Score: 90/100
Handshake verified by our own probe.
How to earn +10 points
Tools · 76
Search contacts by name, email, phone number, or any keyword. Phone numbers are matched on digits and formatting is ignored; a number without its country code also matches (a query that is only a phon…
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_sear…
Get a single contact by ID with full details including emails, phone numbers, location (text plus latitude/longitude when geocoded), keep-in-touch cadence (on Personal Dex `frequency` / `never_keep_in…
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 de…
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 email…
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"). …
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…
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, s…
Delete one or more contacts by their IDs. With several IDs, `count` and `contact_ids` report the contacts actually deleted, so an ID that matched no contact is left out; a single ID that matches no co…
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)…
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 …
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…
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 f…
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 relatio…
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.
List contact groups, sorted alphabetically by name. Returns up to `limit` groups; if `has_more` is true, pass `next_cursor` back as `cursor` to fetch the rest.
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…
Create a new contact group, optionally nested under an existing group. A group cannot be its own parent or ancestor. If a group with exactly this name already exists (letter case included), that group…
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 o…
Delete a group. Its contacts are kept, and its direct sub-groups move to the top level. This action is irreversible. On a Dex for Teams workspace connection viewers are refused.
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 we…
Remove up to 500 contacts from a group per call. Split larger selections into separate calls. `removed` lists the contacts whose membership this call removed (a requested ID that was not a member is l…
List the contacts in a group, up to `limit` per page (default 10). If `has_more` is true, pass `next_cursor` back as `cursor` to fetch the rest.
List tags, up to `limit` per page (default 10). If `has_more` is true, pass `next_cursor` back as `cursor` to fetch the rest.
Get a single tag by ID: its name. To find the contacts that carry it, use dex_filter_contacts with `tags`.
Create a new tag. If a tag with the same name already exists, ignoring letter case (e.g. "Design Partner" when you pass "design partner"), that tag is returned instead of a duplicate, with `existing: …
Rename a tag. Every contact that carries it shows the new name. Renaming to the name of another tag, ignoring letter case, is refused with "Tag already exists" and changes nothing; changing only the l…
Delete a tag, removing it from every contact that carries it. This action is irreversible. On a Dex for Teams workspace connection viewers are refused.
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`…
Remove tags from contacts. The tags and the contacts are kept. `count` is the number of links removed, so a contact that did not carry the tag adds nothing to it.
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_co…
Get a single reminder by ID, with the contacts it is linked to.
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 duplica…
Update an existing reminder. On a Dex for Teams workspace connection, `assignee_id` reassigns it (null unassigns).
Delete a reminder. A recurring reminder's whole series goes with it. This action is irreversible.
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.
Get a single note by ID. Pass include_contacts: true to see who it is about.
List available note types (e.g. Meeting, Call, Coffee, 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 …
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 a…
Delete a note, removing it from every linked contact's timeline. This action is irreversible.
List custom field definitions. Contact fields by default; pass entity_type "company" for company fields (Dex for Teams workspaces) or "all" for both. Each row carries its entity_type.
Create a new custom field definition. Names need not be unique, so a retried call without `idempotency_key` creates a second field with the same name. In a Dex for Teams workspace, only owners and adm…
Update an existing custom field definition: its name and, for an autocomplete or multiselect field, its options. A field's type can't be changed after it is created. In a Dex for Teams workspace, only…
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 …
Batch-update custom field values on contacts and, in a Dex for Teams workspace, on companies (use company_id instead of contact_id, with a company field). Each update has a mode: "replace" (the defaul…
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, desc…
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. A deleted event answers `…
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…
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…
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. An id the calendar does not have (mistyped, on …
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 receive…
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 w…
Read the stored Dex Research note for 1–10 contacts without starting a run, so it is fast and uses none of the account's research limits. Returns each contact's cited note and structured findings from…
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…
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 {…
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…
List the user's attention items: conversations Dex flagged as waiting on them — a reply someone expects, or an action they need to take (sign, renew, set something up) — newest first, as shown on the …
Read-only: show the email thread behind an email attention item (`source` `email`), oldest message first. It does not save the thread or change the item, and it changes nothing in the mailbox: no mess…
Read-only: write a suggested reply to an email attention item's thread and return it as text (`{ body }`) for the user to review, using Dex's drafting model and the user's saved drafting style. It cre…
Send the user's reply into an email attention item's thread, from the mailbox that holds it, to the `reply_to` of the message being answered (or its sender when it has none) — then mark the item done.…
Mark an attention item of any source (email, WhatsApp or LinkedIn) done (it leaves the home page), or reopen one with done: false. Use when the user says they handled it some other way or it needs no …
List the workspace's companies with optional filters, sorting and pagination. Each row is the company (owner as `owner_member_id`, tags as `tag_ids`, custom field values) plus its `contacts_count`, `c…
Get one company by ID, archived ones included: its fields (owner as `owner_member_id`, tags as `tag_ids`, custom field values), `contacts_count` ({ current, past }: active contacts with a current or o…
Create 1-100 companies in the workspace in one all-or-nothing call: if any one is refused (for example a website another company already has, 409), none is created. Returns the created `companies`. Se…
Update a company's fields. Only the fields you pass change; null clears a field. Change the owner of many companies at once with dex_set_company_owner. Workspace connections only; requires Companies t…
Set or clear the owner (the responsible member) of 1-100 companies. One update per company, in order: `updated` counts the companies written, including any the member already owned, and `company_ids` …
Add workspace tags to companies. `added` counts the tag links this call created; a pair that was already linked is not counted again. Workspace connections only; requires Companies to be enabled for t…
Remove workspace tags from companies. `removed` counts the tag links this call removed. Workspace connections only; requires Companies to be enabled for the workspace. On a Personal connection it answ…
Merge duplicate companies into one target. Contacts, roles, tags, custom field values and links, views, favorites and org chart members move onto the target and the source companies are deleted. The t…
Archive one company, or restore it with archived: false. An archived company leaves the default list and stays readable by ID. This tool never archives the company's contacts. Restoring also brings ba…
Delete one company and its logo. This removes the company for everyone in the workspace and can't be undone. Its contacts stay, but their roles at the company go with it, and so do company link custom…
List a company's contacts: `current` (a current role there; the default) or `past` (only past roles), active contacts before archived ones. Each row has `contact_id` (names via dex_get_contact), `is_a…
The company's activity across the workspace, newest first: the notes on its contacts (current and past) that you can see, which are the shared ones and your own private ones (each note's `audience` sa…
Record where a workspace contact works, by company_id or by the exact name of an existing company (never creates one; create it first with dex_create_company). mode "change_employer" (default) ends th…
Read-only snapshot of the authenticated user's own Dex account: their profile (name, email, timezone, default email client, SMS vs WhatsApp messaging mode), their connected integrations, and their onb…
Resources · 1
Dex contacts, reminders, notes, inbox and calendar
ui://dex-app/mcp-app.html
How to use
Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://mcp.getdex.com/mcp
Cursor or Cline: add to your MCP config:
{
"mcpServers": {
"playwright_mcp_server": {
"url": "https://mcp.getdex.com/mcp",
"transport": "http"
}
}
}