bucket_get_upload_url
ChatGPTReturns a presigned HTTPS PUT URL to upload a file directly to S3 (faster than bucket_upload_file for local files). Object key is project/{projectId}/{unique}.{ext} (same naming as upload). Requires project access. After upload, use returned path in TipTap image.attrs.src (not the presigned URL). Client must HTTP PUT the file bytes to uploadUrl with header Content-Type exactly matching returned contentType (also in headers). Presigned URL expires in expiresIn seconds (60–604800, default 900). Recommended max size matches MAX_UPLOAD_BYTES (default 15 MiB). Example: curl -X PUT -H "Content-Type: …" --data-binary @file.md "<uploadUrl>".
bucket_get_upload_url
ChatGPTReturns a presigned HTTPS PUT URL to upload a file directly to S3 (faster than bucket_upload_file for local files). Object key is project/{projectId}/{unique}.{ext} (same naming as upload). Requires project access. After upload, use returned path in TipTap image.attrs.src (not the presigned URL). Client must HTTP PUT the file bytes to uploadUrl with header Content-Type exactly matching returned contentType (also in headers). Presigned URL expires in expiresIn seconds (60–604800, default 900). Recommended max size matches MAX_UPLOAD_BYTES (default 15 MiB). Example: curl -X PUT -H "Content-Type: …" --data-binary @file.md "<uploadUrl>".
bucket_get_url
ChatGPTReturns a presigned HTTPS URL for an S3 object key under project/{projectId}/… only; requires access to that project. Same role as namp2 useBucket().load. If path already starts with https://, returns it unchanged. Use expiresIn seconds (60–604800, default 3600).
bucket_get_url
ChatGPTReturns a presigned HTTPS URL for an S3 object key under project/{projectId}/… only; requires access to that project. Same role as namp2 useBucket().load. If path already starts with https://, returns it unchanged. Use expiresIn seconds (60–604800, default 3600).
bucket_upload_file
ChatGPTUploads a file to S3. Object key is always project/{projectId}/{unique}.{ext}. Caller must have access to projectId (owner or invited member). Body is base64 (optional data URL prefix). Returns { result, data: { path, size } }. For Nemo TipTap image nodes (app/components/Nemo/Editor.vue), set attrs.src to data.path; optional attrs: bucket, alt, title, caption, align (e.g. start), maxWidth, rounded, border, size. Response includes tipTapImageNodeExample.
bucket_upload_file
ChatGPTUploads a file to S3. Object key is always project/{projectId}/{unique}.{ext}. Caller must have access to projectId (owner or invited member). Body is base64 (optional data URL prefix). Returns { result, data: { path, size } }. For Nemo TipTap image nodes (app/components/Nemo/Editor.vue), set attrs.src to data.path; optional attrs: bucket, alt, title, caption, align (e.g. start), maxWidth, rounded, border, size. Response includes tipTapImageNodeExample.
namp_resolve_url
ChatGPTParses a namp.me URL into project/note id or board id for follow-up tools. Supports /project/{projectId}/note/view/{noteId} and /project/{projectId}/board/{typeSegment}?boardId=. No DB call; access is enforced when you call project_notes_get / project_board_get.
namp_resolve_url
ChatGPTParses a namp.me URL into project/note id or board id for follow-up tools. Supports /project/{projectId}/note/view/{noteId} and /project/{projectId}/board/{typeSegment}?boardId=. No DB call; access is enforced when you call project_notes_get / project_board_get.
project_board_create
ChatGPTInserts into project_boards. Typical columns: project_id, title, contents, user_name, user_email, status, category_key, board_type, file_size. For board_type, pass code (task, qna, keep) or label (업무, Q&A, 보관함) — normalized to stored code. Legacy inputs (issue, todo, info, 이슈, TODO, 정보) normalize to task. Omit for DB default (usually task). user_id defaults to authenticated profile; if set, must match. contents: full Nemo TipTap doc (same schema as notes). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_board_create
ChatGPTInserts into project_boards. Typical columns: project_id, title, contents, user_name, user_email, status, category_key, board_type, file_size. For board_type, pass code (task, qna, keep) or label (업무, Q&A, 보관함) — normalized to stored code. Legacy inputs (issue, todo, info, 이슈, TODO, 정보) normalize to task. Omit for DB default (usually task). user_id defaults to authenticated profile; if set, must match. contents: full Nemo TipTap doc (same schema as notes). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_board_get
ChatGPTLoads one project_boards row and all project_board_replies for that board (project_board_id). board.contents and each reply contents use the same Nemo TipTap JSON as project notes. Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*). Returns { board, replies, boardTypeDefinitions } — board.board_type is the code; use boardTypeDefinitions to map code ↔ label.
project_board_get
ChatGPTLoads one project_boards row and all project_board_replies for that board (project_board_id). board.contents and each reply contents use the same Nemo TipTap JSON as project notes. Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*). Returns { board, replies, boardTypeDefinitions } — board.board_type is the code; use boardTypeDefinitions to map code ↔ label.
project_board_reply_create
ChatGPTInserts into project_board_replies. Links via project_board_id (same as board id). Typical: project_board_id, project_id, contents, user_name, user_email, file_size. user_id defaults to authenticated profile; if set, must match. contents: full Nemo TipTap doc (same as notes/board body). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_board_reply_create
ChatGPTInserts into project_board_replies. Links via project_board_id (same as board id). Typical: project_board_id, project_id, contents, user_name, user_email, file_size. user_id defaults to authenticated profile; if set, must match. contents: full Nemo TipTap doc (same as notes/board body). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_board_update_status
ChatGPTUpdates project_boards.status. Allowed codes: registered, requestReply, replyCompleted, checking, processing, processed, solved, pending (same as client issueStatus).
project_board_update_status
ChatGPTUpdates project_boards.status. Allowed codes: registered, requestReply, replyCompleted, checking, processing, processed, solved, pending (same as client issueStatus).
project_boards_find_by_title
ChatGPTSearches project_boards by title among boards in projects the user can access. Substring (default) or exact: true. Optional projectId limits to one project. Optional boardType: filter by type using either code (task, qna, keep) or label (업무, Q&A, 보관함). Legacy inputs (issue, todo, info, 이슈, TODO, 정보) are normalized to task. Returns boards rows and includes boardTypeDefinitions for reference.
project_boards_find_by_title
ChatGPTSearches project_boards by title among boards in projects the user can access. Substring (default) or exact: true. Optional projectId limits to one project. Optional boardType: filter by type using either code (task, qna, keep) or label (업무, Q&A, 보관함). Legacy inputs (issue, todo, info, 이슈, TODO, 정보) are normalized to task. Returns boards rows and includes boardTypeDefinitions for reference.
project_boards_list
ChatGPTLists all project_boards for a project (project_id), sorted by order_no then updated_at (newest first). Omits contents (use project_board_get for full body + replies). Optional boardType filters by kind (code or label). Returns boards, count, and boardTypeDefinitions.
project_boards_list
ChatGPTLists all project_boards for a project (project_id), sorted by order_no then updated_at (newest first). Omits contents (use project_board_get for full body + replies). Optional boardType filters by kind (code or label). Returns boards, count, and boardTypeDefinitions.
project_boards_list_authored
ChatGPTLists project_boards rows you authored (user_id = authenticated profile) across all projects you can access. Omits contents. Sorted by updated_at (newest first). Same optional userId rules as projects_list_for_user. Returns boards, count, boardTypeDefinitions.
project_boards_list_authored
ChatGPTLists project_boards rows you authored (user_id = authenticated profile) across all projects you can access. Omits contents. Sorted by updated_at (newest first). Same optional userId rules as projects_list_for_user. Returns boards, count, boardTypeDefinitions.
project_files_get
ChatGPTFetches one project_files row by id (metadata: original_name, file_name, size, category_key, memo, …). Does not return file bytes — use project_files_get_download_url to download.
project_files_get
ChatGPTFetches one project_files row by id (metadata: original_name, file_name, size, category_key, memo, …). Does not return file bytes — use project_files_get_download_url to download.
project_files_get_download_url
ChatGPTReturns a presigned HTTPS GET URL to download a file box item (mirrors namp useFile().downloadFile + useBucket().load on project/{projectId}/{file_name}). Use fileId or path under project/{projectId}/….
project_files_get_download_url
ChatGPTReturns a presigned HTTPS GET URL to download a file box item (mirrors namp useFile().downloadFile + useBucket().load on project/{projectId}/{file_name}). Use fileId or path under project/{projectId}/….
project_files_list
ChatGPTLists rows from project_files (project file box / 파일함), newest first — same as namp file/index.vue + useFile.js. Optional categoryKey (omit or all for every category; e.g. general). Optional search matches original_name (substring, case-insensitive). Returns files, count, totalCount.
project_files_list
ChatGPTLists rows from project_files (project file box / 파일함), newest first — same as namp file/index.vue + useFile.js. Optional categoryKey (omit or all for every category; e.g. general). Optional search matches original_name (substring, case-insensitive). Returns files, count, totalCount.
project_files_register
ChatGPTRegisters an object already uploaded to S3 under project/{projectId}/… into project_files (after bucket_get_upload_url + client PUT). Pass storedFileName = last segment of S3 key (same as data.path basename) or full path.
project_files_register
ChatGPTRegisters an object already uploaded to S3 under project/{projectId}/… into project_files (after bucket_get_upload_url + client PUT). Pass storedFileName = last segment of S3 key (same as data.path basename) or full path.
project_files_upload
ChatGPTUploads a file to the project file box (mirrors namp useFile().uploadFiles): S3 key project/{projectId}/{unique}.{ext} then INSERT into project_files. Body is base64 (optional data URL prefix). Sets origin=file, category_key default general. user_id defaults to authenticated profile. Returns { result, file } with DB row + s3Path. For large local files prefer bucket_get_upload_url then project_files_register.
project_files_upload
ChatGPTUploads a file to the project file box (mirrors namp useFile().uploadFiles): S3 key project/{projectId}/{unique}.{ext} then INSERT into project_files. Body is base64 (optional data URL prefix). Sets origin=file, category_key default general. user_id defaults to authenticated profile. Returns { result, file } with DB row + s3Path. For large local files prefer bucket_get_upload_url then project_files_register.
project_members_list
ChatGPTLists project_members rows for a project (project_id).
project_members_list
ChatGPTLists project_members rows for a project (project_id).
project_memos_create
ChatGPTCreates a project memo (contents_type = memo) — namp useProjectMemo().insert / namp-rds insertNote. Pass row with project_id, title, contents (TipTap doc). user_id defaults to authenticated profile. Does not update sidebar note index (unlike project_notes_create). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_memos_create
ChatGPTCreates a project memo (contents_type = memo) — namp useProjectMemo().insert / namp-rds insertNote. Pass row with project_id, title, contents (TipTap doc). user_id defaults to authenticated profile. Does not update sidebar note index (unlike project_notes_create). Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_memos_get
ChatGPTFetches one project memo by id (contents_type = memo). Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*).
project_memos_get
ChatGPTFetches one project memo by id (contents_type = memo). Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*).
project_memos_list
ChatGPTLists project memos (project_notes where contents_type = memo), newest first — same as namp useProjectMemo().list. Optional search matches title (substring). Returns memos, count, totalCount.
project_memos_list
ChatGPTLists project memos (project_notes where contents_type = memo), newest first — same as namp useProjectMemo().list. Optional search matches title (substring). Returns memos, count, totalCount.
project_memos_update
ChatGPTUpdates a project memo by id — namp useProjectMemo().update / namp-rds updateNote. contents_type must remain memo. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_memos_update
ChatGPTUpdates a project memo by id — namp useProjectMemo().update / namp-rds updateNote. contents_type must remain memo. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_minutes_create
ChatGPTCreates a meeting minute / 회의록 (contents_type = minute) — namp useProjectMinute().insert / namp-rds insertNote. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_minutes_create
ChatGPTCreates a meeting minute / 회의록 (contents_type = minute) — namp useProjectMinute().insert / namp-rds insertNote. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_minutes_get
ChatGPTFetches one meeting minute by id (contents_type = minute). Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*).
project_minutes_get
ChatGPTFetches one meeting minute by id (contents_type = minute). Same TipTap/Nemo contents schema as project_notes_create (namp2 app/components/Nemo/Editor.vue + app/extensions/nemo/*).
project_minutes_list
ChatGPTLists project meeting minutes / 회의록 (project_notes where contents_type = minute), newest first — same as namp useProjectMinute().list.
project_minutes_list
ChatGPTLists project meeting minutes / 회의록 (project_notes where contents_type = minute), newest first — same as namp useProjectMinute().list.
project_minutes_update
ChatGPTUpdates a meeting minute by id — namp useProjectMinute().update / namp-rds updateNote. contents_type must remain minute. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_minutes_update
ChatGPTUpdates a meeting minute by id — namp useProjectMinute().update / namp-rds updateNote. contents_type must remain minute. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_create
ChatGPTInserts a row into project_notes. Pass columns matching your schema (e.g. project_id, title, contents, file_size). If user_id is omitted, it is set to the authenticated profile id (profiles.id from X-Api-Key); if set, it must match. Pass contents as a native JSON object (not a stringified blob): the full document from Nemo editor.getJSON(), root { type: "doc", content: [...] }. Invalid or unknown node types may fail or be stripped in the client. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_create
ChatGPTInserts a row into project_notes. Pass columns matching your schema (e.g. project_id, title, contents, file_size). If user_id is omitted, it is set to the authenticated profile id (profiles.id from X-Api-Key); if set, it must match. Pass contents as a native JSON object (not a stringified blob): the full document from Nemo editor.getJSON(), root { type: "doc", content: [...] }. Invalid or unknown node types may fail or be stripped in the client. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_find_by_title
ChatGPTSearches project_notes by title among notes in projects the user can access (owner or invited). Substring (default) or exact: true for full title match. Optional projectId limits to one project (must have access). Returns notes rows with id and project_id. Same userId rules as projects_list_for_user.
project_notes_find_by_title
ChatGPTSearches project_notes by title among notes in projects the user can access (owner or invited). Substring (default) or exact: true for full title match. Optional projectId limits to one project (must have access). Returns notes rows with id and project_id. Same userId rules as projects_list_for_user.
project_notes_get
ChatGPTFetches a single project_notes row by id (columns include id, title, project_id, contents, …). To show human-readable text in chat, walk the TipTap tree under contents (nested content arrays, text leaves, attrs on atoms). Source: namp2 Nemo app/components/Nemo/Editor.vue + app/extensions/nemo/fileBlock.js, youtubeBlock.js, canvasBlock.js. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_get
ChatGPTFetches a single project_notes row by id (columns include id, title, project_id, contents, …). To show human-readable text in chat, walk the TipTap tree under contents (nested content arrays, text leaves, attrs on atoms). Source: namp2 Nemo app/components/Nemo/Editor.vue + app/extensions/nemo/fileBlock.js, youtubeBlock.js, canvasBlock.js. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_list
ChatGPTLists rows from project_notes for the given project_id, newest first. Each row may include a contents field: Root { "type": "doc", "content": [...] } as from Nemo editor.getJSON() (namp2 app/components/Nemo/Editor.vue). Custom atoms: fileBlock, youtubeBlock, canvasBlock; image; mention. Full node/attrs reference: use tool project_notes_get description (Nemo: app/components/Nemo/Editor.vue).
project_notes_list
ChatGPTLists rows from project_notes for the given project_id, newest first. Each row may include a contents field: Root { "type": "doc", "content": [...] } as from Nemo editor.getJSON() (namp2 app/components/Nemo/Editor.vue). Custom atoms: fileBlock, youtubeBlock, canvasBlock; image; mention. Full node/attrs reference: use tool project_notes_get description (Nemo: app/components/Nemo/Editor.vue).
project_notes_update
ChatGPTUpdates a project_notes row by id (partial patch). Same column rules as namp-rds updateNote saveData. If patch includes contents, it must be a complete TipTap doc (same schema as project_notes_create), not a string. Replacing contents overwrites the entire document JSON for that column. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
project_notes_update
ChatGPTUpdates a project_notes row by id (partial patch). Same column rules as namp-rds updateNote saveData. If patch includes contents, it must be a complete TipTap doc (same schema as project_notes_create), not a string. Replacing contents overwrites the entire document JSON for that column. Nemo TipTap JSON (same as editor.getJSON()): - Root: { "type": "doc", "content": [ ... ] } — never stringify the whole doc; pass a JSON object. - StarterKit (@tiptap/starter-kit): e.g. paragraph, heading (attrs: level 1–6), bulletList, orderedList, listItem, blockquote, hardBreak, codeBlock (often attrs language), inline marks bold, italic, strike, code, link (attrs href, target, …). Text nodes: { "type": "text", "text": "...", "marks": [...] }. - Text style: textStyle + marks color, fontFamily, fontSize (on text). - Highlight: highlight mark (multicolor). - TextAlign: on heading and paragraph (attrs textAlign: left|center|right|justify|start|end as used by the editor). - Mention: node mention, attrs: id (string, member/user id), label (string, display). Renders as @label in the app. - Image (node image, extended in Editor.vue): attrs: src (S3 path or URL — after bucket_upload_file or presigned bucket_get_upload_url use path / data.path here), size (number, default 0), bucket, alt, title, caption, align (e.g. start), maxWidth (string), rounded (boolean), border (boolean). Atom block; no content children. - Table: table, tableRow, tableHeader, tableCell (resizable). Cells contain block content as usual. - Code block: codeBlock with lowlight (language in attrs). - Horizontal rule: horizontalRule. - fileBlock (atom fileBlock): attrs: path, bucket, alt, fileName, caption (strings; size may appear from options). File attachment UI; use path/bucket consistent with project/{projectId}/… uploads. - youtubeBlock (atom youtubeBlock): attrs: url, autoplay, controls, loop, mute, caption (booleans except url/caption). - canvasBlock (atom canvasBlock): attrs: path, bucket, data (object, Excalidraw/canvas payload), caption, size (number). Not serialized in doc JSON: TableOfContents UI, Placeholder, DragHandle — do not emit these as node types. Unknown node types or wrong attrs may break or be stripped in Nemo.
projects_find_by_title
ChatGPTFinds projects the authenticated user can access (owner or invited) whose title matches the search string. Default is case-insensitive substring match; set exact: true for whole-title equality after trim. Returns full project rows including id — use id as projectId in other tools. Same userId rules as projects_list_for_user.
projects_find_by_title
ChatGPTFinds projects the authenticated user can access (owner or invited) whose title matches the search string. Default is case-insensitive substring match; set exact: true for whole-title equality after trim. Returns full project rows including id — use id as projectId in other tools. Same userId rules as projects_list_for_user.
projects_list_for_user
ChatGPTLists projects visible to the authenticated profile: projects.user_id (creator) or project_members.member_id (invited). Defaults to the profile tied to X-Api-Key / profiles.mcp_api_key. Omit userId to use that profile; if set, it must equal the authenticated profile id.
projects_list_for_user
ChatGPTLists projects visible to the authenticated profile: projects.user_id (creator) or project_members.member_id (invited). Defaults to the profile tied to X-Api-Key / profiles.mcp_api_key. Omit userId to use that profile; if set, it must equal the authenticated profile id.