#!/usr/bin/env node
import addAPITools from "@buildwithlayer/openapi-to-tools/mcp.js";
import type { APITool } from "@buildwithlayer/openapi-to-tools/types.js";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Config } from "./config.js";
import { registerPromptsAsTools } from "./prompts.js"; 
import { tools } from "./tools.js";

const server = new McpServer(
  {
    name: "clerk-mcp",
    version: "1.0.0",
  },
  {
    capabilities: {
      tools: {},
    },
  },
);

// Filters all clerk MCP tools to selected few most likely for MCP use
let workingTools: APITool[] = tools as APITool[];
if (!(process.env.ALL_TOOLS === 'true')) {
  workingTools = workingTools.filter((tool) => Config.defaultTools.includes(tool.name));
}

addAPITools(server, workingTools as APITool[], {
  bearerAuth: process.env.CLERK_API_KEY,
});

// A temporary workaround while most clients do not support prompts
if (!(process.env.PROMPTS_DISABLED === 'true')) {
  registerPromptsAsTools(server);
}

const transport = new StdioServerTransport();
await server.connect(transport);
