dex-skill
Dex Personal CRM
Dex is a personal CRM that helps users maintain and nurture their professional relationships. It tracks contacts, interaction history, reminders, and organizational structures (groups, tags, custom fields).
Setup — Detect Access Method
Check which access method is available, in this order:
- MCP tools available? If
dex_search_contactsand otherdex_*tools are in the tool list, use MCP tools directly. This is the preferred method — skip CLI setup entirely. - CLI installed? Check if
dexcommand exists (runwhich dexordex auth status). If authenticated, use CLI commands. - Neither? Guide the user through setup.
If you can run shell commands but cannot open a browser — you are a sandboxed-compute agent (Grok Bot, OpenClaw, and similar hosted agents that execute on their own machine rather than the user's). Don't expect the host's own MCP connector sign-in to work: its form takes only a URL and static headers, so it never starts an OAuth flow and reports authentication_required with no link to hand the user. Start with Path B (install the CLI) followed by the device code flow below — that terminates in the user signing in on their own device.
Once the device flow has issued a dex_ key, you have both options. Keep using the CLI, or — if the user prefers MCP tools over CLI commands — add https://mcp.getdex.com/mcp as a connector with that key as an Authorization: Bearer dex_… header. Tool calls work either way.
Before you take the connector path, read this — the rule is here, not only in Authentication. A
dex_key carries no scopes: it acts as the user across their whole account and it does not expire, unlike the scoped one-hour OAuth token. Never print it, echo it into chat, or place it in a tool argument the user can see. Nothing in this paragraph relaxes that. If wiring the connector would require you to surface the key anywhere at all, stop and ask the user to mint their own key at Settings → Integrations and paste it into the host's connector field themselves.
The host may still label the connector "unauthenticated" because it tracks OAuth state it never established. That badge on its own is cosmetic — but a 401 or 403 on a tool call is a real failure (revoked key, or an account without a Professional subscription), not a display quirk. Judge by whether tool calls actually succeed, and surface a rejection instead of retrying it.