dex_create_note
Create timeline entries in Dex CRM by adding notes with timestamps, categorizing interactions, and linking contacts to track relationship history.
Instructions
Create a new note or timeline entry. Requires event_time (ISO datetime). Use meeting_type to categorize: 'call', 'coffee', 'email', 'meal', 'meeting', 'networking', 'note', 'other', 'party', 'text'. The meeting_type_id is resolved automatically from the note types API. Associate contacts via timeline_items_contacts array of { contact_id }. The note text goes in the 'note' field.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes |
Implementation Reference
- src/tools/timeline.ts:66-89 (handler)The dex_create_note tool registration and handler implementation. It uses enrichNoteBody to resolve the meeting_type_id and then sends a POST request to /v1/timeline/ using the dex client.
server.tool( "dex_create_note", "Create a new note or timeline entry. Requires event_time (ISO datetime). Use meeting_type to categorize: 'call', 'coffee', 'email', 'meal', 'meeting', 'networking', 'note', 'other', 'party', 'text'. The meeting_type_id is resolved automatically from the note types API. Associate contacts via timeline_items_contacts array of { contact_id }. The note text goes in the 'note' field.", { note: z.object({ note: z.string().optional(), event_time: z.string(), meeting_type: z.enum(meetingTypes).optional(), custom_emoji: z.string().optional(), timeline_items_contacts: z.array(timelineContactSchema).optional(), }), }, async (args) => { try { const noteBody = await enrichNoteBody( args.note as unknown as Record<string, unknown> ); const result = await dex.post("/v1/timeline/", { note: noteBody }); return toResult(result); } catch (error) { return toError(error); } } );