MCP App Store
Productivity
Namp icon

Namp

by Springs co. Ltd.

Overview

Namp MCP helps authenticated users find projects, notes, memos, meeting minutes, boards, members, and files, plus create or update private project workspace content and upload project files through ChatGPT.

Tools

bucket_get_upload_url

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Uploads 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

ChatGPT
Uploads 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

ChatGPT
Parses 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

ChatGPT
Parses 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

ChatGPT
Inserts 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

ChatGPT
Inserts 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

ChatGPT
Loads 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

ChatGPT
Loads 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

ChatGPT
Inserts 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

ChatGPT
Inserts 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

ChatGPT
Updates project_boards.status. Allowed codes: registered, requestReply, replyCompleted, checking, processing, processed, solved, pending (same as client issueStatus).

project_board_update_status

ChatGPT
Updates project_boards.status. Allowed codes: registered, requestReply, replyCompleted, checking, processing, processed, solved, pending (same as client issueStatus).

project_boards_find_by_title

ChatGPT
Searches 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

ChatGPT
Searches 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Fetches 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

ChatGPT
Fetches 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

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Registers 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

ChatGPT
Registers 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

ChatGPT
Uploads 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

ChatGPT
Uploads 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

ChatGPT
Lists project_members rows for a project (project_id).

project_members_list

ChatGPT
Lists project_members rows for a project (project_id).

project_memos_create

ChatGPT
Creates 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

ChatGPT
Creates 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

ChatGPT
Fetches 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

ChatGPT
Fetches 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Updates 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

ChatGPT
Updates 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

ChatGPT
Creates 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

ChatGPT
Creates 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

ChatGPT
Fetches 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

ChatGPT
Fetches 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

ChatGPT
Lists project meeting minutes / 회의록 (project_notes where contents_type = minute), newest first — same as namp useProjectMinute().list.

project_minutes_list

ChatGPT
Lists project meeting minutes / 회의록 (project_notes where contents_type = minute), newest first — same as namp useProjectMinute().list.

project_minutes_update

ChatGPT
Updates 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

ChatGPT
Updates 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

ChatGPT
Inserts 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

ChatGPT
Inserts 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

ChatGPT
Searches 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

ChatGPT
Searches 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

ChatGPT
Fetches 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

ChatGPT
Fetches 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

ChatGPT
Lists 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

ChatGPT
Lists 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

ChatGPT
Updates 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

ChatGPT
Updates 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

ChatGPT
Finds 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

ChatGPT
Finds 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

ChatGPT
Lists 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

ChatGPT
Lists 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.

Capabilities

Writes

App Stats

64

Tools

ChatGPT

Platforms

Category

Memory Notes

Works with

ChatGPT

Data refreshed daily