Cofounder CLI

CRM

Track the companies, people, and deals you sell to, log what happened with each, and find new prospects.

Every company gets a built-in CRM: accounts (companies), contacts (people), and opportunities (deals), plus a log of calls, emails, meetings, and notes.

Get the overview

MCPCLIAPI
crm_summary_getcofounder crm summary getGET /cofounder-cli/v1/crm/summary
crm_searchcofounder crm search --query <text>GET /cofounder-cli/v1/crm/search

Start with the summary for questions like "what's going on with Acme?" — it covers accounts, contacts, deals, and recent activity in one call. search finds records by name or text; add --object-type account, contact, or opportunity to narrow it. MCP clients can also show the CRM as a board with crm_summary_show.

Accounts, contacts, and deals

MCPCLIAPI
crm_accounts_listcofounder crm accounts listGET /cofounder-cli/v1/crm/accounts
crm_accounts_getcofounder crm accounts get --account-id <id>GET /cofounder-cli/v1/crm/accounts/{account_id}
crm_accounts_createcofounder crm accounts create --name <name> --domain <domain>POST /cofounder-cli/v1/crm/accounts
crm_accounts_updatecofounder crm accounts update <account-id> --status customerPATCH /cofounder-cli/v1/crm/accounts/{account_id}
crm_accounts_deletecofounder crm accounts delete <account-id>DELETE /cofounder-cli/v1/crm/accounts/{account_id}
crm_contacts_listcofounder crm contacts list --account-id <id>GET /cofounder-cli/v1/crm/contacts
crm_contacts_getcofounder crm contacts get --contact-id <id>GET /cofounder-cli/v1/crm/contacts/{contact_id}
crm_contacts_createcofounder crm contacts create --name <name> --email <email> --account-id <id>POST /cofounder-cli/v1/crm/contacts
crm_contacts_updatecofounder crm contacts update --contact-id <id> --title <job-title>PATCH /cofounder-cli/v1/crm/contacts/{contact_id}
crm_contacts_deletecofounder crm contacts delete <contact-id>DELETE /cofounder-cli/v1/crm/contacts/{contact_id}
crm_contacts_mergecofounder crm contacts merge <contact-id> --merge-contact-id <id>POST /cofounder-cli/v1/crm/contacts/{contact_id}/merge
crm_opportunities_listcofounder crm opportunities list --account-id <id>GET /cofounder-cli/v1/crm/opportunities
crm_opportunities_getcofounder crm opportunities get --opportunity-id <id>GET /cofounder-cli/v1/crm/opportunities/{opportunity_id}
crm_opportunities_createcofounder crm opportunities create --account-id <id> --name <name> --stage leadPOST /cofounder-cli/v1/crm/opportunities
crm_opportunities_updatecofounder crm opportunities update <opportunity-id> --stage proposalPATCH /cofounder-cli/v1/crm/opportunities/{opportunity_id}
crm_opportunities_deletecofounder crm opportunities delete <opportunity-id>DELETE /cofounder-cli/v1/crm/opportunities/{opportunity_id}

Search or list before you create. If a new account's domain, or a new contact's email, matches a record you already have, you get that record back instead of a duplicate. Every deal belongs to an account; --amount-cents is the amount times 100 in the deal's --currency (150000 is $1,500).

update changes only the fields you pass. To avoid overwriting someone else's edit, pass the record's updated_at as --expected-updated-at: the update is refused if the record changed since you read it. delete is permanent.

crm contacts merge folds a duplicate into the contact you keep (<contact-id>); --merge-contact-id is the duplicate, which is deleted. It is permanent, with no undo. Its activities, refs and opportunities move to the kept contact, and do-not-contact stays set if either contact had it. The merge and its crm.contacts.merged audit event commit together; if the event cannot be recorded, the merge rolls back. Retrying as the same actor with the same keeper returns the keeper's current record and does not add another event. A retry with a different actor or keeper conflicts.

To tie an account to a known company record, find the profile first and pass its id as --company-profile-id when creating the account:

MCPCLIAPI
crm_company_profiles_searchcofounder crm company-profiles search --query <name>GET /cofounder-cli/v1/crm/company-profiles

Fill in details

MCPCLIAPI
crm_accounts_enrichcofounder crm accounts enrich --account-id <id> --request-id <uuid>POST /cofounder-cli/v1/crm/accounts/{account_id}/enrich
crm_contacts_enrichcofounder crm contacts enrich --contact-id <id> --request-id <uuid>POST /cofounder-cli/v1/crm/contacts/{contact_id}/enrich

Enriching looks up company or person data from a paid provider and fills in whatever it finds. Each lookup costs money, and there's no spending cap you can set. Use a new UUID as --request-id for every new lookup; reuse one only to recover the same attempt, so you aren't billed twice. If a call's response gets lost, check the record before trying again. A record enriched recently is skipped unless you pass --force-refresh.

Log activity

MCPCLIAPI
crm_activity_createcofounder crm activity create --title <title> --links <json>POST /cofounder-cli/v1/crm/activity
crm_activity_listcofounder crm activity list --object-type account --object-id <id>GET /cofounder-cli/v1/crm/activity

create logs a note, email, call, meeting, or task (--activity-type); --links is a JSON list of the accounts, contacts, or opportunities it's about. It can also store metadata and a --source-ref that keeps the same event from being logged twice. When there's a real email thread, recording, or document behind it, pass its link as --evidence-url.

activity list shows everything, newest first; pass --object-type and --object-id together for one record, or --occurred-after to fetch only what's new.

Sync from your calendar

MCPCLIAPI
crm_calendar_sync_settings_getcofounder crm calendar-sync settings getGET /cofounder-cli/v1/crm/calendar-sync/settings
crm_calendar_sync_previewcofounder crm calendar-sync preview --calendar-id <id>POST /cofounder-cli/v1/crm/calendar-sync/preview
crm_calendar_sync_enablecofounder crm calendar-sync enable --calendar-id <id>POST /cofounder-cli/v1/crm/calendar-sync/enable
crm_calendar_sync_disablecofounder crm calendar-sync disablePOST /cofounder-cli/v1/crm/calendar-sync/disable
crm_calendar_sync_retrycofounder crm calendar-sync retryPOST /cofounder-cli/v1/crm/calendar-sync/retry

With a calendar connected, the CRM can create accounts, contacts, and activity from your meetings. settings get lists your calendars and their ids and whether sync is on. preview counts what sync would create without writing anything. enable turns it on, looking back 30 days by default (--backsync-days). Attendees on personal email domains are skipped unless you pass --include-personal-domains, and sync reads only basic event details unless you pass --visibility-mode full. retry re-runs records that failed to sync; disable turns sync off, for all calendars or just the ones you name with --calendar-id.

Find new prospects

MCPCLIAPI
crm_prospects_previewcofounder crm prospects preview --entity-type company --targeting <json> --max-cost-usd <usd>POST /cofounder-cli/v1/crm/prospects/preview
crm_prospects_findcofounder crm prospects find --entity-type company --targeting <json> --max-cost-usd <usd>POST /cofounder-cli/v1/crm/prospects/find
crm_prospects_importcofounder crm prospects import --job-id <id> --row-id <row-id>POST /cofounder-cli/v1/crm/prospects/import
cofounder crm prospects preview --entity-type company \
  --targeting '{"industries":["dental clinics"],"hq_countries":["US"]}' \
  --max-cost-usd 25
cofounder research jobs get --job-id <job-id>
cofounder research jobs results get --job-id <job-id>

preview checks your targeting and estimates the cost without spending anything. find takes the same settings, spends up to --max-cost-usd, and returns a job id right away while the search runs in the background. Follow it with research jobs get, read the candidates with research jobs results get, then import the rows you want as accounts or contacts — no research is repeated. People without a LinkedIn profile come in as unverified contacts. Pass your own --idempotency-key to find: if the response gets lost, run it again with the same key and settings and you won't start a second search. See Research for more on jobs.