javascript integration frameworks tutorial

Integrating MCP with Agent Frameworks (JavaScript)

A practical checklist for adding persistent memory to your AI agents. Step-by-step integration guides for LangChain.js, Vercel AI SDK, and other popular JavaScript frameworks.

CodeMem Team

The Integration Challenge

You've built an AI agent. It works great—until the next session, when it forgets everything. Sound familiar? Adding persistent memory to agent frameworks shouldn't require a PhD in distributed systems. This guide provides a quick integration checklist for the most popular JavaScript agent frameworks.

Whether you're using LangChain.js, Vercel AI SDK, or building your own agent from scratch, the pattern is the same: connect to CodeMem via MCP, and your agent gains long-term memory in minutes.

Quick Integration Checklist

Before diving into framework-specific code, here's your universal checklist:

  • Get API Key: Sign up at app.codemem.dev
  • Install SDK: npm install @codemem/mcp-client
  • Initialize Client: Create connection with your API key
  • Add Memory Hook: Store insights after each agent action
  • Add Recall Hook: Search relevant memories before decisions
  • Tag by Context: Use project/user tags for isolation
  • Test Persistence: Verify memories survive restarts

LangChain.js Integration

LangChain.js is the most popular agent framework in the JavaScript ecosystem. Here's how to add CodeMem as a memory layer:

import { CodeMemClient } from '@codemem/mcp-client';
import { AgentExecutor } from 'langchain/agents';
import { ChatOpenAI } from '@langchain/openai';

// Initialize CodeMem
const memory = new CodeMemClient({
  apiKey: process.env.CODEMEM_API_KEY,
  project: 'my-agent'
});

// Create memory-aware tools
const memoryTools = [
  {
    name: 'remember',
    description: 'Store important information for future reference',
    func: async (input: string) => {
      await memory.add({ content: input });
      return 'Stored in memory.';
    }
  },
  {
    name: 'recall',
    description: 'Search past memories for relevant context',
    func: async (query: string) => {
      const results = await memory.search({ query, limit: 5 });
      return results.map(m => m.content).join('\n');
    }
  }
];

// Add to your agent's tool list
const agent = await AgentExecutor.fromAgentAndTools({
  agent: yourAgent,
  tools: [...yourTools, ...memoryTools]
});

Checklist for LangChain.js:

  • ✓ Add memory tools to agent executor
  • ✓ Use ConversationBufferMemory for session + CodeMem for long-term
  • ✓ Tag memories with chain/agent identifiers

Vercel AI SDK Integration

The Vercel AI SDK takes a streaming-first approach. Here's how to integrate CodeMem with its tool system:

import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { CodeMemClient } from '@codemem/mcp-client';

const memory = new CodeMemClient({
  apiKey: process.env.CODEMEM_API_KEY
});

const result = await generateText({
  model: openai('gpt-4-turbo'),
  tools: {
    addMemory: tool({
      description: 'Store information for future sessions',
      parameters: z.object({
        content: z.string(),
        tags: z.array(z.string()).optional()
      }),
      execute: async ({ content, tags }) => {
        await memory.add({ content, tags });
        return { success: true };
      }
    }),
    searchMemory: tool({
      description: 'Recall stored information',
      parameters: z.object({
        query: z.string(),
        limit: z.number().optional()
      }),
      execute: async ({ query, limit = 5 }) => {
        return await memory.search({ query, limit });
      }
    })
  },
  prompt: 'Help me plan my project architecture...'
});

Checklist for Vercel AI SDK:

  • ✓ Define memory tools with Zod schemas
  • ✓ Use maxToolRoundtrips to allow memory searches before responses
  • ✓ Consider streaming implications for memory writes

Custom Agent Integration

Building your own agent? Here's the minimal pattern for adding memory:

import { CodeMemClient } from '@codemem/mcp-client';

class MemoryAwareAgent {
  private memory: CodeMemClient;

  constructor(apiKey: string) {
    this.memory = new CodeMemClient({ apiKey });
  }

  async run(userInput: string): Promise<string> {
    // 1. Recall relevant context
    const context = await this.memory.search({
      query: userInput,
      limit: 3
    });

    // 2. Build prompt with memories
    const prompt = this.buildPrompt(userInput, context);

    // 3. Get LLM response
    const response = await this.llm.generate(prompt);

    // 4. Extract and store new memories
    const newMemories = this.extractMemories(response);
    for (const mem of newMemories) {
      await this.memory.add(mem);
    }

    return response;
  }
}

Framework Compatibility Matrix

Quick reference for framework-specific considerations:

Framework Integration Point Notes
LangChain.js Custom Tools Works with all agent types
Vercel AI SDK Tool Functions Native TypeScript support
AutoGen.js Function Registry Multi-agent memory sharing
Custom Agents Direct SDK Full control over memory flow

Best Practices

  • Search before acting: Always recall context before making decisions
  • Be selective: Don't store everything—focus on decisions, preferences, and outcomes
  • Use semantic tagging: Tags like architecture, error-pattern, user-preference improve retrieval
  • Version your memories: Include timestamps or version tags for evolving projects
  • Handle failures gracefully: Memory operations shouldn't break agent flow

Common Pitfalls

  • Memory bloat: Storing raw conversations instead of distilled insights
  • Missing context isolation: Not tagging by project/user leads to cross-contamination
  • Synchronous blocks: Memory ops are async—don't block the response stream
  • Over-retrieval: Fetching 50 memories when 5 would suffice wastes tokens

Ready to Add Memory to Your Agent?

Get started with CodeMem in under 5 minutes. Your agents deserve to remember.

Get Your API Key →

Next Steps

Now that you know the integration patterns: