retell-llm.ts•2.57 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import Retell from "retell-sdk";
import {
  CreateRetellLLMInputSchema,
  GetRetellLLMInputSchema,
  UpdateRetellLLMInputSchema,
} from "../schemas/index.js";
import {
  transformRetellLLMInput,
  transformUpdateRetellLLMInput,
  transformRetellLLMOutput,
} from "../transformers/index.js";
import { createToolHandler } from "./utils.js";
export const registerRetellLLMTools = (
  server: McpServer,
  retellClient: Retell
) => {
  server.tool(
    "list_retell_llms",
    "Lists all Retell LLMs",
    {},
    createToolHandler(async () => {
      const llms = await retellClient.llm.list();
      return llms.map(transformRetellLLMOutput);
    })
  );
  server.tool(
    "create_retell_llm",
    "Creates a new Retell LLM",
    CreateRetellLLMInputSchema.shape,
    createToolHandler(async (data) => {
      const createLLMDto = transformRetellLLMInput(data);
      const llm = await retellClient.llm.create(createLLMDto);
      return transformRetellLLMOutput(llm);
    })
  );
  server.tool(
    "get_retell_llm",
    "Gets a Retell LLM by ID",
    GetRetellLLMInputSchema.shape,
    createToolHandler(async (data) => {
      try {
        const llm = await retellClient.llm.retrieve(data.llmId);
        if (!llm) {
          throw new Error(`Retell LLM with ID ${data.llmId} not found`);
        }
        return transformRetellLLMOutput(llm);
      } catch (error: any) {
        console.error(`Error getting Retell LLM: ${error.message}`);
        throw error;
      }
    })
  );
  server.tool(
    "update_retell_llm",
    "Updates an existing Retell LLM",
    UpdateRetellLLMInputSchema.shape,
    createToolHandler(async (data) => {
      try {
        const llmId = data.llmId;
        const updateLLMDto = transformUpdateRetellLLMInput(data);
        const updatedLLM = await retellClient.llm.update(llmId, updateLLMDto);
        return transformRetellLLMOutput(updatedLLM);
      } catch (error: any) {
        console.error(`Error updating Retell LLM: ${error.message}`);
        throw error;
      }
    })
  );
  server.tool(
    "delete_retell_llm",
    "Deletes a Retell LLM",
    GetRetellLLMInputSchema.shape,
    createToolHandler(async (data) => {
      try {
        await retellClient.llm.delete(data.llmId);
        return {
          success: true,
          message: `Retell LLM ${data.llmId} deleted successfully`,
        };
      } catch (error: any) {
        console.error(`Error deleting Retell LLM: ${error.message}`);
        throw error;
      }
    })
  );
};