# Cooks – open-source sales engagement (sequences, parallel dialer, MCP)

> Source: <https://cooks-sales.vercel.app>
> Published: 2026-10-27 00:06:46+00:00

## How Cooks tells a person from a machine

When a carrier answers, Cooks streams the callee's audio back and runs it through voice-activity detection and a few rules. "Hello?" followed by silence is a person. "You've reached", a beep or a long unbroken speech is a machine. If that is unclear, a small model decides within a few hundred milliseconds.

Twilio's answering-machine detection runs at the same time as a fallback. The first verdict on a line wins and the other is ignored.

| Pickup | Verdict lands | 
|---|---|
| Person saying "Hello?" | 0.8 s | 
| Voicemail greeting | 1.0 s | 
| Carrier machine detection | 3.0 s | 

Measured against the mock carrier in the repo. Timing depends on the recognizer you configure: OpenAI Realtime, a local Nemotron model through sherpa-onnx, or none.

## Connecting an assistant

The MCP server is a thin client over the REST API. Run it on a laptop against a hosted Cooks, or next to the API for the team. In this setup Cooks itself spends no tokens.

Cooks can also run its own agents for drafts, reply classification and research. Add a key for the model provider you use, or point it at a local model, and each run is logged with its tokens and cost.

Enrolled Maya Chen, Dev Patel and Sam Okafor in Q4 outbound. cooks_enroll_prospect ×3

Maya clicked twice, so I'm ringing her now and will log the outcome. cooks_dial

An example session. The assistant calls Cooks tools; Cooks applies the workspace rules and records every action.

- Prospects and accounts: find, create, update, tag, add notes.
- Sequences and steps: build, edit, reorder, or draft a sequence from a brief.
- Enrollments: enroll, pause, resume and finish, with the rules enforced.
- Tasks: list, complete and skip what is due today.
- Dialer: place a call, hand one to a Speko voice agent, fetch the transcript, log it.
- Power dialer: start a session, dial the next batch, see who answered.
- Inbox: read the unified inbox, send SMS and iMessage with consent checks.
- Email: draft, send, and import mail that happened outside Cooks.

### Claude Code

```
claude mcp add cooks \
  -e COOKS_API_URL=http://localhost:8080 \
  -e COOKS_API_KEY=cooks-api-... \
  -- npx -y https://github.com/walter-grace/cooks/releases/latest/download/cooks-mcp.tgz
```

Create the key under Settings, then API keys. The tarball on GitHub Releases is the distribution; nothing is published to npm.

### Claude Desktop and Cursor

```
{
  "mcpServers": {
    "cooks": {
      "command": "npx",
      "args": ["-y", "https://github.com/walter-grace/cooks/releases/latest/download/cooks-mcp.tgz"],
      "env": { "COOKS_API_URL": "http://localhost:8080", "COOKS_API_KEY": "cooks-api-..." }
    }
  }
}
```

Paste into `claude_desktop_config.json` or `.cursor/mcp.json`. Windsurf and Codex take the same shape.

### Grok

```
pnpm --filter cooks-mcp dev          # hosts https://your-host/mcp
# grok.com/connectors → New connector → Custom
#   URL    https://your-host/mcp
#   then sign in when Grok asks
```

Grok runs the OAuth sign-in in a pop-up, so each person signs in with their own account and approves scopes. The host has to be reachable from the public internet.

### claude.ai and remote clients

```
claude mcp add --transport http cooks https://your-host/mcp
# or paste https://your-host/mcp as a claude.ai connector
```

No key to share. The client gets a 401 with OAuth discovery, registers itself, and each person signs in and approves scopes for one workspace. Tokens carry their role, so a rep cannot delete a sequence they do not own.

A draft is sent only after a person confirms it. Suppression lists, unsubscribes and daily caps are checked by the server on every send. Tool errors return the API's error code, so an assistant that enrolls someone twice sees "already enrolled" and moves on.

## Also included

### Mailboxes

Gmail, Microsoft 365 or SMTP, with inbound sync for replies and bounces.

### Inkbox channels

An email address, an SMS number and an iMessage line per rep, with one inbox and STOP honored.

### HubSpot

Contact and company sync, auto-enroll from a list or deal stage, calls and email on the timeline.

### Voice agents

A Speko agent places the call from a script and brings back the outcome, transcript and recording.

### Compatible API

Same paths, envelopes and paging as the commercial API it mirrors. Existing clients change one base URL.

### Webhooks

Signed, retried events for calls, emails, enrollments, tasks and prospects.

### Sign-in

API keys, OAuth 2.1 with PKCE, or Clerk SSO. Secrets are encrypted at rest with a key you hold.

### Web app

Tasks, prospects, sequences, emails, calls, dialer, practice, signals and settings.

## Compared with Nooks and Orum

Nooks and Orum charge per seat and quote prices on a sales call. Cooks is MIT licensed, so the recurring costs are telephony and your server.

| Topic | Cooks | Nooks | Orum | 
|---|---|---|---|
| License | **Free, MIT.** No per-seat fee. | Custom quote | Custom quote | 
| Pricing published | This page | No, "get in touch" | No, "based on package and users" | 
| Minimum seats | None | Not published | Nine | 
| Parallel dialer | Up to four lines; the first person to answer is connected | Yes | Yes, on the Ascend plan | 
| Telephony | Twilio at its published rate: $0.014 a minute in the US, $1.15 a month per number | Not published | Not published | 
| Try it | Whole product, locally, against a mock carrier, for as long as you like | Not published | Trial capped at 500 dials | 
| Where the data lives | Your Postgres, your server | Their cloud | Their cloud | 
| Assistant access | MCP server for Claude, Grok and Cursor | Not on their public pages | Not on their public pages | 

Nooks, Orum and Twilio facts read from their pricing pages in October 2026, linked in the footer. Check them before you buy; they change.

Buyers report $65 to $150 per user per month (Vendr, February 2026). The list quote is said to run higher.

Buyers report $100 to $200 per user per month (Vendr, February 2026), and nine seats is the floor.

100,000 outbound minutes cost about $1,400 at Twilio's rate, ten numbers $138, plus whatever your server costs.

## Setup

You need Node 22, pnpm 9 and Postgres 15 or newer. Jobs, rate limits, the webhook outbox and MCP sessions live in that database, so there is nothing else to operate. Bootstrap prints a workspace API key once, and the web app is served at `/app`.

Docker Compose starts Postgres, the API, the worker, the MCP server and Mailpit together. Production notes, Twilio setup and the mock carrier for trying the dialer without an account are in the [self-hosting guide](https://github.com/walter-grace/cooks/blob/main/docs/self-host.md).

```
git clone https://github.com/walter-grace/cooks.git && cd cooks
pnpm install
createdb cooks && cp .env.example .env
pnpm bootstrap --email you@example.com --workspace "My Team"
pnpm --filter @cooks/api dev    # http://localhost:8080
pnpm --filter @cooks/worker dev # engine, mail, webhooks, AI
```


