Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Mem MCP server

Vendor MCP
Open markdown

The Mem MCP connector routes your AI agent's tool calls to Mem's own MCP server through Scalekit. Each user signs in to Mem once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 23 tools.

Tools
23
What they doRead · write · destructive
12 · 8 · 312 read8 write3 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    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. Create the Mem MCP connection

    In AgentKit > Connections, create a Mem MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Mem MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_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)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'memmcp_list_collections',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • memmcp_answer_question_about_attachmentAsk one focused question about a single attachment by kind and ID.Read-only

    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`).

    Inputs

    attachment_idstringrequired
    UUID of the attachment to inspect. For note attachment metadata returned by `get_note`, pass the `attachment_id` value directly.
    attachment_kindstringrequired
    Kind of attachment to inspect. For note attachment metadata returned by `get_note`, pass the `attachment_kind` value directly.one of pdfimageaudio_recordingcalendar_eventemail
    questionstringrequired
    Focused question to answer using only this attachment. Maximum: 10,000 characters (and no more than 10,000 UTF-8 bytes).
  • memmcp_extended_search_notesSearch notes and note-linked attachments together.Read-only

    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`).

    Inputs

    querystringrequired
    Required text query for searching notes and note-linked attachments. The query must contain at least one non-whitespace character.
    exclude_note_idsstring
    Note UUIDs to exclude from this result set. Use this to avoid returning notes already inspected by the caller.
    filter_by_collection_idsstring
    Optional collection UUID filters. When provided, results are limited to notes in any listed collection.
    filter_by_updated_afterstring
    Optional 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_beforestring
    Optional inclusive upper bound for note update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
    limitinteger
    Maximum number of note hits to return. Default is 10; valid range is 1 to 100.default 10
    next_page_cursorstring
    Opaque cursor from a previous extended search response. Omit for the first page.
    sort_bystring
    Sort order for results. Use `RELEVANCE` for best matches or `DATE` for latest edited notes.one of DATERELEVANCEdefault RELEVANCE
  • memmcp_get_audio_recordingFetch the current public transcript and metadata for a single audio recording by ID.Read-only

    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`).

    Inputs

    audio_recording_idstringrequired
    UUID of the audio recording to read. The caller must be able to access this recording.
  • memmcp_get_collectionFetch metadata for a single collection by ID.Read-only

    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`).

    Inputs

    collection_idstringrequired
    UUID of the collection to read. Use an ID returned by create/list/search. The caller must be able to access this collection.
  • memmcp_get_noteFetch the full current state of a single note by ID.Read-only

    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`).

    Inputs

    note_idstringrequired
    UUID 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_urlGenerate a temporary signed download URL for a note attachment.Read-only

    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.

    Inputs

    attachment_idstringrequired
    UUID of the note attachment to download. The caller must be able to access this attachment.
  • memmcp_list_collectionsList collections visible to the authenticated caller with cursor pagination.Read-only

    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`).

    Inputs

    filter_by_created_afterstring
    Optional 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_beforestring
    Optional 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_afterstring
    Optional 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_beforestring
    Optional inclusive upper bound for collection update time (ISO 8601). The timestamp must include a timezone offset such as `Z` or `+01:00`.
    limitinteger
    Maximum number of collections in this page. Use smaller values for lower latency. Default is 50; valid range is 1 to 100.default 50
    order_bystring
    Sort key for pagination boundaries. Use `updated_at` (default) for recency feeds. Use `created_at` for creation-order views.default updated_at
    pagestring
    Opaque cursor from a previous list response. Omit for the first page. IMPORTANT: Reuse with the same filters and `order_by` settings.