Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Mem MCP connector

OAuth2.1/DCRAIProductivity

A hosted MCP server that gives AI tools secure access to your Mem notes and collections — enabling AI agents to read, create, search, and organize notes...

Mem MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'memmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Mem MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'memmcp_list_collections',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Update note, collection — Submit a complete markdown body for a note and the exact version being updated
  • Note trash, restore, move — Soft-delete a note by moving it to trash
  • At set note created — Set a note’s visible creation timestamp without changing its content
  • Search notes, collections, extended — Search notes using a required free-text query and structured filters
  • Collection remove note from, add note to — Remove a note from a collection while keeping both resources
  • Read attachment — Read structured content for a single attachment by kind and ID

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

memmcp_add_note_to_collection#Add an existing note to an existing collection. This operation only creates the membership link and does not modify note or collection content. Use create endpoints to create notes or collections. When to use: - You need to link an existing note to an existing collection. When NOT to use: - You need to create notes or collections first (`create_note` or `create_collection`). - You need to transfer a note out of one collection into another (`move_note`).2 params

Add an existing note to an existing collection. This operation only creates the membership link and does not modify note or collection content. Use create endpoints to create notes or collections. When to use: - You need to link an existing note to an existing collection. When NOT to use: - You need to create notes or collections first (`create_note` or `create_collection`). - You need to transfer a note out of one collection into another (`move_note`).

NameTypeRequiredDescription
collection_idstringrequiredUUID of the collection that will receive the note. Use an ID returned by create/list/search. The caller must be able to contribute to this collection.
note_idstringrequiredUUID of the note to add. Use an ID returned by create/list/search. The caller must be able to access this note.
memmcp_answer_question_about_attachment#Ask one focused question about a single attachment by kind and ID. Use `attachment_kind` and `attachment_id` returned in note attachment metadata. When to use: - You have `attachment_kind` and `attachment_id` from `get_note` attachment metadata or `extended_search_notes` attachment matches and need one grounded answer from that attachment. - You want the model to inspect a single attachment without returning all extracted pages or content chunks. When NOT to use: - You need structured extracted content or pagination controls (`read_attachment`). - You need the raw protected file bytes or a signed download URL (`get_note_attachment_download_url`).3 params

Ask one focused question about a single attachment by kind and ID. Use `attachment_kind` and `attachment_id` returned in note attachment metadata. When to use: - You have `attachment_kind` and `attachment_id` from `get_note` attachment metadata or `extended_search_notes` attachment matches and need one grounded answer from that attachment. - You want the model to inspect a single attachment without returning all extracted pages or content chunks. When NOT to use: - You need structured extracted content or pagination controls (`read_attachment`). - You need the raw protected file bytes or a signed download URL (`get_note_attachment_download_url`).

NameTypeRequiredDescription
attachment_idstringrequiredUUID of the attachment to inspect. For note attachment metadata returned by `get_note`, pass the `attachment_id` value directly.
attachment_kindstringrequiredKind of attachment to inspect. For note attachment metadata returned by `get_note`, pass the `attachment_kind` value directly.
questionstringrequiredFocused question to answer using only this attachment. Maximum: 10,000 characters (and no more than 10,000 UTF-8 bytes).
memmcp_create_collection#Create a collection with optional caller-provided ID and timestamps. If `id` already exists, this request returns a conflict. Use collection membership endpoints to add, remove, or move notes between collections. When to use: - You are creating a new collection. - You need to create a new collection with an optional caller-provided ID or timestamps. When NOT to use: - You need to update an existing collection by ID (`update_collection`). - You only need membership changes between existing notes and collections (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).5 params

Create a collection with optional caller-provided ID and timestamps. If `id` already exists, this request returns a conflict. Use collection membership endpoints to add, remove, or move notes between collections. When to use: - You are creating a new collection. - You need to create a new collection with an optional caller-provided ID or timestamps. When NOT to use: - You need to update an existing collection by ID (`update_collection`). - You only need membership changes between existing notes and collections (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).

NameTypeRequiredDescription
titlestringrequiredTitle for the collection. Use a short, stable label suitable for navigation and search. Maximum: 1,000 characters (and no more than 1,000 UTF-8 bytes).
created_atstringoptionalOptional creation timestamp (ISO 8601). If provided, it must include a timezone offset and cannot be in the future. If omitted, Mem uses `updated_at` when provided; otherwise current server time.
descriptionstringoptionalOptional longer description of collection scope or intent. Maximum: 10,000 characters (and no more than 10,000 UTF-8 bytes).
idstringoptionalOptional caller-provided UUID for the collection. If omitted, Mem generates a new UUID. If the provided ID already exists, this request returns a conflict.
updated_atstringoptionalOptional "last updated" timestamp for this write (ISO 8601). If provided, it must include a timezone offset and cannot be in the future. If omitted, Mem uses `created_at` for the initial collection write.
memmcp_create_note#Create a note with an optional note ID and collection links. If omitted, Mem generates the note ID. The first line of `content` becomes the note title. When to use: - You are creating a new note. - You need to create a new note with a specific ID. When NOT to use: - You need to overwrite a known existing note by ID (`update_note`). - You only need to change note/collection membership (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).4 params

Create a note with an optional note ID and collection links. If omitted, Mem generates the note ID. The first line of `content` becomes the note title. When to use: - You are creating a new note. - You need to create a new note with a specific ID. When NOT to use: - You need to overwrite a known existing note by ID (`update_note`). - You only need to change note/collection membership (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).

NameTypeRequiredDescription
contentstringrequiredFull markdown body for the note. Send the full desired note body (partial patch semantics are not supported here). IMPORTANT: The first line is interpreted as the note title. Maximum: 200,000 characters (and no more than 200,000 UTF-8 bytes on create).
collection_idsstringoptionalOptional collection IDs to associate with the note. IDs that do not map to accessible collections are ignored.
collection_titlesstringoptionalOptional collection titles to associate with the note. Matching is case-insensitive exact match; titles with no match are ignored. Maximum per title: 1,000 characters (and no more than 1,000 UTF-8 bytes).
idstringoptionalOptional UUID for the note. If omitted, Mem generates a new UUID.
memmcp_delete_collection#Permanently delete a collection. Hard-deleting removes the collection resource itself. For membership-only changes, use note add, remove, or move collection endpoints. When to use: - You need irreversible hard-delete behavior for a collection resource. When NOT to use: - You only need note membership changes in a collection (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).1 param

Permanently delete a collection. Hard-deleting removes the collection resource itself. For membership-only changes, use note add, remove, or move collection endpoints. When to use: - You need irreversible hard-delete behavior for a collection resource. When NOT to use: - You only need note membership changes in a collection (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).

NameTypeRequiredDescription
collection_idstringrequiredUUID of the collection to permanently delete. Use an ID returned by create/list/search. The caller must be able to access this collection.
memmcp_extended_search_notes#Search notes and note-linked attachments together. Returns note hits with attachment match context for PDFs, images, audio recordings, calendar events, and emails. Use returned attachment IDs with the attachment tools for deeper inspection. When to use: - You need to search notes and note-linked attachments together from a natural-language or keyword query. - You need attachment match context such as PDF pages, OCR text, visual descriptions, highlighted snippets, or attachment IDs for follow-up inspection. When NOT to use: - You only need lightweight note discovery without attachment match details (`search_notes`). - You already have a specific attachment ID and need its extracted content (`read_attachment`) or one grounded answer (`answer_question_about_attachment`).8 params

Search notes and note-linked attachments together. Returns note hits with attachment match context for PDFs, images, audio recordings, calendar events, and emails. Use returned attachment IDs with the attachment tools for deeper inspection. When to use: - You need to search notes and note-linked attachments together from a natural-language or keyword query. - You need attachment match context such as PDF pages, OCR text, visual descriptions, highlighted snippets, or attachment IDs for follow-up inspection. When NOT to use: - You only need lightweight note discovery without attachment match details (`search_notes`). - You already have a specific attachment ID and need its extracted content (`read_attachment`) or one grounded answer (`answer_question_about_attachment`).

NameTypeRequiredDescription
querystringrequiredRequired text query for searching notes and note-linked attachments. The query must contain at least one non-whitespace character.
exclude_note_idsstringoptionalNote UUIDs to exclude from this result set. Use this to avoid returning notes already inspected by the caller.
filter_by_collection_idsstringoptionalOptional collection UUID filters. When provided, results are limited to notes in any listed collection.
filter_by_updated_afterstringoptionalOptional inclusive lower bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_beforestringoptionalOptional inclusive upper bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
limitintegeroptionalMaximum number of note hits to return. Default is 10; valid range is 1 to 100.
next_page_cursorstringoptionalOpaque cursor from a previous extended search response. Omit for the first page.
sort_bystringoptionalSort order for results. Use `RELEVANCE` for best matches or `DATE` for latest edited notes.
memmcp_get_audio_recording#Fetch the current public transcript and metadata for a single audio recording by ID. When to use: - You already have an audio recording ID and need its transcript + metadata. - Transcript speaker labels are best-effort context; participant names are optional, and generic or channel labels are normal. When NOT to use: - You need note-level discovery or linked recording IDs (`get_note`).1 param

Fetch the current public transcript and metadata for a single audio recording by ID. When to use: - You already have an audio recording ID and need its transcript + metadata. - Transcript speaker labels are best-effort context; participant names are optional, and generic or channel labels are normal. When NOT to use: - You need note-level discovery or linked recording IDs (`get_note`).

NameTypeRequiredDescription
audio_recording_idstringrequiredUUID of the audio recording to read. The caller must be able to access this recording.
memmcp_get_collection#Fetch metadata for a single collection by ID. This tool returns collection metadata only, not a note list for that collection. For discovery flows, use `list_collections` or `search_collections`. When to use: - You already have a collection ID and need canonical metadata. When NOT to use: - You need collection discovery without known IDs (`list_collections` or `search_collections`).1 param

Fetch metadata for a single collection by ID. This tool returns collection metadata only, not a note list for that collection. For discovery flows, use `list_collections` or `search_collections`. When to use: - You already have a collection ID and need canonical metadata. When NOT to use: - You need collection discovery without known IDs (`list_collections` or `search_collections`).

NameTypeRequiredDescription
collection_idstringrequiredUUID of the collection to read. Use an ID returned by create/list/search. The caller must be able to access this collection.
memmcp_get_note#Fetch the full current state of a single note by ID. If the note is in trash, the response still returns the note and includes `trashed_at`. For discovery flows, use `list_notes` or `search_notes`. When to use: - You already have a note ID and need canonical content, linked recording IDs, or attachment IDs. When NOT to use: - You need note discovery without known IDs (`list_notes` or `search_notes`).1 param

Fetch the full current state of a single note by ID. If the note is in trash, the response still returns the note and includes `trashed_at`. For discovery flows, use `list_notes` or `search_notes`. When to use: - You already have a note ID and need canonical content, linked recording IDs, or attachment IDs. When NOT to use: - You need note discovery without known IDs (`list_notes` or `search_notes`).

NameTypeRequiredDescription
note_idstringrequiredUUID of the note to read. Use an ID returned by create/list/search. The caller must be able to access this note.
memmcp_get_note_attachment_download_url#Generate a temporary signed download URL for a note attachment. Use this when note content references an attachment, but the underlying file URL is not directly downloadable. The caller must be able to access the requested attachment. When to use: - You have an attachment ID from `get_note` `attachment_metadata` or note content and need a temporary signed URL to fetch the protected file behind that attachment reference. - Use this when note content references an attachment, but the underlying file URL is not directly downloadable. When NOT to use: - You need note-level discovery or attachment IDs (`get_note`). - You do not have an attachment ID from `get_note` or note content.1 param

Generate a temporary signed download URL for a note attachment. Use this when note content references an attachment, but the underlying file URL is not directly downloadable. The caller must be able to access the requested attachment. When to use: - You have an attachment ID from `get_note` `attachment_metadata` or note content and need a temporary signed URL to fetch the protected file behind that attachment reference. - Use this when note content references an attachment, but the underlying file URL is not directly downloadable. When NOT to use: - You need note-level discovery or attachment IDs (`get_note`). - You do not have an attachment ID from `get_note` or note content.

NameTypeRequiredDescription
attachment_idstringrequiredUUID of the note attachment to download. The caller must be able to access this attachment.
memmcp_list_collections#List collections visible to the authenticated caller with cursor pagination. Results are ordered by `order_by` and return `next_page` when additional rows are available. For relevance-ranked retrieval by query, use `search_collections`. When to use: - You need deterministic cursor pagination for collections. - You are iterating through all accessible collections page by page. When NOT to use: - You need relevance-ranked retrieval from open-ended text (`search_collections`).7 params

List collections visible to the authenticated caller with cursor pagination. Results are ordered by `order_by` and return `next_page` when additional rows are available. For relevance-ranked retrieval by query, use `search_collections`. When to use: - You need deterministic cursor pagination for collections. - You are iterating through all accessible collections page by page. When NOT to use: - You need relevance-ranked retrieval from open-ended text (`search_collections`).

NameTypeRequiredDescription
filter_by_created_afterstringoptionalOptional inclusive lower bound for collection creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_created_beforestringoptionalOptional inclusive upper bound for collection creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_afterstringoptionalOptional inclusive lower bound for collection update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_beforestringoptionalOptional inclusive upper bound for collection update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
limitintegeroptionalMaximum number of collections in this page. Use smaller values for lower latency. Default is 50; valid range is 1 to 100.
order_bystringoptionalSort key for pagination boundaries. Use `updated_at` (default) for recency feeds. Use `created_at` for creation-order views.
pagestringoptionalOpaque cursor from a previous list response. Omit for the first page. IMPORTANT: Reuse with the same filters and `order_by` settings.
memmcp_list_notes#List notes visible to the authenticated caller with cursor pagination. When multiple `contains_*` fields are true, a note may match any of them. Results are ordered by `order_by` and return `next_page` when additional rows are available. For relevance-ranked retrieval by query, use `search_notes`. When to use: - You need deterministic cursor pagination ordered by `updated_at` or `created_at`. - You are iterating through all accessible notes page by page. When NOT to use: - You need relevance-ranked retrieval from open-ended text (`search_notes`).13 params

List notes visible to the authenticated caller with cursor pagination. When multiple `contains_*` fields are true, a note may match any of them. Results are ordered by `order_by` and return `next_page` when additional rows are available. For relevance-ranked retrieval by query, use `search_notes`. When to use: - You need deterministic cursor pagination ordered by `updated_at` or `created_at`. - You are iterating through all accessible notes page by page. When NOT to use: - You need relevance-ranked retrieval from open-ended text (`search_notes`).

NameTypeRequiredDescription
collection_idstringoptionalOptional collection filter by UUID. When set, only notes linked to this collection are returned.
contains_filesbooleanoptionalWhen true, include notes that contain file-like attachments (including file and PDF kinds). When multiple `contains_*` fields are true, notes matching any selected filter may be returned.
contains_imagesbooleanoptionalWhen true, include notes that contain image media (including image and GIF kinds). When multiple `contains_*` fields are true, notes matching any selected filter may be returned.
contains_open_tasksbooleanoptionalWhen true, include notes that contain at least one open task item. When multiple `contains_*` fields are true, notes matching any selected filter may be returned.
contains_tasksbooleanoptionalWhen true, include notes that contain at least one task item (open or closed). When multiple `contains_*` fields are true, notes matching any selected filter may be returned.
filter_by_created_afterstringoptionalOptional inclusive lower bound for note creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_created_beforestringoptionalOptional inclusive upper bound for note creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_afterstringoptionalOptional inclusive lower bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_beforestringoptionalOptional inclusive upper bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
include_note_contentbooleanoptionalWhen true, include full markdown content for each returned note. IMPORTANT: This increases payload size and can increase latency.
limitintegeroptionalMaximum number of notes in this page. Use smaller values for lower latency. Default is 50; valid range is 1 to 100.
order_bystringoptionalSort key for pagination boundaries. Use `updated_at` (default) for recency feeds. Use `created_at` for creation-order views.
pagestringoptionalOpaque cursor from a previous list response. Omit for the first page. IMPORTANT: Reuse with the same filters and `order_by` settings.
memmcp_move_note#Move a note from one collection to another collection. This operation adds the note to the target collection, then removes it from the source collection. It does not modify note or collection content. When to use: - You need to transfer an existing note from one collection to another. When NOT to use: - The note should remain in the source collection; use `add_note_to_collection`. - You only need to unlink a note from a collection; use `remove_note_from_collection`.3 params

Move a note from one collection to another collection. This operation adds the note to the target collection, then removes it from the source collection. It does not modify note or collection content. When to use: - You need to transfer an existing note from one collection to another. When NOT to use: - The note should remain in the source collection; use `add_note_to_collection`. - You only need to unlink a note from a collection; use `remove_note_from_collection`.

NameTypeRequiredDescription
note_idstringrequiredUUID of the note to move. Use an ID returned by create/list/search.
source_collection_idstringrequiredUUID of the collection that currently contains the note. Caller must be able to remove the note from this collection.
target_collection_idstringrequiredUUID of the collection that should receive the note. The caller must be able to add the note to this collection.
memmcp_read_attachment#Read structured content for a single attachment by kind and ID. Use `attachment_kind` and `attachment_id` returned in note attachment metadata. When to use: - You have `attachment_kind` and `attachment_id` from `get_note` attachment metadata or `extended_search_notes` attachment matches and need structured extracted content. - You need PDF pages, image OCR/visual metadata, audio transcripts, calendar event text, or email text without downloading the raw file. - For audio transcripts, speaker labels are best-effort context; participant names are optional, and generic or channel labels are normal. When NOT to use: - You need the raw protected file bytes or a signed download URL (`get_note_attachment_download_url`). - You only need one focused answer from the attachment (`answer_question_about_attachment`).6 params

Read structured content for a single attachment by kind and ID. Use `attachment_kind` and `attachment_id` returned in note attachment metadata. When to use: - You have `attachment_kind` and `attachment_id` from `get_note` attachment metadata or `extended_search_notes` attachment matches and need structured extracted content. - You need PDF pages, image OCR/visual metadata, audio transcripts, calendar event text, or email text without downloading the raw file. - For audio transcripts, speaker labels are best-effort context; participant names are optional, and generic or channel labels are normal. When NOT to use: - You need the raw protected file bytes or a signed download URL (`get_note_attachment_download_url`). - You only need one focused answer from the attachment (`answer_question_about_attachment`).

NameTypeRequiredDescription
attachment_idstringrequiredUUID of the attachment to read. For note attachment metadata returned by `get_note`, pass the `attachment_id` value directly.
attachment_kindstringrequiredKind of attachment to read. For note attachment metadata returned by `get_note`, pass the `attachment_kind` value directly.
content_limitstringoptionalMaximum content characters to return. Defaults to 10,000 and is capped at 20,000.
content_offsetintegeroptionalZero-based character offset for audio, calendar, and email content.
page_limitstringoptionalMaximum number of PDF pages to return. Defaults to 5 and is capped at 20.
page_offsetintegeroptionalZero-based page offset for PDF attachments.
memmcp_remove_note_from_collection#Remove a note from a collection while keeping both resources. This operation only removes the membership link between IDs. Use `trash_note` to remove a note from active notes, or `delete_collection` to remove a collection resource. When to use: - You need to unlink a note from a collection while keeping both resources. When NOT to use: - You need to remove the note from active notes (`trash_note`) or delete the collection resource (`delete_collection`). - You need to transfer a note directly to another collection (`move_note`).2 params

Remove a note from a collection while keeping both resources. This operation only removes the membership link between IDs. Use `trash_note` to remove a note from active notes, or `delete_collection` to remove a collection resource. When to use: - You need to unlink a note from a collection while keeping both resources. When NOT to use: - You need to remove the note from active notes (`trash_note`) or delete the collection resource (`delete_collection`). - You need to transfer a note directly to another collection (`move_note`).

NameTypeRequiredDescription
collection_idstringrequiredUUID of the collection to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
note_idstringrequiredUUID of the note to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
memmcp_restore_note#Restore a previously trashed note to the active note set. This only reverses soft-delete lifecycle state. When to use: - You need to undo a prior trash operation. When NOT to use: - The note is already active and does not need restoration.1 param

Restore a previously trashed note to the active note set. This only reverses soft-delete lifecycle state. When to use: - You need to undo a prior trash operation. When NOT to use: - The note is already active and does not need restoration.

NameTypeRequiredDescription
note_idstringrequiredUUID of the note to restore from trash. Use an ID returned by create/list/search. The caller must be able to edit this note.
memmcp_search_collections#Search collections using free-text relevance matching. Returns a bounded relevance-ranked result set and does not return `next_page`. For deterministic chronological pagination, use `list_collections`. When to use: - You need relevance-ranked retrieval for collection lookup. When NOT to use: - You need deterministic chronological pagination (`list_collections`).5 params

Search collections using free-text relevance matching. Returns a bounded relevance-ranked result set and does not return `next_page`. For deterministic chronological pagination, use `list_collections`. When to use: - You need relevance-ranked retrieval for collection lookup. When NOT to use: - You need deterministic chronological pagination (`list_collections`).

NameTypeRequiredDescription
filter_by_created_afterstringoptionalOptional inclusive lower bound for collection creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_created_beforestringoptionalOptional inclusive upper bound for collection creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_afterstringoptionalOptional inclusive lower bound for collection update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_beforestringoptionalOptional inclusive upper bound for collection update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
querystringoptionalOptional text query for relevance matching across collections. If omitted, search can still return a bounded general set.
memmcp_search_notes#Search notes using a required free-text query and structured filters. When multiple `filter_by_contains_*` fields are true, a note may match any of them. Returns note results from a bounded search snapshot with deterministic offset pagination. Query-based searches are relevance-ranked within the bounded search snapshot window. Reuse the returned `snapshot_id` when requesting later pages. The returned `total` reflects the bounded search snapshot, capped by the 100-result search window. For deterministic chronological pagination across all accessible notes, use `list_notes`. When to use: - You need relevance-ranked retrieval from a natural-language or keyword query. - You need query + filter retrieval instead of full feed traversal. When NOT to use: - You need deterministic chronological pagination (`list_notes`). - You need note-linked attachment matches for PDFs, images, audio, calendar events, or emails (`extended_search_notes`).14 params

Search notes using a required free-text query and structured filters. When multiple `filter_by_contains_*` fields are true, a note may match any of them. Returns note results from a bounded search snapshot with deterministic offset pagination. Query-based searches are relevance-ranked within the bounded search snapshot window. Reuse the returned `snapshot_id` when requesting later pages. The returned `total` reflects the bounded search snapshot, capped by the 100-result search window. For deterministic chronological pagination across all accessible notes, use `list_notes`. When to use: - You need relevance-ranked retrieval from a natural-language or keyword query. - You need query + filter retrieval instead of full feed traversal. When NOT to use: - You need deterministic chronological pagination (`list_notes`). - You need note-linked attachment matches for PDFs, images, audio, calendar events, or emails (`extended_search_notes`).

NameTypeRequiredDescription
querystringrequiredRequired text query for relevance matching. The query must contain at least one non-whitespace character. This tool does not provide exhaustive chronological pagination; for that, use `list_notes`.
filter_by_collection_idsstringoptionalOptional collection UUID filters. When provided, results are limited to notes in any listed collection.
filter_by_contains_filesbooleanoptionalWhen true, include notes that contain file-like attachments (including file and PDF kinds).
filter_by_contains_imagesbooleanoptionalWhen true, include notes that contain image media (including image and GIF kinds).
filter_by_contains_open_tasksbooleanoptionalWhen true, include notes that contain at least one open task item.
filter_by_contains_tasksbooleanoptionalWhen true, include notes that contain at least one task item (open or closed).
filter_by_created_afterstringoptionalOptional inclusive lower bound for note creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_created_beforestringoptionalOptional inclusive upper bound for note creation time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_afterstringoptionalOptional inclusive lower bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
filter_by_updated_beforestringoptionalOptional inclusive upper bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
include_note_contentbooleanoptionalWhen true, include full markdown content for each returned note. Keep false for lightweight metadata/snippet responses.
limitintegeroptionalMaximum number of notes in this search page. Use smaller values for lower latency. Default is 20; valid range is 1 to 50.
offsetintegeroptionalNumber of matching notes to skip before returning results. This value is zero-based.
snapshot_idstringoptionalOpaque search snapshot identifier returned by a previous search page. Required when requesting later pages with `offset > 0`.
memmcp_set_note_created_at#Set a note's visible creation timestamp without changing its content. The supplied `created_at` must include a timezone offset and cannot be in the future. It can only backdate the note: the timestamp cannot be later than when the note was originally created. This operation changes note metadata only. Trashed notes must be restored before their creation date can be changed. When to use: - The user explicitly asks to change or correct a known note's visible creation date. When NOT to use: - The requested date is later than when the note was originally created. - You need to change the note body (`update_note`). - You need to create a new note (`create_note`). - The note is trashed and must be restored first (`restore_note`).2 params

Set a note's visible creation timestamp without changing its content. The supplied `created_at` must include a timezone offset and cannot be in the future. It can only backdate the note: the timestamp cannot be later than when the note was originally created. This operation changes note metadata only. Trashed notes must be restored before their creation date can be changed. When to use: - The user explicitly asks to change or correct a known note's visible creation date. When NOT to use: - The requested date is later than when the note was originally created. - You need to change the note body (`update_note`). - You need to create a new note (`create_note`). - The note is trashed and must be restored first (`restore_note`).

NameTypeRequiredDescription
created_atstringrequiredNew visible creation timestamp for the note (ISO 8601). It must include a timezone offset and cannot be in the future. It can only backdate the note: the timestamp cannot be later than when the note was originally created. This changes note metadata only; it does not update note content.
note_idstringrequiredUUID of the note whose visible creation timestamp should change. The caller must own this note.
memmcp_trash_note#Soft-delete a note by moving it to trash. Trashed notes can be restored via `restore_note`. When to use: - You need reversible removal from active notes.1 param

Soft-delete a note by moving it to trash. Trashed notes can be restored via `restore_note`. When to use: - You need reversible removal from active notes.

NameTypeRequiredDescription
note_idstringrequiredUUID of the note to move to trash. Use an ID returned by create/list/search. The caller must be able to edit this note.
memmcp_update_collection#Update metadata for a collection by ID. Use this tool to rename a collection by setting `title`. This tool updates only provided fields (`title`, `description`) and leaves omitted fields unchanged. For read-only retrieval, use `get_collection`. When to use: - You need to rename a collection by updating its title. - You need to update title and/or description for an existing collection ID. - You need to preserve a collection while correcting metadata. When NOT to use: - You need to create a new collection (`create_collection`). - You only need note membership changes (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).4 params

Update metadata for a collection by ID. Use this tool to rename a collection by setting `title`. This tool updates only provided fields (`title`, `description`) and leaves omitted fields unchanged. For read-only retrieval, use `get_collection`. When to use: - You need to rename a collection by updating its title. - You need to update title and/or description for an existing collection ID. - You need to preserve a collection while correcting metadata. When NOT to use: - You need to create a new collection (`create_collection`). - You only need note membership changes (`add_note_to_collection`, `remove_note_from_collection`, or `move_note`).

NameTypeRequiredDescription
collection_idstringrequiredUUID of the collection to update. Use an ID returned by create/list/search. The caller must be able to edit this collection.
descriptionstringoptionalOptional replacement description for the collection. Omit to keep the current description unchanged. Set to an empty string to clear the description. Maximum: 10,000 characters (and no more than 10,000 UTF-8 bytes).
titlestringoptionalOptional replacement title for the collection. Use this field to rename a collection. Omit to keep the current title unchanged. Maximum: 1,000 characters (and no more than 1,000 UTF-8 bytes).
updated_atstringoptionalOptional "last updated" timestamp for this write (ISO 8601). If provided, it must include a timezone offset and cannot be in the future. If omitted, the current server time is used.
memmcp_update_note#Submit a complete markdown body for a note and the exact `version` being updated. Send the full desired body in `content` (not a partial markdown patch). The first line of `content` becomes the updated title. Trashed notes must be restored before they can be updated. When to use: - You need full-body replacement for an existing note ID. When NOT to use: - You need partial patch semantics (not supported). - You need to create a new note (`create_note`). - You only need to change a note's visible creation date (`set_note_created_at`). - The note is trashed and must be restored first (`restore_note`).3 params

Submit a complete markdown body for a note and the exact `version` being updated. Send the full desired body in `content` (not a partial markdown patch). The first line of `content` becomes the updated title. Trashed notes must be restored before they can be updated. When to use: - You need full-body replacement for an existing note ID. When NOT to use: - You need partial patch semantics (not supported). - You need to create a new note (`create_note`). - You only need to change a note's visible creation date (`set_note_created_at`). - The note is trashed and must be restored first (`restore_note`).

NameTypeRequiredDescription
contentstringrequiredComplete markdown body to submit for this write. Send the full desired note body (partial patch semantics are not supported in this request payload). The first line is interpreted as the title.
note_idstringrequiredUUID of the note to update. Use an ID returned by create/list/search. The caller must be able to edit this note.
versionintegerrequiredExact note content document version this update is based on. Use the `version` returned by `get_note` or by the most recent note write response.