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

Tool Definition Quality

Score is being calculated. Check back soon.

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