Guide
A CRM for Claude Code agents: one command, one key per agent
An agent that works leads needs somewhere to keep them that is not a spreadsheet it overwrites. Deskhand is a hosted CRM an agent writes to directly over MCP or plain HTTP, with a console where you watch what it did. This page gets Claude Code connected and writing a first record in a couple of minutes.
- One key per agent. Pause or revoke one agent without touching the others or logging yourself out.
- Every write recorded. The audit log names the agent and the run and keeps the record's before and after values.
- Safe retries. Send an idempotency key and a repeated call returns the first result instead of writing twice.
Connect Claude Code
- Sign in, open Agents, name the agent (for example
outreach-1) and pick scopes. Copy the key; it is shown once. - Add the MCP server:
export DESKHAND_KEY=dh_xxxxxxxx # the key you just copied claude mcp add --transport http deskhand https://deskhand.grain64.com/api/mcp \ --header "Authorization: Bearer $DESKHAND_KEY"
The agent appears as connected in the console after its first call. The same key works over plain HTTP:
curl -X POST https://deskhand.grain64.com/api/contacts/upsert \
-H "Authorization: Bearer $DESKHAND_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: lead-ada-001" \
-d '{"email":"[email protected]","name":"Ada","company_name":"Example Ltd","source":"first-run"}'
Open Contacts in the console: the record is there, and the Activity view names the agent that wrote it. Calling from code instead of the terminal? See the TypeScript SDK quickstart or the curl and Python quickstart.
What to tell the agent
Put one line in the agent's instructions: "Save leads with upsert_contact, look them up with search_contacts, and stop and report if a call returns agent_paused." A paused agent gets a 403 with the reason, so it can tell you instead of retrying.
When this is not the right tool
If one human runs one agent against a CRM they already live in, that CRM's own connector may be enough. Deskhand is for agents that are the main operators of the pipeline, where you want a separate key, a pause switch and an audit trail per agent.
Try it
The Free plan covers one agent with its own key, a pause switch and the full audit log. Get started free
Related: An MCP server for a CRM: per-agent keys, scopes and a pause switch, Connect an agent to a CRM over MCP with the TypeScript SDK