Skip to main content
Glama
oborchers

mcp-server-pacman

terraform_module_latest_version

Retrieve the latest version of a specified Terraform module by providing the module name in the namespace/name/provider format.

Instructions

Get the latest version of a Terraform module

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesModule name (format: namespace/name/provider)

Implementation Reference

  • Core handler function that performs HTTP request to Terraform Registry API to fetch versions, extracts the latest version (first in list), and formats the response dictionary.
    @async_cached(http_cache)
    async def get_latest_terraform_module_version(name: str) -> Dict:
        """Get the latest version of a Terraform module.
    
        The name parameter should be in the format: namespace/name/provider
        """
        # Split the module name into namespace, name, and provider
        parts = name.split("/")
        if len(parts) != 3:
            raise McpError(
                ErrorData(
                    code=INTERNAL_ERROR,
                    message="Invalid Terraform module name format. Expected: namespace/name/provider",
                )
            )
    
        namespace, module_name, provider = parts
    
        async with httpx.AsyncClient() as client:
            response = await client.get(
                f"https://registry.terraform.io/v1/modules/{namespace}/{module_name}/{provider}/versions",
                headers={"Accept": "application/json", "User-Agent": DEFAULT_USER_AGENT},
                follow_redirects=True,
            )
    
            if response.status_code != 200:
                raise McpError(
                    ErrorData(
                        code=INTERNAL_ERROR,
                        message=f"Failed to get module versions from Terraform Registry - status code {response.status_code}",
                    )
                )
    
            try:
                data = response.json()
                modules = data.get("modules", [])
    
                if not modules:
                    raise McpError(
                        ErrorData(
                            code=INTERNAL_ERROR,
                            message=f"No versions found for module {name}",
                        )
                    )
    
                # The latest version is typically the first one in the list
                latest = modules[0]
    
                result = {
                    "name": f"{namespace}/{module_name}/{provider}",
                    "namespace": namespace,
                    "provider": provider,
                    "module": module_name,
                    "version": latest.get("version", ""),
                    "published_at": latest.get("published_at", ""),
                    "source": latest.get("source", ""),
                }
                return result
            except McpError:
                raise
            except Exception as e:
                raise McpError(
                    ErrorData(
                        code=INTERNAL_ERROR,
                        message=f"Failed to parse Terraform Registry module versions: {str(e)}",
                    )
                )
  • Pydantic BaseModel defining the input schema for the tool: requires 'name' field with description of expected format.
    class TerraformModuleLatestVersion(BaseModel):
        """Parameters for getting the latest version of a Terraform module."""
    
        name: Annotated[
            str, Field(description="Module name (format: namespace/name/provider)")
        ]
  • Registers the MCP tool in list_tools() with name, description, and references the input schema.
    Tool(
        name="terraform_module_latest_version",
        description="Get the latest version of a Terraform module",
        inputSchema=TerraformModuleLatestVersion.model_json_schema(),
    ),
  • Dispatch handler in @server.call_tool(): validates arguments using schema, calls the provider function, formats response as TextContent, handles errors.
    elif name == "terraform_module_latest_version":
        try:
            args = TerraformModuleLatestVersion(**arguments)
            logger.debug(f"Validated terraform module latest version args: {args}")
        except ValueError as e:
            logger.error(
                f"Invalid terraform module latest version parameters: {str(e)}"
            )
            raise McpError(ErrorData(code=INVALID_PARAMS, message=str(e)))
    
        logger.info(f"Getting latest version for Terraform module {args.name}")
    
        try:
            info = await get_latest_terraform_module_version(args.name)
            logger.info(
                f"Successfully retrieved latest version for Terraform module {args.name}"
            )
            return [
                TextContent(
                    type="text",
                    text=f"Latest version for Terraform module {args.name}:\n{json.dumps(info, indent=2)}",
                )
            ]
        except McpError as e:
            logger.error(
                f"Error getting latest version for Terraform module: {str(e)}"
            )
            raise
Install Server

Other Tools

Related Tools

Latest Blog Posts

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/oborchers/mcp-server-pacman'

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