CRM Flexible Schema

Use this skill when a CRM workspace needs to adapt its data model without a database migration. CRM ships default company, contact, deal, and activity object types, then lets agents add typed properties, create flexible records, and define relationships between records.

Principles

  • Keep the default primitives: company, contact, deal, and activity.
  • Add custom properties before writing custom values so agents can discover the schema.
  • Store flexible values in record properties, not in ad hoc notes.
  • Use relationships for associations such as deal_champion, partner_account, or renewal_parent.
  • Prefer typed property definitions over unstructured JSON when the field will be reused.

Discover Schema

crm schema objects list
crm schema properties deal
crm relationships list

Add Properties

crm schema property create deal \
  --key mutual_action_plan \
  --label "Mutual Action Plan" \
  --type json

crm schema property create contact \
  --key buying_role \
  --label "Buying Role" \
  --type select \
  --options '["economic_buyer","champion","technical_buyer","blocker"]'

Create Flexible Records

crm objects create deal \
  --properties '{
    "name": "Acme Expansion",
    "stage": "qualified",
    "amount": 50000,
    "mutual_action_plan": {
      "next_step": "security review",
      "owner": "champion"
    }
  }'

Define Relationships

crm relationships create \
  --key deal_champion \
  --label "Deal Champion" \
  --from-object deal \
  --to-object contact \
  --cardinality many_to_one

crm relationships link \
  --relationship deal_champion \
  --from-record deal_record_id \
  --to-record contact_record_id

MCP Tool Names

  • listObjectTypes
  • createObjectType
  • listPropertyDefinitions
  • createPropertyDefinition
  • listRecords
  • createRecord
  • updateRecord
  • listRelationshipDefinitions
  • createRelationshipDefinition
  • linkRecords

Guardrails

  • Do not create a custom object when a custom property on a core object is enough.
  • Do not overload one JSON field with many unrelated concepts; create separate typed properties.
  • Do not link records unless a relationship definition exists.
  • For repeatable GTM process data, prefer select, multi_select, number, date, or boolean over json.