ask_notes
ChatGPTAsk a free-text question about the user's CraftNote library and get back the most relevant excerpts. Use this when the user's question refers to an idea, theme, or topic — not a specific keyword they remember. Examples: "what did I say about pricing?", "what's been on my mind this week?", "did I discuss the Q3 plan with anyone?". Returns {matches: [...]} where each match is {note_id, note_title, snippet, score} — snippet is a short excerpt (~500 chars) drawn from the note transcript or summary. Follow up with get_note(note_id) to read the full note when an excerpt looks relevant and you need more context. score is cosine similarity (0–1) between the question and the matched chunk, not a confidence guarantee. search_notes is the better choice when the user's wording (a name, a date, a keyword they explicitly said) should literally appear in the matching note.
ask_notes
ChatGPTAsk a free-text question about the user's CraftNote library and get back the most relevant excerpts. Use this when the user's question refers to an idea, theme, or topic — not a specific keyword they remember. Examples: "what did I say about pricing?", "what's been on my mind this week?", "did I discuss the Q3 plan with anyone?". Returns {matches: [...]} where each match is {note_id, note_title, snippet, score} — snippet is a short excerpt (~500 chars) drawn from the note transcript or summary. Follow up with get_note(note_id) to read the full note when an excerpt looks relevant and you need more context. score is cosine similarity (0–1) between the question and the matched chunk, not a confidence guarantee. search_notes is the better choice when the user's wording (a name, a date, a keyword they explicitly said) should literally appear in the matching note.
get_meeting_briefs
ChatGPTList the signed-in user's UPCOMING meetings with prep context — for each meeting: the title, start time, a one-line agenda, and the attendees (name, and a role/company headline when known). Each attendee has a relationship: "first_meet" (never met), "met_before" (the user has personally met them times_met times — a last_meeting recap + any still-open items owed is included), or "team_met" (the user's TEAM has met them but the user has NOT personally — do not describe this as the user's own past meeting). All sourced from the user's own calendar and notes. Use for "what meetings do I have", "prep me for my next call", "who am I meeting tomorrow", "what do I owe people before Monday". Looks ahead 36 hours by default; pass hours to widen (max 168 = 7 days). Returns {briefs: [...]}, ordered soonest-first — empty when nothing is upcoming, in which case say so rather than inventing meetings.
get_note
ChatGPTFetch ONE specific note by id. For 2 or more ids in the same turn, get_notes (bulk) is faster. Requires a known note id from a prior search_notes or ask_notes call — used when the user wants the full content of a note they've been shown an excerpt from. By default returns only the summary — pass fields to request more. The note must either belong to the signed-in user OR have been shared directly with them. The response carries an ownership field ("owned" or "shared"). For shared notes the folder_id field reflects the signed-in user's filing (where THEY put it), not the owner's folder — and is omitted when the user hasn't filed it. Returns {error: "not_found"} when the note doesn't exist or isn't accessible — surface that to the user.
get_note
ChatGPTFetch ONE specific note by id. For 2 or more ids in the same turn, get_notes (bulk) is faster. Requires a known note id from a prior search_notes or ask_notes call — used when the user wants the full content of a note they've been shown an excerpt from. By default returns only the summary — pass fields to request more. The note must belong to the signed-in user, have been shared directly with them, or be owned by a CraftNote team they belong to. The response carries an ownership field ("owned", "team", or "shared"); "team" means a colleague recorded it, so never tell the user they said or attended it. For shared notes the folder_id field reflects the signed-in user's filing (where THEY put it), not the owner's folder — and is omitted when the user hasn't filed it. Returns {error: "not_found"} when the note doesn't exist or isn't accessible — surface that to the user. Long transcripts are returned in 24,000-character pages: when the response has truncated: true, call get_note again with transcript_offset set to the response's next_offset to fetch the next page, repeating until truncated disappears. original_length is the full transcript length in characters.
get_notes
ChatGPTFetch UP TO 10 notes in ONE call. Use this whenever you have 2 or more ids — much faster than calling get_note repeatedly. Same per-note response shape as get_note, same fields controls. For shared notes the folder_id on each returned note reflects the signed-in user's filing, not the owner's folder. Especially useful for "what did I commit to" / "summarize last week's calls" / "compare these meetings" — synthesis queries that touch multiple notes at once. Response: {notes: [...], not_found_ids?: [...]}. Missing ids land in not_found_ids; the surviving notes come back in notes in the order they were requested.
get_notes
ChatGPTFetch UP TO 10 notes in ONE call. Use this whenever you have 2 or more ids — much faster than calling get_note repeatedly. Same per-note response shape as get_note, same fields controls. For shared notes the folder_id on each returned note reflects the signed-in user's filing, not the owner's folder. Especially useful for "what did I commit to" / "summarize last week's calls" / "compare these meetings" — synthesis queries that touch multiple notes at once. Response: {notes: [...], not_found_ids?: [...]}. Missing ids land in not_found_ids; the surviving notes come back in notes in the order they were requested. Transcripts are capped at 24,000 chars per note (truncated: true when cut) — to read a long transcript in full, page through it with get_note + transcript_offset.
list_action_items
ChatGPTAggregate action items / commitments / todos across the user's notes into one flat list with note citations — covers BOTH owned notes and shared notes the user has access to. The right tool for "what did I commit to this week", "what's on my plate", "list my todos" — single round trip, structured output. Filter by folder_id to scope to a single folder; this includes shared notes the user has filed there (filing is per-recipient). Returns {action_items: [{task, priority, due_date?, completed, note_id, note_title, note_created_at}], owned_notes_scanned, shared_notes_scanned, owned_truncated?, shared_truncated?}. When either *_truncated is true, narrow with since/until or folder_id.
list_action_items
ChatGPTAggregate action items / commitments / todos across the user's notes into one flat list with note citations — covers BOTH owned notes and shared notes the user has access to. Team-owned notes are deliberately EXCLUDED even when the user can read them elsewhere: this list is the user's own plate, not a colleague's. The right tool for "what did I commit to this week", "what's on my plate", "list my todos" — single round trip, structured output. Filter by folder_id to scope to a single folder; this includes shared notes the user has filed there (filing is per-recipient). Returns {action_items: [{task, priority, due_date?, completed, note_id, note_title, note_created_at}], owned_notes_scanned, shared_notes_scanned, owned_truncated?, shared_truncated?}. When either *_truncated is true, narrow with since/until or folder_id.
list_folders
ChatGPTList the signed-in user's folders with {id, name} per folder. Returns the folder ids needed by search_notes(folder_id=...) — useful when the user asks "what's in my X folder?" and the folder id isn't already known.
list_folders
ChatGPTList the folders the signed-in user can see, with {id, name} per folder. Returns the folder ids needed by search_notes(folder_id=...) — useful when the user asks "what's in my X folder?" and the folder id isn't already known. When the user belongs to a CraftNote team, each folder also carries an ownership field ("personal" or "team") — personal and team taxonomies routinely reuse the same names, so check it before picking an id.
search_notes
ChatGPTFind or browse notes accessible to the signed-in user — covers both their own notes and notes shared directly with them. Each result carries an ownership field ("owned" or "shared") so you can attribute it. Use WITHOUT query to list the most recent notes — great for "what's my latest note", "what did I record this week", or "show me my podcasts". Use WITH query to keyword-search across titles, transcripts, and summaries (multi-word queries match all tokens / AND). Filter by since/until (ISO date "YYYY-MM-DD") for date ranges, and by type (audio, text, meeting, document, youtube, podcast, video_link) for a specific note kind. Filter by folder_id to scope to a single folder — this includes BOTH the user's own notes filed in that folder AND shared notes the user has filed in that folder (filing is per-recipient, so the same shared note can appear in different folders for different recipients). The folder_id on each result reflects the signed-in user's view: for owned notes, the user's own folder; for shared notes, the folder the user filed it in (or omitted if unfiled). Returns up to limit matches with id, title, type, created_at, ownership, and a short snippet. Use get_note afterward to read the full transcript / summary of a specific result. search_notes is the better choice when the user's wording (a specific keyword, date range, or note type) should literally appear in the matching note — ask_notes is for thematic / semantic questions.
search_notes
ChatGPTFind or browse notes accessible to the signed-in user — covers their own notes, notes shared directly with them, and notes owned by a CraftNote team they belong to. Each result carries an ownership field ("owned", "team", or "shared") so you can attribute it — "team" means a colleague recorded it, so never tell the user they said or attended it. Use WITHOUT query to list the most recent notes — great for "what's my latest note", "what did I record this week", or "show me my podcasts". Use WITH query to keyword-search across titles, transcripts, and summaries (multi-word queries match all tokens / AND). Filter by since/until (ISO date "YYYY-MM-DD") for date ranges, and by type (audio, text, meeting, document, youtube, podcast, video_link) for a specific note kind. Filter by folder_id to scope to a single folder — this includes BOTH the user's own notes filed in that folder AND shared notes the user has filed in that folder (filing is per-recipient, so the same shared note can appear in different folders for different recipients). The folder_id on each result reflects the signed-in user's view: for owned notes, the user's own folder; for shared notes, the folder the user filed it in (or omitted if unfiled). Returns up to limit matches with id, title, type, created_at, ownership, and a short snippet. Use get_note afterward to read the full transcript / summary of a specific result. search_notes is the better choice when the user's wording (a specific keyword, date range, or note type) should literally appear in the matching note — ask_notes is for thematic / semantic questions.