Skip to main content
Glama

Terraform Registry MCP Server

by thrashr888
privateModuleDetails.ts3.68 kB
import { ResponseContent, PrivateModuleDetailsParams, PrivateModule, ModuleVersion, NoCodeModule } from "../types/index.js"; import { getPrivateModuleDetails } from "../utils/hcpApiUtils.js"; import { TFC_TOKEN } from "../../config.js"; import { createStandardResponse } from "../utils/responseUtils.js"; import logger from "../utils/logger.js"; export async function handlePrivateModuleDetails(params: PrivateModuleDetailsParams): Promise<ResponseContent> { if (!TFC_TOKEN) { throw new Error("TFC_TOKEN environment variable is required for private module details"); } try { logger.debug("Getting private module details", { params }); const result = await getPrivateModuleDetails( TFC_TOKEN, params.organization, params.namespace, params.name, params.provider, params.version ); const moduleDetails = result.moduleDetails as unknown as PrivateModule; const moduleVersion = result.moduleVersion as unknown as ModuleVersion | undefined; const noCodeModules = result.noCodeModules as unknown as NoCodeModule[] | undefined; // Format the module details into markdown let markdown = `## Private Module: ${moduleDetails.attributes.name} **Provider:** ${moduleDetails.attributes.provider} **Status:** ${moduleDetails.attributes.status} **Updated:** ${new Date(moduleDetails.attributes["updated-at"]).toLocaleDateString()}`; if (moduleVersion?.attributes?.version) { markdown += `\n\n### Version ${moduleVersion.attributes.version}`; const inputs = moduleVersion.root?.inputs; const outputs = moduleVersion.root?.outputs; if (inputs?.length) { markdown += "\n\n**Inputs:**\n"; inputs.forEach((input) => { markdown += `- \`${input.name}\` (${input.type})${input.required ? " (required)" : ""}: ${input.description}\n`; }); } if (outputs?.length) { markdown += "\n**Outputs:**\n"; outputs.forEach((output) => { markdown += `- \`${output.name}\`: ${output.description}\n`; }); } } if (Array.isArray(noCodeModules) && noCodeModules.length > 0) { markdown += "\n\n### No-Code Configuration\n"; noCodeModules.forEach((ncm) => { markdown += `\n**${ncm.attributes.name}**\n`; if (ncm.attributes["variable-options"]?.length > 0) { markdown += "Variables:\n"; ncm.attributes["variable-options"].forEach((vo) => { markdown += `- \`${vo.name}\`: ${vo.type}\n`; }); } }); } markdown += `\n\n\`\`\`hcl module "${params.name}" { source = "app.terraform.io/${params.organization}/registry-modules/private/${params.namespace}/${params.name}/${params.provider}" version = "${params.version || moduleDetails.attributes["version-statuses"]?.[0]?.version || "latest"}" # Configure variables as needed }\`\`\``; return createStandardResponse("success", markdown, { module: { id: moduleDetails.id, name: moduleDetails.attributes.name, provider: moduleDetails.attributes.provider, status: moduleDetails.attributes.status, versions: moduleDetails.attributes["version-statuses"], created_at: moduleDetails.attributes["created-at"], updated_at: moduleDetails.attributes["updated-at"] }, version: moduleVersion, no_code_modules: noCodeModules, context: { timestamp: new Date().toISOString(), organization: params.organization, provider: params.provider } }); } catch (error) { logger.error("Error getting private module details:", error); throw error; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thrashr888/terraform-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server