Cursor

View as Markdown

Drop the Dial skill into your Cursor config so the editor’s agent learns how to drive the dial CLI on demand. Once installed, Cursor can send messages, place calls, and wait for events without you re-explaining the surface.

Install

Pick one of two paths. Option 1 drops the Dial CLI skill into your Cursor config so the agent drives the dial CLI. Option 2 wires up Dial’s MCP server so Cursor calls Dial’s tools natively.

First, get the dial CLI on your PATH:

$curl -fsSL https://getdial.ai/install | bash

Then drop the Cursor-specific Dial skill into your config:

$dial onboard --code <code> --agent cursor

onboard finishes verification first, then copies the Dial skill into Cursor’s standard config directory. Re-run the command anytime (after a CLI upgrade, for example) to overwrite the skill in place — the verification step is a no-op once you’re onboarded.

Option 2 — MCP server

Cursor has no CLI command to add an MCP server — you declare it in Cursor’s mcp.json config file (Cursor MCP docs). Add Dial under the mcpServers key, using either the local stdio transport (npx -y @getdial/cli mcp, which reuses your saved CLI key) or the remote Streamable HTTP transport (OAuth in the browser):

1# ~/.cursor/mcp.json (global) · .cursor/mcp.json (project)
2{
3 "mcpServers": {
4 "dial": {
5 "command": "npx",
6 "args": ["-y", "@getdial/cli", "mcp"]
7 }
8 }
9}

See the MCP page for the full tool list and the remote OAuth flow.

What gets installed

With Option 1, a single markdown skill describing the dial CLI — its commands, flags, and conventions, mirroring the CLI reference. Cursor loads the skill when a Dial-related task comes up; nothing else is touched. With Option 2, nothing lands in your config beyond the mcpServers entry — Cursor discovers Dial’s tools from the server itself.

Use it

Both paths work the same way in use — just ask in plain language:

Send an SMS to +14155550123 with the body “running late, ETA 10 min”.

Cursor figures out the right action and runs it. With the MCP server it calls Dial’s tools directly (no CLI shell-out); with the skill it drives the dial CLI. See Using Dial from an agent for more examples.

Inbound event handling (Suggestion)

You can also wake Cursor automatically when a Dial event arrives by wiring a CLI command target: for each inbound event, the listen daemon spawns a handler that delivers a fresh prompt to Cursor’s headless agent.

First install the listen daemon:

$dial listen install

1. Write a handler

$#!/usr/bin/env bash
$# /usr/local/bin/handle-dial-event-cursor
$event="$1"
$
$type=$(jq -r '.type' <<<"$event")
$from=$(jq -r '.from // ""' <<<"$event")
$body=$(jq -r '.body // ""' <<<"$event")
$
$prompt=$(cat <<EOF
>A Dial event just arrived. Decide what to do and act on it.
>
> type: $type
> from: $from
> body: $body
>
>raw event JSON:
>$event
>EOF
>)
$
$# Detach a fresh Cursor agent run and return right away.
$nohup cursor-agent -p "$prompt" </dev/null >>~/.dial/cursor.log 2>&1 &
$disown
$exit 0

-p (alias --print) is Cursor’s headless / non-interactive mode. Add -m <model> to pick a model.

2. Register

$chmod +x /usr/local/bin/handle-dial-event-cursor
$dial local-target add cmd /usr/local/bin/handle-dial-event-cursor

The nohup … & disown pattern keeps Cursor running after the handler exits, so a multi-minute agent run never collides with the daemon’s per-attempt --timeout. See CLI command target for the full reference, delivery semantics, and the once-retry behavior.