Use Pipedream MCP with the Vercel AI SDK
npm install ai @ai-sdk/openai @pipedream/sdk @modelcontextprotocol/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);
Was this page helpful?