// 导入dotenv模块并配置,使用quiet选项完全禁用日志
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// 从agent.js导入agent创建函数
import { createAgentWithMCP } from '../agent.js'
import { HumanMessage } from '@langchain/core/messages'

// 创建MCP服务器
const server = new McpServer({
  name: "genius-agent-mcp",
  version: "1.0.0"
});

// 注册Genius Agent作为MCP工具
server.registerTool(
  "genius_agent",
  {
    title: "Genius智能助手",
    description: "一个功能强大的AI助手,可以处理各种任务和问题",
    inputSchema: z.object({
      messages: z.array(z.object({
        role: z.string(),
        content: z.string()
      }))
    })
  },
  async ({ messages }) => {
    try {
      // 将输入消息转换为LangChain格式
      const langChainMessages = messages.map(msg => {
        if (msg.role === 'user') {
          return new HumanMessage(msg.content)
        }
        return new HumanMessage(msg.content)
      })
      
      // 使用agent处理请求
      const initializedAgent = await createAgentWithMCP()
      const result = await initializedAgent.invoke(
        { messages: langChainMessages },
        { configurable: { thread_id: `thread_${Date.now()}` } }
      )
      
      // 提取最后一条消息作为响应
      const responseMessage = result.messages[result.messages.length - 1]
      
      return {
        content: [{
          type: "text",
          text: responseMessage.content
        }]
      }
    } catch (error) {
      console.error('Error in genius_agent tool:', error)
      return {
        content: [{
          type: "text",
          text: `Error: ${error.message}`
        }]
      }
    }
  }
);

// 启动MCP服务器
async function startMcpServer() {
  try {
    // 使用标准输入输出传输启动服务器(更符合MCP规范)
    const stdioTransport = new StdioServerTransport();
    await server.connect(stdioTransport);
    
    // 使用stderr输出日志,避免污染stdio的JSON数据流
    process.stderr.write('Genius Agent MCP Server running over stdio\n');
  } catch (error) {
    process.stderr.write(`Failed to start MCP server: ${error.message}\n`);
    process.exit(1);
  }
}

// 启动服务器
startMcpServer();