import { MCPClientManager } from "@mcpjam/sdk";
import {
convertWidgetMessagesToModelMessages,
createOpenAI,
stepCountIs,
streamText,
type UIMessage,
} from "@openchatwidget/sdk";
app.post("/api/chat", async (request, response) => {
const { messages } = request.body as { messages: UIMessage[] };
const openai = createOpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const manager = new MCPClientManager();
await manager.connectToServer("workspace", {
url: "https://mcp.notion.com/mcp",
requestInit: {
headers: {
Authorization: `Bearer ${process.env.NOTION_TOKEN}`,
},
},
});
const mcpTools = await manager.getToolsForAiSdk(["workspace"]);
const result = streamText({
model: openai("gpt-4o-mini"),
system: "Use MCP tools when needed.",
messages: await convertWidgetMessagesToModelMessages(messages),
stopWhen: stepCountIs(10),
tools: { ...mcpTools },
onFinish: async () => {
await manager.disconnectAllServers();
},
onAbort: async () => {
await manager.disconnectAllServers();
},
onError: async () => {
await manager.disconnectAllServers();
},
});
result.pipeUIMessageStreamToResponse(response);
});