Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mem0ai avatar

Mem0 Vercel Ai Sdk

  • 336 installs
  • 62.5k repo stars
  • Updated August 5, 2026
  • mem0ai/mem0

Wire Mem0 persistent memory into Vercel AI SDK chat and tool routes so streaming agents remember users across sessions in Next.js apps.

About

mem0-vercel-ai-sdk integrates Mem0 with the Vercel AI SDK so Next.js and edge-hosted agents automatically persist and retrieve user memories inside standard chat and tool-calling flows without custom storage glue.

  • Vercel AI SDK hooks
  • Cross-session agent memory
  • Next.js route integration
  • Streaming chat recall
  • Mem0 client wiring

Mem0 Vercel Ai Sdk by the numbers

  • 336 all-time installs (skills.sh)
  • +41 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #2,181 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mem0ai/mem0 --skill mem0-vercel-ai-sdk

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs336
repo stars62.5k
Last updatedAugust 5, 2026
Repositorymem0ai/mem0

What it does

Wire Mem0 persistent memory into Vercel AI SDK chat and tool routes so streaming agents remember users across sessions in Next.js apps.

Files

SKILL.mdMarkdownGitHub ↗

Mem0 Vercel AI SDK Provider

Memory-enhanced AI provider for Vercel AI SDK. Automatically retrieves and stores memories during LLM calls.

Step 1: Install

npm install @mem0/vercel-ai-provider ai

Step 2: Set up environment variables

export MEM0_API_KEY="m0-xxx"
export OPENAI_API_KEY="sk-xxx"   # or ANTHROPIC_API_KEY, GOOGLE_API_KEY, etc.

Get a Mem0 API key at: https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=skill-mem0-vercel-ai-sdk

Pattern 1: Wrapped Model

The wrapped model approach is the simplest. createMem0 returns a provider that wraps any supported LLM with automatic memory retrieval and storage.

import { generateText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";

const mem0 = createMem0();
const { text } = await generateText({
  model: mem0("gpt-5-mini", { user_id: "alice" }),
  prompt: "Recommend a restaurant",
});

What happens under the hood: 1. The prompt is sent to Mem0 search (POST /v3/memories/search/) to retrieve relevant memories 2. Retrieved memories are injected as a system message at the start of the prompt 3. The underlying LLM (e.g., OpenAI gpt-5-mini) generates a response using the enriched prompt 4. The conversation is stored back to Mem0 (POST /v3/memories/add/) as a fire-and-forget async call (no await)

Pattern 2: Standalone Utilities

Use standalone utilities when you want full control over the memory retrieve/store cycle, or you want to use a provider that is already configured separately.

import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";
import { retrieveMemories, addMemories } from "@mem0/vercel-ai-provider";

const prompt = "Recommend a restaurant";

// Retrieve memories -- returns a formatted system prompt string
const memories = await retrieveMemories(prompt, {
  user_id: "alice",
  mem0ApiKey: "m0-xxx",
});

// Generate using any provider with injected memories
const { text } = await generateText({
  model: openai("gpt-5-mini"),
  prompt,
  system: memories,
});

// Optionally store the conversation back
await addMemories(
  [
    { role: "user", content: [{ type: "text", text: prompt }] },
    { role: "assistant", content: [{ type: "text", text }] },
  ],
  { user_id: "alice", mem0ApiKey: "m0-xxx" }
);

Pattern 3: Streaming

Use streamText for streaming responses with memory augmentation:

import { streamText } from "ai";
import { createMem0 } from "@mem0/vercel-ai-provider";

const mem0 = createMem0();
const result = streamText({
  model: mem0("gpt-5-mini", { user_id: "alice" }),
  prompt: "What should I cook for dinner?",
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

The wrapped model handles memory retrieval before streaming begins and stores the conversation after.

Supported Providers

ProviderConfig valueRequired env var
OpenAI (default)"openai"OPENAI_API_KEY
Anthropic"anthropic"ANTHROPIC_API_KEY
Google"google"GOOGLE_GENERATIVE_AI_API_KEY
Groq"groq"GROQ_API_KEY
Cohere"cohere"COHERE_API_KEY

Select a provider when creating the Mem0 instance:

const mem0 = createMem0({ provider: "anthropic" });
const { text } = await generateText({
  model: mem0("gpt-5-mini", { user_id: "alice" }),
  prompt: "Hello!",
});

How It Works Internally

Wrapped model flow

User prompt
  --> searchInternalMemories (POST /v3/memories/search/)
  --> memories injected as system message at start of prompt
  --> underlying LLM generates response (doGenerate or doStream)
  --> processMemories fires addMemories as fire-and-forget (no await)
  --> response returned to caller

Standalone flow

User controls each step:
  1. retrieveMemories / getMemories / searchMemories -> fetch memories
  2. inject into system prompt manually
  3. call generateText / streamText with any provider
  4. addMemories -> store new conversation to Mem0

Key Differences Between the 4 Utility Functions

FunctionReturnsUse when
retrieveMemoriesFormatted system prompt stringInjecting directly into system parameter
getMemoriesRaw memory arrayProcessing memories programmatically
searchMemoriesFull search response (results + relations)Need relations, scores, metadata
addMemoriesAPI responseStoring new messages to Mem0

All four accept LanguageModelV2Prompt | string as the first argument and optional Mem0ConfigSettings as the second.

Common Edge Cases and Tips

  • Always provide `user_id` (or agent_id/app_id/run_id) for consistent memory retrieval. Without an entity identifier, memories cannot be scoped.
  • Standalone utilities require explicit API key: pass mem0ApiKey in the config object, or set the MEM0_API_KEY environment variable.
  • This uses Vercel AI SDK v5 (LanguageModelV2 / ProviderV2 interfaces). It is not compatible with AI SDK v3 or v4.
  • `processMemories` fires `addMemories` as fire-and-forget (.then() without await). Memory storage happens asynchronously and does not block the LLM response.
  • The `"gemini"` alias exists in the provider switch but is NOT in the supportedProviders list. Use "google" instead.
  • Custom host: set host in the config to point to a different Mem0 API endpoint (default: https://api.mem0.ai).

References

TopicFile
Provider API (createMem0, Mem0Provider, types)local / GitHub
Memory utilities (addMemories, retrieveMemories, etc.)local / GitHub
Usage patterns and exampleslocal / GitHub

Related Mem0 Skills

SkillWhen to useLink
mem0Python/TypeScript SDK, REST API, framework integrationslocal / GitHub
mem0-cliTerminal commands, scripting, CI/CD, agent tool loopslocal / GitHub

Related skills

AI & Agent Buildingagentsllmautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.