Sally CRM
Sally CRM is a native Community feature for lightweight, API/MCP-first customer relationship management.
The goal is not to clone a large CRM suite. The goal is a Sally-style operational CRM that is simple for humans and excellent for agents.
Edition availability
CRM is included in Community by default via feature key:
crm.core
When the feature is available:
/crmAPI routes are available- hosted MCP can expose
crm.*tools - the web UI can show CRM surfaces
Paid Sally editions are only unlocked with licenses minted by the Sally license server. Environment variables do not unlock Pro, Business, or Enterprise features.
Current implementation
The current implementation includes:
FeatureKey:crm.core- API gate:
GET /crm - CRM data models for organizations, people, deals, and activities
- CRUD-style API routes for organizations, people, and deals
- activity list/add API routes
- web route:
/crm - hosted MCP tools under
crm.*
Headless CRM model
Recommended CRM entities:
Organizations
Companies, customers, vendors, or accounts.
Suggested fields:
- workspace ID
- name
- website
- notes
- labels
- owner account ID
- archived timestamp
People
Contacts associated with organizations.
Suggested fields:
- workspace ID
- organization ID
- name
- phone
- title/role
- notes
- labels
- archived timestamp
Deals
Opportunities or commercial workflows.
Suggested fields:
- workspace ID
- organization ID
- primary person ID
- title
- value
- currency
- stage
- status: open/won/lost
- expected close date
- linked Sally project ID
- notes
Activities
A timeline of CRM interactions.
Suggested fields:
- workspace ID
- organization/person/deal references
- type: note/call/email/meeting/follow-up
- body
- actor account ID
- created timestamp
- optional linked Sally task ID
API shape
Use a dedicated /crm prefix:
GET /crm/organizations
POST /crm/organizations
GET /crm/organizations/:organizationId
PATCH /crm/organizations/:organizationId
GET /crm/people
POST /crm/people
GET /crm/people/:personId
PATCH /crm/people/:personId
GET /crm/deals
POST /crm/deals
GET /crm/deals/:dealId
PATCH /crm/deals/:dealId
GET /crm/activities
POST /crm/activities
All CRM routes should be workspace-scoped and should use Sally's normal workspace selector headers/query params.
MCP tools
Recommended hosted MCP tools:
crm.organization.list
crm.organization.get
crm.organization.create
crm.organization.update
crm.person.list
crm.person.get
crm.person.create
crm.person.update
crm.deal.list
crm.deal.get
crm.deal.create
crm.deal.update
crm.activity.list
crm.activity.add
crm.addon.info
MCP tool listing is dynamic: CRM tools are only listed when crm.core is enabled.
Permissions
Initial recommended permission model:
- workspace
OWNER: full CRM management - workspace
MEMBER: create/update CRM records and activities - workspace
VIEWER: read-only CRM access if viewer access is enabled for CRM later - platform
ADMIN/SUPERADMIN: elevated access for administration
If CRM records later need more privacy, add record ownership or custom sharing as a second phase.
Sally project bridge
CRM should connect to Sally project management rather than duplicate it.
Useful bridges:
- create a Sally project from a won deal
- link a deal to a Sally project
- create Sally tasks from CRM follow-ups
- show linked projects/tasks on organization and deal pages
- add CRM activity when important project milestones happen
Product principle
Sally CRM should remain:
- lightweight
- workspace-scoped
- API/MCP-first
- automation-friendly
- easy to reason about
Avoid features that create a heavyweight CRM before the headless model is solid.