/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { LaunchDarklyCore } from "../core.js";
import { SDKOptions } from "../lib/config.js";
import type { ConsoleLogger } from "./console-logger.js";
import { createRegisterPrompt } from "./prompts.js";
import {
  createRegisterResource,
  createRegisterResourceTemplate,
} from "./resources.js";
import { MCPScope } from "./scopes.js";
import { createRegisterTool } from "./tools.js";
import { tool$aiConfigsCreate } from "./tools/aiConfigsCreate.js";
import { tool$aiConfigsCreateVariation } from "./tools/aiConfigsCreateVariation.js";
import { tool$aiConfigsDelete } from "./tools/aiConfigsDelete.js";
import { tool$aiConfigsDeleteVariation } from "./tools/aiConfigsDeleteVariation.js";
import { tool$aiConfigsGet } from "./tools/aiConfigsGet.js";
import { tool$aiConfigsGetTargeting } from "./tools/aiConfigsGetTargeting.js";
import { tool$aiConfigsGetVariation } from "./tools/aiConfigsGetVariation.js";
import { tool$aiConfigsList } from "./tools/aiConfigsList.js";
import { tool$aiConfigsUpdate } from "./tools/aiConfigsUpdate.js";
import { tool$aiConfigsUpdateTargeting } from "./tools/aiConfigsUpdateTargeting.js";
import { tool$aiConfigsUpdateVariation } from "./tools/aiConfigsUpdateVariation.js";
import { tool$auditLogListEntries } from "./tools/auditLogListEntries.js";
import { tool$codeReferencesListRepositories } from "./tools/codeReferencesListRepositories.js";
import { tool$environmentsListByProject } from "./tools/environmentsListByProject.js";
import { tool$experimentsCreate } from "./tools/experimentsCreate.js";
import { tool$experimentsCreateIteration } from "./tools/experimentsCreateIteration.js";
import { tool$experimentsGet } from "./tools/experimentsGet.js";
import { tool$experimentsGetExperimentsAnyEnv } from "./tools/experimentsGetExperimentsAnyEnv.js";
import { tool$experimentsList } from "./tools/experimentsList.js";
import { tool$experimentsPatch } from "./tools/experimentsPatch.js";
import { tool$featureFlagsCreate } from "./tools/featureFlagsCreate.js";
import { tool$featureFlagsDelete } from "./tools/featureFlagsDelete.js";
import { tool$featureFlagsGet } from "./tools/featureFlagsGet.js";
import { tool$featureFlagsGetStatus } from "./tools/featureFlagsGetStatus.js";
import { tool$featureFlagsList } from "./tools/featureFlagsList.js";
import { tool$featureFlagsPatch } from "./tools/featureFlagsPatch.js";
import { tool$metricsCreate } from "./tools/metricsCreate.js";
import { tool$metricsGet } from "./tools/metricsGet.js";
import { tool$metricsList } from "./tools/metricsList.js";
import { tool$metricsPatch } from "./tools/metricsPatch.js";

export function createMCPServer(deps: {
  logger: ConsoleLogger;
  allowedTools?: string[] | undefined;
  scopes?: MCPScope[] | undefined;
  serverURL?: string | undefined;
  apiKey?: SDKOptions["apiKey"] | undefined;
  serverIdx?: SDKOptions["serverIdx"] | undefined;
}) {
  const server = new McpServer({
    name: "LaunchDarkly",
    version: "0.7.2",
  });

  const client = new LaunchDarklyCore({
    apiKey: deps.apiKey,
    serverURL: deps.serverURL,
    serverIdx: deps.serverIdx,
  });

  const scopes = new Set(deps.scopes);

  const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
  const tool = createRegisterTool(
    deps.logger,
    server,
    client,
    scopes,
    allowedTools,
  );
  const resource = createRegisterResource(deps.logger, server, client, scopes);
  const resourceTemplate = createRegisterResourceTemplate(
    deps.logger,
    server,
    client,
    scopes,
  );
  const prompt = createRegisterPrompt(deps.logger, server, client, scopes);
  const register = { tool, resource, resourceTemplate, prompt };
  void register; // suppress unused warnings

  tool(tool$auditLogListEntries);
  tool(tool$codeReferencesListRepositories);
  tool(tool$featureFlagsGetStatus);
  tool(tool$featureFlagsList);
  tool(tool$featureFlagsCreate);
  tool(tool$featureFlagsGet);
  tool(tool$featureFlagsPatch);
  tool(tool$featureFlagsDelete);
  tool(tool$metricsList);
  tool(tool$metricsCreate);
  tool(tool$metricsGet);
  tool(tool$metricsPatch);
  tool(tool$environmentsListByProject);
  tool(tool$experimentsList);
  tool(tool$experimentsCreate);
  tool(tool$experimentsGet);
  tool(tool$experimentsPatch);
  tool(tool$experimentsCreateIteration);
  tool(tool$experimentsGetExperimentsAnyEnv);
  tool(tool$aiConfigsGetTargeting);
  tool(tool$aiConfigsUpdateTargeting);
  tool(tool$aiConfigsList);
  tool(tool$aiConfigsCreate);
  tool(tool$aiConfigsDelete);
  tool(tool$aiConfigsGet);
  tool(tool$aiConfigsUpdate);
  tool(tool$aiConfigsCreateVariation);
  tool(tool$aiConfigsDeleteVariation);
  tool(tool$aiConfigsGetVariation);
  tool(tool$aiConfigsUpdateVariation);

  return server;
}
