Make sure to complete the setup steps before continuing.

Installation

npm install ai @ai-sdk/openai @pipedream/sdk @modelcontextprotocol/sdk

Basic Usage

Complete example showing Pipedream MCP with the Vercel AI SDK:
import { openai } from '@ai-sdk/openai';
import { CoreMessage, experimental_createMCPClient, generateText } from 'ai';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp';
import { PipedreamClient } from '@pipedream/sdk';

// Environment variables
const PIPEDREAM_CLIENT_ID = process.env.PIPEDREAM_CLIENT_ID!;
const PIPEDREAM_CLIENT_SECRET = process.env.PIPEDREAM_CLIENT_SECRET!;
const PIPEDREAM_PROJECT_ID = process.env.PIPEDREAM_PROJECT_ID!;
const PIPEDREAM_ENVIRONMENT = process.env.PIPEDREAM_ENVIRONMENT as 'development' | 'production';

async function runAIWithMCP() {
  // Initialize Pipedream SDK client
  const pd = new PipedreamClient({
    projectEnvironment: PIPEDREAM_ENVIRONMENT,
    clientId: PIPEDREAM_CLIENT_ID,
    clientSecret: PIPEDREAM_CLIENT_SECRET,
    projectId: PIPEDREAM_PROJECT_ID
  });

  // Get access token for MCP authentication
  const accessToken = await pd.rawAccessToken;
  const externalUserId = 'user-123'; // Your user's unique ID
  const appSlug = 'notion'; // The app you want to use

  // Create MCP transport with authentication headers
  const transport = new StreamableHTTPClientTransport(
    new URL('https://remote.mcp.pipedream.net'),
    {
      requestInit: {
        headers: {
          'Authorization': `Bearer ${accessToken}`,
          'x-pd-project-id': PIPEDREAM_PROJECT_ID,
          'x-pd-environment': PIPEDREAM_ENVIRONMENT,
          'x-pd-external-user-id': externalUserId,
          'x-pd-app-slug': appSlug,
        }
      }
    }
  );

  // Create MCP client using AI SDK
  const mcpClient = await experimental_createMCPClient({
    transport,
  });

  const messages: CoreMessage[] = [
    {
      role: 'system',
      content: 'You are a helpful assistant that can use Pipedream tools to help users with their tasks.',
    },
    {
      role: 'user',
      content: 'Find my most recent Notion page and summarize it for me',
    },
  ];

  try {
    // Generate response with tools available from MCP
    const result = await generateText({
      model: openai('gpt-4'),
      messages,
      tools: await mcpClient.tools(), // Automatically loads all available tools
      maxSteps: 5, // Allow multiple tool calls
    });

    console.log('AI Response:', result.text);
    
    // Log any tool calls that were made
    if (result.toolCalls.length > 0) {
      console.log('\nTool calls made:');
      result.toolCalls.forEach((toolCall, index) => {
        console.log(`${index + 1}. ${toolCall.toolName}`);
        console.log(`   Args: ${JSON.stringify(toolCall.args, null, 2)}`);
      });
      
      console.log('\nTool results:');
      result.toolResults.forEach((result, index) => {
        console.log(`${index + 1}. ${JSON.stringify(result, null, 2)}`);
      });
    }
  } finally {
    // Clean up MCP client
    await mcpClient.close();
  }
}

// Run the example
runAIWithMCP().catch(console.error);