MCP App Store
by KeenEthics

Overview

Notem connects ChatGPT to the notes you stored in your Notem account. You can use it to: • Search your notes by keywords or meaning and filter results by date or tag • Read the full contents of a saved note • Retrieve text from saved voice-note transcriptions • Create new notes • Add content to or update existing notes • Add or remove tags • Delete notes Your Notem account can contain saved text, links, screenshots, voice-note transcriptions, project notes, code snippets, research, feedback, and other information you previously captured. Example requests: • “Find my notes about next video's inspiration.” • “What notes did I save last Tuesday?” • “Find the beta-user feedback I saved.” • “Save this plan as a new note tagged roadmap.” • “Add this decision to my existing pricing note.” A Notem account is required. When you connect Notem, ChatGPT can access the notes available to your authenticated Notem account.

Tools

append_to_note

ChatGPT
Append markdown to the end of an existing note's body.

create_note

ChatGPT
Create a note. Pass parent_id to continue an existing thread instead of starting a new note — threads are flat, so continuing a continuation continues the thread it belongs to. Pass a client_id uuid you generate to make the call idempotent: retrying with the same client_id returns the note the first attempt created rather than a duplicate.

delete_note

ChatGPT
Move a note to the trash (a soft delete — the app can still recover it). A note with continuations takes its whole thread with it, so that has to be asked for with cascade=true.

get_note

ChatGPT
Fetch one note in full, plus thread: the continuations appended to it, oldest first. label identifies it, user_text is user-authored, and source is the single canonical home for imported context. source.image_available tells you whether get_note_asset can fetch its preview. Body images appear as ![photo]; retrieve bytes with get_note_asset. A note with has_photos=true cannot be rewritten whole, so patch it with replace_in_note or append_to_note.

get_note_asset

ChatGPT
Return an image already associated with a stored note as native MCP image content. Use this after search or list when visual inspection would help identify or understand a candidate source; do not call it for every note. It never accepts a URL. The default asset is the note’s stored source preview; asset="body" can select an existing uploaded image referenced by the note. Images are bounded, resized, and compressed on demand, while search/list responses remain text-only.

list_recent_notes

ChatGPT
List the user's notes, most recently touched first — the same order as the app's stream, so "recent" means the same thing in both. Returns thread heads only unless you ask for continuations. Bodies and complete imported source metadata are omitted unless you pass full=true. Compact notes come back as { id, label, user_text, tags, source, root_id, parent_id, is_thread_head, thread_count, updated_at, … }. user_text is only text deliberately written by the user; imported page or social-post copy is source metadata. label names the note even when it has no title — use it when showing a note to a human. updated_at is what you pass back as if_updated_at when you write.

list_tags

ChatGPT
Every tag the user has, with how many live notes carry it. Read this before guessing a tag name. Tags are paths: a "project/type" name like "notemcp/bug" is listed alongside the broader "notemcp", and searching the broader one finds everything under it.

replace_in_note

ChatGPT
Change one span of a note without resending the rest of it. find is literal text, not a regex or a pattern. Ticking a checkbox is find "- [ ] Buy milk", replace "- [x] Buy milk". If the text appears more than once the call is rejected rather than guessing — add surrounding text or pass all=true. Prefer this over update_note for any edit smaller than the whole note.

search_notes

ChatGPT
Search the user's notes. Words are matched against the note's text, its tags, and the title, description and URL of any link saved with it; a word of three characters or fewer counts only as a whole word. The default mode ("auto") escalates only as far as it needs to: every word, then any word, then meaning — and the reply's matched field says which one answered, so a relaxed or semantic result is never mistaken for an exact one. Pin the strategy with mode="keyword" (every word must appear; never widens), "semantic" (meaning only) or "hybrid" (both, fused). Source, date, photo and thread filters compose with the text query and tags. Filter by tag with tags, which is the right tool for a request like "my #bug notes". An empty result carries hints: what the collection actually contains and which query to try next — read them instead of guessing another wording. Bodies are omitted unless you pass full=true; complete imported source metadata is omitted with them. Compact notes come back as { id, label, user_text, tags, source, root_id, parent_id, is_thread_head, thread_count, updated_at, … }. user_text is only text deliberately written by the user; imported page or social-post copy is source metadata. label names the note even when it has no title — use it when showing a note to a human. updated_at is what you pass back as if_updated_at when you write.

tag_note

ChatGPT
Add tags to a note. Tags already on the note are kept.

untag_note

ChatGPT
Remove tags from a note. Tags not on the note are ignored.

update_note

ChatGPT
Replace whole fields on a note. Omitted fields are left unchanged; to empty a field, name it in clear (passing "" is not enough). For anything short of a full rewrite use replace_in_note — it cannot mangle the text it is not touching. Rewriting the body of a note that embeds a photo is refused, because MCP only ever showed you ![photo].

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps