Namp
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.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Project & Task Management Platforms
- Brand
- Namp
- Access
- Account required
- First tracked
- 2026-06-17
- Tool count
- 32
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
Namp is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT Project & Task Management Platforms
View CategoryHow the Discoverability Score works
Organic discovery scoring for Namp on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
32 tools agents can invoke
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>"`.
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).
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`.
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`.
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.
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.
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.
Updates `project_boards.status`. Allowed codes: registered, requestReply, replyCompleted, checking, processing, processed, solved, pending (same as client issueStatus).
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.
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`.
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`.
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.
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}/…`.
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`.
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`.
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`.
Lists `project_members` rows for a project (`project_id`).
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.
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/*`).
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`.
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.
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.
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/*`).
Lists project **meeting minutes** / 회의록 (`project_notes` where `contents_type` = `minute`), newest first — same as namp `useProjectMinute().list`.
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.
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.
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`.
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.
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`).
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.
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`.
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.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Namp alternatives on ChatGPT?
As of 2026-08-14, Namp competes with Adobe Workfront, Agiflow, Asana, Atlassian Rovo, awork, Cinch, ClickUp, COR, Linear, Monday.com, Nifty, Onplana, Plate, Project Kickoff Pack, Riido, Runrun.it, Smartsheet AU, Smartsheet EU, Smartsheet US, Trello, Weft, Wrike in ChatGPT Project & Task Management Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.