MCP Tools
The AI SDK supports Model Context Protocol (MCP) tools by offering a lightweight client that exposes a tools
method for retrieving tools from a MCP server. After use, the client should always be closed to release resources.
import { experimental_createMCPClient, generateText } from 'ai';import { Experimental_StdioMCPTransport } from 'ai/mcp-stdio';import { openai } from '@ai-sdk/openai';
let clientOne;let clientTwo;let clientThree;
try { // Initialize an MCP client to connect to a `stdio` MCP server: const transport = new Experimental_StdioMCPTransport({ command: 'node', args: ['src/stdio/dist/server.js'], }); clientOne = await experimental_createMCPClient({ transport, });
// Alternatively, you can connect to a Server-Sent Events (SSE) MCP server: clientTwo = await experimental_createMCPClient({ transport: { type: 'sse', url: 'http://localhost:3000/sse', }, });
// Similarly to the stdio example, you can pass in your own custom transport as long as it implements the `MCPTransport` interface: const transport = new MyCustomTransport({ // ... }); clientThree = await experimental_createMCPClient({ transport, });
const toolSetOne = await clientOne.tools(); const toolSetTwo = await clientTwo.tools(); const toolSetThree = await clientThree.tools(); const tools = { ...toolSetOne, ...toolSetTwo, ...toolSetThree, // note: this approach causes subsequent tool sets to override tools with the same name };
const response = await generateText({ model: openai('gpt-4o'), tools, messages: [ { role: 'user', content: 'Find products under $100', }, ], });
console.log(response.text);} catch (error) { console.error(error);} finally { await Promise.all([clientOne.close(), clientTwo.close()]);}