import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { createPodiumClient } from '@podium-sdk/node-sdk';
import { z } from 'zod';
const client = createPodiumClient({ apiKey: process.env.PODIUM_API_KEY });
const server = new McpServer({ name: 'podium-commerce', version: '1.0.0' });
server.tool(
'search_products',
{ query: z.string(), limit: z.number().optional() },
async ({ query, limit }) => {
const feed = await client.agentic.listProductsFeed({
limit: limit ?? 10,
categories: query,
});
return { content: [{ type: 'text', text: JSON.stringify(feed.products) }] };
}
);
server.tool(
'create_checkout',
{
productId: z.string(),
quantity: z.number(),
email: z.string(),
},
async ({ productId, quantity, email }) => {
const session = await client.agentic.createCheckoutSessions({
requestBody: {
items: [{ id: productId, quantity }],
},
});
await client.agentic.updateCheckoutSessions({
id: session.id,
requestBody: { email },
});
return { content: [{ type: 'text', text: JSON.stringify(session) }] };
}
);
server.tool(
'get_recommendations',
{ userId: z.string(), count: z.number().optional() },
async ({ userId, count }) => {
const recs = await client.companion.listRecommendations({
userId,
count: count ?? 5,
});
return { content: [{ type: 'text', text: JSON.stringify(recs) }] };
}
);
server.tool(
'check_points',
{ userId: z.string() },
async ({ userId }) => {
const points = await client.user.listPoints({ id: userId });
return { content: [{ type: 'text', text: JSON.stringify(points) }] };
}
);
const transport = new StdioServerTransport();
await server.connect(transport);