UNPKG

mcp-use

Version:

A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.

87 lines (86 loc) 3.04 kB
/** * Simple chat example using MCPAgent with built-in conversation memory. * * This example demonstrates how to use the MCPAgent with its built-in * conversation history capabilities for better contextual interactions. * * Special thanks to https://github.com/microsoft/playwright-mcp for the server. */ import readline from 'node:readline'; import { ChatOpenAI } from '@langchain/openai'; import { config } from 'dotenv'; import { MCPAgent, MCPClient } from '../index.js'; // Load environment variables from .env file config(); async function runMemoryChat() { // Config file path - change this to your config file const config = { mcpServers: { airbnb: { command: 'npx', args: ['-y', '@openbnb/mcp-server-airbnb', '--ignore-robots-txt'], }, }, }; console.error('Initializing chat...'); // Create MCP client and agent with memory enabled const client = new MCPClient(config); const llm = new ChatOpenAI({ model: 'gpt-4o-mini' }); // Create agent with memory_enabled=true const agent = new MCPAgent({ llm, client, maxSteps: 15, memoryEnabled: true, // Enable built-in conversation memory }); console.error('\n===== Interactive MCP Chat ====='); console.error('Type \'exit\' or \'quit\' to end the conversation'); console.error('Type \'clear\' to clear conversation history'); console.error('==================================\n'); // Create readline interface for user input const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const question = (prompt) => { return new Promise((resolve) => { rl.question(prompt, resolve); }); }; try { // Main chat loop while (true) { // Get user input const userInput = await question('\nYou: '); // Check for exit command if (userInput.toLowerCase() === 'exit' || userInput.toLowerCase() === 'quit') { console.error('Ending conversation...'); break; } // Check for clear history command if (userInput.toLowerCase() === 'clear') { agent.clearConversationHistory(); console.error('Conversation history cleared.'); continue; } // Get response from agent process.stdout.write('\nAssistant: '); try { // Run the agent with the user input (memory handling is automatic) const response = await agent.run(userInput); console.error(response); } catch (error) { console.error(`\nError: ${error}`); } } } finally { // Clean up rl.close(); await client.closeAllSessions(); } } if (import.meta.url === `file://${process.argv[1]}`) { runMemoryChat().catch(console.error); }