import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { sendMessageInputSchema, sendMessageOutputSchema } from "./schema.js";
import { appVersion, type AppConfig } from "./config.js";
import { createChatProvider } from "./providers/index.js";
export function createServer(config: AppConfig): McpServer {
const server = new McpServer({
name: "chat-human",
version: appVersion,
});
const chatClient = createChatProvider({
type: config.CHAT_PROVIDER,
discord: {
apiKey: config.DISCORD_API_KEY,
channelId: config.DISCORD_CHANNEL_ID,
},
});
try {
chatClient.connect();
} catch (error) {
console.error("Failed to connect chat client:", error);
process.exit(1);
}
server.registerTool(
"send_message",
{
title: "Send message to human users",
description: `Sends a message to human users via ${config.CHAT_PROVIDER}, optionally requesting a reply.`,
inputSchema: sendMessageInputSchema,
outputSchema: sendMessageOutputSchema,
},
async ({ message, requires_response }) => {
try {
const chatResponse = await chatClient.sendMessage({
message,
requiresResponse: requires_response,
timeoutMs: config.CHAT_TIMEOUT_MS,
});
return {
structuredContent: { ...chatResponse },
content: [{ type: "text", text: JSON.stringify(chatResponse) }],
isError: false,
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error sending message: ${
error instanceof Error ? error.message : "Unknown error"
}`,
},
],
isError: true,
};
}
}
);
return server;
}